Raspberry Pi OS installieren
Hardware
Auf diesem Gerät soll ein Headless-System im Dauerbetrieb u.a. als Git-Server laufen.
Alles fängt mit dem Herunterladen des Raspberry Pi OS Lite von der Webseite Raspberry Pi - Operating system images an. Das wird dann erstmal entpackt.
Dann folgt das Übertragen auf eine SD-Karte.
Statt "2023-12-11-raspios-bookworm-armhf-lite.img" ist der Name des heruntergeladenen Images
einzusetzen, sdX ist das Laufwerk der SD-Karte
$ sudo dd if=2023-12-11-raspios-bookworm-armhf-lite.img of=/dev/sdX bs=16M status=progress
$ sync
Ab hier auf dem RaspPi
Wenn das alles abgeschlossen ist kommt die SD-Karte in den RaspPi. Der muss zunächst noch mit
einer Tastatur ausgerüstet und an einen Monitor angeschlossen sein.
Nach dem Einschalten passt er zuerst das Filesystem an die Größe der SD-Karte an und
erledigt ein paar weitere Sachen. Dann bootet er neu.
Als nächstes kommt ein Menü zum Einstellen der Tastaturbelegung. Hier wähle ich dreimal
"German" aus. Dann werden der Benutzername und das Passwort eingegeben und bestätigt.
Grundsätzliches Einrichten mit raspi-config
Mit diesen Daten meldet man sich schließlich an und kann dann das erste Einrichten vornehmen.
$ sudo raspi-config
Unter "1 System Options" ist eigentlich nur der Punkt "S4 Hostname" nötig. Hier gibt man den
gewünschten Rechner-Name ein. Alle anderen "System Options" spielen auf einem so alten RaspPi im
headless-Betrieb keine Rolle.
"2 Display Options" kann man ignorieren, das System soll ja headless laufen.
Bei "3 Interface Options" muss man "I2 SSH" einschalten. Das dauert dann ein bisschen. Den "I5 Serial
Port" kann amn abschalten. Alle anderen Sachen stehen schon richtig.
Von den "4 Performance Options" lässt man besser die Finger. So wird der RaspPi im Dauerbetrieb
im Gehäuse dann nicht übermäßig warm.
Die "5 Localization Options" sollte man schon durchgehen, die Einstellungen machen das spätere
Arbeiten bequemer.
Bei "L1 Locale" stellt man die Systemsprache ein. Bei "de_DE.UTF-8 UTF-8" drückt man einmal die
Leertaste. Es erscheint ein Stern im Auswahlkästchen. Den Stern bei "en_GB.UTF-8 UTF-8" entfernt
man auf die gleiche Weise.
Im nächsten Menü wählt man wieder "de_DE.UTF-8" aus. Danach passiert erstmal eine ganze
Weile nichts, im Hintergrund wird die Lokalisierung eingestellt.
"L2 Timezone" stellt man auf "Europe" und "Berlin". Das Keyboard wurde ja schon vorher richtig
eingestellt, zumal man es im headless Mode ohnehin nicht braucht.
Schließlich braucht es noch eine Einstellung bei "6
Advanced Options". Mit "AA Network Config" wird "1 dhcpcd" eingestellt. Auch hier dauert die Reaktion
etwas Gibts in "bookworm" nicht mehr.
Alle weiteren Optionen kann man so lassen, wie sie sind. Noch einmal neu booten ...
Nun kommt die Kommandozeile
Jetzt holt man sich die aktuelle IP-Adresse des RaspPi :
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default
qlen 1000
link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff
inet 192.168.___.___/24 brd 192.168.___.255 scope global dynamic
noprefixroute eth0
:
valid_lft forever preferred_lft forever
Der Rest geht dann über SSH.
Als erstes wird eine feste IP-Adresse eingestellt.
bullseye
Dazu sichert man die Neztwerkkonfigurationsdatei
und editiert sie dann. Anschließend muss man nochmals booten und kann sich zukünftig
über die feste Adresse mit dem RaspPi verbinden.
$ sudo cp /etc/dhcpcd.conf /etc/dhcpcd.conf_bak
$ sudo nano /etc/dhcpcd.conf
$ sudo shutdown -r now
Im Block "Example static IP configuration" entfernt man die Kommentarzeichen und ändert die
Einstellungen den eigenen Wünschen entsprechend :
# Example static IP configuration:
interface eth0
static ip_address=192.168.___.123/24
static ip6_address=12:34:56:78:9a:bc/64
static routers=192.168.___.234
static domain_name_servers=192.168.___.234
bookworm
$ sudo nmcli -p connection show
=====================================
NetworkManager Verbindungsprofile
=====================================
NAME UUID TYPE DEVICE
--------------------------------------------------------------------------------------------------------------------------
Kabelgebundene Verbindung 1 cff92b52-4201-3e94-b1a5-84e444a61a37 ethernet eth0
lo 624c6630-0cfe-43fd-8d5c-f0716186a52e loopback lo
$ sudo nmcli c mod "Kabelgebundene Verbindung 1" ipv4.addresses 192.168.___.123/24 ipv4.method manual
$ sudo nmcli con mod "Kabelgebundene Verbindung 1" ipv4.gateway 192.168.___.100
$ sudo nmcli con mod
$ ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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 noprefixroute
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:44:18:a8 brd ff:ff:ff:ff:ff:ff
inet 192.168.___123/24 brd 192.168.___.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
:
valid_lft forever preferred_lft forever
$ sudo nmcli con down "Kabelgebundene Verbindung 1"
Verbindung »Kabelgebundene Verbindung 1« wurde erfolgreich deaktiviert (aktiver
D-Bus-Pfad: /org/freedesktop/NetworkManager/ActiveConnection/2)
$ sudo nmcli con up "Kabelgebundene Verbindung 1"
Verbindung wurde erfolgreich aktiviert (aktiver D-Bus-Pfad:
/org/freedesktop/NetworkManager/ActiveConnection/3)
$ ip addr
Als nächstes sind die Updates dran :
$ sudo apt update
$ sudo apt upgrade
Das kann eine ganze Weile dauern ...
Die genaueste Systemzeit erhält man mit dem NTP-Service. Dieser muss erstmal installiert werden.
$ sudo apt install ntp
$ sudo nano /etc/ntpsec/ntp.conf
$ sudo service ntp restart
Da ich einen Zeitserver in der Nähe bevorzuge trage ich den "ptbtime1.ptb.de" noch in die
Konfigurationsdatei ein.
# Public NTP servers supporting Network Time Security:
# server time.cloudflare.com nts
server ptbtime1.ptb.de iburst
# pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will
# pick a different set every time it starts up. Please consider joining the
# pool: <https://www.pool.ntp.org/join.html>
pool 0.debian.pool.ntp.org iburst
pool 1.debian.pool.ntp.org iburst
pool 2.debian.pool.ntp.org iburst
pool 3.debian.pool.ntp.org iburst
Dann werden einige System-Services stillgelegt, die nur Zeit und Speicher kosten, aber auf diesem
System keinen Sinn machen.
$ sudo systemctl stop wpa_supplicant
$ sudo systemctl disable wpa_supplicant
Removed /etc/systemd/system/dbus-fi.w1.wpa_supplicant1.service.
Removed /etc/systemd/system/multi-user.target.wants/wpa_supplicant.service.
$ sudo systemctl disable triggerhappy
Synchronizing state of triggerhappy.service with SysV service script with
/lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable triggerhappy
Removed /etc/systemd/system/multi-user.target.wants/triggerhappy.service.stemctl disable
triggerhappy
Synchronizing state of triggerhappy.service with SysV service script with
/lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable triggerhappy
Removed /etc/systemd/system/multi-user.target.wants/triggerhappy.service.
$ sudo systemctl stop triggerhappy
Warning: Stopping triggerhappy.service, but it can still be activated by:
triggerhappy.socket
$ sudo systemctl stop ModemManager
$ sudo systemctl disable ModemManager
Removed /etc/systemd/system/multi-user.target.wants/ModemManager.service.
Removed /etc/systemd/system/dbus-org.freedesktop.ModemManager1.service.
$ sudo systemctl stop avahi-daemon.socket
$ sudo systemctl stop avahi-daemon
$ sudo systemctl disable avahi-daemon.socket
Removed /etc/systemd/system/sockets.target.wants/avahi-daemon.socket.
$ sudo systemctl disable avahi-daemon
Synchronizing state of avahi-daemon.service with SysV service script with
/lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable avahi-daemon
Removed /etc/systemd/system/dbus-org.freedesktop.Avahi.service.
Removed /etc/systemd/system/multi-user.target.wants/avahi-daemon.service.
$ # Jetzt noch ein bisschen aufräumen ...
$ sudo apt-get purge avahi-daemon
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
:
:
Löschen der Konfigurationsdateien von libnss-mdns:armhf (0.14.1-2) ...
libnss-mdns.postrm: Checking NSS setup...
libnss-mdns.postrm: Removing mdns from NSS setup
Trigger für dbus (1.12.24-0+deb11u1) werden verarbeitet ...
$ sudo apt autoremove
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
Die folgenden Pakete werden ENTFERNT:
bind9-host bind9-libs libavahi-common-data libavahi-common3 libavahi-core7 libdaemon0
libfstrm0 liblmdb0 libmaxminddb0 libprotobuf-c1 libuv1 libxml2
:
:
Entfernen von libxml2:armhf (2.9.10+dfsg-6.7+deb11u4) ...
Trigger für man-db (2.9.4-2) werden verarbeitet ...
Trigger für libc-bin (2.31-13+rpt2+rpi1+deb11u5) werden verarbeitet ...
$
Jetzt ist das System konfiguriert und einsatzbereit.
Zur Anzeige der Temperatur hat sich noch der folgende Befehl als nützlich erwiesen :
$ vcgencmd measure_temp
temp=46.5'C
Die USB-Festplatte
Um eine größere Menge Daten speichern zu können ohne die SD-Karte auszureizen will ich
eine 2"-Sata-Festplatte einsetzen. Die Platte habe ich vor ein paar Jahren bei einem Laptop gegen eine
SSD ausgetauscht. Mit einem schicken Gehäuse mit integriertem SATA-USB-Adapter ist sie für
diesen Zweck gut geeignet, hier kommt es nicht so auf Geschwindigkeit an.
Mit gparted habe ich der Platte drei ext4-Partitionen verpasst. Diese sollen jetzt automatisch als
eigene Verzeichnisse gemountet werden. Dazu müssen lediglich drei Zeilen in der Datei /etc/fstab
ergänzt werden.
Dazu gilt es zunächst festzustellen wie die Partitionen ins System eingebunden werden.
$ # Ohne USB-Festplatte
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 7,5G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 7,2G 0 part /
$ # Mit USB-Festplatte
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 698,6G 0 disk
├─sda1 8:1 0 232,9G 0 part /srv
├─sda2 8:2 0 232,9G 0 part /dash1
└─sda3 8:3 0 232,9G 0 part /dash2
mmcblk0 179:0 0 7,5G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 7,2G 0 part /
Dann wird die Datei editiert :
$ sudo nano /etc/fstab
proc /proc proc defaults 0 0
PARTUUID=34f4435e-01 /boot vfat defaults 0 2
PARTUUID=34f4435e-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
/dev/sda1 /srv ext4 defaults 0 2
/dev/sda2 /dash1 ext4 defaults 0 2
/dev/sda3 /dash2 ext4 defaults 0 2
Jetzt stehen nach dem Booten die drei neuen Partitionen unter eigenem Namen zur Verfügung. Um sie
mit allen Benutzern verwenden zu können müssen noch die Zugriffsrechte angepasst werden.
$ ls -l /
lrwxrwxrwx 1 root root 7 21. Feb 02:02 bin ->
usr/bin
drwxr-xr-x 3 root root 4096 1. Jan 1970 boot
drwxrwxrwx 3 root root 4096 22. Jan 16:43 dash1
drwxr-xr-x 3 root root 4096 23. Apr 18:04 dash2
drwxr-xr-x 17 root root 3800 24. Apr 09:06 dev
:
:
lrwxrwxrwx 1 root root 8 21. Feb 02:02 sbin ->
usr/sbin
drwxr-xr-x 4 root root 4096 23. Apr 18:08 srv
dr-xr-xr-x 12 root root 0 1. Jan
1970 sys
:
:
$ sudo chmod 777 /dash2
$ ls -l /
drwxrwxrwx 3 root root 4096 23. Apr 18:04 dash2
© Uwe Jantzen 15.01.24