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 [17/06/2018 11:22] captnfab |
doc:autres:vm:lxc:mode-utilisateur [12/07/2018 11:28] captnfab [Préparation] |
||
---|---|---|---|
Ligne 7: | Ligne 7: | ||
* Création par [[user>captnfab]] 09/12/2015 | * Création par [[user>captnfab]] 09/12/2015 | ||
* Testé par captnfab le 09/12/2015 | * Testé par captnfab le 09/12/2015 | ||
+ | * Testé et mis à jour par captnfab le 17/06/2018 | ||
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=151771#p151771 | ici]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=151771#p151771 | ici]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
Ligne 80: | 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. | ||
- | <code bash /usr/local/sbin/prepare-lxc-cgroups> | + | == Configuration du noyau == |
- | #!/bin/sh | + | Vérifier que le fichier ''/sys/fs/cgroup/cpuset/cgroup.clone_children'' est bien à 1 par défaut sur le système. |
- | echo 1 > /sys/fs/cgroup/cpuset/cgroup.clone_children | + | <code root>cat /sys/fs/cgroup/cpuset/cgroup.clone_children</code> |
- | echo 1 > /proc/sys/kernel/unprivileged_userns_clone | + | |
+ | Créer le fichier de configuration de sysctl suivant : | ||
+ | <code ini /etc/sysctl.d/40-lxc-userns.conf> | ||
+ | kernel.unprivileged_userns_clone=1 | ||
+ | net.bridge.bridge-nf-call-arptables=0 | ||
+ | net.bridge.bridge-nf-call-iptables=0 | ||
+ | net.bridge.bridge-nf-call-ip6tables=0 | ||
</code> | </code> | ||
- | <code ini /etc/systemd/system/lxc-cgroups.service>[Unit] | + | Et le charger dans le système : |
+ | <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 | Description=Préparation cgroups pour lxc | ||
After=local-fs.target | After=local-fs.target | ||
+ | |||
[Service] | [Service] | ||
Type=oneshot | Type=oneshot | ||
RemainAfterExit=yes | RemainAfterExit=yes | ||
ExecStart=/usr/local/sbin/prepare-lxc-cgroups | ExecStart=/usr/local/sbin/prepare-lxc-cgroups | ||
+ | | ||
[Install] | [Install] | ||
- | WantedBy=multi-user.target</code> | + | WantedBy=multi-user.target |
+ | </code> | ||
- | <code root>chmod a+x /usr/local/sbin/prepare-lxc-cgroups | + | Et en l'activant : |
- | systemctl enable /etc/systemd/system/lxc-cgroups.service | + | <code root>systemctl enable /etc/systemd/system/lxc-cgroups.service |
systemctl daemon-reload | systemctl daemon-reload | ||
systemctl start lxc-cgroups</code> | systemctl start lxc-cgroups</code> | ||
- | |||
===== Création du conteneur ===== | ===== Création du conteneur ===== | ||
Ligne 175: | Ligne 224: | ||
===== Utilisation du conteneur ===== | ===== Utilisation du conteneur ===== | ||
- | * Création | + | 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 user>move-pid-to-cgroup $$</code> | ||
+ | |||
+ | * Lancement | ||
<code user>lxc-start -n test -d</code> | <code user>lxc-start -n test -d</code> | ||
* Shell | * Shell | ||
- | <code user>lxc-attach --clear-env -n test</code> | + | <code user>lxc-attach --set-var PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -n test</code> |
- | <note info>Sans l'option ''--clear-env'', vous conservez les variables d'environnement de votre utilisateur. Ce n'est en général pas génant, mais ces variables incluent aussi le PATH… Donc sans clear-env, vous aurez un shell root avec un path utilisateur (ne contenant pas sbin) ce qui peut facilement générer des erreurs.</note> | + | <note info>Sans l'option ''--clear-env'', vous conservez les variables d'environnement de votre utilisateur. Ce n'est en général pas gênant, mais ces variables incluent aussi le PATH… Cependant, clear-env enlève aussi des variables intéressantes comme TERM. Pour ne pas vous retrouver avec un shell root avec un path utilisateur (ne contenant pas sbin) ce qui peut facilement générer des erreurs, ou un terminal mal configuré, utilisez l'option ''--set-var''.</note> |
===== FAQ / Problèmes rencontrés ===== | ===== FAQ / Problèmes rencontrés ===== |