Bananian 16.04 auf einer HDD installieren incl. WLan


  • administrators

    Dies ist eine aktualisierte Version des folgenden Beitrages Bananian auf HDD installieren !

    Beim Betatesten der kommenden Version 16.04 ist mir in den Sinn gekommen, mal den aktuellen Stand wieder festzuhalten. Ich brauche immer einen Artikel, wo ich selber später alles mal nachlesen kann 😉 Ich habe vieles getestet, ein Hauptanliegen von mir war, die Installation auf einem BananaPi und einem BananaPro zu testen. Der Pro ist auch ausgiebig mit Installation auf HDD getestet worden. Als Abfallprodukt der Hardwaretesterei habe ich hier nochmal die WLan-Konfiguration aufgeschrieben. Module usw. wird alles automatisch geladen, da hat man keine Arbeit mehr mit. WLan konfigurieren und fertig! Ich gehe im Moment davon aus, das Nico die 16.04 am Wochenende released.

    Voraussetzungen:

    0_1522583072606_IMG_20151225_133942.jpg

    Zielsetzung:

    Bananian installieren, das Rootverzeichnis auf die SATA-Platte umlegen, so das nur noch von der SD-Karte gebootet wird. Danach läuft das System auf der SATA-Platte.

    SD-Karte vorbereiten:

    Download: https://www.bananian.org/download Datei entpacken! Rechtsklick auf die Datei, “Öffnen mit” “Schreiber von Laufwerksabbildern” Ziel auswählen! Aufpassen das es auch die SD-Karte ist!! Sonst Datenverlust!! “Wiederherstellung starten” und die Sicherheitsabfrage mit “Wiederherstellen” bestätigen! Dann kommt eine Abfrage fürs Rootpasswort, bitte eingeben!

    0_1522583459636_Bildschirmfoto-vom-2016-04-18-171651.png

    Warten bis das Image fertig geschrieben wurde. Danach das Programm beenden und die SD-Karte entnehmen.

    Hier noch ein Tipp, ein Klasse Tool ist Etcher. Etcher passt auf, das man nicht versehentlich ins falsche Laufwerk schreibt, nach dem Schreiben werden die Daten kontrolliert. Das Tool gibt es für Linux, Windows und OS X.

    0_1522583492472_etcher.png

    BananaPi mit SD-Karte starten:

    Die SD-Karte einstecken, alle Kabel richtig anschließen und einschalten. Man kann den Bootvorgang auf dem angeschlossen Monitor verfolgen, wenn der Login kommt ist der Startvorgang abgeschlossen. Als erstes lege ich die Bedienung auf meinen Haupt-PC um, ist einfach komfortabler. Was brauche ich dafür? Die IP-Adresse, aber erstmal müssen wir uns einloggen. Der User heißt: root Das PW: pi

    Alternativ könnt ihr die Installation mittels Serielle Konsole - USB to BananaPI steuern. Dafür benötigt man einen Adapter und z.B. Putty. Ein Vorteil dieser Verbindung ist, das man auch den Bootvorgang genau beobachten kann, das kann bei der Fehlersuche enorm hilfreich sein.

    Wichtig, das sollte man später unbedingt ändern! Beim ersten Aufruf der bananian-config wird man gezwungen ein neues Root-PW einzugeben!

    Nun sehen wir, das wir als root eingeloggt sind. Oben stehen noch zwei wichtige Befehle.

    Run 'bananian-config' to set up Bananian Linux
    Run 'bananian-update' to check for distribution updates
    

    Wir rufen jetzt erstmal bananian-config auf und stellen alles ein, danach haben wir auch eine deutsche Tastatur, was das Arbeiten angenehmer gestaltet. So, jetzt zur IP-Adresse. Befehl

    ifconfig
    

    eingeben. Nun können wir unter eth0 die IP-Adresse ablesen, in meinem Fall 192.169.1.48 Nun habe ich alles was ich brauche, um mich an meinem Haupt-PC mit dem BananaPI zu verbinden. Dazu öffnen wir eine Konsole. Dann geben wir folgenden Befehl ein:

    ssh root@192.168.1.48
    

    Beim ersten mal kommt eine Abfrage bzgl. des RSA key fingerprints. Diese beantworten wir mit “yes”. Danach kommt wieder die Abfrage nach dem RootPW. Wir geben “pi” ein, bzw. das bei bananian-config vergebene Passwort! Voila, nun sind wir am Haupt-PC mit dem BananaPI verbunden. Nun kann man den Monitor wieder für was anderes verwenden - moment ich mach mal mein Fernsehen wieder an 🙂 Ab diesem Moment brauchen wir den Monitor nicht mehr, es sei denn wir sperren uns mal aus. Jetzt wäre der BananaPI fertig und würde seinen Dienst versehen, aber ich möchte gerne das Root auslagern. Ihr könnt das natürlich auch am BananaPi machen, dazu eine Tastaur anschliessen und fertig!

    Festplatte einrichten:

    **ACHTUNG! Ab hier besteht die Gefahr von Datenverlust. Bitte vorher das Gehirn einschalten und denkt dran, ich übernehme kein Garantie für Eure Daten 🙂

    Die angeschlossene HDD war benutzt, also müssen die vorhandenen Partitionen gelöscht werden.**

    Mit fdisk schauen wir uns erst mal alles an.

    130 root@bananapi ~ # fdisk -l
    Disk /dev/sda: 119.2 GiB, 128035676160 bytes, 250069680 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
    Disklabel type: dos
    Disk identifier: 0x000ebd3b
    Device Boot Start End Sectors Size Id Type
    /dev/sda1 * 2048 242356223 242354176 115.6G 83 Linux
    /dev/sda2 242358270 250068991 7710722 3.7G 5 Extended
    /dev/sda5 242358272 250068991 7710720 3.7G 82 Linux swap / Solaris
    Disk /dev/mmcblk0: 3.7 GiB, 3980394496 bytes, 7774208 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
    Disklabel type: dos
    Disk identifier: 0x0ccea0b3
    Device Boot Start End Sectors Size Id Type
    /dev/mmcblk0p1 2048 43007 40960 20M 83 Linux
    /dev/mmcblk0p2 43008 3710936 3667929 1.8G 83 Linux
    

    Danach wählen wir die Platte aus, die bearbeitet werden soll.

    root@bananapi ~ # fdisk /dev/sda
    Welcome to fdisk (util-linux 2.25.2).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    Command (m for help):
    

    Dann mit "d" Partition auswählen.

    Command (m for help): d
    Partition number (1,2,5, default 5): 5
    Partition 5 has been deleted.
    

    Das dann für alle Partitionen wiederholen.

    Zum Schluss mit w die Änderungen auf die Platte schreiben.

    Nun erzeugen wir eine neue Partition

    fdisk /dev/sda
    Welcome to fdisk (util-linux 2.25.2).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Command (m for help): n
    Partition type
    p primary (0 primary, 0 extended, 4 free)
    e extended (container for logical partitions)
    Select (default p): p
    Partition number (1-4, default 1): 1
     First sector (2048-250069679, default 2048): 2048
    Last sector, +sectors or +size{K,M,G,T,P} (2048-250069679, default 250069679): 250069679
    Created a new partition 1 of type 'Linux' and of size 119,2 GiB.
    
    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
    

    Schauen wir uns das Ergebnis nochmal an.

    root@bananapi ~ # fdisk -l
    
    Disk /dev/sda: 119,2 GiB, 128035676160 bytes, 250069680 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
    Disklabel type: dos
    Disk identifier: 0x000ebd3b
    Device Boot Start End Sectors Size Id Type
    /dev/sda1 2048 250069679 250067632 119,2G 83 Linux
     Disk /dev/mmcblk0: 3,7 GiB, 3980394496 bytes, 7774208 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
    Disklabel type: dos
    Disk identifier: 0x0ccea0b3
    Device Boot Start End Sectors Size Id Type
    /dev/mmcblk0p1 2048 43007 40960 20M 83 Linux
    /dev/mmcblk0p2 43008 7774207 7731200 3,7G 83 Linux
    

    Festplatte formatieren:

    Nun muss eine Festplatte auch noch formatiert werden, das macht man mit mkfs.ext4 /dev/sda1

    root@bananapi ~ # mkfs.ext4 /dev/sda1
    mke2fs 1.42.12 (29-Aug-2014)
    /dev/sda1 hat ein ext4-Dateisystem
    zuletzt auf / auf Sun Dec 21 09:09:08 2014
    eingehängtTrotzdem fortfahren? (j,n) j
    Geräteblöcke werden verworfen: erledigt
    Ein Dateisystems mit 31258454 (4k) Blöcken und 7815168 Inodes wird erzeugt.
    UUID des Dateisystems: bc260a48-eb4d-4491-bdbc-0b8758eeacc9
    Superblock-Sicherungskopien gespeichert in den Blöcken:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872
    beim Anfordern von Speicher für die Gruppentabellen: erledigt
    Inode-Tabellen werden geschrieben: erledigt
    Das Journal (32768 Blöcke) wird angelegt: erledgt
    Die Superblöcke und die Informationen über die Dateisystemnutzung werden
    geschrieben: erledigt
    

    Damit wäre die HDD fertig eingerichtet! Nun binden wird die HDD ins Sys ein

    mount /dev/sda1 /mnt/
    

    Root Verzeichnis kopieren:

    Dazu nehmen wir folgenden Befehl

    rsync -ax / /mnt/
    

    Wenn er fertig ist kommt das

    sent 879136405 bytes  received 274399 bytes  8496722.74 bytes/sec
    total size is 878077999  speedup is 1.00
    rsync -axv / /mnt  32.87s user 40.26s system 70% cpu 1:43.06 total
    

    Wenn alles fertig kopiert ist, unmounten wir die HDD und mounten die SD-Karte um die Bootparameter zu ändern.

    umount /mnt/
    

    Bootparameter bearbeiten:

    mount /dev/mmcblk0p1 /mnt
    nano /mnt/boot.cmd
    

    So sieht die geänderte boot.cmd aus.

    #--------------------------------------------------------------------------------------------------------------------------------
    # Boot loader script to boot with different boot methods for old and new kernel
    # Credits: https://github.com/igorpecovnik - Thank you for this great script!
    #--------------------------------------------------------------------------------------------------------------------------------
    if load mmc 0:1 0x00000000 uImage-next
    then
    # mainline kernel >= 4.x
    #--------------------------------------------------------------------------------------------------------------------------------
    setenv bootargs console=ttyS0,115200 console=tty0 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait
    load mmc 0:1 0x49000000 dtb/${fdtfile}
    load mmc 0:1 0x46000000 uImage-next
    bootm 0x46000000 - 0x49000000
    #--------------------------------------------------------------------------------------------------------------------------------
    else
    # sunxi 3.4.x
    #--------------------------------------------------------------------------------------------------------------------------------
    setenv bootargs console=ttyS0,115200 console=tty0 console=tty1 sunxi_g2d_mem_reserve=0 sunxi_ve_mem_reserve=0 hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1680x1050p60 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait
    setenv bootm_boot_mode sec
    load mmc 0:1 0x43000000 script.bin
    load mmc 0:1 0x48000000 uImage
    bootm 0x48000000
    #--------------------------------------------------------------------------------------------------------------------------------
    fi
    

    Zweimal folgendes ändern:

    root=/dev/mmcblk0p2
    

    in

    root=/dev/sda1
    

    ändern.

    Danach müssen wir aus der boot.cmd eine ausführbare Datei machen, dazu nimmt man folgenden Befehl.

    cd /mnt
    mkimage -C none -A arm -T script -d boot.cmd boot.scr
    

    Dann kommt aber eine Fehlermeldung das mkimage fehlt, ok kurz nachinstallieren.

    apt-get install u-boot-tools 
    

    Dann nochmal probieren und das Ergebnis sieht wie folgt aus.

    root@bananapi /tmp # mkimage -C none -A arm -T script -d boot.cmd boot.scr
    Image Name:   
    Created:      Sun Apr 17 20:41:34 2016
    Image Type:   ARM Linux Script (uncompressed)
    Data Size:    1626 Bytes = 1.59 kB = 0.00 MB
    Load Address: 00000000
    Entry Point:  00000000
    Contents:
    Image 0: 1618 Bytes = 1.58 kB = 0.00 MB
    

    Nun starten wir den BananaPi mit

    shutdown -r now
    

    neu. Wieder einloggen und checken ob die Platte richtig erkannt wurde. Dazu geben wir

    df -h
    

    ein. (diskfree)

    Ausgabe:

    Filesystem      Size  Used Avail Use% Mounted on
    rootfs          1.4T  1.1G  1.3T   1% /
    /dev/root       1.4T  1.1G  1.3T   1% /
    devtmpfs        486M     0  486M   0% /dev
    tmpfs            98M  232K   97M   1% /run
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           195M     0  195M   0% /run/shm
    

    Meine Festplatte ist 1,5T groß, die Karte nur 4GB. Das rootfs ist 1.4T groß, damit bin ich zufrieden. Der BananaPI bootet jetzt nur noch von der SD-Karte danach läuft alles auf der Platte. Das macht das ganze System wesentlich flotter, eine Class 10 Karte kann man mit mindestens 10MB/s beschreiben, mein Test unten ergab ca. 40MB/s auf der Platte.
    Geschwindigkeit der Festplatte testen

    Schnell noch die Geschwindigkeit der Platte checken.

    dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
    

    Ausgabe:

    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB) copied, 27.033 s, 39.7 MB/s
    dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc  0.00s user 9.90s system 36% cpu 27.044 total
    

    Also rund 40MB/s Datentransferrate. Recht ordentlich und das ist auch der absolute Vorteil der BananaPis gegenüber einem Raspberry, die Anbindung einer HDD mittels SATA-Schnittstelle!

    Kernel 4.4 installieren

    Ihr möchtet lieber mit einem Kernel 4.4.x arbeiten? Auch das ist kein Problem.

    Auf einem BananaPro müssen wir jetzt folgendes U-Boot installieren und NUR dort!!

    apt-get install u-boot-pro-bananian
    

    Für beide gilt dann folgendes

    apt-get install linux-image-4.4-bananian
    

    Nun kommt folgendes.

    root@bananapi ~ # aptitude install linux-image-4.4-bananian
    Die folgenden NEUEN Pakete werden zusätzlich installiert:
      linux-image-4.4-bananian linux-image-4.4.7-bananian{a} 
    0 Pakete aktualisiert, 2 zusätzlich installiert, 0 werden entfernt und 4 nicht aktualisiert.
    0 B/14,1 MB an Archiven müssen heruntergeladen werden. Nach dem Entpacken werden 45,3 MB zusätzlich belegt sein.
    Möchten Sie fortsetzen? [Y/n/?]
    

    Mit Y bestätigen. Warten bis er fertig ist und dann neubooten. Fertig. Mit

    uname -a
    

    mal eben schauen, ob der richtige Kernel geladen wird.

    root@bananapro ~ # uname -a
    Linux bananapro 4.4.7-bananian #2 SMP Fri Apr 15 16:51:07 UTC 2016 armv7l GNU/Linux
    

    Stand 8. Juni 2017: (BananaPi)

    Linux ftpserver 4.4.66-bananian #2 SMP Sat May 6 19:26:50 UTC 2017 armv7l GNU/Linux 
    

    Speedtest LAN-Schnittstelle

    Mal eben testen was durch die Schnittselle durchgeht.

    apt-get install iperf
    

    Auf meinem Hauptrechner kurz einen iperf Server aufgemacht.

    iperf -s
    

    Dann auf dem BananaPi

    iperf -c 192.168.x.x
    

    Das Ergebnis:

    frank@PC ~ $ iperf -s
    ------------------------------------------------------------
    Server listening on TCP port 5001
    TCP window size: 85.3 KByte (default)
    ------------------------------------------------------------
    [  4] local 192.168.2.213 port 5001 connected with 192.168.2.6 port 60420
    [ ID] Interval       Transfer     Bandwidth
    [  4]  0.0-10.0 sec   772 MBytes   647 Mbits/sec
    [  5] local 192.168.2.213 port 5001 connected with 192.168.2.6 port 60422
    [  5]  0.0-10.0 sec   700 MBytes   587 Mbits/sec
    [  4] local 192.168.2.213 port 5001 connected with 192.168.2.6 port 60424
    [  4]  0.0-10.0 sec   713 MBytes   598 Mbits/sec
    [  5] local 192.168.2.213 port 5001 connected with 192.168.2.6 port 60426
    [  5]  0.0-10.0 sec   779 MBytes   653 Mbits/sec
    

    Die theoretische Geschwindigkeit erreicht man auch hier nicht, aber das ist für einen kleinen Homeserver der ab und an mal ein paar Daten bereitstellen soll völlig ausreichend. Das liegt aber im Auge des Betrachters, manchen wird auch das nicht ausreichend sein, uch kann da schon sehr lange gut mit leben 😉

    Update 7.6.2013:

    Der gleiche Test mit iperf3

    Server listening on 5201
    -----------------------------------------------------------
    Accepted connection from 192.168.3.200, port 47560
    [ 5] local 192.168.3.213 port 5201 connected to 192.168.3.200 port 47562
    [ ID] Interval Transfer Bandwidth
    [ 5] 0.00-1.00 sec 83.5 MBytes 700 Mbits/sec
    [ 5] 1.00-2.00 sec 87.6 MBytes 735 Mbits/sec
    [ 5] 2.00-3.00 sec 87.2 MBytes 731 Mbits/sec
    [ 5] 3.00-4.00 sec 87.8 MBytes 736 Mbits/sec
    [ 5] 4.00-5.00 sec 86.1 MBytes 722 Mbits/sec
    [ 5] 5.00-6.00 sec 87.1 MBytes 731 Mbits/sec
    [ 5] 6.00-7.00 sec 87.4 MBytes 733 Mbits/sec
    [ 5] 7.00-8.00 sec 87.2 MBytes 732 Mbits/sec
    [ 5] 8.00-9.00 sec 86.7 MBytes 727 Mbits/sec
    [ 5] 9.00-10.00 sec 76.3 MBytes 640 Mbits/sec
    [ 5] 10.00-10.04 sec 3.52 MBytes 682 Mbits/sec
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval Transfer Bandwidth Retr
    [ 5] 0.00-10.04 sec 860 MBytes 719 Mbits/sec 0 sender
    [ 5] 0.00-10.04 sec 860 MBytes 719 Mbits/sec receiver
    

    Sieht gut aus 😉

    WLan konfigurieren

    Der BananaPro hat WLan on Board, der BananaPi nicht. Wenn man dort z.B. einen USB-to-WLan Stick benutzt, kann man das nachfolgende genauso gebrauchen.

    Mal schauen ob das WLan da ist.

    root@bananapro ~ # iwconfig
    wlan0     IEEE 802.11bgn  ESSID:off/any  
              Mode:Managed  Access Point: Not-Associated   
              Retry short limit:7   RTS thr:off   Fragment thr:off
              Encryption key:off
              Power Management:on
    
    lo        no wireless extensions.
    eth0      no wireless extensions.
    

    Sieht schon mal nicht schlecht aus. Nun bauen wir das mal in /etc/network/interfaces ein.

    # interfaces(5) file used by ifup(8) and ifdown(8)
    # Include files from /etc/network/interfaces.d:
    source-directory /etc/network/interfaces.d
    
    auto lo
    iface lo inet loopback
    
    auto eth0
    auto wlan0
    
    # dhcp configuration
    iface eth0 inet dhcp
    iface wlan0 inet dhcp
    
    #wlan configuration
    wpa-ssid
    wpa-psk xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
    # static ip configuration
    #iface eth0 inet static
    #       address 192.168.6.241
    #       netmask 255.255.255.0
    #       gateway 192.168.6.1
    

    Die wpa-ssid ist der Name eures WLan-Netzes. wpa-psk ist das Passwort. Das kommt aber da nicht 1:1 rein, sondern wird mit dem folgenden Befehl ermittelt.

    wpa_passphrase wpa-ssid password
    

    Beispiel:

    wpa_passphrase Heim-WLan geheimes_passwort
    

    Dann kommt auf der Konsole eine Ausgabe, diese psk=xxxxxxxxxxxxxx kopiert ihr dann in die /etc/network/interfaces anstelle von wpa-psk

    Dann das Interface starten

    ifup wlan0
    

    Dann sollte eine ähnliche Ausgabe bei Euch erscheinen.

    root@bananapro ~ # ifup wlan0 
    Internet Systems Consortium DHCP Client 4.3.1
    Copyright 2004-2014 Internet Systems Consortium.
    All rights reserved.
    For info, please visit https://www.isc.org/software/dhcp/Listening on LPF/wlan0/xxx
    Sending on   LPF/wlan0/xxx
    Sending on   Socket/fallback
    DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 8
    DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 13
    DHCPREQUEST on wlan0 to 255.255.255.255 port 67
    DHCPOFFER from 192.168.3.1
    DHCPACK from 192.168.3.1
    bound to 192.168.3.14 -- renewal in 1659 seconds.
    

    Fertig! WLan läuft.

    Zum Schluß noch was wichtiges! Damit nur noch der Root das File lesen und bearbeiten kann unbedingt folgendes machen. Soll verhindern, das jemand an den WLan-Schlüssel kommt. Also WICHTIG!

    chmod 600 /etc/network/interfaces
    

    Nun läuft das Sys auf der HDD incl. WLan. Sollte die SD-Karte mal kaputt gehen schreibt man sich einfach eine neue und fertig. Die Daten sind auf einer Platte einfach sicherer abgelegt als auf einer SD-Karte (meine Meinung).

    Viel Spaß beim Homeserver bauen!

    0_1522584620278_IMG_20170601_195849.jpg