Ein MaschinenplatzPi erfüllt zusätzlich zum generischen ControlPi-Image die folgenden Funktionen:
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.
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.
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.
Ö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