Vor einiger Zeit habe ich darüber gebloggt, dass es relativ einfach ist, eine minimal-Installation auf dem Raspberry Pi via raspbian-ua-netinst durchzuführen. Ich habe dann noch etwas weitergelesen und – da ich sowieso clean auf Jessie upgraden wollte – habe mir Gedanken gemacht wie man das weiter automatisieren kann sodass FHEM schnell installiert wird. Werbung
So sieht nun meine Datei installer-config.txt
mittlerweile aus:
release=jessie hostname=fhemtest rootpw=fhemtest cmdline="dwc_otg.lpm_enable=0 console=tty1 elevator=deadline" packages=rpi-update,raspi-config,python-soappy,python-dateutil,python-pip,python-dev,build-essential,libtiff5-dev,zlib1g-dev,libfreetype6-dev,liblcms2-dev,libwebp-dev,tcl8.5-dev,tk8.5-dev,python-tk,libjpeg-dev,raspi-copies-and-fills,rng-tools,nano,lsof,unzip,psmisc,apt-utils,avrdude,avr-libc,fonts-freefont-ttf,minicom,dfu-programmer,libsys-statistics-linux-perl,libjson-perl,libio-socket-ssl-perl,libgd-text-perl,libimage-librsvg-perl,imagemagick,sqlite3,libdevice-serialport-perl,libwww-perl,libxml-simple-perl,libdbi-perl,libnet-smtp-ssl-perl,libdbd-mysql,libdbd-sqlite,libdbd-sqlite3,libdbd-sqlite2-perl,libdbd-sqlite3-perl,libtext-diff-perl,diffutils,dos2unix,findutils,nano,screen,subversion,strace,bluez,bluez-tools,libnet-telnet-perl,e2fsprogs,dosfstools,git,cmake,libusb-1.0-0-dev,build-essential,console-data,console-setup,keyboard-configuration,libjson-xs-perl,libsoap-lite-perl,libtime-hires-perl,libio-socket-multicast-perl ip_addr=dhcp ip_netmask=0.0.0.0 ip_broadcast=0.0.0.0 ip_gateway=0.0.0.0 ip_nameservers=
Die Pakete sind die gebräuchlichsten, welche von FHEM und diversen Modulen (u.a. yowsup, presence, configdb, dblog, rss) verwendet werden. Gleichzeitig wird der Bluetooth-Stack und diverse developer tools mit installiert. Ich habe hier noch die ip_* variablen aufgeführt, welche für die Vergabe einer statischen IP praktisch sind (dann ip_addr
auf static
setzen).
Mittels der Datei post-install.txt
kann man weitere Aktionen auslösen, welche nach der Erfolgen Image-Installation durchgeführt werden sollen. Bei mir sieht diese so aus:
## Definitions # Root Partition export D_ROOT=/rootfs # Enable Power LED echo "Start configuring power led" echo "echo 1 > /sys/class/leds/led1/brightness" >> /etc/rc.local echo "echo input | sudo tee /sys/class/leds/led1/trigger" >> /etc/rc.local echo "echo mmc0 | sudo tee /sys/class/leds/led0/trigger" >> /etc/rc.local echo "End configuring power led" # Configure Timezone echo "Start configuring timezone" echo "Europe/Berlin" > $D_ROOT/etc/timezone chroot $D_ROOT dpkg-reconfigure -f noninteractive tzdata echo "End configuring timezone" # Configure Keyboard layout echo "Europe/Berlin" > $D_ROOT/etc/timezone echo "# KEYBOARD CONFIGURATION FILE" >> $D_ROOT/etc/default/keyboard echo "# Consult the keyboard(5) manual page." >> $D_ROOT/etc/default/keyboard echo 'XKBMODEL="pc105"' >> $D_ROOT/etc/default/keyboard echo 'XKBLAYOUT="de"' >> $D_ROOT/etc/default/keyboard echo 'XKBVARIANT="nodeadkeys"' >> $D_ROOT/etc/default/keyboard echo 'XKBOPTIONS="terminate:ctrl_alt_bksp"' >> $D_ROOT/etc/default/keyboard echo 'BACKSPACE="guess"' >> $D_ROOT/etc/default/keyboard chroot $D_ROOT setupcon # Configure Locale echo "Start configuring locale" sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' $D_ROOT/etc/locale.gen && \ sed -i -e 's/# nb_NO.UTF-8 UTF-8/nb_NO.UTF-8 UTF-8/' $D_ROOT/etc/locale.gen && \ sed -i -e 's/# de_DE ISO-8859-1/de_DE ISO-8859-1/' $D_ROOT/etc/locale.gen && \ sed -i -e 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' $D_ROOT/etc/locale.gen && \ sed -i -e 's/# de_DE@euro ISO-8859-15/de_DE@euro ISO-8859-15/' $D_ROOT/etc/locale.gen && \ sed -i -e 's/# en_US ISO-8859-1/en_US ISO-8859-1/' $D_ROOT/etc/locale.gen && \ sed -i -e 's/# en_US.ISO-8859-15 ISO-8859-15/en_US.ISO-8859-15 ISO-8859-15/' $D_ROOT/etc/locale.gen && \ sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' $D_ROOT/etc/locale.gen && \ echo 'LANG=en_US.UTF-8'> $D_ROOT/etc/default/locale && \ chroot $D_ROOT dpkg-reconfigure --frontend=noninteractive locales && \ chroot $D_ROOT update-locale LANG=en_US.UTF-8 echo "End configuring locale" # Configure Swap echo "Start configuring swap" dd if=/dev/zero of=$D_ROOT/swap bs=1M count=512 echo "/swap none swap sw 0 0" >> $D_ROOT/etc/fstab echo "End configuring swap" # Configure Random Number generator echo "Start configuring Random Number generator" echo "bcm2708-rng" >> $D_ROOT/etc/modules echo "End configuring Random Number generator" # Configure inittab echo "Start configuring inittab" sed -i 's/\(^.*T0.*$\)/#\ \1/' $D_ROOT/etc/inittab echo "End configuring inittab" # Configure fhem echo "Start configuring fhem" chroot $D_ROOT useradd -G dialout -g staff -M -s /bin/bash fhem export F_FHEMFILENAME=fhem-5.6 mkdir -p $D_ROOT/opt/ && cd $D_ROOT/opt/ && wget http://fhem.de/$F_FHEMFILENAME.tar.gz && tar xzf $F_FHEMFILENAME.tar.gz && mv $F_FHEMFILENAME fhem && rm $F_FHEMFILENAME.tar.gz && chroot $D_ROOT "chown fhem:dialout -R /opt/fhem" echo "End configuring fhem" # Configure hmland echo "Start configuring hmland" mkdir -p $D_ROOT/opt/hmland chroot $D_ROOT "git clone git://git.zerfleddert.de/hmcfgusb /opt/hmland && cd /opt/hmland && make" echo "End configuring hmland"
Ganz am Ende klappt der chown auf das fhem verzeichnis und der git checkout noch nicht ganz wie es soll, diese muss man derzeit noch manuell nachziehen – muss ich mir mal ansehen wo es hakt 😉
So wie wendet man das nun an? Zunächst mal rate ich dazu eine etwas größere (Micro-)SD-Karte zu verwenden – ich fahre derzeit eine 64GB aber etwas kleiner tuts auch. Mit 4GB kam ich nicht zurecht, das war immer relativ knapp. Ich würde eher zu mindestens 8, besser 16GB tendieren.
- Neuestes Release von raspbian-ua-netinst holen
- (Micro-)SD-Karte in FAT32 formatieren und die heruntergeladenen Dateien darauf ablegen
- Die beiden Dateien
installer-config.txt
undpost-install.txt
auf der Karte ebenfalls anlegen und mit Inhalt füllen - (Micro-)SD-Karte in Raspberry
- Raspberry an Netzwerk anschließen
- Optional: Raspberry an Monitor anschließen um Fortschritt zu sehen
- Raspberry an Strom stecken
- ~20 Minuten warten
- SSH auf den gesetzten Hostname von oben (bei mir wars „fhem“) probieren. User: root & Passwort wie oben (bei mir wars fhemtest)
- Log /var/log/raspbian-ua-netinst.log ansehen und bei Bedarf verbleibende Kommandos nachziehen
- FHEM verwenden
Getestet wurde das ganze zuletzt am 18.06.2015 – sollte sich etwas verändert haben, so bitte ich um einen Kommentar
Hey Uli, danke für die Vorbereitung. Wie gewünscht hier ein aktuelles Feedback mit der 1.0.7. Ich weiß nicht welche der Meldungen relevant sind aber vielleicht kann ich ja etwas beisteuern:
* (fast?) alle Libaries schmeissen am Anfang ein Warning „ignoring pre dependency problem … is not installed“
* beim configurating packages fliegen ca. 10 „… rc.d operations denied by policy / denied execution of start
* gefolgt von einem delaying package configuration, since apt-utils is not installed / can not write log (ls /dev/pts mounted?)
* update-rc.d: warning: start and stop actions are no longer supported: falling back to defaults
* failed to create hard link…
Ich stoppe mal hier und bin gespannt auf dein Feedback 🙂
ciao Carlo
Ich habs gerade noch einmal ohne deine Scripte versucht und 90% die gleichen Fehler bekommen. Es scheint also am aktuellen netinst selbst zu liegen :(. Der Username wird übrigens nicht (mehr?) geändert und ist nach deinen pre und post Scripten „root“.
Hi Carlo,
nun die „Fehler“ müssten eigentlich so sein – hauptsache es klappt später dann. Denn wenn ein Paket heruntergeladen und installiert werden, so wird es ohne alle Abhängigkeiten (welche teils erst später installiert werden) draufgezogen. D.h. insgesamt wird die Installation konsistent werden, jedoch dauert das eine Weile. Das mit den Package configs & denied by policy ist daher auch nur ein Teil der einfach durch die Installationen bedingt ist – ohne alle Abhängigkeiten wäre ein Startversuch eh nicht erfolgreich.
Ich schau mir das nochmal mit den usernames an, das sieht mir tatsächlich nach einem Bug (aber vermutlich eher in meinen Scripten) aus. Hast du hinterher FHEM unter /opt/fhem und klappt ein start von FHEM?
Viele Grüße,
Uli
Ja FHEM war da aber nicht gestartet aber Erreichen konnte ich es trotzdem nicht. Da nicht einmal ein sudo ging, hab ich das ganze Jessie Paket neu geladen und versuche es damit heute nochmal manuell.
Nun gestartet werden sollte es auch gar nicht – die entsprechenden init-scripte sind nicht enthalten. Meine frage war eher dahingehend ob es generell da war und ob es beispielsweise via:
zu starten wäre.
Ich schau mir das die Tage mal in meiner Dev-Umgebung an.
1.0.7
leider funktioniert der „echo“ Befehl nicht…
Beispiel :
Klappt wunderbar, aber ab
überschriebt das „echo“ Skript sich selbst, so das in der Datei
/etc/default/keyboard
nur noch die letzte Zeile stehen bleibt:Ganzer verwendeter Code :
Danke für Lösung…
Hi Loox,
tatsache, das habe ich tatsächlich falsch übernommen. Ist nun gefixed!
Viele Grüße,
Uli
Hi Uli,
Danke für diese tolle Anleitung! Bin gerade dabei mein FHEM zu optimieren und da kommt mir eine schlanke Installation gerade recht.
Ich habe noch einen kleinen Fehler im obigen Code gefunden.
Nach „tk8.5-dev“ muss ein , (Komma) folgen. Bin durch Zufall drauf gestoßen, da bei der Installation „Filename too long“ ausgegeben wurde.
Dann habe ich noch einige Libraries, die u. U. von FHEM benötigt werden, wenn man Text2Speech nutzen will und einen SCC von Busware:
avahi-daemon,telnet,mplayer,mplayer-gui,alsa-base,alsa-utils,pulseaudio,mpg123,mp3wrap,libtime-hires-perl
Eine Frage habe ich auch noch:
Wie kann das Startscript von FHEM in /etc/init.d/fhem automatisch angelegt werden?
Viele Grüße
Dennis
Hi Dennis,
den Tippfehler (Komma) hatte ich nicht gesehen, danke! Ist nun korrigiert. Zudem habe ich die libtime-hires-perl mit aufgenommen. Die Text2Speech Geschichten habe ich nicht aufgenommen, da ich diese selbst nicht nutze, ich baue aber einen verweis mit ein.
Das Start-Script würde ich am einfachsten in „echo“ Befehle packen, dann muss man sich keinen Kopf machen. Ich habe bei mir einen etwas komplizierteren Aufbau mit einem Watchdog usw, was ich hier noch gar nicht abgebildet hatte. Guter Gedanke, den baue ich mal noch mit ein.
Viele Grüße,
Uli
Hallo Uli,
vielen Dank für die tolle Anleitung 🙂
Ich habe mit wheezy und jessie getestet und bekomme immer folgende Fehler in der raspbian-ua-netinst.log:
Verwendet habe ich die Version 1.0.7 des raspbian-ua-netinst
Gruß
Ulli
Diese drei Pakete (raspi-copies-and-fills,rpi-update,raspi-config) lassen sich m.E. nicht in der installer-config.txt sondern nur in der post-install.txt installieren.
Gruß Otto
Hi Uli,
danke für die Beschreibung. Die Installation funktioniert wunderbar, ich habe am Ende nur ein Problem.
Ich wollte FHEM aus dem repository installieren, und habe daher den Befehl eingefügt:
Leider ist in dem Logfile nur die Fehlermeldung, dass das Verzeichnis nicht existiert. Wird /etc/apt erst nach dem reboot erzeugt? Und könnte man nach dem Reboot noch Skripte automatisch laufen lassen?
Danke
PS: Ich weiss, dass der Artikel schon ein halbes Jahr alt ist, aber du bist ja noch aktiv 😉
Hi Edgar,
denke das musst du in der post-install.txt machen. So in etwa:
Hoffe das hilft dir weiter.
Viele Grüße,
Uli