Blog 196883

Ein Blog mit bisher zehn Einträgen.

2020-06-30: Stream-Mediator

Unter https://github.com/srogmann/stream-mediator steht der Quelltext der unter www.ab32.de demonstrierten Video-Chat-Software zur Verfügung.

2020-06-01: Video-Chats per ab32.de

Unter ab32.de steht eine Demonstration von Video-Chats per WebRTC für zwei oder mehr Teilnehmer zur Verfügung. Die Anwendung hatte ich in den letzten Wochen entwickelt. Damit sind Video-Chats oder das Teilen von Fenstern möglich, benötigt wird lediglich ein aktueller Browser, keine dedizierte Software oder App. Die eigentliche Bildübertragung ist Peer-to-Peer, läuft also nicht über den Server.

2020-05-08: /sys/fs/cgroup ist leer

Aus bisher unbekannten Gründen mochte das grafische System eines Notebooks unter Arch Linux heute nicht hochfahren. Der Bootmanager erlaubte das Ergänzen des Kernel-Bootparameters systemd.debug_shell, damit stand dann auf Console Alt+F9 eine Root-Shell zur Verfügung. Eine etwas mühselige Analyse der Ausgabe von journal -xb und dem /sys-Filesystem zeigte, dass zwar alle cgroup-Filesysteme gemountet waren, aber /sys/fs/cgroup leer war – warum auch immer. Dies führte zu Meldungen wie der Folgenden.

Mai 08 10:52:32 arch001 systemd[699]: NetworkManager-wait-online.service: Failed to attach to cgroup /system.slice/NetworkManager-wait-online.service: No such file or directory
Mai 08 10:52:32 arch001 systemd[699]: NetworkManager-wait-online.service: Failed at step CGROUP spawning /usr/bin/nm-online: No such file or directory

cgroups ("control groups") sind an sich eine praktische Sache, kann doch damit der Ressourcen-Verbrauch (CPU, Speicher, ...) von Prozessen gut gesteuert werden, Freunde der Virtualisierung mögen sowas. Aber irgendwie hatten systemd und der Linux-Kernel es geschafft, dass /sys/fs/cgroup leer ist trotz gemounteter cgroup-Verzeichnisse:

tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroups gibt's mittlerweile in zwei Versionen: V1 und V2. Das systemd des Notebooks arbeitete noch im Hybrid-Modus, also mit einer Mischung von V1 und V2. Als ersten Ansatz deaktivierte ich die V1-cgroups durch das Setzen des folgenden systemd-Kernel-Parameters:
systemd.unified_cgroup_hierarchy=1
Nach dem Reboot war dann zwar nur noch ein cgroups2-Filesystem da, aber /sys/fs/cgroup/ war weiterhin leer. Da ich den Tag eigentlich anders verbringen wollte, legte ich /etc/systemd/system/repariere-cgroups.service an:
[Unit]
Description=Repariere /sys/fs/cgroups. Workaround, wegen irgendeines Problems ist /sys/fs/cgroups leer trotz gemounteter cgroup-Filesysteme, deswegen wird es nochmal gemountet.
ConditionPathIsDirectory=/sys/class/bluetooth

[Service]
Type=oneshot
ExecStart=/usr/bin/mount -t cgroup2 none /sys/fs/cgroup

[Install]
WantedBy=bluetooth.target

Damit bootete der Rechner wieder im graphischen Modus und das cgroup-Verzeichnis war wieder gefüllt!

[me@arch001 ~]$ ls -l /sys/fs/cgroup/
insgesamt 0
-r--r--r--  1 root root 0  8. Mai 16:36 cgroup.controllers
-rw-r--r--  1 root root 0  8. Mai 21:34 cgroup.max.depth
-rw-r--r--  1 root root 0  8. Mai 21:34 cgroup.max.descendants
-rw-r--r--  1 root root 0  8. Mai 16:36 cgroup.procs
-r--r--r--  1 root root 0  8. Mai 21:34 cgroup.stat
-rw-r--r--  1 root root 0  8. Mai 16:36 cgroup.subtree_control
-rw-r--r--  1 root root 0  8. Mai 21:34 cgroup.threads
-rw-r--r--  1 root root 0  8. Mai 21:34 cpu.pressure
-r--r--r--  1 root root 0  8. Mai 21:34 cpuset.cpus.effective
-r--r--r--  1 root root 0  8. Mai 21:34 cpuset.mems.effective
drwxr-xr-x  2 root root 0  8. Mai 16:36 init.scope
-rw-r--r--  1 root root 0  8. Mai 21:34 io.cost.model
-rw-r--r--  1 root root 0  8. Mai 21:34 io.cost.qos
-rw-r--r--  1 root root 0  8. Mai 21:34 io.pressure
-rw-r--r--  1 root root 0  8. Mai 21:34 memory.pressure
drwxr-xr-x 45 root root 0  8. Mai 21:50 system.slice
drwxr-xr-x  4 root root 0  8. Mai 15:37 user.slice

Die Lösung ist aber nur ein Workaround. Interessant zu wissen wäre, warum das cgroups-Verzeichnis seit gestern leer war.

2020-05-10, Update

Beim Problem vom 08.05.2020 handelt es sich um eine Race-Condition, der Workaround half nicht immer bzw. nur teilweise. Deswegen gingen auch hier heute ein paar weitere Stunden Recherche ins Land wegen systemd und dhcpcd. Unter stackexchange.com wird in einem Beitrag von ähnlichen Bootproblemen berichtet. Dort war DHCPCD 9.0.1 der Auslöser:

Auf dem betroffenen Notebook war jedoch bereits der DHCPCD 9.0.2. Aber in DHCPCD 9.0.2 gibt es das Hook-Skript /lib/dhcpcd/dhcpcd-hooks/00-linux:

# setup chroot mounts

if [ "$reason" = CHROOT ] && [ -n "$chroot" ]; then
        # Special case /dev/log
        if [ -h /dev/log ]; then
                devlogdir=$(dirname $(readlink /dev/log))
        else
                devlogdir=
        fi
        for d in /dev /proc /sys /run/udev $devlogdir; do
                [ -d "$d" ] || continue
                if ! mountpoint -q "$chroot$d"; then
                        mkdir -p "$chroot$d"
                        mount --bind $d "$chroot$d"
                fi
        done

Dieses Skript mountete unter anderem /sys neu und damit ging /sys/fs/cgroup kaputt. Systemd arbeitet nicht mehr mit chroot sondern mit systemd-nspawn, laut systemd-Autor „awesome“. Meine Meinung nach Stunden der teilweise recht mühseligen Recherche: Systemd beschleunigt den Boot-Vorgang, aber das Prädikat „awesome“ verdient dieses komplexe Werk nicht.

Das Hook-Skript 00-linux deaktivierte ich per Ergänzung von /etc/dhcpcd.conf:

nohook 00-linux

Überhaupt scheint systemd das Fehlschlagen von dhcpcd derzeitig übel zu nehmen. Erst als ich per systemctl disable dhcpcd@enp113s0.service den DHCP-Dienst von der nicht eingestecken Ethernet-Netzwerkkarte entfernte, klappte auch das Netzwerk des Notebooks per WLAN wieder.

2020-04-19: WebRTC

Seit geraumer Zeit wird WebRTC (Web Real-Time Communication) von den üblichen Browsern (Chrome, Firefox, ...) unterstützt. Dies ermöglicht browser-basierte Übertragung von Videodaten (Videochat, ...). Das Thema ist ein wenig komplex, aber es gibt allerhand Dokumentation, beispielsweise im MDN, und Beispiele, z.B. in Github (samples-server). Ein browserbasierter Videochat zwischen einem stationären Notebook und einem per OpenVPN für Android angebundenen Mobilgerät ist damit ohne fremden Server im Internet möglich. Im stationären LAN kann dann bereits ein Raspberry als vermittelnder Videoserver dienen.

2020-04-16

nicht klicken: Nach fast 20 Jahren Java-Applet jetzt stattdesssen mit JavaScript.

2020-04-13, Ostermontag

Vögel und Nagetiere sind unterwegs im Namen des Frühlings.

Amsel mit Moos im Schnabel
Ohne Moos nix los.
Meise auf der Kokosmatte
Meisen sind keine Pinguine.
Eichhörnchen mit Walnuss im Himbeertopf
Eichhörnchen vergessen nicht alles: Ein Eichhörnchen hüpfte ohne Nuss in den Himbeertopf und mit Walnuss wieder heraus – wo auch immer diese dort versteckt war.

2020-04-07

Zitat aus Das Virus, die Menschen und das Leben von Ellis E. Huber: Psychosozialer Stress, Ängste, Einsamkeit oder Ausgrenzung schwächen das individuelle und erst recht auch das soziale Immunsystem.

2020-04-03

David Kriesel: Corona-Plots und Interpretationshilfen, garantiert unaufgeregt.

2020-03-29

Logarithmische Darstellung von Fallzahlen des rki zu COVID-19. Zu sehen ist ein streckenweise exponentielles Wachstum, es nimmt im Laufe der Zeit leicht ab. Eine weitergehende Interpretation dieser Fallzahlen ist schwierig.

Diagramm mit Fallzahlen
Fallzahlen des rki (Stand 29.03.2020)
Diagramm mit Fallzahlen
Logarithmische Darstellung von Fallzahlen der Morgenpost.

2020-02-22

Im Gegensatz zur deutschsprachigen Wikipedia wird der SUV-Kritik in der englischsprachigen Wikipedia eine eigene Seite gewidmet (Stand: 13.04.2020).

Fabia Combi auf Parkplatz zwiscen zwei SUVs
Ein Fabia Combi (ein Kombi!) auf einem Einkaufsparkplatz im Februar 2020.

Kolophon

怪兽月光理论: Es ist 196883 = 47 · 59 · 71 = 196884 − 1.

Sascha Rogmann 
Letzte Änderung: 2020-06-30