Add UniPi image, streamline generic and MaschinenplatzPi image.
authorBenjamin Braatz <bb@bbraatz.eu>
Wed, 1 Feb 2023 05:09:55 +0000 (06:09 +0100)
committerBenjamin Braatz <bb@bbraatz.eu>
Wed, 1 Feb 2023 05:09:55 +0000 (06:09 +0100)
doc/index.md
doc/maschinenplatzpi.md
doc/unipi.md [new file with mode: 0644]
maschinenplatzpi/home/pi/.bash_profile
unipi/boot/config.txt [new file with mode: 0644]
unipi/home/pi/conf.json [new file with mode: 0644]

index e0991f728bbf16e5cda5337021d4535767e36219..a0b387ad28f17cbdbcf095942df55e04e449010e 100644 (file)
@@ -5,21 +5,32 @@ Die Pakete `binfmt-qemu-static` und `qemu-user-static` werden für das
 chroot in das Raspberry-Pi-System benötigt.
 
 ## Installation des Grundsystems
-Herunterladen und in temporäres Dateisystem entpacken:
+Image-Datei einrichten und mounten:
+```console
+$ cd /tmp/
+$ fallocate -l 4G 20YY-MM-DD-controlpi-generic.img
+$ sudo losetup --find --show 20YY-MM-DD-controlpi-generic.img
+$ sudo parted --script /dev/loop0 mklabel msdos
+$ sudo parted --script /dev/loop0 mkpart primary fat32 0% 100M
+$ sudo parted --script /dev/loop0 mkpart primary ext4 100M 100%
+$ sudo mkfs.vfat -F32 /dev/loop0p1
+$ sudo mkfs.ext4 -F /dev/loop0p2
+$ sudo mount /dev/loop0p2 /mnt/
+$ sudo mkdir /mnt/boot
+$ sudo mount /dev/loop0p1 /mnt/boot/
+```
+
+Arch Linux ARM herunterladen und entpacken:
 ```console
-$ cd /tmp
 $ wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-armv7-latest.tar.gz
-$ sudo mkdir controlpi 
-$ sudo mount -t tmpfs none controlpi/
-$ sudo tar xpf ArchLinuxARM-rpi-armv7-latest.tar.gz -C controlpi/
+$ sudo tar xpf ArchLinuxARM-rpi-armv7-latest.tar.gz -C /mnt/
 ```
 
-In chroot wechseln und erstes Upgrade:
+In chroot wechseln und Paket-Schlüssel einrichten:
 ```console
 $ TERM=xterm sudo arch-chroot controlpi/
 # pacman-key --init
 # pacman-key --populate archlinuxarm
-# pacman -Syu
 ```
 
 Pakete entfernen und hinzufügen bis folgendes Minimalsystem erreicht ist:
@@ -31,8 +42,8 @@ fakeroot
 gcc
 git
 i2c-tools
-jq
 inetutils
+jq
 linux-rpi
 make
 openssh
@@ -46,6 +57,7 @@ rsync
 sudo
 swig
 vim
+# pacman -Syu
 ```
 
 Das Journal soll nicht auf der SD-Karte gespeichert werden:
@@ -104,9 +116,9 @@ $ exit
 ## Konfiguration aus git-Repository aufspielen
 Von außerhalb des chroot:
 ```console
-$ sudo rsync -rlp etc /tmp/controlpi/
-$ sudo rsync -rlp boot /tmp/controlpi/
-$ rsync -rlp home/pi /tmp/controlpi/home/
+$ sudo rsync -rlp etc /mnt/
+$ sudo rsync -rlp boot /mnt/
+$ rsync -rlp home/pi /mnt/home/
 ```
 
 Innerhalb des chroot eventuell Berechtigungen und Eigentürmer reparieren:
@@ -119,26 +131,15 @@ In `/home/pi/.ssh/authorized_keys` sollten die Public-Keys derjenigen
 hinterlegt sein, die initial Zugriff per SSH haben sollen, da die
 Konfiguration das Einloggen mit Passwort komplett unterbindet.
 
-## Image erstellen und aufspielen
+## Image schließen und aufspielen
 Von außerhalb des chroot:
 ```console
-$ sudo tar czf controlpi.tar.gz -C controlpi/ .
-$ fallocate -l 4G 20YY-MM-DD-controlpi-arch.img
-$ sudo losetup --find --show 20YY-MM-DD-controlpi-arch.img
-$ sudo parted --script /dev/loop0 mklabel msdos
-$ sudo parted --script /dev/loop0 mkpart primary fat32 0% 100M
-$ sudo parted --script /dev/loop0 mkpart primary ext4 100M 100%
-$ sudo mkfs.vfat -F32 /dev/loop0p1
-$ sudo mkfs.ext4 -F /dev/loop0p2
-$ sudo mount /dev/loop0p2 /mnt
-$ sudo mkdir /mnt/boot
-$ sudo mount /dev/loop0p1 /mnt/boot
-$ sudo tar xpf controlpi.tar.gz -C /mnt/
-$ sudo umount /mnt/boot
-$ sudo umount /mnt
+$ sudo umount /mnt/boot/
+$ sudo umount /mnt/
 $ sudo losetup --detach /dev/loop0
-$ sudo dd if=20YY-MM-DD-controlpi-arch.img of=/dev/mmcblk0 bs=1M oflag=sync status=progress
+$ sudo dd if=20YY-MM-DD-controlpi-generic.img of=/dev/sdx bs=1M oflag=sync status=progress
 ```
 
 ## Spezialisierte Images
 * [MaschinenplatzPi](graphit/controlpi-image/maschinenplatzpi.md)
+* [UniPi](graphit/controlpi-image/unipi.md)
index 2f23df23e5dd07136a8f021f91ab50f02a193150..dcef5b5ae98234d29831ffc4c3522f45af99ff13 100644 (file)
@@ -61,31 +61,31 @@ 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
-`chrony` (der NTP-Server für das interne Netzwerk) und `cage` (der
-Kiosk-Wayland-Compositor) können direkt aus den Arch-Linux-ARM-Repositories
-installiert werden:
+Öffnen einer Kopie des generischen Images:
 ```console
-# pacman -S chrony cage
+$ 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/
 ```
 
-Zum Zeitpunkt des Schreibens muss wegen eines Bugs (`qt5-webengine` nach
-Update von Abhängigkeiten nicht selbst geupdatet) noch `qt5-webengine`
-selbst gebaut werden (Achtung! Dauert sehr lange!):
+`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:
 ```console
-# pacman -S bison flex pkgconf debugedit
-# su - pi
-$ git clone https://github.com/archlinuxarm/PKGBUILDs.git
-$ cd PKGBUILDs/extra/qt5-webengine/
-$ makepkg -sA
-$ mv qt5-webengine-5.15.11-3-armv7h.pkg.tar.xz ~/
-$ cd ~/
-$ rm -r PKGBUILDs/
-$ exit
-# pacman -U /home/pi/qt5-webengine-5.15.11-3-armv7h.pkg.tar.xz
+# pacman -S chrony cage cmake
 ```
 
-Jetzt kann `qiosk` kompiliert und installiert werden:
+`qiosk` wird kompiliert und installiert:
 ```console
 # su - pi
 $ git clone https://github.com/Salamek/qiosk.git
@@ -98,6 +98,12 @@ $ exit
 # pacman -U /home/pi/qiosk-1.1.16-1-armv7h.pkg.tar.xz
 ```
 
+Wie auch beim generischen Image wird der Paket-Cache nach allen
+Installationen geleert, um möglichst Platz zu sparen:
+```console
+# paccache -rk0
+```
+
 Die Konfigurations-Dateien werden – wie auch beim generischen Image – aus
 diesem git-Repository synchronisiert:
 ```console
@@ -134,5 +140,17 @@ maschinenplatzpi/
         └── index.html
 ```
 
-Das Erstellen und Aufspielen des Images funktioniert dann genau wie für das
-[generische Image](graphit/controlpi-image).
+Die bisherige Default-Einstellung für die Netwerkschnittstelle wird im
+chroot entfernt:
+```console
+# rm /etc/systemd/network/eth0.network
+```
+
+Das Schließen und Aufspielen des Images funktioniert dann genau wie für das
+[generische Image](graphit/controlpi-image):
+```console
+$ sudo umount /mnt/boot/
+$ sudo umount /mnt/
+$ sudo losetup --detach /dev/loop0
+$ sudo dd if=20YY-MM-DD-controlpi-maschinenplatzpi.img of=/dev/sdx bs=1M oflag=sync status=progress
+```
diff --git a/doc/unipi.md b/doc/unipi.md
new file mode 100644 (file)
index 0000000..0f91a2e
--- /dev/null
@@ -0,0 +1,97 @@
+# Zusätzliche Konfiguration für UniPi
+Für den Betrieb von [UniPi](https://www.unipi.technology/)-Geräten sind
+einige Anpassungen des generischen Images notwendig.
+
+## UniPi-Kernel-Modul
+Der Hersteller stellt unter
+[https://github.com/UniPiTechnology/unipi-kernel-modules-v1](https://github.com/UniPiTechnology/unipi-kernel-modules-v1)
+ein Kernel-Modul zur Verfügung.
+
+Dieses haben wir unter
+[https://git.graph-it.com/?p=graphit/unipi-kernel.git](https://git.graph-it.com/?p=graphit/unipi-kernel.git)
+so angepast, dass es auf aktuellen Kernel-Versionen kompiliert werden kann.
+
+## Konfiguration aus Hersteller-Image
+Außerdem stellt der Hersteller unter
+[https://kb.unipi.technology/en:hw:02-neuron:download-image:03-opensource](https://kb.unipi.technology/en:hw:02-neuron:download-image:03-opensource)
+ein Debian-basiertes Betriebssytem-Image zur Verfügung.
+
+Dieses können wir mounten, um die Konfiguration näher zu untersuchen:
+```console
+$ unzip neuron-opensource-os_image-20220607.0.zip
+$ sudo losetup --find --show neuron-opensource-os_image-20220607.0.img
+$ sudo partprobe /dev/loop0
+$ sudo mount /dev/loop0p2 /mnt/
+$ sudo mount /dev/loop0p1 /mnt/boot/
+```
+
+## Anpassungen gegenüber dem generischen Image
+Öffnen einer Kopie des generischen Images:
+```console
+$ sudo losetup --find --show 20YY-MM-DD-controlpi-unipi.img
+$ sudo partprobe /dev/loop0
+$ sudo mount /dev/loop0p2 /mnt/
+$ sudo mount /dev/loop0p1 /mnt/boot/
+$ TERM=xterm sudo arch-chroot /mnt/
+```
+
+Abhängigkeiten installieren:
+```console
+# pacman -S linux-rpi-headers dtc
+```
+
+Kompilieren und installieren von Kernel und Device-Tree:
+```console
+# su - pi
+$ git clone git://git.graph-it.com/graphit/unipi-kernel.git
+$ cd unipi-kernel/
+$ export LINUX_DIR_PATH=/lib/modules/5.15.90-1-rpi-ARCH/build
+$ make
+$ sudo -E make install
+$ cd device_tree/
+$ dtc -O dtb -@ -o neuron-spi-new.dtbo neuron-spi-new-overlay.dts
+$ sudo cp neuron-spi-new.dtbo /boot/overlays/
+$ cd ~/
+$ rm -r unipi-kernel/
+$ exit
+```
+
+Wie auch beim generischen Image wird der Paket-Cache nach allen
+Installationen geleert, um möglichst Platz zu sparen:
+```console
+# paccache -rk0
+```
+
+Installieren des ControlPi-Plugins:
+```console
+# su - pi
+$ source controlpi-venv/bin/activate
+$ pip install git+git://git.graph-it.com/graphit/controlpi-unipi.git
+$ exit
+```
+
+Die Konfigurations-Dateien werden – wie auch beim generischen Image – aus
+diesem git-Repository synchronisiert:
+```console
+$ sudo rsync -rlp unipi/boot /mnt/
+$ rsync -rlp unipi/home/pi /mnt/home/
+```
+
+Im Einzelnen sind dies:
+```console
+unipi/
+├── boot
+│   └── config.txt
+└── home
+    └── pi
+        └── conf.json
+```
+
+Das Schließen und Aufspielen des Images funktioniert dann genau wie für das
+[generische Image](graphit/controlpi-image):
+```console
+$ sudo umount /mnt/boot/
+$ sudo umount /mnt/
+$ sudo losetup --detach /dev/loop0
+$ sudo dd if=20YY-MM-DD-controlpi-unipi.img of=/dev/sdx bs=1M oflag=sync status=progress
+```
index a14312955b4cebaa98592f593a1cd81e9325df7f..f6d50bbb1ae10dbf727ea7795b7bcd6cb674af05 100644 (file)
@@ -9,5 +9,5 @@ if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]
 then
     export WLR_LIBINPUT_NO_DEVICES=1
     export XKB_DEFAULT_OPTIONS="numpad:mac"
-    exec cage qiosk file:///home/pi/index.html
+    cage qiosk file:///home/pi/index.html
 fi
diff --git a/unipi/boot/config.txt b/unipi/boot/config.txt
new file mode 100644 (file)
index 0000000..45f33a5
--- /dev/null
@@ -0,0 +1,5 @@
+dtparam=i2c_arm=on
+dtoverlay=i2c-rtc,mcp7941x
+dtoverlay=neuron-spi-new
+
+initramfs initramfs-linux.img followkernel
diff --git a/unipi/home/pi/conf.json b/unipi/home/pi/conf.json
new file mode 100644 (file)
index 0000000..a645e73
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "Debug": {
+        "plugin": "WSServer",
+        "web": {
+            "/": {
+                "module": "controlpi_plugins.wsserver",
+                "location": "Debug"
+            }
+        }
+    },
+    "Log": {
+        "plugin": "Log",
+        "filter": [{}]
+    },
+    "UniPi": {
+        "plugin": "UniPi"
+    }
+}