Debian Jessie Minimal für eine unattended FHEM Installation auf dem Raspberry PI

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 und post-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

Veröffentlicht von

Uli

IT-Nerd und Admin

15 Gedanken zu „Debian Jessie Minimal für eine unattended FHEM Installation auf dem Raspberry PI“

  1. 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

    1. 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“.

    2. 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

      1. 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.

        1. 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:

          cd /opt/fhem/
          perl fhem.pl fhem.cfg

          zu starten wäre.

          Ich schau mir das die Tage mal in meiner Dev-Umgebung an.

  2. 1.0.7

    leider funktioniert der „echo“ Befehl nicht…
    Beispiel :

    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 Keyboard layout
    # Configure Keyboard layout
    echo "Europe/Berlin" > $D_ROOT/etc/timezone

    Klappt wunderbar, aber ab

    echo "# KEYBOARD CONFIGURATION FILE" >

    überschriebt das „echo“ Skript sich selbst, so das in der Datei /etc/default/keyboard nur noch die letzte Zeile stehen bleibt:

     "BACKSPACE="guess"

    Ganzer verwendeter Code :

     # 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 setup con

    Danke für Lösung…

  3. 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

    1. 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

  4. 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:

    W: Can't find package raspi-copies-and-fills for inclusion
    W: Can't find package rpi-update for inclusion
    W: Can't find package raspi-config for inclusion

    Verwendet habe ich die Version 1.0.7 des raspbian-ua-netinst

    Gruß
    Ulli

    1. 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

  5. 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:

    echo "deb https://debian.fhem.de/nightly ./" >>  /etc/apt/sources.list

    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 😉

    1. Hi Edgar,

      denke das musst du in der post-install.txt machen. So in etwa:

      echo "deb https://debian.fhem.de/nightly ./" >>  $D_ROOT/etc/apt/sources.list

      Hoffe das hilft dir weiter.

      Viele Grüße,
      Uli

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.