An mehreren Abenden versuche ich bereits, eine LXC-Installation mit User-Space-Containern zum Laufen zu bringen. Da es sich um einen neuen Server handelt, ist mir die Verteilung und Veröffentlichung (noch) nicht so wichtig. Deshalb habe ich Debian 7 + 8 und Ubuntu 14.04 und 15.04 als Host und Ubuntu 15.04 und Debian 8 als Gast ausprobiert. Alle haben ihre Probleme. Die Zusammenfassung:
Debian 7.8 : lxc-create: Dieser Befehl muss als root ausgeführt werden (beide Gäste)
Debian 8.0 : lxc-create: Operation nicht erlaubt (beide Gäste)
Ubuntu 14.04 mit Ubuntu 15.04 Gast : lxc-start: Aufruf von cgmanager_create_sync fehlgeschlagen: ungültige Anforderung / Der Container konnte nicht gestartet werden.
Ubuntu 14.04 mit Debian 8 Gast : lxc-create: FEHLER: Es konnte kein passendes Bild gefunden werden.
Ubuntu 15.04 : lxc-start: Aufruf von cgmanager_move_pid_sync fehlgeschlagen: ungültige Anforderung / Der Container konnte nicht gestartet werden. (beide Gäste)
Ich habe das Tutorial https://help.ubuntu.com/lts/serverguide/lxc.html und https://linuxcontainers.org/lxc/getting-started/ befolgt und sie sehen nicht so kompliziert aus.
Ich habe ein Skript geschrieben, um den Test reproduzierbar zu machen (um als Root auf einer frisch gebooteten Live-CD ausgeführt zu werden). Kann mir jemand sagen, was daran falsch ist?
#!/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 ===="
Auf Pastebin habe ich die Konsolenausgabe von all diesen Computern gepostet:
- Testen Sie mit debian-live-7.8.0-amd64-xfce-desktop.iso
- Testen Sie mit debian-live-8.0.0-amd64-xfce-desktop.iso
- Testen Sie mit xubuntu-14.04.2-desktop-amd64.iso
- Testen Sie mit xubuntu-15.04-desktop-amd64.iso
Aktualisieren
Ich habe es mit Ubuntu 15.04 als Host weiter versucht. Ich habe den Fehlerbericht https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1413927 gefunden, der ein ähnliches, aber nicht dasselbe Problem aufweist. Aber journalctl enthüllte Probleme mit 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
Update 2
Ich habe mehr versucht: Ich habe Ubuntu vertrauenswürdig und lebendig auf zwei virtuellen Maschinen installiert und alle Updates auf diesen installiert. Dann habe ich sowohl einmal mit dem Original-lxc-Paket als auch einmal mit denen aus dem lxc-Tages-ppa getestet. Das Ergebnis ist immer der gleiche Fehler wie oben gezeigt.
Antworten:
Eureka! Immer noch nicht fertig, aber ich habe es zum ersten Mal geschafft, einen Container zu starten. Es gibt ein paar Dinge, die schief gelaufen sind, und ich habe festgestellt, dass es viele Leute gibt, die ähnliche Probleme haben. Hier ist eine kleine Anleitung zur Problemlösung:
Verteilung / Repositories
Aufgrund der positivsten Rückmeldungen habe ich mich entschieden, mit einem debootstrapierten Ubuntu 14.04-System zu beginnen. Dies bedeutet, dass das ursprüngliche System nicht größer als nur einige 100 Millionen ist und nicht viele Pakete enthält. Ich habe Updates und Sicherheitspaketquellen sowie die tägliche lxc ppa verwendet. Hier ist meine /etc/apt/sources.list:
Installation
In vielen Tutorials, Foren und Fehlerberichten habe ich Listen von Paketen gefunden, die installiert werden müssen. Ich bin mir noch nicht sicher, welche davon wichtig sind, aber hier ist die Liste dessen, was ich schließlich installiert habe (ausgehend von einem debootstrapped 14.04-System):
Nochmals: Diese Liste ist wahrscheinlich länger als nötig. Folgendes ist wirklich wichtig:
/proc/self/cgroup
sah die Datei wie8:blkio:/
usw. statt8:hugetlb:/user/1000.user/1.session
Aufbau
Ich habe viele Hinweise von überall ausprobiert, daher weiß ich noch nicht, was wichtig ist. Aber ungefähr habe ich gerade das Skript aus der Frage ausgeführt. Es geht ungefähr um diese Dateien:
Das einzige, was ich zusätzlich getan habe, war das Folgende, weil ich die Zeile in vielen Threads gefunden habe:
Melden Sie sich als Benutzer an
Nun das Wichtigste, was ich immer noch nicht verstehe, aber alle meine Skript-basierten Experimente ruiniert habe: Melden Sie sich nicht mit su oder sudo an!
Ich demonstriere:
Ich kenne den Grund immer noch nicht, aber es muss mit libpam-systemd verbunden sein. Offensichtlich beide
su
undsudo
PAM umgehenVergessen Sie nicht, die Befehle lxc-xxx zu verwenden, wenn Sie als Benutzer angemeldet sind. Sie schlagen fehl, wenn Sie dies als root tun (weil User-Space-Container in
.local/share/lxc/
statt gespeichert werden/var/lib/lxc/
Fehlerbehebung
Diese Befehle waren für mich am nützlichsten:
journalctl
(bei Upstart-basierten Releases): Es wurden Probleme mit cgmanager festgestellt/proc/self/cgroup
lxc-start
Optionen verwenden-l debug --logfile logfilename.txt
Lassen Sie mich wissen, was sonst noch wichtig ist. Ich denke, die Community braucht es.
Credits
Dank der folgenden Tutorials:
Und zu diesen Fehlerberichten und Forenthreads:
Haftungsausschluss
Ich habe diesen Text nach dem ersten erfolgreichen Test geschrieben. Aber ich habe so viele Dinge getan, dass einige dieser Schritte wahrscheinlich nicht notwendig sind. Ich werde bald alles auf einem neuen System erneut überprüfen.
Aktualisieren
All das wurde mit Ubuntu Trusty 14.04 LTS gemacht. Jetzt habe ich Ubuntu nur schlau getestet. Bisher kann ich sagen:
apt-get install lxc bridge-utils
/etc/subuid
,/etc/subgid
,/etc/lxc/lxc-usernet
zusätzlich habe ich einen Benutzer und füllte seine Heimat(Wily ist jetzt Beta und wird am 22. Oktober 2015 veröffentlicht)
quelle