Spuštění openHAB serveru na routeru Turris

10. 8. 2015
Doba čtení: 7 minut

Sdílet

Inteligentní dům a internet věcí jsou dva moderní a často skloňované buzzwordy. Jedním z nástrojů pro jejich ovládání je i open source a svobodný projekt openHAB. Minule jsme si openHAB nainstalovali jej na malý počítač Raspberry Pi. V této části si ukážeme, jak tento server spustit na routeru Turris.

Úvodní informace

Operačním systémem použitým na routeru Turris je OpenWrt, což je distribuce Linuxu. Turris lze nastavit, tak, že je možné se k tomuto prostředí přihlásit pomocí SSH do příkazové řádky a tam získat práva roota. Proto vás jistě napadne, že je možné nainstalovat openHAB nativně na Turris.

Zde se však dostaví poměrně rychle zklamání. Pro běh openHABu jak jsme si minule řekli, je nutné mít v systému nainstalovanou podporu pro Javu. Použitým OS, jak bylo řečeno, je sice OpenWrt, ale na platformě PPCSPE – PowerPC SPE (Signal Processing Engine). Pro OpenWrt se sice na internetu dá najít několik návodů pro instalaci Javy, ale žádný z nich mi nefunguje pro tuto platformu.

Navíc si jistě budete přát ponechat základní systém Turrisu pokud možno nedotčený, proto systém nainstalujeme na SD kartu a použijeme chroot. Jako vhodný operační systém v chrootu použijeme Debian. Instalace do chrootu pomocí debootstrap je pro Debian poměrně dobře zdokumentována a současně existuje verze Debianu pro platformu PPCSPE.

Budeme potřebovat jednu microSD kartu o minimální velikosti 4 GB, na které bude umístěn Debian. Dále doporučuji jeden USB flash disk, také nejlépe alespoň 4 GB. Ten využijeme pro přenos připraveného Debianu na Turris, abychom nemuseli, v případě neúspěšných pokusů, kartu z Turrisu opakovaně vyjímat a vkládat. Dále je nutné si na Turrisu připravit pomocí webového administračního rozhraní přístup pomocí SSH pro roota, samozřejmě pouze ze zabezpečené části sítě.

Instalace Debianu

Debian nainstalujeme, jak jsme si již řekli, na SD kartu a ponecháme tak původní filesystém Turrisu nedotčený. Tuto kartu je možné do systému přidat po sejmutí vrchního krytu tak, jak je popsáno na stránkách výrobce. Co je zde však minimálně matoucí, je skutečnost, že se všude píše o SD kartě, ve skutečnosti je ale nutná microSD karta. Tato je po vložení a startu Turrisu v systému přístupná jako /dev/mmcblk0 a první oddíl na ní jako  /dev/mmcblk0p1.

Máme.li kartu vloženou, můžeme přistoupit k instalaci Debianu. Výchozí informace pro instalaci najdeme na výše uvedených odkazech. Pro přípravu struktury Debianu do chrootu je třeba jiný systém založený na Debianu. Doporučuji buď jiný Debian nebo Ubuntu 14.04, které jsem s úspěchem použil. Je jedno, zda se jedná o 32 nebo 64 bitový systém, instalujeme stejně zcela odlišnou architekturu. Do tohoto počítače nainstalujeme potřebné programy:

apt-get install binutils debootstrap

Je možné použít i „nedebianí“ distribuci, ale musíme pak nainstalovat debootstrap ze zdrojového kódu.

Dále pak vytvoříme na vhodném místě adresář debian a přejdeme do něj:

mkdir debian
cd debian

Nyní spustíme debootstrap následujícím příkazem a chvíli počkáme:

debootstrap --foreign --no-check-gpg --arch powerpcspe unstable . http://antcom.de/powerpcspe/

Po skončení příkazu pak výsledek zabalíme do archivu:

cd ..
tar cvzf debian.tgz debian

Vytvořený soubor debian.tgz, nyní musíme nějak překopírovat na Turris, nejlépe pomocí USB disku. Je možné samozřejmě instalovat debootstrap adresář přímo na microSD kartu, ale nedoporučuji to, v případě, že něco pokazíme, musíme microSD kartu opět z Turrisu vyjmout a znovu na ní instalovat atd. Přímé kopírování souboru debian.tgz na Turris možné není, na Turrisu pro něj není dostatek volného prostoru. Soubor debian.tgz si někde dobře uschováme, v případě potíží jej nemusíme znovu vytvářet.

Od této chvíle veškerá další činnost bude probíhat na Turrisu, kde je třeba být přihlášen přes ssh s právy roota. Nyní si připravíme microSD kartu vloženou do Turrisu (pokud jsme to již neudělali dříve). Tato karta je systémem detekována jako zařízení /dev/mmcblk0 a její první oddíl jako /dev/mmcblk0p1. Kartu naformátujeme nejlépe systémem extended2, aby práce s ní byla rychlá a nedocházelo k rychlému opotřebení při práci se journálem:

mke2fs /dev/mmcblk0p1

Vytvoříme si přípojný bod a kartu do něj připojíme:

mkdir /mnt/debian
mount /dev/mmcblk0p1 /mnt/debian

Nyní si připojíme i USB disk, který by měl být systémem rozpoznán jako /dev/sda. Vytvoříme si přípojný bod a připojíme USB disk a ověříme existující připojené disky:

mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
df -h

Měli bychom vidět něco jako:

Filesystem                Size      Used Available Use% Mounted on
rootfs                  249.0M     72.1M    176.9M  29% /
/dev/root               249.0M     72.1M    176.9M  29% /
tmpfs                  1013.8M      2.0M   1011.8M   0% /tmp
tmpfs                   512.0K      4.0K    508.0K   1% /dev
/dev/mmcblk0p1          14.5G      2.9G     10.9G  21% /mnt/debian
tmpfs             512.0K      4.0K    508.0K   1% /mnt/debian/dev
/dev/sda1               3.7G      1.0G      2.5G  29% /mnt/sda1

Samozřejmě v tomto okamžiku máme (na rozdíl od tohoto výpisu) disk připojený na /mnt/debian ještě prázdný. Nyní již rozbalíme připravený archiv:

cd /mnt/debian
tar xzvf /mnt/sda1/debian.tgz

Nyní již je čas chrootnout se do nového debianu. Pro spuštění a vypnutí debianu si můžeme připravit následující skripty, které nám ušetří spousty přepisování. Pro start debianu skript debinit.sh, pro vstup do již běžícího debianu debian.sh a pro vypnutí debianu debout.sh. Pak stačí pro požadovanou činnost pouze spustit odpovídající skript. Tyto skripty umístíme do /usr/bin (Turris nemá adresář /usr/local) a nastavíme jim práva pro spuštění např: chmod a+x /usr/bin/debinit.sh, Zdrojové kódy skriptů jsou následující

debinit.sh:
#!/bin/bash
mount /dev/mmcblk0p1 /mnt/debian -t ext4 # nebo ext2
mount -o bind /dev /mnt/debian/dev
mount -o bind /proc /mnt/debian/proc
mount -o bind /sys /mnt/debian/sys
mount --bind /dev/pts /mnt/debian/dev/pts
cp /etc/resolv.conf /mnt/debian/etc/
cp /etc/hosts /mnt/debian/etc/
chroot /mnt/debian/ /bin/bash

debout.sh:
#!/bin/bash
umount /mnt/debian/dev/pts -l
umount /mnt/debian/dev -l
umount /mnt/debian/sys -l
umount /mnt/debian/proc -l
umount /mnt/debian -l

debian.sh
#!/bin/bash
chroot /mnt/debian/ /bin/bash

Nastavení debianu na Turrisu

Nyní již můžeme přejít do Debianu pomocí našeho skriptu debinit.sh. To že jsme na správném místě se přesvědčíme příkazem cat /etc/issue který by měl dát odpověď typu Debian GNU/Linux 8 \n \l. Nyní je čas upravit instalační zdroje v souboru /etc/apt/sources.list pomocí oblíbeného editoru na:

deb http://ftp.de.debian.org/debian-ports unstable main
deb http://ftp.de.debian.org/debian-ports experimental main
deb http://ftp.de.debian.org/debian-ports unreleased main

Než přistoupíme k aktualizaci systému musíme napravit jednu nepříjemnou věc. Nové balíky libc6 a libc6-dev pro Debian PPCSPE jsou rozbité a jejich instalací uvedeme systém do nepoužitelného stavu. Je nutné zakázat jejich instalaci:

echo "libc6-dev hold" | dpkg --set-selections
echo "libc6 hold" | dpkg --set-selections

a teprve nyní můžeme přistoupit k aktualizaci:

apt-get update
apt-cache gencaches
apt-get upgrade
apt-get dist-upgrade

a k instalaci dalších balíků. Je možné, že kvůli závislosti na nových verzích libc6 se některé balíky nainstalovat nepodaří, ale vhodným střídáním ap-get a aptitude se dá dosáhnout hodně. Čas od času je nutné sáhnout i po typu apt-get install -f. Po prvním apt-get update pravděpodobně obdržíme zprávu o chybějícím klíči, která se bude opakovat:

W: GPG error: ftp://ftp.debian.org/ testing Release:
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A53AB45AC448326E

Pro její odstranění provedeme následující kroky:

gpg --keyserver pgpkeys.mit.edu --recv-key A53AB45AC448326E
gpg -a --export A53AB45AC448326E | apt-key add -

Z Debianu zpět do Turrisu se v případě potřeby odhlásíme příkazem exit anebo klávesovou zkratkou Ctrl+D. Do Debianu se naopak vrátíme pomocí připraveného skriptu debian.sh. Jsme-li v Turrisu a chceme odpojit všechny zdroje, které Debian používá použijeme skript  debout.sh.

Instalace OpenHab

Předpokládejme, že jsme nyní přihlášení v Debianu na Turrisu. Pro správnou funkci OpenHabu ještě potřebujeme nainstalovanou javu. K dispozici máme openjdk ve verzích 6, 7 i 8. Použijme například verzi 7:

apt-get install openjdk-7-jdk openjdk-7-jre

Po úspěšné instalaci, již můžeme nainstalovat a rozběhnout OpenHab. Tentokrát nemáme k dispozici balíčky z distribuce jako ne Raspberry Pi a proto budeme postupovat dle stránek pro manuální instalaci. Budeme jak je doporučeno instalovat do adresáře /opt/openhab. Samotná instalace spočívá pouze v postupném rozbalení potřebných součástí, přičemž povinný je pouze balík openhab-runtime. Samotné spuštění openHABu je pak pomocí skriptu  /opt/openhab/start.sh.

Pozor v nových verzích Turrisu je defaultní port 8080 použit jako alternativní pro zobrazení webového konfiguračního rozhraní, proto změníme v již zmíněném souboru /opt/openhab/start.sh parametr HTTP_PORT=8080 např na HTTP_PORT=8888 a současně nesmíme zapomenout port 8888 povolit v konfiguračním rozhraní Turrisu.

bitcoin_skoleni

Po úspěšném rozběhnutí můžeme začít OpenHab konfigurovat. Ale to už je jiný příběh.

Závěr

Tento článek by vám měl pomoci při řešení dvou různých problémů

  1. Jak rozběhnout openHAB na domácím routeru. Je třeba si uvědomit, že obdobným způsobem můžeme openHAB rozběhnout na libovolném routeru, na kterém lze spustit OpenWrt. Je třeba pouze počítat s tím, že se skoro jistě bude jednat o jinou architekturu než PPCSPE, ale základní postup by měl být stejný
  2. Jak rozběhnout na Turrisu software (služby), které neposkytuje přímo Turris. A současně jak na Turrisu rozběhnout Debian.