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.

So sieht nun meine Datei installer-config.txt mittlerweile aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
## 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