Inhaltsverzeichnis
lcd4linux
Statisch gelinkt bauen
Da lcd4linux aktuell nicht in den Paketquellen von Alpine Linux enthalten ist und der Prozess zum Bauen eines Alpine-Paketes (siehe https://wiki.alpinelinux.org/wiki/Creating_an_Alpine_package) auch nicht „mal eben schnell“ zu durchlaufen ist, wurde es kurzerhand wie im Folgenden beschrieben statisch gelinkt auf einem anderen System gebaut und von dort auf den Snapclient kopiert und dort dem Overlay hinzugefügt.
Voraussetzung: ein 32-bittiges x86-Linux, im Beispiel ein Debian 6.0 i386 in einem chroot, Details weichen bei anderen Versionen oder Distributionen natürlich ab.
- Paketquellen aktualisieren:
apt-get update
- Benötigte Pakete zum Bauen installieren
apt-get install build-essential autoconf automake libgd2-noxpm-dev
- Bibliotheken für lcd4linux installieren:
apt-get build-dep lcd4linux
- Quellen für lcd4linux herunterladen:
apt-get source lcd4linux
- Ins Quellen-Verzeichnis wechseln:
cd lcd4linux-<version>
- Skripte zum bauen erstellen:
./bootstrap
- Nun folgen ein paar verkettete Befehle, einfach, damit es zügig geht:
make clean && CFLAGS="-static -m32 -mcpu=i486" ./configure --enable-static --disable-shared '--with-drivers=all,!EFN,!SamsungSPF,!HD44780-I2C,!LEDMatrix,!X11' '--with-plugins=all,!dbus,!hddtemp,!imon,!kvv,!mpris_dbus,!pop3' && make -j8 CCLD='$(CC) -all-static' && strip lcd4linux
make clean
räumt eventuelle Reste von frühreren Bauvorgängen aufCFLAGS=…
- weist den Compiler an, statische Binaries zu bauen (
-static
)) - 32bit-Code zu erzeugen (
-m32
) - keine Instruktionen die ein 486er nicht auch könnte zu benutzen (
-mcpu=i486
)
./configure …
erstellt das Makefile anhand der Parameter und Systemkonfiguration- statische Bibliotheken bauen (
–enable-static
) - keine dynamischen Bibliotheken bauen (
–disable-shared
) - alle Treiber zu bauen außer denen, die mit
!<Treiber>
angegeben sind, da diese unerfüllbare Abhängigkeiten haben oder sonstwie Probleme bereiten beim statischen Linken ('–with-drivers=all,!EFN,!SamsungSPF,!HD44780-I2C,!LEDMatrix,!X11
') - alle Plugins bauen außer denen, die mit
!<Plugin>
angegeben sind, da diese unerfüllbare Abhängigkeiten haben oder sonstwie Probleme bereiten beim statischen Linken ('–with-plugins=all,!dbus,!hddtemp,!imon,!kvv,!mpris_dbus,!pop3
')
make …
compiliert alle Quelldateien und linkt anschließend das Programm- benutze bis zu 8 Kerne gleichzeitig beim Compilieren (
-j8
) - linke alle Programm rein statisch, normalerweise sollte das
./configure
einstellen, aber hier scheint das nicht vorgesehen zu sein, deswegen dieser „Trick“ (CCLD='$(CC) -all-static
')
strip lcd4linux
Entferne nicht benötigte Daten aus dem fertigen Program (vor allem Debug-Informationen)
- Hat alles geklappt (keine Fehler), sollte ein
ldd lcd4linux
folgende Ausgabe erzeugen:
not a dynamic executable
- Zum Vergleich: Wäre lcd4linux dynamisch gelinkt, würde die Ausgabe so oder so ähnlich aussehen:
linux-gate.so.1 => (0xf7f98000) libncurses.so.5 => /lib/libncurses.so.5 (0xf7f4c000) libX11.so.6 => /usr/lib/libX11.so.6 (0xf7e2f000) libgd.so.2 => /usr/lib/libgd.so.2 (0xf7ded000) ... /lib/ld-linux.so.2 (0xf7f9a000) libXau.so.6 => /usr/lib/libXau.so.6 (0xf7530000) libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xf752b000)
- Nun kann man lcd4linux auf einen snapclient kopieren:
scp lcd4linux root@lounge.snapcast.shack:/usr/local/bin/lcd4linux
- Fertig!
OpenRC-Initscript
Damit lcd4linux als Service automatisch gestartet werden kann, braucht es noch ein einfaches OpenRC-Initscript:
cat > /etc/init.d/lcd4linux <<< EOF #!/sbin/openrc-run CONFIG=/etc/lcd4linux.conf PID=/var/run/lcd4linux.pid depend() { after lm_sensors modules hwdrivers networking } checkconfig() { if [ ! -f ${CONFIG} ]; then eerror "Configuration file ${CONFIG} not found" return 1 fi } start() { checkconfig || return 1 ebegin "Starting lcd4linux" start-stop-daemon --start --quiet --background --pidfile ${PID} \ --exec /usr/local/bin/lcd4linux -- -f ${CONFIG} -v eend ${?} } stop() { ebegin "Stopping lcd4linux" start-stop-daemon --stop --pidfile ${PID} eend ${?} } EOF
Nun einfach mit rc-update add lcd4linux default
lcd4linux dem Default-Runlevel hinzufügen und, wenn man nicht neustarten möchte, noch starten mit rc-service lcd4linux start
20x4-Zeichen-Display am Parallelport
Einige Snapclients haben ein 20×4 Zeichen umfassendes, HD44780-kompatibles Text-LCD am Parallelport angeschlossen. Die für die verwendete Verdrahtung nötige Konfig ist wie folgt:
Display HD44780-20x4 { Driver 'HD44780' Model 'generic' Port '/dev/parport0' Size '20x4' Icons '4' Wire { RW 'GND' RS 'AUTOFD' ENABLE 'STROBE' ENABLE2 'GND' GPO 'GND' } }