Debian 10 auf ALIX-Board mit Debootstrap installieren

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.

ALIX 2D2

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.

Quellen

6 Kommentare

  1. 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

  2. Vielen Dank. Hat wirklich sehr gut, auf Anhieb, problemlos funktioniert. Ältere Hardware am Leben erhalten wird immer wichtiger.

    1. 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!

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht.

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