web-dev-qa-db-fra.com

Systemd, cgroup et LXC

Après de nombreux essais et erreurs, j'ai finalement réussi à faire fonctionner Spice dans un conteneur Fedora LXC sous Ubuntu 14.04. Cependant, on ne peut pas en dire autant d'un conteneur Ubuntu 14.04. Il semble que le problème réside dans l'implémentation fractionnée d'Ubuntu de systemd, alors que l'implémentation complète de Fedora (même avec des restrictions LXC) ne semble pas avoir de problème dans ce cas.

Mon cas de test repose sur les sources git de Spice vdagent. Une fois que spice-vdagent se connecte à spice-vdagentd, vdagentd tente d'obtenir des informations de session pour vdagent PID via l'appel libsystemd-login0 sd_pid_get_session. Cet appel retourne avec "Aucun fichier ou répertoire", empêchant le formulaire Spice de fonctionner correctement. Après avoir fouillé la source de libsystemd-login0, il apparaît que cet appel dépend du groupe de contrôle systemd.

Malheureusement, ce groupe de contrôle n'existe pas dans un conteneur en raison du fichier /etc/init/systemd-logind.conf explicitement ne pas monter le cgroup lors de l'exécution dans un conteneur. Après avoir supprimé la vérification LXC et redémarré le conteneur LXC, je me retrouve avec un cgroup monté dans/sys/fs/cgroup/systemd. Tout semble aller bien jusqu'à l'examen de /sys/fs/cgroup/systemd/cgroup.procs - il est vide, comme tous les autres fichiers cgroup.procs en dessous. Le commentaire dans le systemd-logind.conf au-dessus de la vérification LXC indique que "le montage du cgroup ne fonctionne pas dans LXC, il utilise cgmanager", mais cela ne me donne aucune idée de la façon dont il devrait être fait, ou comment il peut être contourné.

Je ne sais vraiment pas s'il s'agit d'un problème spécifique à LXC (peut-être que LXC l'empêche de fonctionner correctement?) Ou s'il s'agit d'un problème systemd-logind. Je dois préciser que, pour le moment, j'ai attribué mon conteneur Ubuntu 14.40 LXC au profil `` sans restriction '' afin de m'assurer qu'il ne s'agit pas d'une sorte de problème d'autorisations génial.

Quelqu'un a-t-il une idée de ce qui peut être fait pour que le groupe de contrôle systemd dans le conteneur LXC fonctionne correctement afin que je puisse utiliser Spice avec plaisir?

EDIT: Après avoir vérifié mon système hôte, le groupe de contrôle systemd semble fonctionner très bien, hm ...

Malgré le manque de systemd-cgls, je peux toujours fournir des informations similaires:

Voici une arborescence du répertoire/sys/fs/cgroup/systemd:

ubuntu@ubuntu2:/sys/fs/cgroup/systemd$ tree
.
├── cgroup.clone_children
├── cgroup.event_control
├── cgroup.procs
├── cgroup.sane_behavior
├── lxc
│   ├── cgroup.clone_children
│   ├── cgroup.event_control
│   ├── cgroup.procs
│   ├── notify_on_release
│   ├── tasks
│   └── ubuntu2
│       ├── cgroup.clone_children
│       ├── cgroup.event_control
│       ├── cgroup.procs
│       ├── notify_on_release
│       ├── tasks
│       └── user
│           ├── 1000.user
│           │   ├── c1.session
│           │   │   ├── cgroup.clone_children
│           │   │   ├── cgroup.event_control
│           │   │   ├── cgroup.procs
│           │   │   ├── notify_on_release
│           │   │   └── tasks
│           │   ├── cgroup.clone_children
│           │   ├── cgroup.event_control
│           │   ├── cgroup.procs
│           │   ├── notify_on_release
│           │   └── tasks
│           ├── cgroup.clone_children
│           ├── cgroup.event_control
│           ├── cgroup.procs
│           ├── notify_on_release
│           └── tasks
├── notify_on_release
├── release_agent
├── tasks
└── user
    ├── 1000.user
    │   ├── c2.session
    │   │   ├── cgroup.clone_children
    │   │   ├── cgroup.event_control
    │   │   ├── cgroup.procs
    │   │   ├── notify_on_release
    │   │   └── tasks
    │   ├── cgroup.clone_children
    │   ├── cgroup.event_control
    │   ├── cgroup.procs
    │   ├── notify_on_release
    │   └── tasks
    ├── cgroup.clone_children
    ├── cgroup.event_control
    ├── cgroup.procs
    ├── notify_on_release
    └── tasks

Et une cartographie des PID par groupe de contrôle:

./lxc/ubuntu2/user/1000.user/c1.session/cgroup.procs: 
    860 /bin/login -- 2596 grep --color=auto 860 /bin/login -- 2596 grep --color=auto 860
    1281 -bash 2605 grep --color=auto 1281 -bash 2605 grep --color=auto 1281
    2614 grep --color=auto 2593 grep --color=auto 2593
./lxc/ubuntu2/user/1000.user/cgroup.procs: 
./lxc/ubuntu2/user/cgroup.procs: 
./lxc/ubuntu2/cgroup.procs: 
    1 /sbin/init 194 upstart-udev-bridge --daemon 431 avahi-daemon: running [ubuntu2.local] 487 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 513 upstart-file-bridge --daemon 767 /usr/lib/policykit-1/polkitd --no-debug 811 /usr/sbin/spice-vdagentd -f -s /tmp/xspice-virtio -u /tmp/xspice-uinput -d 862 /sbin/getty -8 38400 tty1 871 /usr/lib/accountsservice/accounts-daemon 903 lightdm --session-child 16 20 915 /bin/sh /usr/lib/lightdm/lightdm-greeter-session /usr/sbin/unity-greeter 921 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session 941 /usr/lib/gvfs/gvfsd 958 lightdm --session-child 12 20 961 init --user --startup-event indicator-services-start 971 /usr/lib/x86_64-linux-gnu/indicator-datetime/indicator-datetime-service 1042 /usr/bin/pulseaudio --start --log-target=syslog 1045 /usr/lib/rtkit/rtkit-daemon 1065 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2 1069 /usr/lib/x86_64-linux-gnu/notify-osd 1222 /usr/lib/colord/colord 1281 -bash 2626 grep --color=auto 1 /sbin/init 194 upstart-udev-bridge --daemon 431 avahi-daemon: running [ubuntu2.local] 487 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 513 upstart-file-bridge --daemon 767 /usr/lib/policykit-1/polkitd --no-debug 811 /usr/sbin/spice-vdagentd -f -s /tmp/xspice-virtio -u /tmp/xspice-uinput -d 862 /sbin/getty -8 38400 tty1 871 /usr/lib/accountsservice/accounts-daemon 903 lightdm --session-child 16 20 915 /bin/sh /usr/lib/lightdm/lightdm-greeter-session /usr/sbin/unity-greeter 921 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session 941 /usr/lib/gvfs/gvfsd 958 lightdm --session-child 12 20 961 init --user --startup-event indicator-services-start 971 /usr/lib/x86_64-linux-gnu/indicator-datetime/indicator-datetime-service 1042 /usr/bin/pulseaudio --start --log-target=syslog 1045 /usr/lib/rtkit/rtkit-daemon 1065 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2 1069 /usr/lib/x86_64-linux-gnu/notify-osd 1222 /usr/lib/colord/colord 1281 -bash 2626 grep --color=auto 1
    194 upstart-udev-bridge --daemon 2635 grep --color=auto 194 upstart-udev-bridge --daemon 2635 grep --color=auto 194
    202 dbus-daemon --system --fork 2644 grep --color=auto 202 dbus-daemon --system --fork 2644 grep --color=auto 202
    252 /lib/systemd/systemd-udevd --daemon 2653 grep --color=auto 252 /lib/systemd/systemd-udevd --daemon 2653 grep --color=auto 252
    320 /lib/systemd/systemd-logind 2662 grep --color=auto 320 /lib/systemd/systemd-logind 2662 grep --color=auto 320
    402 /usr/sbin/cupsd -f 2671 grep --color=auto 402 /usr/sbin/cupsd -f 2671 grep --color=auto 402
    420 rsyslogd 2680 grep --color=auto 420 rsyslogd 2680 grep --color=auto 420
    431 avahi-daemon: running [ubuntu2.local] 2689 grep --color=auto 431 avahi-daemon: running [ubuntu2.local] 2689 grep --color=auto 431
    440 avahi-daemon: chroot helper 2698 grep --color=auto 440 avahi-daemon: chroot helper 2698 grep --color=auto 440
    459 /usr/lib/cups/notifier/dbus dbus:// 2707 grep --color=auto 459 /usr/lib/cups/notifier/dbus dbus:// 2707 grep --color=auto 459
    460 /usr/lib/cups/notifier/dbus dbus:// 2716 grep --color=auto 460 /usr/lib/cups/notifier/dbus dbus:// 2716 grep --color=auto 460
    487 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 2725 grep --color=auto 487 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 2725 grep --color=auto 487
    505 upstart-socket-bridge --daemon 2734 grep --color=auto 505 upstart-socket-bridge --daemon 2734 grep --color=auto 505
    513 upstart-file-bridge --daemon 2743 grep --color=auto 513 upstart-file-bridge --daemon 2743 grep --color=auto 513
    643 /usr/sbin/ModemManager 2752 grep --color=auto 643 /usr/sbin/ModemManager 2752 grep --color=auto 643
    690 NetworkManager NetworkManager
    692 /sbin/getty -8 38400 tty4 2770 grep --color=auto 692 /sbin/getty -8 38400 tty4 2770 grep --color=auto 692
    702 /sbin/getty -8 38400 tty2 2779 grep --color=auto 702 /sbin/getty -8 38400 tty2 2779 grep --color=auto 702
    703 /sbin/getty -8 38400 tty3 /sbin/getty -8 38400 tty3
    739 /usr/sbin/sshd -D 2797 grep --color=auto 739 /usr/sbin/sshd -D 2797 grep --color=auto 739
    754 acpid -c /etc/acpi/events -s /var/run/acpid.socket 2806 grep --color=auto 754 acpid -c /etc/acpi/events -s /var/run/acpid.socket 2806 grep --color=auto 754
    755 cron 2815 grep --color=auto 755 cron 2815 grep --color=auto 755
    756 whoopsie 2824 grep --color=auto 756 whoopsie 2824 grep --color=auto 756
    757 atd 2833 grep --color=auto 757 atd 2833 grep --color=auto 757
    767 /usr/lib/policykit-1/polkitd --no-debug /usr/lib/policykit-1/polkitd --no-debug
    772 /usr/sbin/kerneloops 2851 grep --color=auto 772 /usr/sbin/kerneloops 2851 grep --color=auto 772
    811 /usr/sbin/spice-vdagentd -f -s /tmp/xspice-virtio -u /tmp/xspice-uinput -d 2860 grep --color=auto 811 /usr/sbin/spice-vdagentd -f -s /tmp/xspice-virtio -u /tmp/xspice-uinput -d 2860 grep --color=auto 811
    847 lightdm 2869 grep --color=auto 847 lightdm 2869 grep --color=auto 847
    862 /sbin/getty -8 38400 tty1 2878 grep --color=auto 862 /sbin/getty -8 38400 tty1 2878 grep --color=auto 862
    868 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch 2887 grep --color=auto 868 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch 2887 grep --color=auto 868
    871 /usr/lib/accountsservice/accounts-daemon 2896 grep --color=auto 871 /usr/lib/accountsservice/accounts-daemon 2896 grep --color=auto 871
    897 /usr/sbin/cups-browsed 2905 grep --color=auto 897 /usr/sbin/cups-browsed 2905 grep --color=auto 897
    903 lightdm --session-child 16 20 2914 grep --color=auto 903 lightdm --session-child 16 20 2914 grep --color=auto 903
    915 /bin/sh /usr/lib/lightdm/lightdm-greeter-session /usr/sbin/unity-greeter 2923 grep --color=auto 915 /bin/sh /usr/lib/lightdm/lightdm-greeter-session /usr/sbin/unity-greeter 2923 grep --color=auto 915
    921 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session 2932 grep --color=auto 921 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session 2932 grep --color=auto 921
    922 /usr/sbin/unity-greeter 2941 grep --color=auto 922 /usr/sbin/unity-greeter 2941 grep --color=auto 922
    924 /usr/lib/at-spi2-core/at-spi-bus-launcher --launch-immediately 2950 grep --color=auto 924 /usr/lib/at-spi2-core/at-spi-bus-launcher --launch-immediately 2950 grep --color=auto 924
    930 /bin/dbus-daemon --config-file=/etc/at-spi2/accessibility.conf --nofork --print-address 3 2959 grep --color=auto 930 /bin/dbus-daemon --config-file=/etc/at-spi2/accessibility.conf --nofork --print-address 3 2959 grep --color=auto 930
    936 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-session 2968 grep --color=auto 936 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-session 2968 grep --color=auto 936
    941 /usr/lib/gvfs/gvfsd 2977 grep --color=auto 941 /usr/lib/gvfs/gvfsd 2977 grep --color=auto 941
    949 /usr/lib/dconf/dconf-service 2986 grep --color=auto 949 /usr/lib/dconf/dconf-service 2986 grep --color=auto 949
    958 lightdm --session-child 12 20 2995 grep --color=auto 958 lightdm --session-child 12 20 2995 grep --color=auto 958
    961 init --user --startup-event indicator-services-start 3004 grep --color=auto 961 init --user --startup-event indicator-services-start 3004 grep --color=auto 961
    963 nm-applet 3013 grep --color=auto 963 nm-applet 3013 grep --color=auto 963
    966 /usr/lib/x86_64-linux-gnu/indicator-messages/indicator-messages-service 3022 grep --color=auto 966 /usr/lib/x86_64-linux-gnu/indicator-messages/indicator-messages-service 3022 grep --color=auto 966
    967 /usr/lib/x86_64-linux-gnu/indicator-bluetooth/indicator-bluetooth-service 3031 grep --color=auto 967 /usr/lib/x86_64-linux-gnu/indicator-bluetooth/indicator-bluetooth-service 3031 grep --color=auto 967
    968 /usr/lib/x86_64-linux-gnu/indicator-power/indicator-power-service /usr/lib/x86_64-linux-gnu/indicator-power/indicator-power-service
    971 /usr/lib/x86_64-linux-gnu/indicator-datetime/indicator-datetime-service 3049 grep --color=auto 971 /usr/lib/x86_64-linux-gnu/indicator-datetime/indicator-datetime-service 3049 grep --color=auto 971
    978 /usr/lib/x86_64-linux-gnu/indicator-keyboard-service --use-gtk 3058 grep --color=auto 978 /usr/lib/x86_64-linux-gnu/indicator-keyboard-service --use-gtk 3058 grep --color=auto 978
    979 /usr/lib/unity-settings-daemon/unity-settings-daemon 3067 grep --color=auto 979 /usr/lib/unity-settings-daemon/unity-settings-daemon 3067 grep --color=auto 979
    985 /usr/lib/upower/upowerd 3076 grep --color=auto 985 /usr/lib/upower/upowerd 3076 grep --color=auto 985
    986 /usr/lib/x86_64-linux-gnu/indicator-sound/indicator-sound-service 3085 grep --color=auto 986 /usr/lib/x86_64-linux-gnu/indicator-sound/indicator-sound-service 3085 grep --color=auto 986
    987 /usr/lib/x86_64-linux-gnu/indicator-session/indicator-session-service 3094 grep --color=auto 987 /usr/lib/x86_64-linux-gnu/indicator-session/indicator-session-service 3094 grep --color=auto 987
    993 /usr/lib/x86_64-linux-gnu/indicator-application/indicator-application-service 3103 grep --color=auto 993 /usr/lib/x86_64-linux-gnu/indicator-application/indicator-application-service 3103 grep --color=auto 993
    1042 /usr/bin/pulseaudio --start --log-target=syslog 3112 grep --color=auto 1042 /usr/bin/pulseaudio --start --log-target=syslog 3112 grep --color=auto 1042
    1045 /usr/lib/rtkit/rtkit-daemon 3121 grep --color=auto 1045 /usr/lib/rtkit/rtkit-daemon 3121 grep --color=auto 1045
    1065 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2 3130 grep --color=auto 1065 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2 3130 grep --color=auto 1065
    1069 /usr/lib/x86_64-linux-gnu/notify-osd 3139 grep --color=auto 1069 /usr/lib/x86_64-linux-gnu/notify-osd 3139 grep --color=auto 1069
    1222 /usr/lib/colord/colord 3148 grep --color=auto 1222 /usr/lib/colord/colord 3148 grep --color=auto 1222
./lxc/cgroup.procs: 
./user/1000.user/c2.session/cgroup.procs: 
./user/1000.user/cgroup.procs: 
./user/cgroup.procs: 
./cgroup.procs: 
1
Chuck R

J'ai fait spice-vdagentd fonctionne en l'exécutant avec l'option "-X" pour désactiver systemd-login l'intégration.

https://bugs.launchpad.net/ubuntu/+source/spice-vdagent/+bug/1633609?comments=all

1
Grzegorz Żur

Jetez un œil ici:

https://s3hh.wordpress.com/2014/04/18/xspice-in-containers/

C'est le site du blog de l'un des développeurs LXC.

Il pourrait également être intéressé par votre approche/progrès.

0
bmullan