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.
Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:autres:vm:lxc:mode-utilisateur [09/12/2015 14:49] captnfab créée |
doc:autres:vm:lxc:mode-utilisateur [09/12/2015 17:56] captnfab [FAQ / Problèmes rencontrés] |
||
---|---|---|---|
Ligne 20: | Ligne 20: | ||
Les outils de gestion lxc : | Les outils de gestion lxc : | ||
- | <code root>apt-get install lxc cgroup-bin</code> | + | <code root>apt-get install lxc cgroup-bin uidmap</code> |
D'autres outils normalement présents par défaut : | D'autres outils normalement présents par défaut : | ||
Ligne 28: | Ligne 28: | ||
<code root>apt-get install less</code> | <code root>apt-get install less</code> | ||
- | ===== Utilisation ===== | + | ===== Préparation ===== |
Nous allons créer un conteneur Test, qui appartiendra à l'utilisateur lxcuser-test, et accèdera au réseau via le pont lxcbr0. | Nous allons créer un conteneur Test, qui appartiendra à l'utilisateur lxcuser-test, et accèdera au réseau via le pont lxcbr0. | ||
- | |||
- | |||
- | ==== Préparation ==== | ||
- | |||
Cette opération sera à répéter pour chaque utilisateur devant pouvoir créer un ou plusieurs conteneurs. C'est la seule partie du tutoriel qui doit nécessairement être effectuée en root. | Cette opération sera à répéter pour chaque utilisateur devant pouvoir créer un ou plusieurs conteneurs. C'est la seule partie du tutoriel qui doit nécessairement être effectuée en root. | ||
- | === Création et configuration de l'utilisateur === | + | ==== Création et configuration de l'utilisateur ==== |
- | * Création de l'utilisateur | + | === Création de l'utilisateur === |
<code root>adduser --disabled-password lxcuser-test</code> | <code root>adduser --disabled-password lxcuser-test</code> | ||
<note info>L'option ''--disabled-password'' n'est pas obligatoire, elle permet simplement de s'assurer que la connexion par mot de passe est impossible via ssh.</note> | <note info>L'option ''--disabled-password'' n'est pas obligatoire, elle permet simplement de s'assurer que la connexion par mot de passe est impossible via ssh.</note> | ||
- | * Identification d'une plage d'uid/gid libre | + | === Identification d'une plage d'uid/gid libre === |
<code user>cat /etc/subuid</code> | <code user>cat /etc/subuid</code> | ||
Exemple : | Exemple : | ||
Ligne 63: | Ligne 59: | ||
Dans notre exemple, on considèrera que le fichier /etc/subgid est identique au fichier /etc/subuid, ce qui est en général le cas. | Dans notre exemple, on considèrera que le fichier /etc/subgid est identique au fichier /etc/subuid, ce qui est en général le cas. | ||
- | * Affectation des sous-{u,g}id à l'utilisateur | + | === Affectation des sous-{u,g}id à l'utilisateur === |
Nous allouons alors les sous-uid et sous-gid à l'utilisateur test via la commande (**à modifier en fonction de vos propres ''/etc/sub{u,g}id'' !**) : | Nous allouons alors les sous-uid et sous-gid à l'utilisateur test via la commande (**à modifier en fonction de vos propres ''/etc/sub{u,g}id'' !**) : | ||
- | <code root>usermod lxcuser-test --add-sub-uids 624288:624288 --add-sub-gids 624288:624288</code> | + | <code root>usermod lxcuser-test --add-sub-uids 624288:689823 --add-sub-gids 624288:689823</code> |
- | === Création et configuration de l'accès au pont réseau === | + | ==== Création et configuration de l'accès au pont réseau ==== |
- | * Création du pont | + | === Création du pont === |
<code root>brctl addbr lxcbr0</code> | <code root>brctl addbr lxcbr0</code> | ||
- | * On autorise l'utilisateur lxcuser-test à connecter une interface //ethernet// virtuelle au port (vous pouvez augmenter ce nombre selon vos besoins, fichier à créer) : | + | === Accès === |
+ | On autorise l'utilisateur lxcuser-test à connecter une interface //ethernet// virtuelle au port (vous pouvez augmenter ce nombre selon vos besoins, fichier à créer) : | ||
<code text /etc/lxc/lxc-usernet> | <code text /etc/lxc/lxc-usernet> | ||
lxcuser-test veth lxcbr0 1 | lxcuser-test veth lxcbr0 1 | ||
</code> | </code> | ||
- | ==== Création du conteneur ==== | + | ===== Création du conteneur ===== |
+ | |||
+ | Il existe plusieurs méthodes pour installer une Debian/Ubuntu/Whatever dans un dossier. L'ennui est que la plupart requiert les droits super-utilisateurs pour lancer debootstrap. | ||
+ | Ceci-dit, cette opération n'est a priori à faire qu'une fois, et l'alternative n'est pas forcément réjouissante. Nous présentons les deux possibilités les plus intéressantes. | ||
+ | |||
+ | ==== Méthode template download ==== | ||
+ | |||
+ | Le code à faire en tant qu'utilisateur est à faire en tant que ''lxcuser-test''. | ||
+ | |||
+ | === Configuration des options par défaut === | ||
+ | |||
+ | Dans le dossier ''~lxcuser-test/.config/lxc/'' (probablement à créer), créer un fichier ''default.conf'' contenant la configuration suivante : | ||
+ | <code ini ~lxcuser-test/.config/lxc/default.conf>lxc.network.type = veth | ||
+ | lxc.network.link = lxcbr0 | ||
+ | lxc.network.flags = up | ||
+ | # À compléter pour définir une adresse mac | ||
+ | #lxc.network.hwaddr = 00:16:3e:xx:xx:xx | ||
+ | lxc.id_map = u 0 624288 65536 | ||
+ | lxc.id_map = g 0 624288 65536</code> | ||
+ | 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> | ||
+ | |||
+ | ==== Méthode root + chown ==== | ||
+ | |||
+ | <code user>mkdir -p ~/.local/share/lxc</code> | ||
+ | |||
+ | <code root>lxc-create -t debian -n test -- -d debian | ||
+ | mv /var/lib/lxc/test ~lxcuser-test/.local/share/lxc/ | ||
+ | chown lxcuser-test ~lxcuser-test/.local/share/lxc/test{,/*} | ||
+ | find ~lxcuser-test/.local/share/lxc/test/rootfs/ -exec sh -c 'chown $(echo $(stat -c %u "{}")+624288 | bc):$(echo $(stat -c %g "{}")+624288 | bc) "{}"' \; | ||
+ | </code> | ||
+ | En remplaçant 624288 par les numéro initiaux des plages de sous-uid/gid respectifs de votre user. | ||
+ | ===== Utilisation du conteneur ===== | ||
+ | |||
+ | ===== FAQ / Problèmes rencontrés ===== | ||
+ | Messages d'erreur rencontrés en lançant les différentes commandes du tuto, ou encore journalctl -xe | ||
+ | |||
+ | * ''lxc_container: Failed to chown /dev/pts/X'' | ||
+ | Vérifier que le paquet ''uidmap'' est bien installé | ||
+ | |||
+ | * ''pam_unix(sudo:auth): conversation failed'', ''pam_unix(sudo:auth): auth could not identify password for [lxcuser-test]'' | ||
+ | Vérifier que l'on s'est bien connecté en tant que lxcuser-test via PAM (par exemple via ssh et non-pas par su/sudo) | ||
+ | |||
+ | * ''ERROR lxc_cgfs - Permission denied - Could not create cgroup '/test' in '/sys/fs/cgroup/perf_event'.'', ''lxc_container: cgfs.c: lxc_cgroupfs_create: 956 Permission denied - Could not create cgroup '/lxc' in '/sys/fs/cgroup/cpuset'.'' | ||
+ | Vérifier que nous ne sommes pas à la racine dans les cgroups listés dans ''/proc/self/cgroup'' | ||
+ | Exemple de config problématique : | ||
+ | <code>8:perf_event:/ | ||
+ | 7:blkio:/ | ||
+ | 6:net_cls,net_prio:/ | ||
+ | 5:freezer:/ | ||
+ | 4:devices:/ | ||
+ | 3:cpu,cpuacct:/ | ||
+ | 2:cpuset:/ | ||
+ | 1:name=systemd:/user.slice/user-1001.slice/session-42.scope</code> | ||
- | ==== Utilisation du conteneur ==== | + | Ce problème survient quand libpam-systemd (qui ajoute automatiquement les nouvelles connexions aux bons cgroups) n'est pas installé, où quand les cgroups users ne sont pas créés dans les différents contrôleurs, ce qui est peut-être le comportement par défaut sous Debian ? |
+ | * ''lxc_container: cgmanager.c: lxc_cgmanager_enter: 698 call to cgmanager_move_pid_sync failed: invalid request'' | ||
+ | Muh ? Visiblement, problème avec une version cgmanager trop récente (stretch/sid et non jessie) |