Hallo,
befeuert durch diese
ARM-Server: pro/kontra? Diskussion schreibe ich heute schon hier eine extrem wilde Anleitung, wie ihr auf einer beliebigen ARM-Plattform (genauer armhf!) ein "Communigate" aufsetzt. Die Anleitung ist nicht mehr als die Notizen die ich mir beim Zusammenfrickeln gemacht habe, daher keine Garantie auf Zufriedenheit & Erfolg.
Hinweis: Die Anleitung basiert in großen Teilen auf dem
Lexikon-Eintrag von
Lapheus zur Installation eines Communitygates auf x86-Hardware:
Communitygate - Sonstiges - Lexikon - KNX-User-Forum
Alle Credits, insbesondere für die Hinweise auf Config-Dateien und magische Aufrufe, gehen an ihn!
Vorraussetzung ist ein installiertes
Debian Squeeze armhf, z.B. gemäß
BeagleBoardDebian - eLinux.org.
DHCP / Hostname / AVAHI
Im Image von Robert Nelson fehlt ein dhcp-Client, der wird installiert. Evtl. muss man vorher mit ifconfig erstmal statisch eine IP zuweisen. Avahi brauchts, damit der Rechner im Netzwerk über DNS gefunden werden kann. Ich benenne meinen Rechner noch um - jedem Tierchen sein Pläsierchen...
Code:
apt-get install isc-dhcp-client avahi-daemon
# in /etc/hostname und /etc/hosts den hostnamen auf "omnigate"
sed 's/omap/omnigate/g' /etc/hostname
sed 's/omap/omnigate/g' /etc/hosts
Lokalisation & Zeit
Damit unser Omnigate auch weiß wie viel Uhr wir haben und alles in Deutsch anzeigt.
Code:
apt-get install locales ntpd
dpkg-reconfigure tzdata
HTTP-Server
Code:
apt-get remove apache2
apt-get install lighttpd
apt-get install php5-cgi php5
lighttp config-Datei gemäß Anleitung ändern und aktivieren
(portmap und fam werden nicht mitinstalliert) -> apt-get purge unnötig
Repos
BCUSDK- und
WG-Repo entsprechend Anleitung als "deb-src" eintragen und Keys generieren (
Communitygate - Sonstiges - Lexikon - KNX-User-Forum)
(Ansonsten sind beide Repos nutzlos da kein binary-armhf vorhanden)
Onewire
Das
WG hat etwas eigene Vorstellungen über Paketnamen, Pfade und Konfigurationsdateien, daher ist hier Party angesagt!
aus dem
Debian-Repo installieren:
Code:
apt-get install libfuse2 owfs-fuse owhttpd owserver
Interface konfigurieren in /etc/owfs.conf bei "server: FAKE [...]" "server: device =
i2c-3" (oder entsprechendes) hinschreiben (in meinem Fall ein DS2482S-800 8-fach BM an
I2C-3 über 5V-Levelshifter (TXS0102):
Code:
sed -i 's/server: FAKE.*/server: device = i2c-3/g' /etc/owfs.conf
Mountpoint für owfs (oder owfs-fuse in der
WG-Welt) erzeugen und in der Konfiguration aktivieren (wird das überhaupt benutzt? - egal)
Code:
mkdir /mnt/1wire
sed -i 's,#.*/mnt/1wire,/mnt/1wire,g' /etc/owfs.conf
sonstige Einstellungen für Server und Http-Daemon passen
Anpassung an
WG-Struktur:
in /etc/init.d/owserver und /etc/init.d/owhttpd jeweils $PIDDIR auf /var/run einkürzen (kein owfs-Unterverzeichnis)
Code:
sed -i 's,PIDDIR=/var/run/owfs,PIDDIR=/var/run,g' /etc/init.d/owserver
sed -i 's,PIDDIR=/var/run/owfs,PIDDIR=/var/run,g' /etc/init.d/owhttpd
Init-Scripts und Services umbenennen um es dem
WG recht zu machen - evtl. reicht es hier auch teilweise die
WG-Config im Webmin anzupassen - es sind allerdings auch zahlreiche Verweise hartcodiert!
Code:
mv /etc/init.d/owserver /etc/init.d/owfs-server
sed -i 's/Provides: owserver/Provides: owfs-server/g' /etc/init.d/owfs-server
update-rc.d owfs-server defaults
mv /etc/init.d/owhttpd /etc/init.d/owfs-httpd
sed -i 's/Provides: owhttpd/Provides: owfs-httpd/g' /etc/init.d/owfs-httpd
update-rc.d owfs-httpd defaults
Erzeugen eines init.d-Scripts für owfs ("owfs-fuse"), da dieses seltsamerweise nicht bei der Installation von owfs-fuse geschieht:
Code:
cp /etc/init.d/owfs-server /etc/init.d/owfs-fuse
sed -i 's/owserver/owfs/g' /etc/init.d/owfs-fuse
sed -i 's/Provides: owfs/Provides: owfs-fuse/g' /etc/init.d/owfs-httpd
sed -i 's,/usr/bin,/usr/lib/owfs,g' /etc/init.d/owfs-fuse
sed -i 's/TCP .erver/FUSE driver/g' /etc/init.d/owfs-fuse
update-rc.d owfs-fuse defaults
Erzeugen von zwei leeren Config-Dateien damit das
WG beim Starten keinen Herzkasper bekommt - kann evtl. später entfallen wenn man das Webmin-Plugin so patcht, dass immer die /etc/owfs.conf angezeigt wird:
Code:
touch /etc/default/owfs-server
touch /etc/default/owfs-httpd
RRDTOOL
Installation über
Debian-Repo
Code:
apt-get install rrdtool
EIBD
Installation über vorhandene debs:
Code:
scp . <user>@<remote-host>:/<bcusdk-debs-dir>/*.deb
dpkg -i libpthsem20_2.0.8_armhf.deb libeibclient0_0.0.5_armhf.deb eibd-clients_0.0.5_armhf.deb eibd-server_0.0.5_armhf.deb
Installation über Source - QUELLE: bcusdk-repo, NICHT wg-repo!
Code:
apt-get install debhelper autotools-dev python-dev tcl8.4-dev libperl-dev php5-cli php5-dev automake1.10 autoconf libtool swig libfuse-dev python-central python-support libusb-dev libfuse2 cdbs quilt
apt-get source pthsem bcusdk
pthsem
Man muss
debian/rules dem configure noch "--with-mctx-mth=sjlj --with-mctx-dsp=ssjlj --with-mctx-stk=sas" mitgeben, da die armhf-Platform in Kombination mit der glibc falsch verortet wird. Da könnte man nen schönen Patch schreiben...
cd pthsem-2.0.8
sed -i 's/--enable-compat/--enable-compat --with-mctx-mth=sjlj --with-mctx-dsp=ssjlj --with-mctx-stk=sas /g' debian/rules
dpkg-buildpackage -us -ur
cd ..
dpkg -i libpthsem20_2.0.8_armhf.deb libpthsem-dev.deb
|
bcusdk
Wir sparen uns auch noch den M68HC05-GCC zu bauen. Dadurch entfällt die Möglichkeit eigene
BCU-Programme zu kompilieren. Wer mag, kann den längeren Weg gehen:
cd bcusdk-0.0.5
apt-get install bison flex libxml2-dev gcj-jdk fastjar indent
|
Für folgendes sollte es einen Patch geben:
In
debian/rules muss dem configure noch "--enable-only-
eibd" hinzugefügt werden!
In
debian/control müssen händisch ein paar Anpassungen vorgenommen werden, damit wir um den m68hc05-gcc rumkommen. Zudem muss die Abhängigkeit zum "gcj" auf "gcj-jdk" geändert werden oder "deb-buildpackage" mit "-d" die Dependencies ignorieren:
- bei dependencies "m68hc05-gcc" entfernen und "gcj" nach "gcj-jdk" äern
- Package "bcusdk-build" komplett entfernen
- Verweis auf "bcusdk-build" in Package "bcusdk" entfernen
Durch den Einsatz von "-Werror=format-
security" kommt es zu einem Fehler wenn printf ohne Formatspecifier aufgerufen wird: In
eibd/examples/knxtool.c zeile 212 und 214 je "printf("%s", ...." fixen:
sed -i 's/printf (ag/printf ("%s", ag/g' eibd/examples/knxtool.c
dpkg-buildpackage -us -ur
cd ..
dpkg -i libeibclient0_0.0.5_armhf.deb eibd-clients_0.0.5_armhf.deb eibd-server_0.0.5_armhf.deb libeibclient-dev_0.0.5_armhf.deb
|
Default Config & Start-Scripte für den Eibd erstellen/installieren
in /etc/default/eibd folgendes eintragen (hier sollte später direkt der TP-UART rein - erstmal so um Fehlermeldungen zu vermeiden):
Dateien für Gruppenadressen anlegen
Entspricht komplett der x86-Anleitung:
Code:
mkdir /etc/wiregate
touch /etc/wiregate/eibga.conf
touch /etc/wiregate/eibga_mg.conf
touch /etc/wiregate/eibga_hg.conf
chmod 555 /etc/wiregate/eibga.conf
chmod 555 /etc/wiregate/eibga_hg.conf
chmod 555 /etc/wiregate/eibga_mg.conf
Monit (Watchdog)
Eingriff in /etc/default/monit nicht nötig, da schon START=yes
Code:
apt-get install monit
vi /etc/monit/monitrc
-> include /etc/monit/enable/*
weitere Pakete
Code:
apt-get install ntp beep psmisc python-ownet libownet-php libownet-perl libconfig-general-perl libmath-round-perl libmath-basecalc-perl libconfig-std-perl libproc-daemon-perl libproc-pid-file-perl liblog-log4perl-perl libhtml-parser-perl libxml-simple-perl unzip openvpn
Collectd
wird momentan nicht im
Debian-Repo für armhf vorgehalten (checkt das vorher mit apt-get install collectd!):
In src/netlink.c die zwei "rtnl_dump_filter" einkürzen - nur noch drei Argumente - die beiden NULL-Pointer entfernen (hier bin ich zu blöd um den sed über zwei Zeilen anzuwenden - sorry)
In
debian/rules "enable-all-plugins" entfernen (er nimmt dann nur die Plugins die funktionieren - scheinbar fehlt aber dem
WG nichts...)
Code:
dpkg-buildpackage -uc -us -d
cd ..
dpkg -i collectd-core_4.10.4-1_armhf.deb
dpkg -i collectd_4.10.4-1_armhf.deb
root-Zugang sichern
Ich mache das anders und patche das
wg-rootlock-Paket. Ansonsten sei auf die x86-Anleitung verwiesen. Momentan können wir eh nicht automatisch an Updates partizipieren und das Patchen hält das System sauberer.
Config Datei für Webmin-Plugin erzeugen
hier gibt es geringe Abweichungen zur x86-Anleitung - vergleiche OWFS-Teil:
Code:
mkdir /etc/webmin/wiregate
vi /etc/webmin/wiregate/config
------->
owfs_path=/usr/lib/owfs/owfs
owfs_pid_file=/var/run/owfs.pid
owfs_conf=/etc/owfs.conf
owfs_start_cmd=/etc/init.d/owfs-fuse start
owfs_stop_cmd=/etc/init.d/owfs-fuse stop
owfs_restart_cmd=/etc/init.d/owfs-fuse restart
owhttpd_path=/usr/bin/owhttpd
owhttpd_pid_file=/var/run/owhttpd.pid
owhttpd_conf=/etc/default/owfs-httpd
owhttpd_start_cmd=/etc/init.d/owfs-httpd start
owhttpd_stop_cmd=/etc/init.d/owfs-httpd stop
owhttpd_restart_cmd=/etc/init.d/owfs-httpd restart
owserver_path=/usr/bin/owserver
owserver_pid_file=/var/run/owserver.pid
owserver_conf=/etc/default/owfs-server
owserver_start_cmd=/etc/init.d/owfs-server start
owserver_stop_cmd=/etc/init.d/owfs-server stop
owserver_restart_cmd=/etc/init.d/owfs-server restart
eibd_path=/usr/bin/eibd
eibd_conf=/etc/default/eibd
pid_file=/var/run/eibd.pid
eibd_bcuaddrtab_resetcount=/var/log/eibd_bcuaddrtab_resetcount
start_cmd=/etc/init.d/eibd start
stop_cmd=/etc/init.d/eibd stop
restart_cmd=/etc/init.d/eibd restart
owsensors_conf=/etc/wiregate/owsensors.conf
read_sensors=1
<-------
WG Baseweb
xplhub
- im
WG-Package Binaries gegen armhf-Binaries austauschen - mittelfristig: eigenes deb oder
WG-source!
Code:
mkdir xplhub; cd xplhub
wget http://www.xpl4java.org/xPL4Linux/downloads/xPLLib.tgz
tar -xzvf xPLLib.tgz
cd xPLLib; make
cd examples; make; cd ../..
wget http://repo.wiregate.de/wiregate/poo...hub-1.31-6.deb
ar -x xplhub-1.31-6.deb
mkdir data; cd data
tar -xzvf ../data.tar.gz
cp ../xPLLib/examples/xPL_Hub usr/sbin/xplhub
cp ../xPLLib/examples/xPL_Hub_static usr/sbin/xplhub_static
tar -czvf ../data.tar.gz .
cd ..
mv xplhub-1.31-6.deb xplhub-1.31-6-armhf.deb
ar -r xplhub-1.31-6-armhf.deb data.tar.gz
dpkg -i xplhub-1.31-6-armhf.deb
libxpl_perl
# hier wäre es auch möglich von Sourcen zu bauen -
Debian Packages Maintained by Mark Hindess von Mark Hindess
- Verwendung einer geringfügig aktuelleren Version als im
WG-Repo
Webmin & Plugins
webmin
- sollte dauerhaft von webmin.org genommen werden
Abhängigkeiten installieren:
WG-Version des Webmin installieren (geht vielleicht auch anders - Achtung: Pfade sind eigensinnig gewählt!):
Seltsamerweise wird die /etc/webmin/miniserv.conf nicht angelegt:
Code:
cd /usr/share/webmin
./setup.sh
update-rc verschluckt sich massiv aufgrund fehlender Init-Infos in der /etc/init.d/webmin, also nach der !#-Zeile (shebang) einfügen:
Code:
### BEGIN INIT INFO
# Provides: webmin
# Required-Start: $local_fs $network $syslog
# Required-Stop: $local_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start webmin
# Description: Start webmin
### END INIT INFO
openvpn-Plugin
- von
WG installieren, dauerhaft sollte das von webmin.org kommen - kann auch über die Webmin-Oberfläche direkt installiert werden:
wiregate-Plugin
wiregated und abh. Pakete
Ich patche
wg-rootlock um das Ausschalten von ssh und des root-Zugangs zu verhindern
Einträge auskommentieren (oder löschen)
Code:
# update-rc.d -f ssh remove
# /etc/init.d/ssh stop
# update-rc.d -f linknx remove
# /etc/init.d/linknx stop
# apt-get -y remove linknx
# sed -i -e "s/^root\:x.*/root\:\*LK\*\:0\:\:\:\:\:\:\:\:/" /etc/webmin/miniserv.users
# sed -i -e "s/^eib-common/\# eib-common/g" /etc/modules
# sed -i -e "s/^eib-8250/\# eib-8250/g" /etc/modules
# sed -i -e "s/^eib-pei16/\# eib-pei16/g" /etc/modules
wieder Packen:
Code:
tar -czvf ../control.tar.gz . ; cd ../..
cp wg-rootlock-0.2.deb wg-rootlock-0.2-disarmed.deb
ar -r wg-rootlock-0.2-disarmed.deb wg-rootlock/control.tar.gz
Wir ignorieren die Abhängigkeit owfs-server, da das Paket nun owserver heißt:
Code:
dpkg -i --ignore-depends=owfs-server,wg-patch wg-rootlock-0.2-disarmed.deb wiregated-0.9-41.deb
dpkg -i wg-patch-0.0.29.deb
weitere Anpassungen
Analog zur x86-Anleitung in der /etc/monit/wg-base auskommentieren:
Code:
#check device rescue_fs with path /mnt/rescue_fs
#if space usage > 98% for 5 times within 15 cycles then alert
#if inode usage > 75% then alert
bei Bedarf ebenfalls eMail eintragen
Das ist alles super-umständlich! Vielleicht gibt es jemanden, der vor allem die Änderungen an den Dateien als Kommandozeilen-Patch schreiben kann? Sicher kann man einige Sachen einfacher machen, insbesondere wenn man fertige Pakete für
eibd/pthsem und collectd nimmt und auch Pakete wie xplhub und andere nicht patchen muss. ABER: So kommt jeder zum Ziel!
Grüße
Robert
P.S.: Viel feil ich vorerst nicht mehr daran, sondern werde mir erst einmal die oben angekündigte Hardware bauen: TP-UART (nach Möglichkeit v2) mit galvanische Trennung an einem nativen UART, der bereits vorhandene DS2482S-800 8-fach Busmaster und variable UARTs entweder als RS485 (für mein Hörmann Garagentor) oder als IR-Schnittstelle (für meine
Stromzähler).
P.P.S.: Bei Bedarf lade ich die erzeugten Pakete für
eibd und collectd auf meine Webseite. Das patchen der
WG-Pakete sollte aber wohl jeder selber machen.