home
erste Version am 06.05.2015
letzte Änderung am 09.05.2015

BananaPi mit Bananian auf SSD aufsetzen


Anbei mein (etwas leserlicher aufbereiteter) Schmierzettel, der bei der Installation und Einrichtung des BananaPi entstanden ist.
Ziel war es, einen Stromspar-Rechner mit Debian, Gigabit-Netzwerkinterface und ohne grafische Oberfläche zu haben, der sein Root-Filesystem auf einem zuverlässigerem Medium (als einer SD-Karte) liegen hat und die Funktion der Gateway-VM übernehmen kann.


Inhalt
  1. SD-Card vorbereiten
  2. von SD-Card starten
  3. Root-Filesystem auf die SSD kopieren
  4. Grundinstallation abschließen
  5. Funktionen einrichten

SD-Card vorbereiten

Zunächst erstmal das Image laden von:
    https://www.bananian.org/download

Das ZIP entpacken.

SD-Card in einen Rechner stecken und per dmesg die Gerätekennung der SD-Card suchen.
Liefert sowas wie:
[761146.380218] usb 3-1: new high-speed USB device number 7 using xhci_hcd
[761146.398627] usb 3-1: New USB device found, idVendor=0781, idProduct=a7c1
[761146.398636] usb 3-1: New USB device strings: Mfr=3, Product=4, SerialNumber=2
[761146.398641] usb 3-1: Product: SDDR-113
[761146.398645] usb 3-1: Manufacturer: SanDisk
[...]
[761147.584089]  sdb: sdb1


Dann ins Verzeichnis mit der Datei "bananian-1504.img" wechseln und ausführen:
sudo dd bs=1M if=bananian-1504.img of=/dev/sdb && sync
Wobei das of=/dev/sdb natürlich durch die per dmesg ermittelte Gerätekennung zu ersetzen ist.
Analog beim Dateinamen bzw. dessen Versionsnummer.
Damit ist die SD-Card vorbereitet.


von SD-Card starten

Nun die SD-Card in den BananaPi stecken, danach Netzwerk-Kabel und Strom anschließen.
Dann auf dem DHCP-Server auf den BananaPi warten.

Danach z.B.:
ssh root@192.168.178.54
Das Passwort lautet: pi

Aufruf von:
bananian-config
Darin einstellen von
    root-Passwort,
    Zeitzone,
    locale(de_DE.UTF-8 UTF-8),
    Hostname,
    Video-acceleration,
    Dateisystem-Expansion,
    keyboard-layout

Bei Bedarf in /etc/rc.local vor der Zeile "exit 0" einfügen:
echo none > /sys/class/leds/green\:ph24\:led1/trigger
um die nervige Blink-LED ruhigzustellen.

Und dann:
chsh -s /bin/bash
reboot



Root-Filesystem auf die SSD kopieren

Bei angeschlossener SSD:
fdisk -l

liefert z.B.:
Disk /dev/sda: 32.0 GB, 32010928128 bytes
255 heads, 63 sectors/track, 3891 cylinders, total 62521344 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0001ca90

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    57278463    28638208   83  Linux
/dev/sda2        57280510    62519295     2619393    5  Extended
/dev/sda5        57280512    62519295     2619392   82  Linux swap / Solaris

Disk /dev/mmcblk0: 16.2 GB, 16172187648 bytes
4 heads, 16 sectors/track, 493536 cylinders, total 31586304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9f732a23

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            2048       43007       20480   83  Linux
/dev/mmcblk0p2           43008     3710936     1833964+  83  Linux

Nun:
fdisk /dev/sda
Und darin:
    "d" für delete und dann alle oben gelisteten Nummern löschen
    "n" für new und dann alle Fragen mit Enter bestätigen
    "w" für write

Dann ein Dateisystem auf der SSD anlegen:
mkfs.ext4 /dev/sda1

Dann kopieren:
mkdir /tmp/src
mkdir /tmp/dst

mount /dev/mmcblk0p2 /tmp/src
mount /dev/sda1 /tmp/dst/

rsync -arx --progress /tmp/src/ /tmp/dst/

mount /dev/mmcblk0p1 /mnt/
nano /mnt/uEnv.txt

und in uEnv.txt das "root=/dev/mmcblk0p2" nach "root=/dev/sda1" ändern + speichern.

Nun noch:
sync
reboot


Grundinstallation abschließen

Nach Reboot und erneutem Logon als root erstmal:
bananian-update

apt-get update
apt-get upgrade

nano .bashrc
und die Kommentar-Zeichen vor alias ... entfernen.


adduser dede
exit

ssh dede@bp1

mkdir .ssh
scp dede@c2q:~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

nano .bashrc
und die Kommentar-Zeichen vor alias ... entfernen.

Test mit:
exit
ssh dede@bp1

su
apt-get install sudo

usermod -aG sudo dede
nano /etc/sudoers
und ändern von:
    %sudo   ALL=(ALL:ALL) ALL
auf:
%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

Nun noch:
nano /etc/motd

apt-get install rcconf iftop whois curl

exit
exit
ssh dede@bp1

Und final:
sudo apt-get install python sqlite3 python-lxml python-requests python-crypto python-cssselect


Funktionen einrichten

Nun sind die gewünschten Funktionen einzurichten. In meinem Fall also gemäß:
    Gateway V2
und
    Tunnel-VM

Dem dnsmasq-Dienst habe ich mittels rcconf den Autostart abgewöhnt.
Stattdessen starte ich via cron jede Minute das Script check_gw_dhcp.sh, welches folgenden Inhalt hat:
#!/bin/bash

if nmap -p53 gw | grep 53 | grep -q open; then
  # wenn DNS auf gw läuft
  pidof  dnsmasq >/dev/null
  # schauen, ob er hier läuft
  if [[ $? -eq 0 ]] ; then
    # ==0 -> läuft : also hier stoppen
    sudo service dnsmasq stop
    logger "stopped dnsmasq"
  fi
else
  # DNS auf gw läuft nicht
  pidof  dnsmasq >/dev/null
  # schauen, ob er hier schon läuft
  if [[ $? -ne 0 ]] ; then
    # !=0 -> läuft nicht : also starten
    sudo service dnsmasq start
    logger "started dnsmasq"
  fi
fi
Hier wird per nmap geprüft, ob auf dem System gw der Port 53 (DNS) geöffnet ist bzw. das System überhaupt antwortet.
Läuft der DNS-Dienst auf gw nicht, wird er hier gestartet. Und wenn er dort wieder läuft, wird er hier gestoppt.
Per pidof wird in beiden Fällen geprüft, ob der lokale DNS bereits den gewünschten an/aus-Zustand hat - also ob etwas getan werden muss.