Auch auf alten Embedded-Boards wie dem ALIX von PC Engines können aktuelle Linux-Distributionen starten. In diesem Beitrag zeige ich, wie Debian 10 auf einem ALIX2D2 mittels „Debootstrap“ installiert wird. Die Schritte können problemlos auch auf andere Boards übertragen werden, lediglich die Netzwerk- und LED-Konfiguration kann abweichen.
Voraussetzungen
- ALIX-Board (hier ein ALIX2D2)
- Linux-Computer (für diese Anleitung nutze ich ein altes Notebook mit Debian Buster)
- CF-Karte und CF-Kartenlesegerät
Optional
- Nullmodemkabel und serielle Schnittstelle an dem Linux-Computer, z.B. über USB-Adapter (für BIOS-Update und -Konfiguration, sowie Troubleshooting)
- Software für serielle Kommunikation, wie z.B. Minicom
BIOS-Update (optional)
Der folgende Artikel beschreibt den Updatevorgang unter Windows und Linux: BIOS-Update auf ALIX2D durchführen
BIOS-Konfiguration
(nur möglich, wenn serielle Schnittstelle und Nullmodem-Kabel verbunden sind)
1. Identifizieren der seriellen Schnittstelle:
sudo dmesg | grep tty [ 0.276665] console [tty0] enabled [ 5418.786949] usb 2-1.2: ch341-uart converter now attached to ttyUSB0
2. Starten von Minicom auf der seriellen Schnittstelle
sudo minicom -D /dev/ttyUSB0 -b 38400 -D gibt den Gerätenamen an, in meinem Fall den USB-Seriell-Adapter -b legt die Baudrate fest, standardmäßig beträgt diese 38400 (kann im BIOS angepasst werden
3. ALIX-Board mit Strom versorgen / starten
4. Während des Speichertests die Taste S drücken
5. LBA-Modus mit L aktivieren
6. Ultra-DMA-Modus mit U aktivieren
7. Beenden der Konfiguration mit Q
8. Änderungen speichern mit Y
Vorbereiten der CF-Karte
Die CompactFlash-Karte in das Kartenlesegerät stecken und dieses an den Linux-PC anschließen. Nun muss der Gerätename identifiziert werden (meist /dev/sdc):
sudo fdisk -l Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors [...] Disk /dev/sdc: 3,8 GiB, 4009549824 bytes, 7831152 sectors Disk model: Compact Flash 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: 0x891b618d Device Boot Start End Sectors Size Id Type /dev/sdc1 * 512 33279 32768 16M 83 Linux /dev/sdc2 33792 558079 524288 256M 83 Linux
Die hier genutzte Karte hat bereits zwei Partitionen, welche im nächsten Schritt gelöscht werden. Danach legen wir eine neue primäre Partition an und markieren diese als bootfähig:
sudo fdisk /dev/sdc 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. Command (m for help): d Partition number (1,2, default 2): Partition 2 has been deleted. Command (m for help): d Selected partition 1 Partition 1 has been deleted. 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): First sector (2048-7831151, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-7831151, default 7831151): Created a new partition 1 of type 'Linux' and of size 3,8 GiB. Command (m for help): a Selected partition 1 The bootable flag on partition 1 is enabled now. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. Partition #1 contains a ext3 signature. Do you want to remove the signature? [Y]es/[N]o: y
Jetzt formatieren wir die neu erstellte Partition (/dev/sdc1) mit EXT3. Der letzte Schritt kann je nach Karte mehrere Minuten dauern.
sudo mkfs.ext3 /dev/sdc1 mke2fs 1.44.5 (15-Dec-2018) Creating filesystem with 978638 4k blocks and 244800 inodes Filesystem UUID: 0227d814-f477-41f1-a5a5-3e50ef568f2a Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done
Installation des Betriebssystems
Die CF-Karte kann nun gemountet werden. Mithilfe von debootstrap installieren wir unser frisches Debian auf dem Gerät.
mkdir -p /mnt/cfcard sudo mount /dev/sdc1 /mnt/cfcard sudo debootstrap --arch i386 buster /mnt/cfcard http://ftp.de.debian.org/debian/ I: Target architecture can be executed [...] I: Base system installed successfully.
Nun werden folgende Verzeichnisse gemountet und das Root-Verzeichnis auf die CF-Karte umgestellt. Somit können Befehle sozusagen in einer Sitzung auf der Karte ausgeführt werden.
sudo mount proc /mnt/cfcard/proc -t proc sudo mount sysfs /mnt/cfcard/sys -t sysfs sudo mount -o bind /dev /mnt/cfcard/dev sudo chroot /mnt/cfcard /bin/bash
Beim Installieren von Paketen erscheinen nun immer Fehler. Um diese zu vermeiden, werden die Spracheinstellungen konfiguriert. Im Menü sollte jeweils die Option „de_DE.UTF-8“ gewählt werden.
apt install locales -y [...] Generation complete. dpkg-reconfigure locales [...] de_DE.UTF-8... done Generation complete.
apt install console-setup -y
dpkg-reconfigure tzdata Current default time zone: 'Europe/Berlin' Local time is now: Mon Sep 30 19:45:30 CEST 2019. Universal Time is now: Mon Sep 30 17:45:30 UTC 2019.
Im nächsten Schritt sollte ein Systemname vergeben werden.
echo HierNamenEinsetzen > /etc/hostname
Nun muss die Datei „fstab“ angepasst werden. Diese enthält Informationen zum Einhängen von Partitionen:
echo "proc /proc proc defaults 0 0" >> /etc/fstab echo "sysfs /sys sysfs defaults 0 0" >> /etc/fstab echo "/dev/sda1 / ext2 noatime,errors=remount-ro 0 1" >> /etc/fstab
Die Kernelkonfiguration wird vor der Installation erstellt:
nano /etc/kernel-img.conf
# Kernel image management overrides # See kernel-img.conf(5) for details do_symlinks = yes relative_links = yes do_bootloader = no do_bootfloppy = no do_initrd = yes link_in_boot = no
Kernel und Bootloader können in einem Schritt installiert werden, bei der Frage nach dem Gerät für die GRUB-Installation muss /dev/sdc, bzw. die eigene CF-Karte ausgewählt werden.
apt install linux-image-686 grub-pc -y
Da in der Standardkonfiguration weder die Ausgabe des Bootloaders noch die des Kernels über die serielle Schnittstelle übertragen werden, muss die GRUB-Konfiguration angepasst werden (die drei fett markierten Zeilen müssen geändert oder hinzugefügt werden)
nano /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="verbose console=ttyS0,38400n8 reboot=bios" GRUB_CMDLINE_LINUX="" # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel th$ # the memory map information from GRUB (GNU Mach, kernel of FreeBS$ #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal (grub-pc only) GRUB_TERMINAL=serial GRUB_SERIAL_COMMAND="serial --unit=0 --speed=38400" # The resolution used on graphical terminal # note that you can use only modes which your graphic card support$ # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" paramet$ #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1"
Die geänderten Einstellungen müssen noch übernommen werden:
grub-install /dev/sdc update-grub
Die Netzwerkkonfiguration kann nun wie gewünscht angepasst werden. Nicht vergessen: Der Adapter an den USB-Ports ist „enp0s9“.
nano /etc/network/interfaces
# 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 enp0s9 iface enp0s9 inet dhcp # bei Modellen mit drei Ports kann die Raute vor den naechsten Zeilen entfernt werden # auto enp0s10 # iface enp0s10 inet dhcp auto enp0s11 iface enp0s11 inet dhcp
Jetzt kann ALIX eine IP-Adresse erhalten – fehlt noch der SSH-Zugang. Auch das Anmelden des Root-Nutzers wird erlaubt, dies sollte aber später unbedingt geändert werden!
apt install openssh-server nano /etc/ssh/sshd_config
In der sshd_config muss nun die „PermitRootLogin“-Zeile gesucht werden und folgendermaßen angepasst werden:
PermitRootLogin yes
Zuletzt sollte noch ein Passwort vergeben werden:
passwd
Das System ist nun startklar. Die CF-Karte kann ausgeworfen werden und an das ALIX-Board angeschlossen werden. Wurden alle Schritte korrekt durchgeführt, startet nun ein brandneues Debian Buster.
Noch zu erledigen ist die Konfiguration der LEDs zum Anzeigen der Aktivität, dies wird jedoch in einem kommenden Beitrag thematisiert.
Weiter oben muss noch korrigiert werden:
sudo mkfs.ext2 /dev/sdc1 (statt ext3)
Eine fantastische Anleitung, die mir sehr geholfen hat, mein altes Lieblingsprojekt am Laufen zu halten. ABER: Bitte unbedingt korrigieren: Es muss (bei Installation auf einer CF-Card) „hdX“ heissen, statt „sdX“. Hat mich mehrere Tage gekostet, den Fehler zu finden 🙂
Also in /etc/fstab
/dev/hda1 / ext2 noatime,errors=remount-ro 0 1
Vielen Dank. Hat wirklich sehr gut, auf Anhieb, problemlos funktioniert. Ältere Hardware am Leben erhalten wird immer wichtiger.
Besten Dank für diese Anleitung – damit hat einer meiner ALIX.2D13 nun wieder eine Aufgabe … Danke!
Moin Tobias
Vielen herzlichen Dank für die Anleitung, hat prima funktioniert. Dank Dir haben meine beiden Alix 2D13 demnächst wieder eine sinnvolle Verwendung – mit sicherer Software.
DANKE!
https://libranet.de/display/0b6b25a8-195e-d207-4499-a14058187527
Hallo Paul,
vielen Dank für deinen Kommentar und die Erwähnung bei libranet! Freut mich, wenn dir die Anleitung gefallen hat. Auch ich finde, dass die Geräte zu schade zum Wegwerfen sind. Als Pihole oder für andere leichte Aufgaben taugen sie noch allemal!