logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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 → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 [22/06/2018 19:29]
captnfab [Utilisation de LXC en mode utilisateur non-privilégié]
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.
  
-<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 à 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 112: 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 121: 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 176: Ligne 278:
 ===== 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>​
  
Ligne 232: 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 =====
  
doc/autres/vm/lxc/mode-utilisateur.1529688570.txt.gz · Dernière modification: 22/06/2018 19:29 par captnfab

Pied de page des forums

Propulsé par FluxBB