Raspbian 11 Bullseye installeren op Banana Pi Zero M2

Raspbian 11 Bullseye installeren op Banana Pi Zero M2

Zie ook mijn pagina over het installeren van Debian 11 Bullseye op de BPI M2Z: https://www.sydspost.nl/index.php/2022/08/24/debian-11-bullseye-op-banana-pi-zero-m2/

Omdat de Debian image geen firmware voor de bluetooth adapter bevat besloten om Raspbian 11 Bullseye te gaan installeren op de BPI M2Z. Hierbij een verslag hiervan.

Benodigdheden:

  • Banana Pi Zero M2
  • WiFi antenne + aansluitkabel
  • Monitor, toetsenbord en muis
  • HDMI naar HDMI mini kabel
  • USB Mini HUB OTG
  • 32GB (of groter) SD-Card
  • Desktop of Laptop met SD-Card reader

Stap 1. Banana Pi voorbereiden

De WiFi ontvangst van de Banana Pi is belabberd. De Banana Pi heeft niet net als de Raspberry Pi Zero 2W een interne antenne. Gelukkig had ik een antenne draad overgehouden van een eerder project, en had ik onlangs twee antennes van een kapot accesspoint afgeschroefd voordat die in de vuilnisbak belandde.

De antennedraad kun je op de daarvoor bestemde aansluiting van de Banana Pi klikken, vervolgens de antenne op de antennedraad schroeven.

Vervolgens de HDMI naar HDMI mini verloopkabel op je monitor aansluiten en aansluiten op de HDMI-mini aansluiting van de Banana Pi. Om USB randapparatuur aan te kunnen sluiten heb je een OTG USB Mini Hub nodig met micro USB aansluiting, deze sluit je aan op één van de micro USB aansluitingen, maakt niet uit welke. Op deze USB Mini Hub kun je een toetsenbord en muis aansluiten. Tot slot voeden we de Banana Pi m.b.v. een micro USB kabel.

Hiermee zijn de hardware voorbereidingen klaar.

Stap 2. Banana Pi voorzien van Raspbian (9) Stretch image

Ik heb deze stap uitgevoerd m.b.v. een Windows laptop, zie voor de beschrijving voor hoe te werk te gaan met een Linux machine de wiki van Banana Pi: https://wiki.banana-pi.org/Getting_Started_with_M2_Zero

Allereerst downloaden we de Raspbian Stretch image vanaf de site van Banana Pi m.b.v. je laptop of desktop. Download de file https://drive.google.com/file/d/1Xk86WchdJemKb4ltCX0AB9wRj5NJcZL1/view. Om deze image op de SD kaart te kunnen zetten kun je gebruik maken van Balena Etcher. Installeer deze software vanaf: https://www.balena.io/etcher/

Kies voor “Download for Windows (x86/x64)” en wacht tot de software is gedownload. Open daarna het gedownloade bestand en accepteer de Licentieovereenkomst door op “Akkoord” te klikken.

Nadat de software is geïnstalleerd start Balena Etcher automatisch. Het volgende scherm verschijnt:

Kies voor “Flash from file”, en selecteer de Raspbian Stretch image file die je net hebt gedownload en stop de SD card in de cardreader van je laptop/desktop

Als het goed is wordt je SD card direct herkent, klik op “Flash!” om het flashen te starten. Er verschijnt daarna een scherm met het verzoek om Windows Command script toestemming te geven iets aan je systeem te veranderen, klik op “Akkoord”. De image file wordt nu naar je SD-card geschreven, en er wordt automatisch geverifieerd of dit goed gegaan is. Na verloop van tijd verschijnt onderstaande melding dat alles succesvol is verlopen. Je kunt nu de SD kaart weer uit de kaartlezer halen

Stap 3. Raspbian Stretch voor de eerste keer opstarten

Stop de SD kaart in de daarvoor bestemde houder van de Banana Pi, kan maar op één manier, dus kan niet fout gaan. Sluit vervolgens de Banana Pi aan op de voeding en zet de monitor aan. Als alles goed is gegaan zie je je monitor het Banana Pi logo en daarna vol lopen met opstartinformatie. Na verloop verschijnt de desktop omgeving.

(De volgende afbeeldingen zijn schermafdrukken van Putty, een terminal programma, en zijn achteraf gemaakt.)

Als eerste gaan we uiteraard de Banana Pi verbinden met de WiFi. Hiervoor moeten we weten hoe de WiFi interface heet van de Banana Pi. Voer hiervoor het volgende commando uit.

root@radio:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 16:a2:ef:7b:68:b1 brd ff:ff:ff:ff:ff:ff
3: ifb0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 32
    link/ether 66:71:d9:15:9b:30 brd ff:ff:ff:ff:ff:ff
4: ifb1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 32
    link/ether 46:96:fa:e6:ad:94 brd ff:ff:ff:ff:ff:ff
5: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether e2:ae:d4:ba:01:0f brd ff:ff:ff:ff:ff:ff
6: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/ipip 0.0.0.0 brd 0.0.0.0
7: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether ac:6a:a3:1f:cc:bf brd ff:ff:ff:ff:ff:ff

De naam van de WiFi interface begin altijd met de letter w, dus die van de Banana Pi heet dus “wlan0”. Check of de interface nu actief is:

root@radio:~# ip a | grep wlan0
7: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

De status is “UP”, dus we kunnen verder met een scan van het WiFi-netwerk:

root@radio:~# iwlist wlan0 scan| grep ESSID
                    ESSID:"H369ABF8AF9"

Mijn WiFi netwerk wordt gevonden en heet “H369ABF8AF9”, vervolgens gaan we deze SSID en het bijbehorende wachtwoord toevoegen aan de WiFi configuratie:

root@radio:~# wpa_passphrase <jou SSID> <jou WiFi password>
network={
        ssid="<jouw SSID>"
        #psk="<jouw WiFi password>"
        psk=9a3905058255fb51ba87c9d02d0ca74dd94fd48baab0e0cc22ba9d5c40a2333d
}

Bovenstaande informatie wordt weggeschreven in het bestand /etc/wpa_supplicant/wpa_supplicant.conf. We gaan nu de Banana Pi connectie laten maken met de WiFi:

root@radio:~# wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0
Successfully initialized wpa_supplicant
Failed to create interface p2p-dev-wlan0: -22 (Invalid argument)
nl80211: Failed to create a P2P Device interface p2p-dev-wlan0
P2P: Failed to enable P2P Device interface
wlan0: Trying to associate with 2c:91:ab:e4:f2:1d (SSID='H369ABF8AF9' freq=2462 MHz)
wlan0: Associated with 2c:91:ab:e4:f2:1d
wlan0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
wlan0: WPA: Key negotiation completed with 2c:91:ab:e4:f2:1d [PTK=CCMP GTK=CCMP]
wlan0: CTRL-EVENT-CONNECTED - Connection to 2c:91:ab:e4:f2:1d completed [id=0 id_str=]

De connectie is gemaakt, stop wpa_supplicant door op <ctrl>-<c> te drukken. We gaan dit proces in de background starten door de optie -B toe te voegen:

root@radio:~# wpa_supplicant -B -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0

maar nu moet de Banana Pi nog een IP-address krijgen van de DHCP server:

root@radio:~# dhclient wlan0

Check of de Banana Pi een IP-address heeft gekregen met:

root@radio:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 16:a2:ef:7b:68:b1 brd ff:ff:ff:ff:ff:ff
3: ifb0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 32
    link/ether 66:71:d9:15:9b:30 brd ff:ff:ff:ff:ff:ff
4: ifb1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 32
    link/ether 46:96:fa:e6:ad:94 brd ff:ff:ff:ff:ff:ff
5: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether e2:ae:d4:ba:01:0f brd ff:ff:ff:ff:ff:ff
6: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/ipip 0.0.0.0 brd 0.0.0.0
7: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether ac:6a:a3:1f:cc:bf brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.97/24 brd 192.168.0.255 scope global dynamic wlan0
       valid_lft 86342sec preferred_lft 86342sec
    inet6 fe80::ae6a:a3ff:fe1f:ccbf/64 scope link
       valid_lft forever preferred_lft forever

Je ziet dat mijn Banana Pi het ip-address 192.168.2.97 heeft gekregen. Uiteraard zou bij een reboot het proces wpa_supplicant gestopt worden, en na reboot niet opnieuw gestart. Daarom gaan we ervoor zorgen dat zowel wpa_supplicant als dhclient automatisch gestart worden bij een reboot. Kopieer hiervoor de standaard service file van wpa_supplicant en pas deze aan:

root@radio:~# cp /lib/systemd/system/wpa_supplicant.service /etc/systemd/system/wpa_supplicant.service
root@radio:~# vi /etc/systemd/system/wpa_supplicant.service

Pas het volgende aan in de file /etc/systemd/system/wpa_supplicant.service:

  • Pas de regel startende met ExecStart als volgt aan:
ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0
  • en voeg onder deze regel het volgende toe:
Restart=always

De file ziet er na deze aanpassingen als volgt uit:

root@radio:~# cat /etc/systemd/system/wpa_supplicant.service
[Unit]
Description=WPA supplicant
Before=network.target
After=dbus.service
Wants=network.target

[Service]
Type=dbus
BusName=fi.epitest.hostap.WPASupplicant
ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0
Restart=always

[Install]
WantedBy=multi-user.target
Alias=dbus-fi.epitest.hostap.WPASupplicant.service

Open vervolgens een nieuwe file voor de dhclient service:

root@radio:~# vi /etc/systemd/system/dhclient.service

en kopieer de volgende inhoud in de file:

[Unit]
Description= DHCP Client
Before=network.target
After=wpa_supplicant.service

[Service]
Type=forking
ExecStart=/sbin/dhclient wlan0 -v
ExecStop=/sbin/dhclient wlan0 -r
Restart=always
 
[Install]
WantedBy=multi-user.target

Tot slot gaan we services activeren:

root@radio:~# systemctl daemon-reload
root@radio:~# systemctl start wpa_supplicant.service
root@radio:~# systemctl enable wpa_supplicant.service
root@radio:~# systemctl start dhclient.service
root@radio:~# systemctl enable dhclient.service

Reboot de Banana Pi, en check of hij automatisch connectie maakt met het WiFi netwerk, en een IP-address toegewezen heeft gekregen:

root@radio:~# reboot

Stap 4. Distro-upgrade naar Raspbian (10) Buster

Voordat we de update starten dienen we eerst het root filesysteem te vergroten. Standaard is die namelijk maar zo’n 7Gb groot, en daarmee te klein om en het huidige besturingssysteem te bevatten, en de download van het nieuwe besturingssysteem. Dit terwijl je SD-card waarschijnlijk nog voldoende vrije ruimte bevat. Start hiervoor fdisk op:

pi@radio:~ $ sudo fdisk /dev/mmcblk0

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Toets p in om een overzicht te krijgen van de beschikbare partities

Command (m for help): p
Disk /dev/mmcblk0: 29.7 GiB, 31914983424 bytes, 62333952 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: 0x6fa2d034

Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1      204800   729087   524288  256M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      729088 62333951 61604864 29.4G 83 Linux

Maak notitie van de start sector van de Linux partitie, in mijn geval dus 729088. Verwijder de Linux partitie met het commando d:


Command (m for help): d
Partition number (1,2, default 2): 2

Nu maken we een nieuwe partitie aan, met dezelfde start sector als de “oude” Linux partitie, dus geef het commando n. Kies voor “p primary”, en voor partitie nummer 2. Vul bij First sector het start sector nummer in van de oude Linux partitie die je genoteerd hebt, in mijn geval dus 729088. Als laatste sector kies je voor de default. De partitie wordt aangemaakt.

Command (m for help): n
Partition type
   p   primary (2 primary, 0 extended, 2 free)
   e   extended (container for logical partitions)
Select (default p):

Using default response p.
Partition number (2,3, default 2):
First sector (2048-62333951, default 2048): 729088
Last sector (729089-62333951, default 62333951):

Command (m for help):

En schrijf de partitie tabel wel met het commando w:

Command (m for help): w

Reboot de BPI, en log opnieuw in

root@radio:~# reboot

Nadat je opnieuw bent ingelogd breiden we het root filesystem uit met:

sudo resize2fs /dev/mmcblk0p2

Check nu de beschikbare ruimte:

pi@radio:~ $ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              182392       0    182392   0% /dev
tmpfs              50196    2472     47724   5% /run
/dev/mmcblk0p2  30323692 6817272  22191044  24% /
tmpfs             250960       0    250960   0% /dev/shm
tmpfs               5120       4      5116   1% /run/lock
tmpfs             250960       0    250960   0% /sys/fs/cgroup
/dev/mmcblk0p1    261868   66280    195588  26% /boot
tmpfs              50192       0     50192   0% /run/user/109
tmpfs              50192       0     50192   0% /run/user/0
tmpfs              50192       0     50192   0% /run/user/1000

In mijn geval heeft /dev/mmcblk0p2 het root filesystem 76% vrije ruimte, genoeg voor de volgende stappen.

Log in op de Banana Pi en open de file /etc/apt/sources.list:

root@radio:~# vi /etc/apt/sources.list

Verander overall waar nu “stretch” staat in “buster”, de file ziet er dan als volgt uit:

pi@bpi-iot-ros-ai: $ cat sources.list
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi

Open vervolgens de file /etc/apt/sources.list.d/raspi.list

pi@radio: $ sudo vi /etc/apt/sources.list.d/raspi.list

En verander ook hierin “stretch” in “buster”. De file ziet er dan als volgt uit:

pi@radio: $ cat /etc/apt/sources.list.d/raspi.list
deb http://archive.raspberrypi.org/debian/ buster main ui
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspberrypi.org/debian/ stretch main ui

Nu kunnen we de upgrade starten met:

root@radio:~# sudo apt-get update
root@radio:~# sudo apt-get upgrade
root@radio:~# sudo apt-get dist-upgrade

Blijf bij het systeem, want zo nu en dan vraagt het upgradeproces of je bepaalde bestanden wilt behouden of overschrijven met een nieuwe (lege) versie, kies altijd voor de default. Op die manier blijven de configuratiewijzigingen die we tot nu toe hebben doorgevoerd bewaard. De upgrade neemt in totaal wel 20 tot 30 minuten in beslag. Als het upgrade proces klaar is reboot je de Banana Pi:

root@radio:~# sudo reboot

Log in op de Banana Pi en check of het operating systeem nu inderdaad Raspbian 10 Buster is:

pi@radio: $ hostnamectl
   Static hostname: radio
         Icon name: computer
        Machine ID: d2f9276347354784998af9e9550d7537
           Boot ID: f5f90be250ea4ffeafed6541133edb91
  Operating System: Raspbian GNU/Linux 10 (buster)
            Kernel: Linux 4.4.55-BPI-M2Z-Kernel
      Architecture: arm

Gelukt ! Echter bij controle van de functionaliteit kwam ik er al snel achter dat de bluetooth controller van de BPI niet werd herkend. Tijd mee zitten puzzelen en op internet een “hack” gevonden die dit oplost. Probleem lijkt hem te zitten in de “Bluez” en “Bluetooth” packages die elkaar in de weg zitten. Daarom stoppen we de bluetoothd services, deinstalleren we de bluetooth packages en her installeren we de bluez en blueman packages:

pi@radio: $ sudo systemctl stop bluetooth
pi@radio: $ sudo systemctl disable bluetooth
pi@radio: $ sudo apt-get remove --purge bluetooth
pi@radio: $ sudo apt-get install --reinstall bluez blueman

De “hack” dient uitgevoerd te worden door een niet-root gebruiker, en kan daarom niet in de normale boot cycles in rc.local, systemd oid opgenomen worden. Daarom zetten we voor een tools de rechten goed met

pi@radio: $ sudo chmod u+s /usr/bin/hciattach

pi@radio: $ sudo chmod u+s /bin/hciconfig
pi@radio: $ sudo chmod u+s /usr/sbin/rfkill

Vervolgens maken we shell script aan die de “hack” uitvoert:

pi@radio: $ sudo vi /home/pi/bluetooth.sh

en kopieer onderstaande inhoud in dit shell script:

#!/bin/bash

while [ ! -f /sys/class/rfkill/rfkill0/state ]

do

  `/bin/sleep 1`
done

/usr/sbin/rfkill unblock all

/usr/bin/hciattach /dev/ttyS1 bcm43xx 1500000

/usr/bin/hciattach /dev/ttyS1 bcm43xx 1500000
/usr/bin/hciattach any

/bin/hciconfig hci0 up

ook hiervan zetten we de rechten even goed met:

pi@radio: $ sudo chmod u+s /home/pi/bluetooth.sh
pi@radio: $ sudo chmod +x /home/pi/bluetooth.sh

Vervolgens gaan we dit script laten uitvoeren zodra de desktop omgeving wordt gestart:

pi@radio: $ sudo vi /home/pi/.config/autostart/bluetooth.desktop

en kopieer de volgende inhoud in deze file:

[Desktop Entry]
Name=Bluetooth
Exec=/home/pi/bluetooth.sh

reboot en check of de bluetooth adapter nu wel wordt herkend met:

pi@radio: $ sudo bluetoothctl list
Controller AA:AA:AA:AA:AA:AA radio [default]

Vervolgens kun je met behulp van de bluetooth manager op je desktop omgeving of vanaf de cli met bluetoothctl (zie hiervoor ook mijn tutorial voor de Vintage radio) connectie maken met je bluetooth devices.

Stap 5. Distro-upgrade van Raspbian 10 Buster naar Raspbian 11 Bullseye

Feitelijk dezelfde stappen als hierboven beschreven in stap 4. En waarschijnlijk had ik ook wel in één keer kunnen migreren van Raspbian 9 Stretch naar Raspbian 11 Bullseye, maar stapje voor stapje leek me beter.

Log in op de Banana Pi en open de file /etc/apt/sources.list:

root@radio:~# vi /etc/apt/sources.list

Verander de twee regels die je in de vorige stap hebt toegevoegd zodat “buster” in “bullseye” veranderd.

De file ziet er dan als volgt uit:

pi@bpi-iot-ros-ai: $ cat sources.list
deb http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi

Open vervolgens de file /etc/apt/sources.list.d/raspi.list

pi@radio: $ sudo vi /etc/apt/sources.list.d/raspi.list

En verander ook hierin “stretch” in “buster”, en verwijder “ui” achter “main”. De file ziet er dan als volgt uit:

pi@radio: $ cat /etc/apt/sources.list.d/raspi.list
deb http://archive.raspberrypi.org/debian/ bullseye main
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspberrypi.org/debian/ stretch main ui

Nu kunnen we de upgrade starten met:

root@radio:~# apt-get update
root@radio:~# apt-get upgrade
root@radio:~# apt-get dist-upgrade

Noot: Bij de laatste stap in het proces, de distributie upgrade (dist-upgrade) gaf apt-get bij mij een foutmelding dat een afhankelijkheid van lib-gcc niet klopte, hij verwachte een nieuwere versie van gcc-base-8 dan beschikbaar. Dit opgelost met het commando: apt-get install gcc-base-8. Naast de installatie van gcc-base-8 ging het systeem direct verder met de distributie upgrade en het uiteindelijk resultaat was een volledige upgrade naar Raspbian 11 Bullseye.

Blijf bij het systeem, want zo nu en dan vraagt het upgradeproces of je bepaalde bestanden wilt behouden of overschrijven met een nieuwe (lege) versie, kies altijd voor de default. Op die manier blijven de configuratiewijzigingen die we tot nu toe hebben doorgevoerd bewaard. De upgrade neemt in totaal wel 20 tot 30 minuten in beslag. Als het upgrade proces klaar is reboot je de Banana Pi:

root@radio:~# reboot

Log in op de Banana Pi en check of het operating systeem nu inderdaad Raspbian 11 Bullseye is:

root@radio:~# hostnamectl
   Static hostname: radio
         Icon name: computer
        Machine ID: b1762bb2a9d8431a988c6cac5ff8f356
           Boot ID: 75304faf0e7940ad9a7f389a7e4f12d3
  Operating System: Raspbian GNU/Linux 11 (bullseye)
            Kernel: Linux 4.4.55-BPI-M2Z-Kernel
      Architecture: arm

Gelukt ! Veel plezier met je Banana Pi Zero M2 met Raspbian 11 Bullseye !

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *