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 | ||
doc:autres:vm:lxc:mode-utilisateur [12/07/2018 11:16] captnfab |
doc:autres:vm:lxc:mode-utilisateur [18/11/2020 20:51] (Version actuelle) captnfab [Création du conteneur] |
||
---|---|---|---|
Ligne 8: | Ligne 8: | ||
* Testé par captnfab le 09/12/2015 | * Testé par captnfab le 09/12/2015 | ||
* Testé et mis à jour par captnfab le 17/06/2018 | * Testé et mis à jour par captnfab le 17/06/2018 | ||
+ | * Testé et mis à jour par jeremyp3 le 18/11/2020 | ||
* 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 81: | Ligne 82: | ||
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 97: | ||
<code root>sysctl --sys</code> | <code root>sysctl --sys</code> | ||
- | Pour l'instant, les cgroups nécessaires ne sont pas créés par défaut. Créer le fichier suivant : | + | == 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 | <code bash /usr/local/sbin/prepare-lxc-cgroups>#!/bin/sh | ||
LXC_USERS=$(cat /etc/lxc/lxc-users) | LXC_USERS=$(cat /etc/lxc/lxc-users) | ||
Ligne 103: | Ligne 106: | ||
if [ "$f" = "cpuset" ] | if [ "$f" = "cpuset" ] | ||
then | then | ||
- | echo 1 | sudo tee -a $d/cgroup.clone_children; | + | echo 1 > $d/cgroup.clone_children; |
elif [ "$f" = "memory" ] | elif [ "$f" = "memory" ] | ||
then | then | ||
- | echo 1 | sudo tee -a $d/memory.use_hierarchy; | + | echo 1 > $d/memory.use_hierarchy; |
fi | fi | ||
for u in $LXC_USERS | for u in $LXC_USERS | ||
Ligne 115: | Ligne 118: | ||
done | done | ||
</code> | </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. | 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 : | Que l'on lancera automatiquement via systemd en créant ce service : | ||
<code ini /etc/systemd/system/lxc-cgroups.service> | <code ini /etc/systemd/system/lxc-cgroups.service> | ||
Ligne 133: | Ligne 149: | ||
</code> | </code> | ||
- | Et en l'activant | + | Et en l'activant : |
- | <code root>chmod a+x /usr/local/sbin/prepare-lxc-cgroups | + | <code root>systemctl enable /etc/systemd/system/lxc-cgroups.service |
- | systemctl enable /etc/systemd/system/lxc-cgroups.service | + | |
systemctl daemon-reload | systemctl daemon-reload | ||
systemctl start lxc-cgroups</code> | systemctl start lxc-cgroups</code> | ||
Ligne 146: | Ligne 161: | ||
Dans le dossier ''~lxcuser-test/.config/lxc/'' (probablement à créer), créer un fichier ''default.conf'' contenant la configuration suivante : | Dans le dossier ''~lxcuser-test/.config/lxc/'' (probablement à créer), créer un fichier ''default.conf'' contenant la configuration suivante : | ||
+ | |||
+ | depuis Debian buster : | ||
+ | |||
+ | <code ini ~lxcuser-test/.config/lxc/default.conf>lxc.net.0.type = veth | ||
+ | lxc.net.0.link = lxcbr0 | ||
+ | lxc.net.0.flags = up | ||
+ | # À compléter pour définir une adresse mac | ||
+ | #lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx | ||
+ | lxc.idmap = u 0 624288 65536 | ||
+ | lxc.idmap = g 0 624288 65536</code> | ||
+ | Remplacer //624288// sur les deux dernières lignes par les valeurs du premier sous-uid/gid alloué à l'utilisateur. | ||
+ | |||
+ | Pour les anciennes version de Debian ou de LXC: | ||
<code ini ~lxcuser-test/.config/lxc/default.conf>lxc.network.type = veth | <code ini ~lxcuser-test/.config/lxc/default.conf>lxc.network.type = veth | ||
lxc.network.link = lxcbr0 | lxc.network.link = lxcbr0 | ||
Ligne 155: | Ligne 183: | ||
Remplacer //624288// sur les deux dernières lignes par les valeurs du premier sous-uid/gid alloué à l'utilisateur. | Remplacer //624288// sur les deux dernières lignes par les valeurs du premier sous-uid/gid alloué à l'utilisateur. | ||
- | <code user>lxc-create -t download -n test -- -d debian</code> | + | <code user>lxc-create -n test -t download -- -d debian -r buster -a amd64</code> |
+ | |||
+ | Petit résumé des options : | ||
+ | * -n: Nom du conteneur | ||
+ | * -t : template a utiliser, ici download | ||
+ | après les //--// on donne les paramètres du template : | ||
+ | * -d : Nom de la distribution dans notre cas: Debian. | ||
+ | * -r: le nom de la release par exemple : buster, stretch, sid, testing ... | ||
+ | * -a : architecture de la distribution qui doit être la même que le système dans notre cas: amd64. | ||
===== Configuration du conteneur ===== | ===== Configuration du conteneur ===== | ||
Le fichier de configuration ''~/.local/share/lxc/test/config'' doit ressembler à ça : | Le fichier de configuration ''~/.local/share/lxc/test/config'' doit ressembler à ça : | ||
+ | |||
+ | Depuis Debian buster : | ||
+ | <code ini ~/.local/share/lxc/test/config> | ||
+ | # Template used to create this container: /usr/share/lxc/templates/lxc-download | ||
+ | # Parameters passed to the template: -d debian -r buster -a amd64 | ||
+ | # For additional config options, please look at lxc.container.conf(5) | ||
+ | |||
+ | # Uncomment the following line to support nesting containers: | ||
+ | #lxc.include = /usr/share/lxc/config/nesting.conf | ||
+ | # (Be aware this has security implications) | ||
+ | |||
+ | # À compléter pour définir une adresse mac | ||
+ | |||
+ | # Distribution configuration | ||
+ | lxc.include = /usr/share/lxc/config/common.conf | ||
+ | lxc.include = /usr/share/lxc/config/userns.conf | ||
+ | lxc.arch = linux64 | ||
+ | |||
+ | # Container specific configuration | ||
+ | lxc.idmap = u 0 624288 65536 | ||
+ | lxc.idmap = g 0 624288 65536 | ||
+ | lxc.rootfs.path = dir:/home/lxcuser-test/.local/share/lxc/test/rootfs | ||
+ | lxc.uts.name = test | ||
+ | |||
+ | # Network configuration | ||
+ | lxc.net.0.type = veth | ||
+ | lxc.net.0.link = lxcbr0 | ||
+ | lxc.net.0.flags = up | ||
+ | #lxc.network.hwaddr = 00:16:3e:xx:xx:xx | ||
+ | </code> | ||
+ | |||
+ | Pour les anciennes version de Debian ou de LXC: | ||
<code ini ~/.local/share/lxc/test/config> | <code ini ~/.local/share/lxc/test/config> | ||
# Template used to create this container: /usr/share/lxc/templates/lxc-download | # Template used to create this container: /usr/share/lxc/templates/lxc-download | ||
Ligne 210: | Ligne 278: | ||
===== Utilisation du conteneur ===== | ===== Utilisation du conteneur ===== | ||
- | Il faut, en tant que ''lxcuser-test'', lancer le script suivant avant de lancer le conteneur. | + | 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/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> | ||
Ligne 276: | Ligne 337: | ||
Vérifier que le fichier ''~lxcuser-test/.local/share/lxc/test/config'' contient bien la ligne | Vérifier que le fichier ''~lxcuser-test/.local/share/lxc/test/config'' contient bien la ligne | ||
<code>lxc.include = /usr/share/lxc/config/debian.userns.conf</code> | <code>lxc.include = /usr/share/lxc/config/debian.userns.conf</code> | ||
+ | |||
+ | * ''Set hostname to <test>. | ||
+ | Failed to create /init.scope control group: Permission denied | ||
+ | Failed to allocate manager object: Permission denied | ||
+ | [!!!!!!] Failed to allocate manager object. | ||
+ | Exiting PID 1...'' | ||
+ | cela arrive quand le paquet ''libpam-cgfs'' n'est pas installé. | ||
===== Sources ===== | ===== Sources ===== | ||