9.3.2014

foto Petr Bravenec

Petr Bravenec
Twitter: @BravenecPetr
+420 777 566 384
petr.bravenec@hobrasoft.cz

Minulý týden jsem psal o tom, jak připojit k desce BeagleBone teploměr. Že to jde, jsem ukázal názorně na stránce http://beagle.bravenec.eu (nyní funguje už i přes IPv4).

BeagleBone není zrovna výkonný stroj a i když by to šlo, instalovat kvůli jedné stránce php a apache je jako přiřezávat párátko motorovou pilou. Jak to tedy udělat a jaký webový server zvolit?

Pro podobné jednoduché úlohy lze s úspěchem použít švýcarský nožík miniaturních linuxových distribucí: Busybox. Busybox je použitý jak v roli shellu pro běh potřebných skriptů, tak v roli webového serveru. Pro vyčítání, zpracování a zveřejnění naměřených hodnot si prakticky stoprocentně vystačíme jen s busyboxem.

Vyčítání hodnot funguje jednoduše. Přečte se obsah potřebného souboru a vypreparuje a zformátuje se potřebná hodnota (programem awk) a v šabloně index.html se přepíšou řetězce XXX1 a XXX2 naměřenými hodnotami. Výsledek se uloží na ramdisk. Proč na ramdisk? Zůstaňte naladěni na tento kanál, článek o patáliích s SD kartami a o potřebnosti ramdisku už je napsaný a čeká na zveřejnění. Nejrychleji se o článku dozvíte, pokud začnete sledovat náš Twitter.

#!/bin/busybox sh

SED="busybox sed"
AWK="busybox awk"
SLEEP="busybox sleep"

while true
    do
        XXX1=$($AWK -F "=" '$0 ~ /t=/ {printf("%1.1f\n",($2)/1000);}' \
                < /sys/bus/w1/devices/28-0000027d912e/w1_slave )

        XXX2=$($AWK -F "=" '$0 ~ /t=/ {printf("%1.1f\n",($2)/1000);}' \
                < /sys/bus/w1/devices/28-00000294d39a/w1_slave ) 

        $SED "s/XXX1/$XXX1/g; s/XXX2/$XXX2/g" \
                < /root/teplomer/index.html \
                > /dev/shm/teplomer/index.html

        $SLEEP 15

    done

Ve svém BeagleBone mám nainstalovanou distribuci Gentoo - zde mám všechny potřebné utility (sed, awk, grep a sleep) v jejich plnokrevné verzi. Busybox obsahuje funkčnost všech těchto utilit. V menších systémech (routery, čtečky) bývá obvyklé, že busybox zde plní veškeré funkce a nic navíc nainstalováno není - na busybox vedou pouze linky pod názvem požadovaných programů. Abych zavolal utilitu vestavěnou v busyboxu, musím ve svém BeagleBone volat přímo busybox a prvním parametrem musí být název požadované utility. V systémech, kde je nainstalovaný pouze busybox a samostatné utility jako sed, awk a sleep nejsou, můžu volat busybox přímo názvem požadované utility.

Vyčítání hodnot se startuje pomocí jednoduchého init skriptu /etc/init.d/teplomer:

#!/sbin/runscript

depend() {
    use logger
}

start() {
    ebegin "Starting teplomer"
    start-stop-daemon --start --quiet --pidfile /var/run/teplomer.pid \
        --background --make-pidfile --exec /root/teplomer/teplomer
    eend ${?}
}

stop() {
    ebegin "Stopping teplomer"
    start-stop-daemon --stop --quiet --pidfile /var/run/teplomer.pid
    eend ${?}
}

Busybox je natolik univerzální nástroj, že dokáže fungovat i jako jednoduchý webový server pro statický obsah. Nastavení a startování řeší opět jednoduchý init skript /etc/init.d/httpd-teplomer:

#!/sbin/runscript

depend() {
    use logger dns
}

start() {
    ebegin "Starting httpd-teplomer"
    mkdir -p /dev/shm/teplomer
    start-stop-daemon --start --quiet \
        --pidfile /var/run/httpd-teplomer.pid \
        --background --make-pidfile \
        --exec /bin/busybox -- httpd -f -p 80 -h /dev/shm/teplomer
    eend ${?}
}

stop() {
    ebegin "Stopping httpd-teplomer"
    start-stop-daemon --stop --quiet \
        --pidfile /var/run/httpd-teplomer.pid
    eend ${?}
}

Roli webového serveru zde plní řádek

/bin/busybox --httpd -f -p 80 -h /dev/shm/teplomer

V Gentoo musím ještě říci, aby se skripty startovaly při startu systému:

rc-update add teplomer default
rc-update add httpd-teplomer default

A to je vše.

Hobrasoft s.r.o. | Kontakt