Archlinux auf dem Raspberry Pi

Diese Anleitung zum Installieren und Einstellen des Archlinux auf dem Raspberry Pi ist aus vielen Versuchen und unter Zuhilfenahme der deutschen und englischen Archlinux-Wikis und jeder Menge mehr oder weniger zufällig aufgefundener Forenbeiträge entstanden.
Sie wird stetig und bei Bedarf fortgeführt.

ArchLinuxArm unterstützt ARMV6 leider nicht mehr, deswegen bin ich für die alten RaspBerry Pis auf Raspberry Pi OS umgestiegen. Trotzdem lasse ich diese Anleitung mal hier stehen, vielleicht hilft sie noch jemandem weiter.
Quelle : http://archlinuxarm.org/platforms/armv6/raspberry-pi, Tab „Installation“ (existiert leider nicht mehr)

Mit gparted auf sdX (X ist das Laufwerk der SD-Karte)
1. primäre Partition mit fat32, 100Mbyte
2. primäre Partition mit dem Rest mit etx4
anlegen und beide formatieren.

Folgendes als "root" !

Verzeichnisse anlegen und mounten :
> mkdir boot
> mount /dev/sdX1 boot
> mkdir root
> mount /dev/sdX2 root

ArchLinux-Archiv herunterladen :
> wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-latest.tar.gz

Achtung : wenn schon eine Datei namens ArchLinuxARM-rpi-latest.tar.gz im aktuellen Verzeichnis vorhanden ist, hängt wget einen Punkt und eine laufende Nummer an den Dateinamen an. Deswegen entpackt der folgende Befehl nicht unbedingt das zuletzt heruntergeladene Archiv! Darauf sollte man unbedingt achten!

Entpacken :
> tar -xvzf ArchLinuxARM-rpi-latest.tar.gz -C root
> sync

Boot-Dateien in die Boot-Partition verschieben :
> mv root/boot/* boot

Unmounten :
> umount boot root

Ab hier auf dem Raspberry Pi

SD-Karte entnehmen und in einen RaspberryPi stecken, 5V einstecken ...

Erster Login : alarm alarm
Superuser : root root

# su

Sprache einstellen :
# echo LANG=de_DE.UTF-8 > /etc/locale.conf
# echo KEYMAP=de-latin1 > /etc/vconsole.conf
- in /etc/locale.gen die Raute vor de_DE.UTF-8 entfernen
# nano /etc/locale.gen
# locale-gen
# shutdown -r now

Passwort ändern :
# passwd

User anlegen :
# useradd -m -g users -s /bin/bash <name>
# passwd <name>
# shutdown -r now

Standard-User löschen :
# userdel alarm

Adresse suchen :
> ifconfig
Über Netzwerk, z.B mit puTTy als <name> (vorher angelegter User) einloggen. Dann mit
# su
in den Root-Modus wechseln.

Auf einer Konsole mehrfach
# ls -R /.
ausführen, um Entropie für bessere Zufallszahlen zu erzeugen.
- während dessen auf einer anderen Konsole den Schlüssel für pacman generieren :
# pacman-key --init
# pacman-key --populate archlinuxarm

Linux auf aktuellen Stand bringen (Ethernet muss angeschlossen sein) :
# pacman -Syu

Zeitzone einstellen :
# ln -fs /usr/share/zoneinfo/Europe/Berlin /etc/localtime
- in /etc/timezone "Europe/Berlin" einfügen
# nano /etc/timezone
Europe/Berlin

Zeitserver ergänzen :
# pacman -S ntp
- in /etc/ntp.conf vor den "server"-Zeilen eintragen :
# nano /etc/ntp.conf
server ptbtime1.ptb.de iburst
- ntp neu starten :
# systemctl restart ntpd.service

Rechnername setzen :
- in /etc/hostname Name anpassen
# nano /etc/hostname

Ethernet mit fester IP

Nur für die aktuelle Session
- dhcp stoppen :
# systemctl stop dhcpcd.service
- Device identifizieren (fängt mit 'e' an) :
# ip link
...
eth0 : ... state UP
...
- wenn state DOWN erstmal aktivieren :
# ip link set eth0 up
- Adresse setzen :
# ip addr add ip_address/mask_bits dev interface_name
- Beispiel :
# ip addr add 192.168.1.2/24 dev eth0
- Gateway setzen :
# ip route add default via ip_address
- Nameserver und Domain setzen :
# nano /etc/resolv.conf
nameserver <nameserver ip>
search <domain>

Dauerhafte Einstellung
- dhcp stoppen und abschalten (nicht unbedingt nötig ?):
# systemctl stop dhcpcd.service
# systemctl disable dhcpcd.service

# nano /etc/systemd/network/eth0.network
[Match]
Name=eth0

[Network]
DHCP=no

- Netzwerk-Konfiguration
# mkdir /etc/conf.d
# nano /etc/conf.d/net-conf-eth0
address=192.168.1.2
netmask=24
broadcast=192.168.1.255
gateway=192.168.1.1

- systemd einrichten (in : /etc/systemd/system/network@.service )
[Unit]
Description=Network startup (%i)
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/conf.d/net-conf-%i
ExecStart=/sbin/ip link set dev %i up
ExecStart=/sbin/ip addr add ${address}/${netmask} broadcast ${broadcast} dev %i
ExecStart=/sbin/ip route add default via ${gateway}
ExecStop=/sbin/ip addr flush dev %i
ExecStop=/sbin/ip link set dev %i down

[Install]
WantedBy=multi-user.target

- Einschalten und Starten :
# systemctl enable network@eth0.service
Created symlink /etc/systemd/system/multi-user.target.wants/network@eth0.service /etc/systemd/system/network@.service.
# systemctl start network@eth0.service
s.a. https://wiki.archlinux.de/title/Statische_IP

WLan mit fester IP

- dhcp stoppen :
# systemctl stop dhcpcd.service
- Device identifizieren (fängt mit 'w' an) :
# ip link
...
wlan0 : ... state DOWN
...
- wenn state DOWN erstmal aktivieren :
# ip link set wlan0 up
- Schlüsseldatei sichern :
# cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf_org
- Schlüssel setzen :
# wpa_passphrase essid passphrase > /etc/wpa_supplicant/wpa_supplicant.conf
- Inferface erzeugen (in : /etc/conf.d/network-wireless@interface) :
address=192.168.0.10
netmask=24
broadcast=192.168.0.255
gateway=192.168.0.1
- systemd einrichten (in : /etc/systemd/system/network-wireless@.service) :
[Unit]
Description=Wireless network connectivity (%i)
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/conf.d/network-wireless@%i

ExecStart=/usr/bin/ip link set dev %i up
ExecStart=/usr/bin/wpa_supplicant -B -i %i -c /etc/wpa_supplicant/wpa_supplicant.conf
ExecStart=/usr/bin/ip addr add ${address}/${netmask} broadcast
${broadcast} dev %i
ExecStart=/usr/bin/ip route add default via ${gateway}

ExecStop=/usr/bin/ip addr flush dev %i
ExecStop=/usr/bin/ip link set dev %i down

[Install]
WantedBy=multi-user.target
- Einschalten und Starten :
# systemctl enable network-wireless@wlan0.service
# systemctl start network-wireless@wlan0.service
s.a. https://wiki.archlinux.org/index.php/Wireless_network_configuration

Compiler und Make


# pacman -S gcc
# pacman -S make

Serielle Schnittstelle


Die serielle Schnittstelle verbirgt sich hinter dem Device /dev/ttyAMA0. Um sie benutzen zu können muss zuerst die Datei /boot/cmdline.txt geändert werden. Die beiden Einträge zu ttyAMA0 werden gelöscht :
# nano /boot/cmdline.txt
vorher :
root=/dev/mmcblk0p2 rw rootwait console=ttyAMA0,115200 console=tty1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 kgdboc=ttyAMA0,115200 elevator=noop IP=none
nachher :
root=/dev/mmcblk0p2 rw rootwait console=tty1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 elevator=noop IP=none
Dann gilt es die Verwendung durch das System abzustellen :
# systemctl disable serial-getty@ttyAMA0.service

© Uwe Jantzen 28.10.24