Graph-IT

Zusätzliche Konfiguration für MaschinenplatzPi

Ein MaschinenplatzPi erfüllt zusätzlich zum generischen ControlPi-Image die folgenden Funktionen:

Konfiguration des Netzwerk-Switches

Wir verwenden einen Netgear GS308E als VLAN-fähigen Switch.

In der Web-Oberfläche des Switches wird zunächst das Default-Passwort (password) geändert und der Switch-Name auf den in unserem Netzwerk vergebenen angepasst.

Im Bereich VLAN → 802.1Q → Advanced werden folgende Einstellungen vorgenommen:

An Port 1 soll also das externe Netzwerk, an Port 2 der MaschinenplatzPi und an Ports 3 bis 8 die weiteren ControlPis angeschlossen werden. Die Verbindung zwischen MaschinenplatzPi und externem Netzwerk bekommt die VLAN-ID 1 und das interne Netzwerk die VLAN-ID 23.

Internes Netz

Der MaschinenplatzPi stellt den DHCP-Service und einen NTP-Server (chrony) für das interne Netzwerk bereit. Mit networkctl status intern können die im internen Netz aktuell vergebenen IP-Adressen angezeigt werden.

Da keiner der User auf dem MaschinenplatzPi einen Private-Key für eine Verbindung zu den ControlPis in seinem internen Netz hat, muss für solche Verbindungen – von einem Account mit einer solchen Berechtigung aus – der MaschinenplatzPi als Jump-Host verwendet werden:

ssh -J pi@maschinenplatzpi.site pi@192.168.23.23

Optional kann mit systemctl start iptables und systemctl stop iptables auf dem MaschinenplatzPi das Masqerading bzw. NAT für das interne Netz an- und ausgeschaltet werden, falls die ControlPis im internen Netz Verbindung zum externen Netz benötigen.

Kiosk-System

Das Kiosk-System verwendet den Kiosk-Wayland-Compositor Cage, um den Kiosk-Browser qiosk zu starten.

Das Kiosk-System ist so eingerichtet, dass es beim Start des Pi automatisch die Datei /home/pi/index.html anzeigt (diese kann mit einem HTML-Meta-Refresh dann auf die tatsächlich anzuzeigende Webseite weiterleiten). Dies kann in einem nächsten Schritt durch eine von der lokal laufenden ControlPi-Instanz generierte Oberfläche geändert werden.

Dadurch, dass die grafische Oberfläche mit der Einstellung export XKB_DEFAULT_OPTIONS="numpad:mac" gestartet wird, gibt es für die numerische Tastatur keinen Unterschied, ob Num-Lock ein- oder ausgeschaltet ist. Es werden immer die Nummern gesendet, was für unsere Anwendungen am Kiosk gewünscht ist.

Anpassungen gegenüber dem generischen Image

Öffnen einer Kopie des generischen Images:

$ sudo losetup --find --show 20YY-MM-DD-controlpi-maschinenplatzpi.img
$ sudo partprobe /dev/loop0
$ sudo mount /dev/loop0p2 /mnt/
$ sudo mount /dev/loop0p1 /mnt/boot/
$ TERM=xterm sudo arch-chroot /mnt/

chrony (der NTP-Server für das interne Netzwerk), cage (der Kiosk-Wayland-Compositor) und cmake (zum Kompilieren des von qiosk) können direkt aus den Arch-Linux-ARM-Repositories installiert werden:

# pacman -S chrony cage cmake

qiosk wird kompiliert und installiert:

# su - pi
$ git clone https://github.com/Salamek/qiosk.git
$ cd qiosk/archlinux/
$ makepkg -sA
$ mv qiosk-X.Y.ZZ-armv7h.pkg.tar.xz ~/
$ cd ~/
$ rm -r qiosk/
$ exit
# pacman -U /home/pi/qiosk-X.Y.ZZ-armv7h.pkg.tar.xz

Wie auch beim generischen Image wird der Paket-Cache nach allen Installationen geleert, um möglichst Platz zu sparen:

# paccache -rk0

Die Konfigurations-Dateien werden – wie auch beim generischen Image – aus diesem git-Repository synchronisiert:

$ sudo rsync -rlp maschinenplatzpi/etc /mnt/
$ rsync -rlp maschinenplatzpi/home/pi /mnt/home/

Im Einzelnen sind dies:

maschinenplatzpi/
├── etc
│   ├── chrony.conf
│   ├── iptables
│   │   └── iptables.rules
│   ├── sysctl.d
│   │   └── 60-router.conf
│   └── systemd
│       ├── network
│       │   ├── 00-extern.netdev
│       │   ├── 00-intern.netdev
│       │   ├── 10-en.network
│       │   ├── 20-extern.network
│       │   └── 20-intern.network
│       └── system
│           ├── getty.target.wants
│           │   └── getty@tty1.service -> /usr/lib/systemd/system/getty@.service
│           ├── getty@tty1.service.d
│           │   └── autologin.conf
│           └── multi-user.target.wants
│               └── chronyd.service -> /usr/lib/systemd/system/chronyd.service
└── home
    └── pi
        ├── .bash_profile
        └── index.html

Die bisherige Default-Einstellung für die Netwerkschnittstelle wird im chroot entfernt:

# rm /etc/systemd/network/en.network

Das Schließen und Aufspielen des Images funktioniert dann genau wie für das generische Image:

$ sudo umount /mnt/boot/
$ sudo umount /mnt/
$ sudo losetup --detach /dev/loop0
$ xz 20YY-MM-DD-controlpi-maschinenplatzpi.img
$ xz --decompress --stdout 20YY-MM-DD-controlpi-maschinenplatzpi.img.xz | sudo dd of=/dev/sdx bs=1M oflag=sync status=progress