RaspberryPi mit Freifunk

Nach langer Zeit nun einmal wieder etwas zu erzählen.
Dieses mal ist es wie man ein Freifunk-Image selbst baut und auf einem RaspberryPi der 1. Generation installiert.

Meine Komponenten sind momentan:

  • RPi Ver. B mit 256MB Ram
  • RaLink 2780 WLan-Stick

Nach langer Zeit nun einmal wieder etwas zu erzählen.

Meine Komponenten sind momentan:

  • RPi Ver. B mit 256MB Ram
  • RaLink 2780 WLan-Stick

diese werden im folgenden in einen Freifunk-Node verwandelt.

Die Vorbereitung

Leider gibt es für den RPi meist keine fertigen Builds, daher muss man hier leider alles selbst machen.

Bevor wir etwas machen können, müssen wir ein paar Abhängigkeiten installieren:
[shell]sudo apt-get install git subversion build-essential gawk unzip libncurses5-dev zlib1g-dev[/shell]

Danach können wir mit dem frisch installierten Git uns Gluon clonen.
[shell]git clone https://github.com/freifunk-gluon/gluon.git gluon[/shell]

Es ist möglich mit -b $RELEASE einen genauen Release clonen zu können, was ich allerdings nicht mache, da ich alles bleeding-edge haben möchte. (Dazu steht sehr sehr bald der 2015.2 release an)
Der nächste Schritt ist das Clonen der site.conf eurer Freifunk-Community.

[shell]
cd gluon
git clone https://github.com/FreifunkBremen/gluon-site-ffhb.git site
[/shell]

Nachdem wir unsere Site-Config heruntergeladen haben, können wir uns nun die Abhängigkeiten von Gluon herunterladen.
[shell]make update[/shell]
Dies wird nun je nach Internetverbindung etwas dauern …

Nachdem alle Abhängigkeiten heruntergeladen sind hier noch ein paar Anpassungen an der site von mir. Diese sind notwendig damit ich meinen WLan-Stick überhaupt nutzen kann und enthalten dazu noch ein paar kleine Debugging-Tools.
[shell]
diff –git a/site.mk b/site.mk
index 483fecd..b188c65 100644
— a/site.mk
+++ b/site.mk
@@ -23,11 +23,17 @@ GLUON_SITE_PACKAGES := \
gluon-wan-dnsmasq-static \
iputils-ping6 \
iwinfo \
+ iw \
+ kmod-rt2800-usb \
+ usbutils \
+ kmod-rtl8192cu \
+ kmod-lib80211 \
+ tcpdump \
iptables \
firewall \
haveged
[/shell]

Nachdem nun auch die Treiber für den Wlan-Stick vorhanden sind hier nochmal ein paar weitere Anpassungen:
[shell]
diff –git a/include/config b/include/config
index 8476ec6..8a15dc5 100644
— a/include/config
+++ b/include/config
@@ -20,3 +20,151 @@ CONFIG_PACKAGE_ATH_DEBUG=y
CONFIG_ATH10K_CT_COMMUNITY_FW=y

CONFIG_LUCI_SRCDIET=y
+CONFIG_DEFAULT_kmod-fs-vfat=y
+CONFIG_DEFAULT_kmod-nf-nathelper=y
+CONFIG_DEFAULT_kmod-usb-hid=y
+CONFIG_DEFAULT_kmod-sound-arm-bcm2835=y
+CONFIG_DEFAULT_kmod-sound-core=y
+CONFIG_DEFAULT_libc=y
+CONFIG_DEFAULT_libgcc=y
+CONFIG_DEFAULT_mtd=y
+CONFIG_DEFAULT_netifd=y
+CONFIG_DEFAULT_odhcp6c=y
+CONFIG_DEFAULT_odhcpd=y
+#CONFIG_USES_EXT4=y
+
+#CONFIG_TARGET_ROOTFS_EXT4FS=y
+#CONFIG_TARGET_EXT4_MAXINODE=6000
+#CONFIG_TARGET_EXT4_RESERVED_PCT=0
+#CONFIG_TARGET_EXT4_BLOCKSIZE_4K=y
+# CONFIG_TARGET_EXT4_BLOCKSIZE_2K is not set
+# CONFIG_TARGET_EXT4_BLOCKSIZE_1K is not set
+#CONFIG_TARGET_EXT4_BLOCKSIZE=4096
+# CONFIG_TARGET_EXT4_JOURNAL is not set
+# CONFIG_TARGET_ROOTFS_JFFS2 is not set
+# CONFIG_TARGET_ROOTFS_SQUASHFS is not set
+
+#
+# Image Options
+#
+#CONFIG_BRCM2708_SD_BOOT_PARTSIZE=50
+#CONFIG_TARGET_ROOTFS_PARTSIZE=256
+# CONFIG_TARGET_ROOTFS_INCLUDE_KERNEL is not set
+#CONFIG_TARGET_ROOTFS_INCLUDE_UIMAGE=y
+#CONFIG_TARGET_ROOTFS_INCLUDE_ZIMAGE=y
+#CONFIG_TARGET_ROOTFS_INCLUDE_FIT=y
+
+CONFIG_PACKAGE_dnsmasq=y
+CONFIG_PACKAGE_dropbear=y
+
+#
+# Configuration
+#
+CONFIG_DROPBEAR_ECC=y
+
+#
+# Configuration
+CONFIG_PACKAGE_wireless-tools=m
+CONFIG_PACKAGE_r8169-firmware=m
+CONFIG_PACKAGE_r8188eu-firmware=m
+
+CONFIG_PACKAGE_kmod-scsi-core=y
+CONFIG_PACKAGE_kmod-scsi-generic is not set
+
+CONFIG_PACKAGE_kmod-hid=y
+CONFIG_PACKAGE_kmod-hid-generic=y
+CONFIG_PACKAGE_kmod-input-core=y
+CONFIG_PACKAGE_kmod-input-evdev=y
+CONFIG_PACKAGE_kmod-lib-crc-ccitt=y
+CONFIG_PACKAGE_kmod-lib-crc-itu-t=m
+CONFIG_PACKAGE_kmod-mmc=m
+CONFIG_PACKAGE_kmod-usb-core=y
+CONFIG_PACKAGE_kmod-usb-hid=y
+CONFIG_PACKAGE_kmod-usb-storage=y
+CONFIG_PACKAGE_kmod-usb-uhci=y
+CONFIG_PACKAGE_kmod-usb-wdm=y
+CONFIG_PACKAGE_kmod-usb2=y
+CONFIG_PACKAGE_kmod-usb3=y
+# Wireless Drivers
+#
+CONFIG_PACKAGE_kmod-ath=m
+CONFIG_PACKAGE_ATH_DFS=y
+CONFIG_PACKAGE_kmod-ath9k-common=m
+CONFIG_PACKAGE_kmod-ath9k-htc=m
+CONFIG_PACKAGE_kmod-brcmfmac=m
+CONFIG_BRCMFMAC_USB=y
+CONFIG_PACKAGE_kmod-brcmutil=m
+CONFIG_PACKAGE_kmod-cfg80211=m
+CONFIG_PACKAGE_kmod-lib80211=m
+CONFIG_PACKAGE_kmod-libertas-sdio=m
+CONFIG_PACKAGE_kmod-libertas-usb=m
+CONFIG_PACKAGE_kmod-mac80211=m
+CONFIG_PACKAGE_MAC80211_DEBUGFS=y
+CONFIG_PACKAGE_MAC80211_MESH=y
+CONFIG_PACKAGE_kmod-mt7601u=m
+CONFIG_PACKAGE_kmod-p54-common=m
+CONFIG_PACKAGE_kmod-p54-usb=m
+CONFIG_PACKAGE_kmod-rt2500-usb=m
+CONFIG_PACKAGE_kmod-rt2800-lib=m
+CONFIG_PACKAGE_kmod-rt2800-usb=m
+CONFIG_PACKAGE_kmod-rt2x00-lib=m
+CONFIG_PACKAGE_RT2X00_DEBUG=y
+CONFIG_PACKAGE_kmod-rt2x00-usb=m
+CONFIG_PACKAGE_kmod-rt73-usb=m
+CONFIG_PACKAGE_kmod-rtl8192c-common=m
+CONFIG_PACKAGE_kmod-rtl8192cu=m
+CONFIG_PACKAGE_kmod-rtlwifi=m
+CONFIG_PACKAGE_kmod-rtlwifi-usb=m
+CONFIG_PACKAGE_kmod-zd1211rw=m
+
+CONFIG_PACKAGE_libpolarssl=m
+CONFIG_PACKAGE_libblkid=m
+CONFIG_PACKAGE_libblobmsg-json=y
+CONFIG_PACKAGE_libcurl=m
+
+#
+# SSL support
+#
+CONFIG_LIBCURL_POLARSSL=y
+CONFIG_LIBCURL_FILE=y
+CONFIG_LIBCURL_FTP=y
+CONFIG_LIBCURL_HTTP=y
+CONFIG_LIBCURL_COOKIES=y
+CONFIG_LIBCURL_NO_SMB=“!“
+CONFIG_LIBCURL_PROXY=y
+CONFIG_PACKAGE_libiw=y
+CONFIG_PACKAGE_libiwinfo=y
+CONFIG_PACKAGE_libjson-c=y
+CONFIG_PACKAGE_libnl-tiny=y
+CONFIG_PACKAGE_libpcap=m
+
+CONFIG_PACKAGE_libusb-1.0=m
+CONFIG_PACKAGE_libuuid=m
+CONFIG_PACKAGE_zlib=m
+
+CONFIG_PACKAGE_curl=m
+
+CONFIG_PACKAGE_ip-full=m
+CONFIG_PACKAGE_hostapd=m
+CONFIG_PACKAGE_hostapd-common=m
+CONFIG_PACKAGE_iw=m
+CONFIG_PACKAGE_odhcp6c=y
+CONFIG_PACKAGE_odhcp6c_ext_cer_id=0
+CONFIG_PACKAGE_odhcpd=y
+CONFIG_PACKAGE_odhcpd_ext_cer_id=0
+CONFIG_PACKAGE_tcpdump=m
+CONFIG_PACKAGE_wpa-supplicant=m
+CONFIG_WPA_SUPPLICANT_INTERNAL=y
+CONFIG_WPA_MSG_MIN_PRIORITY=3
+CONFIG_DRIVER_WEXT_SUPPORT=y
+CONFIG_DRIVER_11N_SUPPORT=y
+CONFIG_PACKAGE_script-utils=m
+CONFIG_PACKAGE_blkid=m
+CONFIG_PACKAGE_fdisk=m
+CONFIG_PACKAGE_sfdisk=m
+CONFIG_PACKAGE_iwinfo=m
+CONFIG_PACKAGE_jshn=y
+CONFIG_PACKAGE_libjson-script=y
+CONFIG_PACKAGE_usb-modeswitch=m
+CONFIG_PACKAGE_usbutils=m
+CONFIG_PACKAGE_whereis=m
[/shell]

Wobei es hier jedem absolut frei steht weitere Anpassungen zu machen.

Image bauen für den RaspberryPi

Nachdem alle Vorbereitungen getroffen sind können wir nun unser Image, welches auf eigendliche jede SD-Karte passt bauen (ca 68MB entpackt).

[shell]
time BROKEN=1 make -j12 GLUON_TARGET=brcm2708-bcm2708 V=s | tee build.log
[/shell]

Einmal eine kleine Aufschlüsselung des Befehls:

time: Gibt am ende die Gesamtzeit aus, die der Build lief (fand ich nett zu wissen)
BROKEN=1: Ist notwendig für den Build, da das Target welches genutzt wird als „Broken“ markiert ist
make -j12: Ein make wie jeder andere auch (allerdings mit 12 Threads wenn möglich)
GLUON_TARGET=brcm2708-bcm2708: Beschreibt das Ziel unseres Images. In diesem fall ein RaspberryPi 1. Gen
V=s: Aktiviert den Debug-Output beim bauen
| tee build.log: Sorgt dafür, dass unser Debug-Output einmal in „debug.log“ und direkt auf der Konsole landet.

Die Verwandlung

Sobald der make erfolgreich war, landet eine .img.gz in einem Unterordner von „output“.
Da wir erst noch eine SD-Karte erstellen wollen nehmen wir die Variante „Factory“, welches ein komplette image beinhaltet.

Leider müssen wir die Datei noch entpacken bevor wir sie auf die SD-Karte schreiben können.
[shell]
gunzip *.img.gz
[/shell]

Jetzt können wir das Image auf eine leere SD-Karte schreiben. (ACHTUNG: Die Karte wird dabei komplett gelöscht)
[shell]
dd if=.img of=/dev/sdX bs=512
sync
[/shell]

Hierbei ist zu beachten, dass „“ und „/dev/sdX“ jeweils ersetzt werden.
Eine Möglichkit heraus zu finden welches device der SD-Karte gehört, ist z.B.: [shell]dmesg | tail[/shell].

Das „sync“ am Ende ist einfach nochmal dazu da, um eventuelle Daten, die noch nicht vollständig geschrieben wurden forciert zu speichern. (Damit bei herausziehen der SD-Karte sicher ist, dass alles da ist)

Der erste Start

Sobald wir jetzt die SD-Karte in den RaspberryPi stecken und diesen am Strom anschließen, sollte er sich nach einigen Momenten im lokalen Netzwerk (per Kabel) unter der IP 192.168.1.1 erreichen lassen.

Hier ist dann die die Normale Freifunk-Konfiguration zu sehen.

Ein Hinweis wäre, SSH zu aktivieren um spätere anderungen machen zu können.
Bei mir scheint die KeyAuth-Variante leider nicht zu funktionieren, daher zur sicherheit einfach mal ein Passwort setzen.

Nach einem Klick auf „Speichern & Reboot“ (oder so) startet das Gerät neu und meldet sich nun per DHCP normal in eueren Netzwerk an.
Ein paar Augenblicke später sollten dann auch schon die VPN-Verbindungen aufgebut werden und euer Router im Meshviewer mitsamt IPv6-Addressen erscheinen.

Weiteres

Weiteres wie die genaue WLAN-Config teste ich noch einmal bevor ich diesen Artikel dann weiter ergänze.

Links

Gluon – Read The Docs
Freifunk Bremen site-conf


Beitrag veröffentlicht

in

,

von

Schlagwörter:

Kommentare

2 Antworten zu „RaspberryPi mit Freifunk“

  1. Avatar von NIls
    NIls

    Leider bricht es nach deiner Anleitung an dieser Stelle ab:

    make[3]: *** No rule to make target /home/tweety/build-gluon/gluon/build/brcm2708-bcm2708/openwrt/build_dir/target-mips_34kc_uClibc-0.9.33.2_gluon-brcm2708-bcm2708/linux-brcm2708_bcm2708/linux-3.18.29/.image'. Stop.
    make[3]: Leaving directory
    /home/tweety/build-gluon/gluon/openwrt/target/linux/brcm2708′
    make[2]: *** [kernel] Error 2
    make[2]: Leaving directory /home/tweety/build-gluon/gluon/build/brcm2708-bcm2708/openwrt'
    make[1]: *** [prepare] Error 2
    make[1]: Leaving directory
    /home/tweety/build-gluon/gluon/build/brcm2708-bcm2708/openwrt‘
    make: *** [all] Fehler 2

    Lg

    Nils

    1. Avatar von Steven

      Hey,
      guck mal ob du in der kernelconfig doppelte Zeilen hast, solche haben schonmal Probleme gemacht.

      Gibt es in deiner Freifunk-Region keine fertigen RPi Builds?

      Grüße
      Steven

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.