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.
apt-get update
apt-get install build-essential autoconf automake libgd2-noxpm-dev
apt-get build-dep lcd4linux
apt-get source lcd4linux
cd lcd4linux-<version>
./bootstrap
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=…
-static
))-m32
)-mcpu=i486
)./configure …
erstellt das Makefile anhand der Parameter und Systemkonfiguration–enable-static
)–disable-shared
)!<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
')!<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-j8
)./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)ldd lcd4linux
folgende Ausgabe erzeugen: not a dynamic executable
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)
scp lcd4linux root@lounge.snapcast.shack:/usr/local/bin/lcd4linux
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
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' } }