Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:autres:vm:lxc:mode-utilisateur [12/07/2018 11:11] captnfab [Utilisation du conteneur] |
doc:autres:vm:lxc:mode-utilisateur [12/07/2018 11:28] captnfab [Préparation] |
||
---|---|---|---|
Ligne 81: | Ligne 81: | ||
Il faut activer certaines fonctionnalités des cgroups pour que l'on puisse lancer les conteneurs utilisateurs. | Il faut activer certaines fonctionnalités des cgroups pour que l'on puisse lancer les conteneurs utilisateurs. | ||
+ | == Configuration du noyau == | ||
Vérifier que le fichier ''/sys/fs/cgroup/cpuset/cgroup.clone_children'' est bien à 1 par défaut sur le système. | Vérifier que le fichier ''/sys/fs/cgroup/cpuset/cgroup.clone_children'' est bien à 1 par défaut sur le système. | ||
<code root>cat /sys/fs/cgroup/cpuset/cgroup.clone_children</code> | <code root>cat /sys/fs/cgroup/cpuset/cgroup.clone_children</code> | ||
Ligne 95: | Ligne 96: | ||
<code root>sysctl --sys</code> | <code root>sysctl --sys</code> | ||
+ | == Création des cgroups == | ||
+ | Pour l'instant, les cgroups nécessaires ne sont pas créés par défaut. Créer les fichiers suivant : | ||
+ | <code bash /usr/local/sbin/prepare-lxc-cgroups>#!/bin/sh | ||
+ | LXC_USERS=$(cat /etc/lxc/lxc-users) | ||
+ | for d in /sys/fs/cgroup/* | ||
+ | do | ||
+ | f=$(basename $d) | ||
+ | if [ "$f" = "cpuset" ] | ||
+ | then | ||
+ | echo 1 > $d/cgroup.clone_children; | ||
+ | elif [ "$f" = "memory" ] | ||
+ | then | ||
+ | echo 1 > $d/memory.use_hierarchy; | ||
+ | fi | ||
+ | for u in $LXC_USERS | ||
+ | do | ||
+ | mkdir -p $d/$u | ||
+ | chown -R $u $d/$u | ||
+ | done | ||
+ | done | ||
+ | </code> | ||
+ | et | ||
+ | <code bash /usr/local/bin/move-pid-to-cgroup>#!/bin/sh | ||
+ | PID=$1 | ||
+ | for d in /sys/fs/cgroup/* | ||
+ | do | ||
+ | echo $PID > $d/$USER/tasks | ||
+ | done</code> | ||
+ | à rendre exécutables : | ||
+ | <code root>chmod a+x /usr/local/sbin/prepare-lxc-cgroups | ||
+ | chmod +x /usr/local/bin/move-pid-to-cgroup</code> | ||
+ | |||
+ | == Accès == | ||
+ | Et rajouter ''lxcuser-test'' dans le fichier ''/etc/lxc/lxc-users''. S'il y a plusieurs utilisateurs, ils doivent être séparés par un espace. | ||
+ | <code ini /etc/lxc/lxc-users>lxcuser-test</code> | ||
+ | |||
+ | == Automatisation == | ||
+ | Que l'on lancera automatiquement via systemd en créant ce service : | ||
+ | <code ini /etc/systemd/system/lxc-cgroups.service> | ||
+ | [Unit] | ||
+ | Description=Préparation cgroups pour lxc | ||
+ | After=local-fs.target | ||
+ | |||
+ | [Service] | ||
+ | Type=oneshot | ||
+ | RemainAfterExit=yes | ||
+ | ExecStart=/usr/local/sbin/prepare-lxc-cgroups | ||
+ | | ||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | </code> | ||
+ | |||
+ | Et en l'activant : | ||
+ | <code root>systemctl enable /etc/systemd/system/lxc-cgroups.service | ||
+ | systemctl daemon-reload | ||
+ | systemctl start lxc-cgroups</code> | ||
===== Création du conteneur ===== | ===== Création du conteneur ===== | ||
Ligne 167: | Ligne 224: | ||
===== Utilisation du conteneur ===== | ===== Utilisation du conteneur ===== | ||
- | Pour l'instant, les cgroups nécessaires ne sont pas créés par défaut. Aussi, le code suivant doit être exécuté en root au boot : | + | Il faut, en tant que ''lxcuser-test'', et dans le shell qui lancera le conteneur, exécuter la commande suivante (qui ajoutera le shell au cgroup) : |
- | <code bash /usr/local/sbin/prepare-lxc-cgroups>#!/bin/sh | + | |
- | LXC_USERS=$(cat /etc/lxc/lxc-users) | + | |
- | for d in /sys/fs/cgroup/* | + | |
- | do | + | |
- | f=$(basename $d) | + | |
- | if [ "$f" = "cpuset" ] | + | |
- | then | + | |
- | echo 1 | sudo tee -a $d/cgroup.clone_children; | + | |
- | elif [ "$f" = "memory" ] | + | |
- | then | + | |
- | echo 1 | sudo tee -a $d/memory.use_hierarchy; | + | |
- | fi | + | |
- | for u in $LXC_USERS | + | |
- | do | + | |
- | mkdir -p $d/$u | + | |
- | chown -R $u $d/$u | + | |
- | done | + | |
- | done | + | |
- | </code> | + | |
- | + | ||
- | Il faut, en tant que ''lxcuser-test'', lancer le script suivant avant de lancer le conteneur. | + | |
- | <code bash /usr/local/bin/move-pid-to-cgroup>#!/bin/sh | + | |
- | PID=$1 | + | |
- | for d in /sys/fs/cgroup/* | + | |
- | do | + | |
- | echo $PID > $d/$USER/tasks | + | |
- | done</code> | + | |
- | Via la commande | + | |
<code user>move-pid-to-cgroup $$</code> | <code user>move-pid-to-cgroup $$</code> | ||