Problem beim Einrichten eines User-Space-LXC-Containers

7

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:

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.

Daniel Alder
quelle
Erhielt das Tumbleweed-Abzeichen für diese Frage - das ist das Gegenteil von dem, was ich wollte .. :-(
Daniel Alder
Ich vermute, dass es ein Problem zwischen cgmanager und systemd gibt. AskUbuntu ist wahrscheinlich nicht der richtige Ort dafür. Versuchen Sie, einen Fehlerbericht auf dem Launchpad einzureichen.
maccam94
Nach meiner Erfahrung ist Launchpad keine Option für diese Art von unspezifischen Problemen. Normalerweise dauert es dort sehr lange, bis ein Fehler erkannt wird, und sehr oft werden Fehler geschlossen, weil jemand denkt, dass er nicht reproduzierbar ist. Einmal kam es sogar vor, dass alle meine Anhänge mit komplexen Screenshots entfernt wurden, weil mein Fehler vorübergehend geschlossen wurde. Einige Bugs sind jetzt auch seit über 3 Jahren offen und in aktuellen Releases immer noch reproduzierbar. und der Fragenteil von Launchpad ist noch schlimmer: Es ist schwierig, dort Aufmerksamkeit zu erregen. Besser wäre die Github Issues Seite von LXC
Daniel Alder

Antworten:

7

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:

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 

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):

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

Nochmals: Diese Liste ist wahrscheinlich länger als nötig. Folgendes ist wirklich wichtig:

  • libpam-systemd: Diese Bibliothek ist wichtig für die korrekten cgroup-Berechtigungen. Ich habe keine Fehlermeldung gesehen, aber ohne sie /proc/self/cgroupsah die Datei wie 8:blkio:/usw. statt8:hugetlb:/user/1000.user/1.session
  • Sicherung: Ich habe gelesen, dass es für lxcfs wichtig ist (ich würde sagen, es ist ein Fehler, dass das lxcfs-Paket nicht davon abhängt).
  • lxc: das wichtigste Paket und genug, wenn Sie nur nicht privilegierte Container verwenden
  • cgmanager: Ich lerne immer noch über seine Funktion. Übrigens: Die lxc-PPA bietet derzeit beide Pakete cgmanager-utils (0.27) und cgmanager (0.30). cgmanager kollidiert mit cgmanager-utils (<< 0.30-1), was bedeutet, dass die beiden Pakete aus demselben Repo nicht kompatibel sind (möglicherweise ein Fehler ). Ich habe cgmanager gewählt.

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:

  • / etc / subuid
  • / etc / subgid
  • / etc / lxc / lxc-usernet
  • ~ / .config / lxc / default.conf

Das einzige, was ich zusätzlich getan habe, war das Folgende, weil ich die Zeile in vielen Threads gefunden habe:

chmod +x /home/testuser/.local/share

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:

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

Ich kenne den Grund immer noch nicht, aber es muss mit libpam-systemd verbunden sein. Offensichtlich beide suund sudoPAM umgehen

Vergessen 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:

  • Alles, was Sie auf einem debootstrapierten Basissystem installieren müssen: apt-get install lxc bridge-utils
  • Es sind keine externen Spiegel erforderlich. Verwenden Sie das von Ubuntu bereitgestellte lxc
  • Ich habe nicht mehr als die folgenden Dateien auf meinem neuen System berühren: /etc/subuid, /etc/subgid, /etc/lxc/lxc-usernetzusätzlich habe ich einen Benutzer und füllte seine Heimat
  • Fazit: viel einfacher, viel stabiler. Für mich ist es die erste Veröffentlichung, die wirklich funktioniert.

(Wily ist jetzt Beta und wird am 22. Oktober 2015 veröffentlicht)

Daniel Alder
quelle