OpenWRT: Unterschied zwischen den Versionen

Aus FHEMWiki
K (→‎Installation von OpenWRT auf dem Router: -> Anpassung an neues Repository)
(Anpassung von <source>-Tags nach <syntaxhighlight>)
 
Zeile 21: Zeile 21:
Daraufhin kann fdisk für das Gerät aufgerufen werden. Detaillierte ANleitungen für fdisk finden sich im Internet. Vereinfacht ist folgender Vorgang auszuführen (alle Daten gehen auf dem Stick verloren!).
Daraufhin kann fdisk für das Gerät aufgerufen werden. Detaillierte ANleitungen für fdisk finden sich im Internet. Vereinfacht ist folgender Vorgang auszuführen (alle Daten gehen auf dem Stick verloren!).


<source lang=bash>
<syntaxhighlight lang=bash>
fdisk /dev/sdc
fdisk /dev/sdc
o
o
Zeile 36: Zeile 36:
82
82
w
w
</source>
</syntaxhighlight>


Danach ist der Stick partitioniert. Ein erneuter Aufruf von <code>fdisk -l</code> sollte ungefähr folgendes ERgebnis liefern:
Danach ist der Stick partitioniert. Ein erneuter Aufruf von <code>fdisk -l</code> sollte ungefähr folgendes ERgebnis liefern:
Zeile 50: Zeile 50:
Jetzt müssen die Partitionen noch formatiert werden. Vorsicht: Nur hier heisst der Stick /dev/sdc. Er kann auch anders heissen! Wenn ihr die falschen Namen verwendet, könntet ihr eure Festplatte löschen! /dev/sdc1 ist durch /dev/&lt;euer-sdx&gt;1 zu ersetzen
Jetzt müssen die Partitionen noch formatiert werden. Vorsicht: Nur hier heisst der Stick /dev/sdc. Er kann auch anders heissen! Wenn ihr die falschen Namen verwendet, könntet ihr eure Festplatte löschen! /dev/sdc1 ist durch /dev/&lt;euer-sdx&gt;1 zu ersetzen


<source lang=bash>
<syntaxhighlight lang=bash>
mkswap /dev/sdc1
mkswap /dev/sdc1
mkfs.ext4 /dev/sdc2
mkfs.ext4 /dev/sdc2
sync
sync
</source>
</syntaxhighlight>


Der Stick ist nun fertig vorbereitet und wird im Linux-PC nicht mehr benötigt. Er kann jetzt in den Router
Der Stick ist nun fertig vorbereitet und wird im Linux-PC nicht mehr benötigt. Er kann jetzt in den Router
Zeile 60: Zeile 60:
=== Bauen des OpenWRT-Images ===
=== Bauen des OpenWRT-Images ===
Um OpenWRT zu bauen, müssen die entsprechenden Werkzeuge auf dem Linux-PC installiert sein. Unter Ubuntu geht das so:
Um OpenWRT zu bauen, müssen die entsprechenden Werkzeuge auf dem Linux-PC installiert sein. Unter Ubuntu geht das so:
<source lang=bash>
<syntaxhighlight lang=bash>
sudo apt-get -y install build-essential libncurses5-dev zlib-dev libssl-dev git-core
sudo apt-get -y install build-essential libncurses5-dev zlib-dev libssl-dev git-core
</source>
</syntaxhighlight>


OpenWRT kann am besten von GitHub ausgecheckt werden.
OpenWRT kann am besten von GitHub ausgecheckt werden.
<source lang=bash>
<syntaxhighlight lang=bash>
git clone git://github.com/openwrt/openwrt.git
git clone git://github.com/openwrt/openwrt.git
</source>
</syntaxhighlight>


Das Auschecken dauert eine Weile, aber das ist noch gar nichts, das Bauen dauert noch viel länger. Sobald alles runtergeladen ist, wird in das Verzeichnis gewechselt und die Konfiguration vorgenommen
Das Auschecken dauert eine Weile, aber das ist noch gar nichts, das Bauen dauert noch viel länger. Sobald alles runtergeladen ist, wird in das Verzeichnis gewechselt und die Konfiguration vorgenommen
<source lang=bash>
<syntaxhighlight lang=bash>
cd openwrt
cd openwrt
make menuconfig
make menuconfig
</source>
</syntaxhighlight>


Für die Konfiguration muss die Architektur des Routers bekannt sein. Diese kann auf der [http://www.openwrt.org OpenWRT-Seite] nachgeschlagen werden. der TP-LINK MR3020 hat eine <code>ar71xx</code>-Architektur.
Für die Konfiguration muss die Architektur des Routers bekannt sein. Diese kann auf der [http://www.openwrt.org OpenWRT-Seite] nachgeschlagen werden. der TP-LINK MR3020 hat eine <code>ar71xx</code>-Architektur.
Zeile 109: Zeile 109:


Nun kann - in aller Ruhe - alles gebaut werden durch Eingabe von
Nun kann - in aller Ruhe - alles gebaut werden durch Eingabe von
<source lang=bash>
<syntaxhighlight lang=bash>
make
make
</source>
</syntaxhighlight>


=== Vorbereiten des Routers ===
=== Vorbereiten des Routers ===
Zeile 122: Zeile 122:


Zunächst muss man sich nun per telnet verbinden.  
Zunächst muss man sich nun per telnet verbinden.  
<source lang=bash>
<syntaxhighlight lang=bash>
telnet 192.168.1.1
telnet 192.168.1.1
</source>
</syntaxhighlight>
Nun ist man schon im OpenWRT eingeloggt. Das erste und einzige, was in diesem Login nun gemacht wird, ist, per
Nun ist man schon im OpenWRT eingeloggt. Das erste und einzige, was in diesem Login nun gemacht wird, ist, per
<source lang=bash>
<syntaxhighlight lang=bash>
passwd
passwd
</source>
</syntaxhighlight>
ein Passwort zu setzen. Danach kann man sich mit
ein Passwort zu setzen. Danach kann man sich mit
<source lang=bash>
<syntaxhighlight lang=bash>
exit
exit
</source>
</syntaxhighlight>
ausloggen. Ab jetzt ist <code>telnet</code> zur Sicherheit deaktiviert und man kann per <code>ssh</code> eine Verbindung herstellen, da ja jetzt ein Passwort gesetzt ist
ausloggen. Ab jetzt ist <code>telnet</code> zur Sicherheit deaktiviert und man kann per <code>ssh</code> eine Verbindung herstellen, da ja jetzt ein Passwort gesetzt ist
<source lang=bash>
<syntaxhighlight lang=bash>
ssh root@192.168.1.1
ssh root@192.168.1.1
</source>
</syntaxhighlight>
Für den weiteren Verlauf ist es notwendig, dass der Router Internetzugang hat. Dazu muss man ggf. von Hand in der Datei <code>/etc/config/network</code> die Netzwerkeinstellungen entsprechend anpassen.
Für den weiteren Verlauf ist es notwendig, dass der Router Internetzugang hat. Dazu muss man ggf. von Hand in der Datei <code>/etc/config/network</code> die Netzwerkeinstellungen entsprechend anpassen.
<source lang=bash>
<syntaxhighlight lang=bash>
vi /etc/config/network
vi /etc/config/network
</source>
</syntaxhighlight>
Zur Bedienung von vi z.B. [http://wiki.openwrt.org/doc/uci/network hier]
Zur Bedienung von vi z.B. [http://wiki.openwrt.org/doc/uci/network hier]


Wichtig ist die IP-Adresse, die Netzmaske, das Gateway und der DNS-Server. Bitte genau auf Tippfehler achten. Bei einer fehlenden Konfiguration ist der Router nicht mehr erreichbar. Nach abspeichern kann die neue Konfiguration aktiviert werden
Wichtig ist die IP-Adresse, die Netzmaske, das Gateway und der DNS-Server. Bitte genau auf Tippfehler achten. Bei einer fehlenden Konfiguration ist der Router nicht mehr erreichbar. Nach abspeichern kann die neue Konfiguration aktiviert werden
<source lang=bash>
<syntaxhighlight lang=bash>
/etc/init.d/network restart
/etc/init.d/network restart
</source>
</syntaxhighlight>
Falls sich auch die IP-Adresse geändert hat, mit ssh wie oben neu anmelden. Als nächstes soll der USB-Stick eingebunden werden, dazu sind einige Pakete zu installieren. OpenWRT hat einen eingebauten Paketmanager zur Nachinstallation von Software direkt aus dem Netz. Zunächst wird nur das installiert, was in den internen Speicher des Routers muss. Das Root-Dateisystem soll anschließend durch den USB-Stick erweitert werden, um dann dorthin die meiste Software zu installieren. Viele Details hierzu finden sich [http://wiki.openwrt.org/doc/howto/extroot hier]
Falls sich auch die IP-Adresse geändert hat, mit ssh wie oben neu anmelden. Als nächstes soll der USB-Stick eingebunden werden, dazu sind einige Pakete zu installieren. OpenWRT hat einen eingebauten Paketmanager zur Nachinstallation von Software direkt aus dem Netz. Zunächst wird nur das installiert, was in den internen Speicher des Routers muss. Das Root-Dateisystem soll anschließend durch den USB-Stick erweitert werden, um dann dorthin die meiste Software zu installieren. Viele Details hierzu finden sich [http://wiki.openwrt.org/doc/howto/extroot hier]
<source lang=bash>
<syntaxhighlight lang=bash>
opkg update
opkg update
opkg install block-mount
opkg install block-mount
</source>
</syntaxhighlight>
Bei einem Aufruf von  
Bei einem Aufruf von  
<source lang=bash>
<syntaxhighlight lang=bash>
fdisk -l
fdisk -l
</source>
</syntaxhighlight>
sollte der an dem Router angeschlossene Stick bereits zu sehen sein (analog zu oben). Hiermit lässt sich dann auch rausfinden, wie das Gerät auf dem Router heisst. In den meisten Fällen dürfte dies <code>/dev/sda</code> sein. In diesem Fall können wir nun das Dateisystem einbinden und dann die Dateien aus dem internen Speicher dorthin kopieren.
sollte der an dem Router angeschlossene Stick bereits zu sehen sein (analog zu oben). Hiermit lässt sich dann auch rausfinden, wie das Gerät auf dem Router heisst. In den meisten Fällen dürfte dies <code>/dev/sda</code> sein. In diesem Fall können wir nun das Dateisystem einbinden und dann die Dateien aus dem internen Speicher dorthin kopieren.
<source lang=bash>
<syntaxhighlight lang=bash>
mkdir /mnt/sda2
mkdir /mnt/sda2
mount /dev/sda2 /mnt/sda2
mount /dev/sda2 /mnt/sda2
tar -C /overlay -cvf - . | tar -C /mnt/sda2 -xf -
tar -C /overlay -cvf - . | tar -C /mnt/sda2 -xf -
</source>
</syntaxhighlight>
Nun kann auch schon die Konfiguration so umgestellt werden, dass beim nächsten Neustart der USB-Stick mit ins Root-Filesystem eingebunden wird. Dazu ist die Konfigurationsdatei <code>/etc/config/fstab</code> zu editieren.
Nun kann auch schon die Konfiguration so umgestellt werden, dass beim nächsten Neustart der USB-Stick mit ins Root-Filesystem eingebunden wird. Dazu ist die Konfigurationsdatei <code>/etc/config/fstab</code> zu editieren.
<source lang=bash>
<syntaxhighlight lang=bash>
vi /etc/config/fstab
vi /etc/config/fstab
</source>
</syntaxhighlight>
Diese sollte danach ungefähr so aussehen, wobei das von Router zu Router abweichen kann. Der automatische Block für "home" kann bearbeitet werden und der Spap-Block ebenfalls auf (hier) /dev/sda1 angepasst werden
Diese sollte danach ungefähr so aussehen, wobei das von Router zu Router abweichen kann. Der automatische Block für "home" kann bearbeitet werden und der Spap-Block ebenfalls auf (hier) /dev/sda1 angepasst werden


Zeile 186: Zeile 186:


Nun kann die Konfiguration aktiviert und die Box mit eingestecktem Stick neu gestartet werden
Nun kann die Konfiguration aktiviert und die Box mit eingestecktem Stick neu gestartet werden
<source lang=bash>
<syntaxhighlight lang=bash>
/etc/init.d/fstab enable
/etc/init.d/fstab enable
reboot
reboot
</source>
</syntaxhighlight>
Nun sollte überprüft werden, ob der Stick richtig eingebunden ist
Nun sollte überprüft werden, ob der Stick richtig eingebunden ist
<source lang=bash>
<syntaxhighlight lang=bash>
df -h
df -h
</source>
</syntaxhighlight>
Die Ausgabe sollte sinngemäß folgende Zeilen enthalten
Die Ausgabe sollte sinngemäß folgende Zeilen enthalten


Zeile 201: Zeile 201:
Ist dies nicht der Fall, kann auf der OpenWRT Seite nach Troubleshooting-Möglichkeiten gesucht werden und dann hier fortgesetzt werden.
Ist dies nicht der Fall, kann auf der OpenWRT Seite nach Troubleshooting-Möglichkeiten gesucht werden und dann hier fortgesetzt werden.
Nachdem nun der Stick erfolgreiche eingebunden werden, können die ganzen Pakete installiert werden, die zum Betrieb von FHEM notwendig sind. Da dies eine Vielzahl der perlbase-Pakete ist, sind hier schlichtweg alle verfügbaren perl-Pakete installiert worden. Ebenfalls einige andere nützliche Werkzeuge. Speichermäßig ist das auf dem USB-Stick nicht entscheidend.
Nachdem nun der Stick erfolgreiche eingebunden werden, können die ganzen Pakete installiert werden, die zum Betrieb von FHEM notwendig sind. Da dies eine Vielzahl der perlbase-Pakete ist, sind hier schlichtweg alle verfügbaren perl-Pakete installiert worden. Ebenfalls einige andere nützliche Werkzeuge. Speichermäßig ist das auf dem USB-Stick nicht entscheidend.
<source lang=bash>
<syntaxhighlight lang=bash>
opkg update
opkg update
opkg install usbutils luci ntpclient uhttpd perl perl-compress-bzip2 perl-dbi perl-html-parser perl-html-tagset perl-html-tree perl-lockfile-simple \
opkg install usbutils luci ntpclient uhttpd perl perl-compress-bzip2 perl-dbi perl-html-parser perl-html-tagset perl-html-tree perl-lockfile-simple \
Zeile 219: Zeile 219:
perlbase-symbol perlbase-sys perlbase-syslog perlbase-tainted perlbase-term perlbase-termcap perlbase-test perlbase-text perlbase-thread perlbase-threads \
perlbase-symbol perlbase-sys perlbase-syslog perlbase-tainted perlbase-term perlbase-termcap perlbase-test perlbase-text perlbase-thread perlbase-threads \
perlbase-tie perlbase-time perlbase-unicode perlbase-unicore perlbase-user perlbase-xsloader
perlbase-tie perlbase-time perlbase-unicode perlbase-unicore perlbase-user perlbase-xsloader
</source>
</syntaxhighlight>
Das Webinterface "Luci" ist mitinstalliert worden und bietet komfortable Einstellmöglichkeiten für den Router allgemein. Nach einem  
Das Webinterface "Luci" ist mitinstalliert worden und bietet komfortable Einstellmöglichkeiten für den Router allgemein. Nach einem  
<source lang=bash>
<syntaxhighlight lang=bash>
/etc/init.d/uhttpd enable
/etc/init.d/uhttpd enable
/etc/init.d/uhttpd start
/etc/init.d/uhttpd start
</source>
</syntaxhighlight>
ist es unter <code>[http://192.168.1.1/ http://192.168.1.1/]</code> bzw. der entsprechenden Router-IP erreichbar. Wichtig ist es ggf. den DHCP-Server zu deaktivieren. Die meisten Router können auch als WLAN-Clients konfiguriert werden, sie brauchen also nicht zwangsweise ein Netzwerkkabel. All dies geht über die Weboberfläche.
ist es unter <code>[http://192.168.1.1/ http://192.168.1.1/]</code> bzw. der entsprechenden Router-IP erreichbar. Wichtig ist es ggf. den DHCP-Server zu deaktivieren. Die meisten Router können auch als WLAN-Clients konfiguriert werden, sie brauchen also nicht zwangsweise ein Netzwerkkabel. All dies geht über die Weboberfläche.
Nun kann FHEM auf den Router/Stick kopiert werden. In diesem Beispiel benutzen wir das SVN-Repository
Nun kann FHEM auf den Router/Stick kopiert werden. In diesem Beispiel benutzen wir das SVN-Repository
<source lang=bash>
<syntaxhighlight lang=bash>
opkg install subversion-client make libelf
opkg install subversion-client make libelf
mkdir /usr/src
mkdir /usr/src
Zeile 234: Zeile 234:
cd fhem
cd fhem
make install-pgm2
make install-pgm2
</source>
</syntaxhighlight>
Die Bearbeitung der <code>/etc/fhem.cfg</code> ist nun so durchzuführen, wie bei jeder anderen FHEM-Installation auch.  
Die Bearbeitung der <code>/etc/fhem.cfg</code> ist nun so durchzuführen, wie bei jeder anderen FHEM-Installation auch.  


==== CUL ====
==== CUL ====
Wenn ein [[CUL]] am Router verwendet werden soll, dann geht dies über den Umweg <code>ser2net</code>, da das CPAN Modul <code>Device::Serial</code> in OpenWRT nicht standardmäßig zur Verfügung steht.
Wenn ein [[CUL]] am Router verwendet werden soll, dann geht dies über den Umweg <code>ser2net</code>, da das CPAN Modul <code>Device::Serial</code> in OpenWRT nicht standardmäßig zur Verfügung steht.
<source lang=bash>
<syntaxhighlight lang=bash>
opkg install ser2net
opkg install ser2net
vi /etc/ser2net.conf
vi /etc/ser2net.conf
</source>
</syntaxhighlight>
In der Datei kann alles gelöscht werden und dann genau diese Zeile eingefügt werden:
In der Datei kann alles gelöscht werden und dann genau diese Zeile eingefügt werden:


Zeile 255: Zeile 255:


Nun muss nur noch der Autostart von ser2net und fhem eingebaut werden und die integrierte, stromsparende FHEM-Kiste ist fertig.
Nun muss nur noch der Autostart von ser2net und fhem eingebaut werden und die integrierte, stromsparende FHEM-Kiste ist fertig.
<source lang=bash>
<syntaxhighlight lang=bash>
vi /etc/init.d/ser2net
vi /etc/init.d/ser2net
</source>
</syntaxhighlight>
mit folgendem Inhalt
mit folgendem Inhalt
<source lang=bash>
<syntaxhighlight lang=bash>
#!/bin/sh /etc/rc.common
#!/bin/sh /etc/rc.common
# Ser2Net Init Script
# Ser2Net Init Script
Zeile 270: Zeile 270:
     killall ser2net
     killall ser2net
}
}
</source>
</syntaxhighlight>
Danach Ser2Net aktivieren und starten:
Danach Ser2Net aktivieren und starten:
<source lang=bash>
<syntaxhighlight lang=bash>
chmod +x /etc/init.d/ser2net
chmod +x /etc/init.d/ser2net
/etc/init.d/ser2net enable
/etc/init.d/ser2net enable
/etc/init.d/ser2net start
/etc/init.d/ser2net start
</source>
</syntaxhighlight>


==== FHEM beim Systemstart ====
==== FHEM beim Systemstart ====
Nun noch die Konfiguration für fhem selbst
Nun noch die Konfiguration für fhem selbst
<source lang=bash>
<syntaxhighlight lang=bash>
#!/bin/sh /etc/rc.common
#!/bin/sh /etc/rc.common
# FHEM Init Script
# FHEM Init Script
Zeile 291: Zeile 291:
     echo &quot;shutdown&quot; | nc localhost 7072
     echo &quot;shutdown&quot; | nc localhost 7072
}
}
</source>
</syntaxhighlight>
Und auch hier aktivieren:
Und auch hier aktivieren:
<source lang=bash>
<syntaxhighlight lang=bash>
chmod +x /etc/init.d/fhem
chmod +x /etc/init.d/fhem
/etc/init.d/fhem enable
/etc/init.d/fhem enable
/etc/init.d/fhem start
/etc/init.d/fhem start
</source>
</syntaxhighlight>


==== Logfiles nicht auf USB-Stick ====
==== Logfiles nicht auf USB-Stick ====
Zeile 314: Zeile 314:
Ab jetzt sollte über den SSH-Dienst mit dem eben eingestellten Passwort gearbeitet werden.
Ab jetzt sollte über den SSH-Dienst mit dem eben eingestellten Passwort gearbeitet werden.
Mittels <code>vi</code> kann die LAN-IP-Adresse in der Datei <code>/etc/config/network</code> angepasst werden.
Mittels <code>vi</code> kann die LAN-IP-Adresse in der Datei <code>/etc/config/network</code> angepasst werden.
<source lang=text>
<syntaxhighlight lang=text>
config interface 'lan'
config interface 'lan'
...
...
Zeile 322: Zeile 322:
       option dns '192.168.178.1'
       option dns '192.168.178.1'
...
...
</source>
</syntaxhighlight>


Die Konfiguration wird mit dem Aufruf von <code>/etc/init.d/network restart</code> übernommen.
Die Konfiguration wird mit dem Aufruf von <code>/etc/init.d/network restart</code> übernommen.


Zeitzone in der Datei <code>/etc/config/system</code> einstellen:
Zeitzone in der Datei <code>/etc/config/system</code> einstellen:
<source lang=text>
<syntaxhighlight lang=text>
config system
config system
...
...
         option timezone 'CET-1CEST,M3.5.0,M10.5.0/3'
         option timezone 'CET-1CEST,M3.5.0,M10.5.0/3'
...
...
</source>
</syntaxhighlight>


=== PERL installieren ===
=== PERL installieren ===


Perl kann wie folgt eingerichtet werden. Je nach verwendetet FHEM-Module müssen weitere PERL-Pakete installiert werden. Für MAX_LAN, HM-CFG-LAN und ECMD reicht die folgende Auswahl:
Perl kann wie folgt eingerichtet werden. Je nach verwendetet FHEM-Module müssen weitere PERL-Pakete installiert werden. Für MAX_LAN, HM-CFG-LAN und ECMD reicht die folgende Auswahl:
<source lang=bash>
<syntaxhighlight lang=bash>
opkg update
opkg update
opkg install perl perl-html-parser perl-html-tagset perl-uri perl-www perlbase-autoloader perlbase-config \
opkg install perl perl-html-parser perl-html-tagset perl-uri perl-www perlbase-autoloader perlbase-config \
Zeile 343: Zeile 343:
perlbase-file perlbase-integer perlbase-io perlbase-math perlbase-mime perlbase-posix perlbase-selectsaver \
perlbase-file perlbase-integer perlbase-io perlbase-math perlbase-mime perlbase-posix perlbase-selectsaver \
perlbase-socket perlbase-symbol perlbase-tie perlbase-time perlbase-timelocal perlbase-xsloader
perlbase-socket perlbase-symbol perlbase-tie perlbase-time perlbase-timelocal perlbase-xsloader
</source>
</syntaxhighlight>


=== Einbinden der Partitionen per UUID ===
=== Einbinden der Partitionen per UUID ===


Für die Verwendung eines USB-Sticks müssen weitere Pakete installiert werden:
Für die Verwendung eines USB-Sticks müssen weitere Pakete installiert werden:
<source lang=bash>
<syntaxhighlight lang=bash>
opkg update
opkg update
opkg install kmod-usb-storage block-mount kmod-fs-ext4
opkg install kmod-usb-storage block-mount kmod-fs-ext4
</source>
</syntaxhighlight>


Der USB-Stick benötigt eine Datenpartition, optional kann eine zusätzliche SWAP-Partition eingerichtet werden.
Der USB-Stick benötigt eine Datenpartition, optional kann eine zusätzliche SWAP-Partition eingerichtet werden.
Zeile 357: Zeile 357:


Erstellen eines Verzeichnisses für den FHEM-Daten-Stick:
Erstellen eines Verzeichnisses für den FHEM-Daten-Stick:
<source lang=bash>
<syntaxhighlight lang=bash>
mkdir /mnt/opt
mkdir /mnt/opt
</source>
</syntaxhighlight>


Mittels des Befehls <code>block</code> kann eine brauchbare fstab-Konfiguration erstellt werden.
Mittels des Befehls <code>block</code> kann eine brauchbare fstab-Konfiguration erstellt werden.
Zeile 365: Zeile 365:
So ist es beim Betrieb von mehreren Datenspeichern unerheblich, in welcher Reihenfolge diese eingebunden werden.
So ist es beim Betrieb von mehreren Datenspeichern unerheblich, in welcher Reihenfolge diese eingebunden werden.
Dies kann etwas Ärger ersparen.
Dies kann etwas Ärger ersparen.
<source lang=bash>
<syntaxhighlight lang=bash>
block detect > /etc/config/fstab
block detect > /etc/config/fstab
</source>
</syntaxhighlight>


Die Konfigurationsdatei <code>/etc/config/fstab</code> muss angepasst werden.
Die Konfigurationsdatei <code>/etc/config/fstab</code> muss angepasst werden.
Zunächst sind die Mount-Punkte nicht aktiviert und das Verzeichnis für die Datenpartition muss noch angepasst werden.
Zunächst sind die Mount-Punkte nicht aktiviert und das Verzeichnis für die Datenpartition muss noch angepasst werden.
Die Option <code>uuid</code> muss unverändert bleiben.  
Die Option <code>uuid</code> muss unverändert bleiben.  
<source lang=bash>
<syntaxhighlight lang=bash>
vi /etc/config/fstab
vi /etc/config/fstab
</source>
</syntaxhighlight>
Darin
Darin
<source lang=text>
<syntaxhighlight lang=text>
config 'global'
config 'global'
         ...
         ...
Zeile 386: Zeile 386:
         option  uuid    '...'
         option  uuid    '...'
         option  enabled '1'
         option  enabled '1'
</source>
</syntaxhighlight>


Über einen Neustart oder <code>/sbin/block mount</code> werden die Partitionen eingebunden.
Über einen Neustart oder <code>/sbin/block mount</code> werden die Partitionen eingebunden.
Zeile 395: Zeile 395:
Die [http://fhem.de/fhem.html#Download aktuellste, stabile Version] herunter laden.
Die [http://fhem.de/fhem.html#Download aktuellste, stabile Version] herunter laden.
Die Version ''X.Y'' in den folgenden Befehlen bitte entsprechend anpassen:
Die Version ''X.Y'' in den folgenden Befehlen bitte entsprechend anpassen:
<source lang=bash>
<syntaxhighlight lang=bash>
cd /mnt/opt/
cd /mnt/opt/
wget http://fhem.de/fhem-X.Y.tar.gz
wget http://fhem.de/fhem-X.Y.tar.gz
Zeile 402: Zeile 402:
tar xfz fhem-X.Y.tar.gz
tar xfz fhem-X.Y.tar.gz
mv fhem-X.Y fhem
mv fhem-X.Y fhem
</source>
</syntaxhighlight>


=== Startskript anlegen ===
=== Startskript anlegen ===


<source lang=bash>
<syntaxhighlight lang=bash>
touch /etc/init.d/fhem
touch /etc/init.d/fhem
chmod +x  /etc/init.d/fhem
chmod +x  /etc/init.d/fhem
vi /etc/init.d/fhem
vi /etc/init.d/fhem
</source>
</syntaxhighlight>
Darin
Darin
<source lang=bash>
<syntaxhighlight lang=bash>
#!/bin/sh /etc/rc.common
#!/bin/sh /etc/rc.common
# FHEM Init Script
# FHEM Init Script
Zeile 438: Zeile 438:
   /mnt/opt/fhem/fhem.pl /mnt/opt/fhem/fhem.cfg
   /mnt/opt/fhem/fhem.pl /mnt/opt/fhem/fhem.cfg
}
}
</source>
</syntaxhighlight>


Init.d-Script aktivieren:
Init.d-Script aktivieren:
<source lang=bash>
<syntaxhighlight lang=bash>
/etc/init.d/fhem start
/etc/init.d/fhem start
/etc/init.d/fhem enable
/etc/init.d/fhem enable
</source>
</syntaxhighlight>


Ab jetzt sollte FHEM bei jedem Bootvorgang automatisch gestartet werden.
Ab jetzt sollte FHEM bei jedem Bootvorgang automatisch gestartet werden.

Aktuelle Version vom 26. Juli 2017, 20:00 Uhr

Einleitung

Hier sind zwei alternative Installationswege beschrieben.

  • Im ersten Kapitel wird beschrieben, wie Openwrt auf einem Gerät mit wenig(er) internem Speicher eingerichtet werden kann. Hier wird OpenWRT zuerst aus den Sourcen erstellt und ein Overlay für die PERL-Pakete eingerichtet.
  • Das zweite Kapitel beschreibt, wie OpenWRT mit PERL im internen Speicher (6MB) installiert wird. Es werden keine Pakete selbst gebaut, sondern die Nightly-Snapshots verwendet. FHEM wird auf einem USB-Stick eingerichtet.

Installation von FHEM incl. OpenWRT auf einem Router/Kleinstcomputer z.B. TP-LINK MR3020

Wer nicht unbedingt eine Fritz!Box braucht sondern einfach nur FHEM ohne laufenden PC betreiben will, kann auch OpenWRT auf einem Router nutzen, z.B. dem sehr günstigen (25 Euro März 2012) und stromsparenden (ca. 1 Watt) TP-LINK MR3020.

Bitte beachten: Es kann keine Garantie übernommen werden, dass der Router bei Befolgung dieser Anleitung "kaputt" geht, z.B. dadurch, dass er bei Fehlkonfiguration im Netz nicht mehr erreichbar ist. Der Umbau erfolgt auf eigene Gefahr.

Vorraussetzungen

  • Der Router (in diesem Howto ist der TP-LINK MR3020 verwendet worden, OpenWRT wird aber prinzipiell immer gleich aufgesetzt
  • Ein USB Stick, da die Flash-Speicher der Router zu klein sind
  • optional ein passiver USB-Hub (wenn der Router nur einen USB Port hat und ein CUL Stick betrieben werden soll)
  • Ein Linux-PC zum Erstellen des Images. Dies kann auch eine virtuelle Maschine sein. Der Autor hat Ubuntu 10.11 verwendet.

Vorbereiten des USB-Sticks

Auf einem USB Stick müssen zwei Partitionen angelegt werden, eine als Auslagerungsspeicher für den RAM und eine für das Dateisystem auf dem später auch Perl und FHEM installiert werden. Das geht am besten mit dem Tool fdisk auf dem vorbereiteten Linux-PC. Dazu den Stick anstöpseln und per Aufruf von fdisk -l die Lister der gefundenen "Festplatten" anzeigen lassen. Eine davon ist der USB-Stick, z.B. an seiner Größe zu erkennen (500Mb reichen locker aus). In der Ausgabe z.B. nach einer Zeile suchen, die sinngemäß so aussieht: Disk /dev/sdc: 484 MB, 484442112 bytes. In diesem Fall ist der USB-Stick das Gerät "/dev/sdc".

Daraufhin kann fdisk für das Gerät aufgerufen werden. Detaillierte ANleitungen für fdisk finden sich im Internet. Vereinfacht ist folgender Vorgang auszuführen (alle Daten gehen auf dem Stick verloren!).

fdisk /dev/sdc
o
n
p
1
1
+64M
n
p
2 (drei mal Enter drücken)
t
1
82
w

Danach ist der Stick partitioniert. Ein erneuter Aufruf von fdisk -l sollte ungefähr folgendes ERgebnis liefern:

Disk /dev/sdc: 484 MB, 484442112 bytes
2 heads, 63 sectors/track, 7509 cylinders
Units = cylinders of 126 * 512 = 64512 bytes
Disk identifier: 0x8c5e341e
  Device Boot   Start     End   Blocks  Id System
/dev/sdc1        1     993    62527+ 82 Linux swap / Solaris
/dev/sdc2       994    7509   410508  83 Linux

Jetzt müssen die Partitionen noch formatiert werden. Vorsicht: Nur hier heisst der Stick /dev/sdc. Er kann auch anders heissen! Wenn ihr die falschen Namen verwendet, könntet ihr eure Festplatte löschen! /dev/sdc1 ist durch /dev/<euer-sdx>1 zu ersetzen

mkswap /dev/sdc1
mkfs.ext4 /dev/sdc2
sync

Der Stick ist nun fertig vorbereitet und wird im Linux-PC nicht mehr benötigt. Er kann jetzt in den Router

Bauen des OpenWRT-Images

Um OpenWRT zu bauen, müssen die entsprechenden Werkzeuge auf dem Linux-PC installiert sein. Unter Ubuntu geht das so:

sudo apt-get -y install build-essential libncurses5-dev zlib-dev libssl-dev git-core

OpenWRT kann am besten von GitHub ausgecheckt werden.

git clone git://github.com/openwrt/openwrt.git

Das Auschecken dauert eine Weile, aber das ist noch gar nichts, das Bauen dauert noch viel länger. Sobald alles runtergeladen ist, wird in das Verzeichnis gewechselt und die Konfiguration vorgenommen

cd openwrt
make menuconfig

Für die Konfiguration muss die Architektur des Routers bekannt sein. Diese kann auf der OpenWRT-Seite nachgeschlagen werden. der TP-LINK MR3020 hat eine ar71xx-Architektur.

Als erstes also die Architektur auswählen (Hier: ar71xxx/ar91xxx) Zweitens kann beim Target-Profile meinst genau der Router ausgewählt werden (Notfalls auf der OpenWRT-Seite nachlesen)

Optional kann nun unter Image-Configuration bereits eine Netzwerkkonfiguration eingestellt werden, die der Router dann nach seinem Hochfahren hat. Wenn der Router in ein bestehendes Netz mit bestehenden DHCP-Server und Adressraum eingebunden wird, ist das sinnvoll. Wer das hat, weiss auch, was hier einzustellen ist. Standardmäßig ist die Adresse 192.168.1.1 vorgegeben. Die Konfiguration kann auch später jederzeit geändert werden.

Nun zu den Kernel-Modules. Hier sollte folgendes aktiviert werden (Einiges ist ggf. nicht nötig, aber so geht es). Die Einträge müssen mit "*" und nicht mit "M" selektiert sein, sonst kommen sie nicht ins Image.

  • Block-Devices
    • kmod-ide-core
    • kmod-ide-generic
    • kmod-loop (kann man immer mal brauchen)
    • kmod-scsi-generic
  • Filesystems
    • kmod-fs-ext4 (davon wollen wir später vom USB-Stick booten)
  • USB-Support
    • kmod-usb-acm (für CUL)
    • kmod-usb-hid
    • kmod-usb-ohci
    • kmod-usb-serial
    • kmod-usb-serial-ftdi
    • kmod-usb-storage-extras
    • kmod-usb-uhci
    • kmod-usb2

Unter Utilities noch folgendes aktivieren

  • Filesystem
    • e2fsprogs
  • disc
    • fdisk (für Analysezwecke sinnvoll)
    • swap-utils

Nun kann - in aller Ruhe - alles gebaut werden durch Eingabe von

make

Vorbereiten des Routers

Das ganze kann bis zu mehrere Stunden laufen. Nun ist Zeit, den Router ins Netzwerk einzubinden. Wie genau, hängt von der persönlichen Konstellation ab. Der TP-Link MR3020 hat standardmäßig die IP-Adresse 192.168.0.254. Viele andere Router haben z.B. 192.168.0.1. Ich empfehle, das Update auf jeden Fall nicht über WLAN sondern ein Netzwerkkabel zu machen. Die meisten Router haben einen aktivierten DHCP-Server. Ein angestöpselter Windows-PC bekommt dann von ihm eine IP-Adresse zugewiesen. Beim MR3020 kann dann die Weboberfläche über http://192.168.0.254 erreicht werden. (User/Passwort: admin/admin)

Installation von OpenWRT auf dem Router

In der Weboberfläche des Routers gibt es irgendwo einen Menüpunkt zum Firmware-Upgrade. Beim MR3020 erreichbar unter System Tools / Firmware Upgrade. Sobald das Bauen von OpenWRT fertig ist, liegt das Image im Unterordner bin/<architektur>/. Es sollte das Image genommen werden, was den Namen des Routers sowie "squashfs" sowie "factory" im Dateinamen enthält. Dieses muss jetzt im Webinterface wie beschrieben ausgewählt werden und hochgeladen werden. Alle Bestätigungsmeldungen und "Wollen-Sie-Das-auch-Wirklich"-Fragen natürlich bestätigen.

Nach einer Weile sollte dann der Router unter 192.168.1.1 anpingbar sein (von Linux aus: ping 192.168.1.1) bzw. unter der in der Image Configuration eingestellten IP. Wenn das nicht geht, kann man den Router auch ein 2. mal starten, da sollte man dann aber nach dem Flashen mal 10 Minuten Geduld haben (also Stecker raus/rein). Auf keinen Fall zu früh machen, dann könnte es sein, dass er gar nicht mehr hochfährt!

Zunächst muss man sich nun per telnet verbinden.

telnet 192.168.1.1

Nun ist man schon im OpenWRT eingeloggt. Das erste und einzige, was in diesem Login nun gemacht wird, ist, per

passwd

ein Passwort zu setzen. Danach kann man sich mit

exit

ausloggen. Ab jetzt ist telnet zur Sicherheit deaktiviert und man kann per ssh eine Verbindung herstellen, da ja jetzt ein Passwort gesetzt ist

ssh root@192.168.1.1

Für den weiteren Verlauf ist es notwendig, dass der Router Internetzugang hat. Dazu muss man ggf. von Hand in der Datei /etc/config/network die Netzwerkeinstellungen entsprechend anpassen.

vi /etc/config/network

Zur Bedienung von vi z.B. hier

Wichtig ist die IP-Adresse, die Netzmaske, das Gateway und der DNS-Server. Bitte genau auf Tippfehler achten. Bei einer fehlenden Konfiguration ist der Router nicht mehr erreichbar. Nach abspeichern kann die neue Konfiguration aktiviert werden

/etc/init.d/network restart

Falls sich auch die IP-Adresse geändert hat, mit ssh wie oben neu anmelden. Als nächstes soll der USB-Stick eingebunden werden, dazu sind einige Pakete zu installieren. OpenWRT hat einen eingebauten Paketmanager zur Nachinstallation von Software direkt aus dem Netz. Zunächst wird nur das installiert, was in den internen Speicher des Routers muss. Das Root-Dateisystem soll anschließend durch den USB-Stick erweitert werden, um dann dorthin die meiste Software zu installieren. Viele Details hierzu finden sich hier

opkg update
opkg install block-mount

Bei einem Aufruf von

fdisk -l

sollte der an dem Router angeschlossene Stick bereits zu sehen sein (analog zu oben). Hiermit lässt sich dann auch rausfinden, wie das Gerät auf dem Router heisst. In den meisten Fällen dürfte dies /dev/sda sein. In diesem Fall können wir nun das Dateisystem einbinden und dann die Dateien aus dem internen Speicher dorthin kopieren.

mkdir /mnt/sda2
mount /dev/sda2 /mnt/sda2
tar -C /overlay -cvf - . | tar -C /mnt/sda2 -xf -

Nun kann auch schon die Konfiguration so umgestellt werden, dass beim nächsten Neustart der USB-Stick mit ins Root-Filesystem eingebunden wird. Dazu ist die Konfigurationsdatei /etc/config/fstab zu editieren.

vi /etc/config/fstab

Diese sollte danach ungefähr so aussehen, wobei das von Router zu Router abweichen kann. Der automatische Block für "home" kann bearbeitet werden und der Spap-Block ebenfalls auf (hier) /dev/sda1 angepasst werden

config global automount
   option from_fstab 1
   option anon_mount 1
config global autoswap
   option from_fstab 1
   option anon_swap 1
config mount
   option target  /overlay
   option device  /dev/sda2
   option fstype  ext4
   option options rw,sync
   option enabled 1
   option enabled_fsck 1
config swap
   option device  /dev/sda1
   option enabled 1

Nun kann die Konfiguration aktiviert und die Box mit eingestecktem Stick neu gestartet werden

/etc/init.d/fstab enable
reboot

Nun sollte überprüft werden, ob der Stick richtig eingebunden ist

df -h

Die Ausgabe sollte sinngemäß folgende Zeilen enthalten

/dev/sda2        397.7M   19.8M  357.9M  5% /overlay
overlayfs:/overlay   397.7M   19.8M  357.9M  5%

Ist dies nicht der Fall, kann auf der OpenWRT Seite nach Troubleshooting-Möglichkeiten gesucht werden und dann hier fortgesetzt werden. Nachdem nun der Stick erfolgreiche eingebunden werden, können die ganzen Pakete installiert werden, die zum Betrieb von FHEM notwendig sind. Da dies eine Vielzahl der perlbase-Pakete ist, sind hier schlichtweg alle verfügbaren perl-Pakete installiert worden. Ebenfalls einige andere nützliche Werkzeuge. Speichermäßig ist das auf dem USB-Stick nicht entscheidend.

opkg update
opkg install usbutils luci ntpclient uhttpd perl perl-compress-bzip2 perl-dbi perl-html-parser perl-html-tagset perl-html-tree perl-lockfile-simple \
perl-net-telnet perl-uri perl-www perl-www-curl perl-www-mechanize perlbase-abbrev perlbase-anydbm-file perlbase-archive perlbase-assert perlbase-attribute \
perlbase-attributes perlbase-attrs perlbase-autoloader perlbase-autosplit perlbase-autouse perlbase-b perlbase-base perlbase-benchmark perlbase-bigfloat \
perlbase-bigint perlbase-bignum perlbase-bigrat perlbase-blib perlbase-bytes perlbase-cacheout perlbase-cgi perlbase-charnames perlbase-class \
perlbase-complete perlbase-compress perlbase-config perlbase-cpan perlbase-cpanplus perlbase-ctime perlbase-cwd perlbase-data perlbase-db \
perlbase-db-file perlbase-dbm-filter perlbase-devel perlbase-diagnostics perlbase-digest perlbase-dirhandle perlbase-dotsh perlbase-dumpvalue \
perlbase-dumpvar perlbase-dynaloader perlbase-encode perlbase-encoding perlbase-english perlbase-env perlbase-errno perlbase-essential perlbase-exceptions \
perlbase-extutils perlbase-fastcwd perlbase-fatal perlbase-fcntl perlbase-feature perlbase-fields perlbase-file perlbase-filecache perlbase-filehandle \
perlbase-filetest perlbase-filter perlbase-find perlbase-findbin perlbase-finddepth perlbase-flush perlbase-gdbm-file perlbase-getcwd perlbase-getopt \
perlbase-getoptpl perlbase-hash perlbase-hostname perlbase-i18n perlbase-if perlbase-importenv perlbase-integer perlbase-io perlbase-ipc perlbase-less \
perlbase-list perlbase-locale perlbase-log perlbase-look perlbase-math perlbase-memoize perlbase-mime perlbase-module perlbase-mro perlbase-net \
perlbase-next perlbase-o perlbase-object perlbase-opcode perlbase-open perlbase-ops perlbase-package perlbase-params perlbase-perl5db perlbase-perlio \
perlbase-pod perlbase-posix perlbase-pwd perlbase-re perlbase-safe perlbase-scalar perlbase-sdbm-file perlbase-search perlbase-selectsaver \
perlbase-selfloader perlbase-shell perlbase-shellwords perlbase-sigtrap perlbase-socket perlbase-sort perlbase-stat perlbase-storable perlbase-switch \
perlbase-symbol perlbase-sys perlbase-syslog perlbase-tainted perlbase-term perlbase-termcap perlbase-test perlbase-text perlbase-thread perlbase-threads \
perlbase-tie perlbase-time perlbase-unicode perlbase-unicore perlbase-user perlbase-xsloader

Das Webinterface "Luci" ist mitinstalliert worden und bietet komfortable Einstellmöglichkeiten für den Router allgemein. Nach einem

/etc/init.d/uhttpd enable
/etc/init.d/uhttpd start

ist es unter http://192.168.1.1/ bzw. der entsprechenden Router-IP erreichbar. Wichtig ist es ggf. den DHCP-Server zu deaktivieren. Die meisten Router können auch als WLAN-Clients konfiguriert werden, sie brauchen also nicht zwangsweise ein Netzwerkkabel. All dies geht über die Weboberfläche. Nun kann FHEM auf den Router/Stick kopiert werden. In diesem Beispiel benutzen wir das SVN-Repository

opkg install subversion-client make libelf
mkdir /usr/src
cd /usr/src
svn co https://svn.fhem.de/fhem/trunk/fhem
cd fhem
make install-pgm2

Die Bearbeitung der /etc/fhem.cfg ist nun so durchzuführen, wie bei jeder anderen FHEM-Installation auch.

CUL

Wenn ein CUL am Router verwendet werden soll, dann geht dies über den Umweg ser2net, da das CPAN Modul Device::Serial in OpenWRT nicht standardmäßig zur Verfügung steht.

opkg install ser2net
vi /etc/ser2net.conf

In der Datei kann alles gelöscht werden und dann genau diese Zeile eingefügt werden:

27073:raw:300:/dev/ttyACM0:115200 NONE 1STOPBIT 7DATABITS

In der fhem.cfg ist die Definition des CUL-Sticks dann folgendermaßen:

define MyCUL CUL 127.0.0.1:27073 3333

Wenn man CUL doch per Device::Serial ansprechen oder andere FHEM Module verwenden will, die auf Device::Serial angewiesen sind, kann man das entsprechende OpenWRT Paket auch selber erstellen. Hinweise dazu gibt es hier.

Nun muss nur noch der Autostart von ser2net und fhem eingebaut werden und die integrierte, stromsparende FHEM-Kiste ist fertig.

vi /etc/init.d/ser2net

mit folgendem Inhalt

#!/bin/sh /etc/rc.common
# Ser2Net Init Script
START=10
STOP=15
start() {
    ser2net
}
stop(){
    killall ser2net
}

Danach Ser2Net aktivieren und starten:

chmod +x /etc/init.d/ser2net
/etc/init.d/ser2net enable
/etc/init.d/ser2net start

FHEM beim Systemstart

Nun noch die Konfiguration für fhem selbst

#!/bin/sh /etc/rc.common
# FHEM Init Script
START=11
STOP=15
start() {
    /usr/bin/fhem.pl /etc/fhem.cfg
}
stop(){
    echo &quot;shutdown&quot; | nc localhost 7072
}

Und auch hier aktivieren:

chmod +x /etc/init.d/fhem
/etc/init.d/fhem enable
/etc/init.d/fhem start

Logfiles nicht auf USB-Stick

Da das ständige Schreiben 1. langsam und 2. den meisten USB-Sticks nicht gut tut, sollten die Logfiles ins RAM geschrieben werden, also ein Pfad unterhalb von /tmp. Der Speicher ist allerdings begrenzt. Je nach persönlichen Anforderungen muss dann regelmäßig das Log aus dem Speicher gelöscht oder archiviert werden. Z.b. wöchentlich auf den USB Stick oder auf Netzlaufwerke etc. Dies ist mit dem FileLog von alleine möglich (siehe [1]).


Alternative Installation aus den Kompilierten Quellen bei einem Speicher größer 6MB

Zunächst wird OpenWRT auf den Router installiert. Auf die Installation des WEB-Interfaces „luci“ kann verzichtet werden.

Netzwerk einrichten

Der erste Login erfolgt mit telnet (nicht SSH) auf die IP 192.168.1.1 ohne Passwort. Als erstes sollte mit dem Befehl passwd ein Passwort eingestellt werden. Sobald das geschehen ist, wird der Telnet-Dienst abgestellt. Ab jetzt sollte über den SSH-Dienst mit dem eben eingestellten Passwort gearbeitet werden. Mittels vi kann die LAN-IP-Adresse in der Datei /etc/config/network angepasst werden.

config interface 'lan'
...
      option ipaddr '192.168.178.4'
      option netmask '255.255.255.0'
      option gateway '192.168.178.1'
      option dns '192.168.178.1'
...

Die Konfiguration wird mit dem Aufruf von /etc/init.d/network restart übernommen.

Zeitzone in der Datei /etc/config/system einstellen:

config system
...
        option timezone 'CET-1CEST,M3.5.0,M10.5.0/3'
...

PERL installieren

Perl kann wie folgt eingerichtet werden. Je nach verwendetet FHEM-Module müssen weitere PERL-Pakete installiert werden. Für MAX_LAN, HM-CFG-LAN und ECMD reicht die folgende Auswahl:

opkg update
opkg install perl perl-html-parser perl-html-tagset perl-uri perl-www perlbase-autoloader perlbase-config \
perlbase-ctime perlbase-digest perlbase-dynaloader perlbase-errno perlbase-essential perlbase-fcntl \
perlbase-file perlbase-integer perlbase-io perlbase-math perlbase-mime perlbase-posix perlbase-selectsaver \
perlbase-socket perlbase-symbol perlbase-tie perlbase-time perlbase-timelocal perlbase-xsloader

Einbinden der Partitionen per UUID

Für die Verwendung eines USB-Sticks müssen weitere Pakete installiert werden:

opkg update
opkg install kmod-usb-storage block-mount kmod-fs-ext4

Der USB-Stick benötigt eine Datenpartition, optional kann eine zusätzliche SWAP-Partition eingerichtet werden. Hierfür kann der Abschnitt "Vorbereiten des USB-Sticks" aus dem vorherigen Kapitel verwendet werden.

Erstellen eines Verzeichnisses für den FHEM-Daten-Stick:

mkdir /mnt/opt

Mittels des Befehls block kann eine brauchbare fstab-Konfiguration erstellt werden. An dieser Stelle wird mit den eindeutigen UUIDs gearbeitet. So ist es beim Betrieb von mehreren Datenspeichern unerheblich, in welcher Reihenfolge diese eingebunden werden. Dies kann etwas Ärger ersparen.

block detect > /etc/config/fstab

Die Konfigurationsdatei /etc/config/fstab muss angepasst werden. Zunächst sind die Mount-Punkte nicht aktiviert und das Verzeichnis für die Datenpartition muss noch angepasst werden. Die Option uuid muss unverändert bleiben.

vi /etc/config/fstab

Darin

config 'global'
        ...
config 'mount'
        option  target  '/mnt/opt'
        option  uuid    '...'
        option  enabled '1'
config 'swap'
        option  uuid    '...'
        option  enabled '1'

Über einen Neustart oder /sbin/block mount werden die Partitionen eingebunden.

Installation von FHEM

Die Installation von FHEM ist an vielen Stellen sehr gut beschrieben. Hier nur die Quick&Dirty Variante. Die aktuellste, stabile Version herunter laden. Die Version X.Y in den folgenden Befehlen bitte entsprechend anpassen:

cd /mnt/opt/
wget http://fhem.de/fhem-X.Y.tar.gz
opkg update
opkg install tar
tar xfz fhem-X.Y.tar.gz
mv fhem-X.Y fhem

Startskript anlegen

touch /etc/init.d/fhem
chmod +x  /etc/init.d/fhem
vi /etc/init.d/fhem

Darin

#!/bin/sh /etc/rc.common
# FHEM Init Script

START=11
STOP=15

cd /mnt/opt/fhem/

start() {
  if [ -f /mnt/opt/fhem-X.Y/log ]; then
    mkdir -p /mnt/opt/fhem-X.Y/log
  fi
  /mnt/opt/fhem/fhem.pl /mnt/opt/fhem/fhem.cfg
}
stop(){
  echo "stopping fhem"
  /mnt/opt/fhem/fhem.pl 7072 "shutdown"
  #kill -TERM $(cat /var/run/fhem.pid)
}
restart(){
  echo "restarting"
  mnt/opt/fhem/fhem.pl 7072 "shutdown"
  #kill -TERM $(cat /var/run/fhem.pid)
  /mnt/opt/fhem/fhem.pl /mnt/opt/fhem/fhem.cfg
}

Init.d-Script aktivieren:

/etc/init.d/fhem start
/etc/init.d/fhem enable

Ab jetzt sollte FHEM bei jedem Bootvorgang automatisch gestartet werden.

Anmerkungen

  • Es sollte sichergestellt werden, dass keine Dateien außerhalb von /mnt/opt/ geschrieben werden.
  • Die PERL-Version ist leider etwas älter (Version 5.10) an einigen Stellen muss der FHEM-Code angepasst werden. Besonders wenn mit dem „~~“ Operator gearbeitet wurde.