Plusieurs soirs, j'essaie déjà de faire en sorte qu'une installation LXC fonctionne avec des conteneurs d'espace utilisateur. Puisqu'il s'agira d'un nouveau serveur, je ne me soucie pas (encore) de la distribution et de la publication. J'ai donc essayé Debian 7 + 8 et Ubuntu 14.04 et 15.04 en tant qu'hôte et Ubuntu 15.04 et Debian 8 en tant qu'invité. Tous ont leurs problèmes. Le résumé:
Debian 7.8 : lxc-create: Cette commande doit être exécutée en tant que root (les deux invités).
Debian 8.0 : lxc-create: opération non autorisée (les deux invités)
Ubuntu 14.04 avec Ubuntu 15.04 invité : lxc-start: l’appel de cgmanager_create_sync a échoué: demande non valide/le conteneur n’a pas pu démarrer.
Ubuntu 14.04 avec Debian 8 guest : lxc-create: ERREUR: impossible de trouver une image correspondante.
Ubuntu 15.04 : lxc-start: l'appel de cgmanager_move_pid_sync a échoué: demande non valide/le conteneur n'a pas pu démarrer. (les deux invités)
J'ai suivi le tutoriel https://help.ubuntu.com/lts/serverguide/lxc.html et https://linuxcontainers.org/lxc/getting-started/ et ils n'ont pas l'air si compliqué.
J'ai écrit un script pour rendre le test reproductible (à exécuter en tant que root sur un cd live fraîchement démarré). Quelqu'un peut-il me dire ce qui ne va pas?
#!/bin/sh
# need to be run as root
set -x
echo "==== SYSTEM INFO & INSTALL ===="
lsb_release -a
uname -a
apt-get update
apt-get install -y lxc
apt-get clean
lxc-checkconfig
ifconfig
brctl show
adduser testuser
cat /etc/subuid /etc/subgid
cat >/etc/lxc/lxc-usernet <<.e
# USERNAME TYPE BRIDGE COUNT
testuser veth lxcbr0 2
.e
Sudo -u testuser -i mkdir -p .config/lxc
Sudo -u testuser -i tee .config/lxc/default.conf <<.e
lxc.id_map = u 0 $(grep testuser /etc/subuid | cut -d: -f2) 65536
lxc.id_map = g 0 $(grep testuser /etc/subgid | cut -d: -f2) 65536
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:xx:xx:xx
.e
cat /home/testuser/.config/lxc/default.conf
echo "==== TEST UBUNTU VIVID GUEST ===="
Sudo -u testuser -i lxc-create -t download -n vivid1 -- -d ubuntu -r utopic -a AMD64
#You just created an Ubuntu container (release=trusty, Arch=AMD64, variant=default)
#Sudo -u testuser -i lxc-start -n vivid1 -d
#read press_enter_key_when_quit
if [ $? -eq 0 ]; then
rm /tmp/log
Sudo -u testuser -i lxc-start -n vivid1 -l debug --logfile /tmp/log
cat /tmp/log
fi
echo "==== TEST DEBIAN JESSIE GUEST ===="
Sudo -u testuser -i lxc-create -t download -n jessie1 -- -d debian -r jessie -a AMD64
#You just created an Ubuntu container (release=trusty, Arch=AMD64, variant=default)
#Sudo -u testuser -i lxc-start -n jessie1 -d
#read press_enter_key_when_quit
if [ $? -eq 0 ]; then
rm /tmp/log
Sudo -u testuser -i lxc-start -n jessie1 -l debug --logfile /tmp/log
cat /tmp/log
fi
echo "==== END OF SCRIPT ===="
Sur Pastebin, j'ai posté la sortie de la console de toutes ces machines:
J'ai essayé plus loin avec Ubuntu 15.04 en tant qu'hôte. J'ai trouvé le rapport de bogue https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1413927 Qui a un problème similaire mais non identique. Mais journalctl a révélé des problèmes avec cgmanager:
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/blkio/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/cpu/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/cpuset/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/devices/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/freezer/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/hugetlb/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/memory/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/net_cls/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/perf_event/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/none,name=systemd/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/blkio/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/blkio/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/cpu/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/cpu/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/cpuset/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/cpuset/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/devices/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/devices/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/freezer/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/freezer/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/hugetlb/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/hugetlb/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/memory/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/memory/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/net_cls/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/net_cls/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/perf_event/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/perf_event/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/none,name=systemd/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/none,name=systemd/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
J'ai essayé plus: j'ai installé Ubuntu fidèle et vif sur deux machines virtuelles et installé toutes les mises à jour sur eux. Ensuite, j'ai testé les deux versions, une fois avec le paquetage original lxc et une fois avec celles du paquet quotidien LPA. Le résultat est toujours la même erreur que celle indiquée ci-dessus.
Eureka! Pas encore fini, mais j'ai réussi une première fois à démarrer un conteneur. Quelques erreurs se sont produites et j'ai constaté qu'il y a beaucoup de gens qui ont des problèmes similaires. Voici un petit guide de résolution de problèmes:
En raison des retours les plus positifs, j'ai décidé de commencer avec un système désamorcé Ubuntu 14.04. Cela signifie que le système d'origine n'est pas plus grand que quelques 100M et ne contient pas beaucoup de paquets. J'ai utilisé les mises à jour et les sources de paquet de sécurité et le ppa quotidien lxc. Voici mon /etc/apt/sources.list:
deb http://de.archive.ubuntu.com/ubuntu trusty main
deb http://de.archive.ubuntu.com/ubuntu trusty-updates main
deb http://security.ubuntu.com/ubuntu trusty-security main
deb http://ppa.launchpad.net/ubuntu-lxc/daily/ubuntu trusty main
Dans de nombreux tutoriels, forums et rapports de bogues, j'ai trouvé des listes de paquets à installer. Je ne sais pas encore lequel de ces éléments est important, mais voici la liste de ce que j'ai finalement installé (à partir d'un système debootstrapped 14.04):
apt-get install bridge-utils cgmanager cloud-image-utils debootstrap distro-info \
distro-info-data euca2ools Fuse libaio1 libapparmor1 libcap2 liblxc1 \
libpam-systemd librados2 libseccomp2 libselinux1 libselinux1 lxc python3-lxc \
python-distro-info
Encore une fois: cette liste est probablement plus longue que nécessaire. Voici ce qui est vraiment important:
/proc/self/cgroup
ressemblait à 8:blkio:/
etc. au lieu de 8:hugetlb:/user/1000.user/1.session
.J'ai essayé beaucoup d'indices de partout, donc je ne sais pas encore ce qui est important. Mais en gros, je viens de lancer le script à partir de la question. En gros, il s'agit de ces fichiers:
La seule chose supplémentaire que j'ai faite est la suivante, car j'ai trouvé la ligne dans de nombreux threads:
chmod +x /home/testuser/.local/share
Maintenant, la chose la plus importante que je ne comprends toujours pas mais qui a ruiné toutes mes expériences sur la base de scripts: Ne vous connectez pas en utilisant su ou Sudo!
Je démontre:
root@1404-lxc-test:~# tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# this is expected. I am root.
root@1404-lxc-test:~# Sudo -u testuser -i tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# here I used Sudo to switch user
root@1404-lxc-test:~# su - testuser
testuser@1404-lxc-test:~$ tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# at least here I expected the correct settings
testuser@1404-lxc-test:~$ exit
root@1404-lxc-test:~# exit
$ ssh testuser@1404-lxc-test
testuser@1404-lxc-test's password:
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-53-generic x86_64)
testuser@1404-lxc-test:~$ tail -1 /proc/self/cgroup
2:blkio:/user/1000.user/2.session
# now it's correct
Je ne connais toujours pas la raison, mais il doit être connecté à libpam-systemd. Evidemment, su
et Sudo
contournent PAM
Et enfin, n'oubliez pas d'utiliser les commandes lxc-xxx lorsque vous êtes connecté en tant qu'utilisateur. Ils échoueront si vous le faites en tant que root (car les conteneurs d’espace utilisateur sont stockés dans .local/share/lxc/
au lieu de /var/lib/lxc/
.
Ces commandes m'ont été très utiles:
journalctl
(sur les versions récentes): Cela a révélé des problèmes avec cgmanager/proc/self/cgroup
lxc-start
en utilisant les options -l debug --logfile logfilename.txt
Faites-moi savoir quoi d'autre est important. Je pense que la communauté en a besoin.
Merci aux tutoriels suivants:
Et à ces rapports de bugs et fils de forum:
J'ai écrit ce texte après le premier test réussi. Mais j'ai fait tellement de choses que certaines de ces étapes ne sont probablement pas nécessaires. Je revérifierai tout sur un nouveau système bientôt.
Tout ce qui précède a été réalisé avec Ubuntu 14.04 LTS. Maintenant, je viens de tester Ubuntu avec astuce. Jusqu'ici je peux dire:
apt-get install lxc bridge-utils
/etc/subuid
, /etc/subgid
, /etc/lxc/lxc-usernet
, de plus, j'ai créé un utilisateur et rempli sa maison.(Wily est maintenant en version bêta et sera publié le 22 octobre 2015)