Appearance
2. Raspberry Pi OS 64 Bit als Image installieren
Übersicht zu Komponenten und Versionen
Name | Version | Link |
---|---|---|
Ubuntu | 22.04 LTS | link |
Raspberry Pi OS | Raspberry Pi OS Lite | link |
Linux Kernel | rpi-6.6.y | link |
ARM gcc Toolchain | 13.2.Rel1 | link |
Virtualbox | 7.0.18 | link |
Buildroot | 2024.02.2 | link |
Linux Image Herunterladen und auf SD-Karte flashen
Als erstes flashen wie die SD-Karte mit der Raspberry Pi OS Distribution.
Es handelt sich hier um eine Debian Distribution für das Raspberry Pi. Wir verwenden dieses Image um erste Schritte in Linux auf dem Target durchzuführen und funktionale Tests der Peripherie umzusetzen.
Gegenüber einer eigenen Distrubution mit Buildroot oder Yocto besteht hier der Vorteil Zugriff auf viele Entwicklungstools via "apt" Package Management zu erhalten und auch einen schnellen Einstieg ohne Buildprozess sicherzustellen. Natürlich hat das ganze auch Nachteile:
- Die Distribution ist selbst als "minimal" Version je nach Embedded Applikation sehr "aufgeblasen" ...
- ... und bietet so durch viele in der Produktion unnötig vorhande Software eine breiter Surface-Area für Sicherheitslücken.
- ... sowie schwereren Memory und Disk Footprint für eine einfache Embedded Applikation.
Gerade aber während der Entwicklung kann das Arbeiten mit der Debian Distribution schnellere Resultate erzielen:
- Verfügbare Runtimes via Package Management (Python, RUST, Java, ...)
- WiFi / Ethernet Verbindung ohnen grossen Konfigurationsaufwand
- Applikationsbeispiele die auf Peripherie zugreifen und "out of the box" laufen.
Laden Sie folgendes Image im Host Linux herunter:
https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-03-15/2024-03-15-raspios-bookworm-armhf-lite.img.xzHierzu können Sie den Link kopieren und via wget
in einem Terminal CTRL+ALT+T
verwenden.
bash
cd Downloads
wget https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-03-15/2024-03-15-raspios-bookworm-armhf-lite.img.xz
Flashen eines Images
Um ein Image auf eine SD-Karte zu schreiben, reicht es in der Regel nicht, einfach Files zu kopieren. Flashen bedeutet das Blockweise kopieren einen Speichermediums unabhängig von logischen Partitionen. Das heisst, bei einem Speichermedium werden auch bereiche ausserhalb des Filesystems kopiert (Wie zum Beispiel Partitionslayout, möglicherweise Bootloader und unterschiedliche Filesysteme).
Solche Images können z.B. durch das Blockweise lesen generiert werden. Häufig werden Images auch komprimiert verwendet, besonders, wenn viel "freier" Speicher in einer Partition vorhanden ist.
In unserem Fall beträgt die .xz
komprimierte grösse des Images ca. 270 MB
. (vgl. ls -alh ~/Downloads
). Unkomprimiert benötigt das Image ca. 1.9 GB
.
Bevor das Image auf die SD-Karte geschrieben wird, muss diese noch entpackt werden. Das kann vorher geschehen unxz *.img.xz
, oder während dem Schreiben auf die disk via Pipe zu dd
.
dd
ist das tool, welches das Blockweise kopieren von Speicher erlaubt und für das flashen von Blockspeicher dient.
Als erstes "tunneln" wir den UART Serial Adapter von FTDI, sowie den SD-Kartenleser in das Linux Gastsystem.
Wir kopieren die extrahierte Image-Datei wie folgt auf die SD-Karte:
Stecken Sie die SD in das USB-SD-Karten-Interface und selbiges in das Hostsystem,
Rservieren Sie dieses für das Gastsystem per Gastsystem-Menu:
Geräte > USB > Gerneric Flash Card Reader
Nach dem Einsetzen der SD-Karte taucht bereits eine Partition unter Ubuntu auf.
Verwenden Sie lsblk
um sich einen Überblick zu verschafen:
bash
ubuntu@ub:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 4K 1 loop /snap/bare/5
loop1 7:1 0 61.9M 1 loop /snap/core20/1376
loop2 7:2 0 155.4M 1 loop /snap/firefox/1154
loop3 7:3 0 79.1M 1 loop /snap/gtk-common-themes/1531
loop4 7:4 0 248.8M 1 loop /snap/gnome-3-38-2004/99
loop5 7:5 0 45.9M 1 loop /snap/snap-store/575
loop6 7:6 0 288K 1 loop /snap/snapd-desktop-integration/7
loop7 7:7 0 43.6M 1 loop /snap/snapd/15177
sda 8:0 1 29.8G 0 disk
sda1 8:1 1 29.8G 0 part /media/ubuntu/9016-4EF8
sdb 8:16 1 0B 0 disk
sr0 11:0 1 1024M 0 rom
vda 252:0 0 60G 0 disk
vda1 252:1 0 1M 0 part
vda2 252:2 0 513M 0 part /boot/efi
vda3 252:3 0 59.5G 0 part /
Die Grösse der SD-Karte beträgt hier 32 GB und wird an der Stelle /media/ubuntu/9016-4EF8
ins Filesystem eingebunden.
sda1
ist hierbei die erste Partition auf dem Blockstorage. Damit wir die SD-Karte beschreiben muss dieser zuerst wieder mit umount
aus dem File System geworfen werden. Das würde natürlich auch mit dem File Browser funktionieren.
bash
## unmount
sudo umount /media/ubuntu/*
## ins verzeichnis des images wechseln
cd Downloads
## image anzeigen
ls -al
## verifizieren, dass sd-Karte nicht mehr gemountet ist
lsblk
## flashen (/dev/sdx gemäss lokaler Config anpassen)
xz -dc 2023-12-11-raspios-bookworm-arm64-lite.img.xz | sudo dd of=/dev/sdx bs=4M status=progress oflag=sync
## zur sicherheit nochmals einen sync ausführen
sync
Das Flag bs
steht für Blocksize und limitiert diese auf genau 1MB. Dies kann zu besserer Performance beim kopieren führen. status=progress
zeigt den Fortschritt beim kopieren an und oflag=sync
stellt sicher, dass nicht im Memory gebuffert (sonst würde progress nicht viel Sinn machen, da erst da die Änderungen obwohl das Programm beendet noch nicht wirklich auf das Flash geschrieben worden sind).
Sobald das Image geflasht ist, kann man im File Explorer die Boot und Root File System Partition betrachten. Hiefür sollte die SD-Karte entfernt und wieder eingefügt werden.
Ubuntu mountet die zwei Partitionen automatiosch. Ein Blick auf lsblk
zeigt an welcher Stelle im Filesystem.
bash
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 4K 1 loop /snap/bare/5
loop1 7:1 0 61.9M 1 loop /snap/core20/1376
loop2 7:2 0 155.4M 1 loop /snap/firefox/1154
loop3 7:3 0 79.1M 1 loop /snap/gtk-common-themes/1531
loop4 7:4 0 248.8M 1 loop /snap/gnome-3-38-2004/99
loop5 7:5 0 45.9M 1 loop /snap/snap-store/575
loop6 7:6 0 288K 1 loop /snap/snapd-desktop-integration/7
loop7 7:7 0 43.6M 1 loop /snap/snapd/15177
sda 8:0 1 0B 0 disk
sdb 8:16 1 29.8G 0 disk
sdb1 8:17 1 256M 0 part /media/ubuntu/boot
sdb2 8:18 1 1.6G 0 part /media/ubuntu/rootfs
sr0 11:0 1 1024M 0 rom
vda 252:0 0 60G 0 disk
vda1 252:1 0 1M 0 part
vda2 252:2 0 513M 0 part /boot/efi
vda3 252:3 0 59.5G 0 part /
Wir möchten bereits beim erten Boot ein Terminal erhalten. Hierfür ändern wir das File config.txt
in der Bootpartition.
Als Editor kann gedit
oder aber auch nano
verwendet werden.
Ergänzen Sie die letzte Zeile mit
bash
enable_uart=1
Erstellen Sie ein Passwort mit openssl passwd
im Terminal:
bash
# pw hier: raspberry
echo raspberry | openssl passwd -6 -stdin
Erstellen Sie auch ein File userconf.txt
mit dem Inhalt pi:<passwort>
(Default user / Passwort).
Speichern Sie das File, führen Sie einen sync
aus und unmounten Sie die zwei Partitionen.
bash
sync
sudo umount /media/ubuntu/*
Login Passwort funktioniert nicht
Falls Login via Serial Console nicht funktioniert, können Sie das File /etc/shadow
auf dem RFS um den Hash des Passworts beim User Pi erweitern. In diesem File sind die Passwörter der User gehasht abgelegt.
Ersetzen Sie die Zeile mit dem User pi
folgendermassen:
pi:$6$QnL4F6Z/xnrJr4U8$/IE1H1yS8YXM/iY8EK1SKV4rMmsxNBgM3KbjESRX7VbW2kSrPLICfuX
AjKea5atUL34XbDU64B.prcZtu1HaY/:19086:0:99999:7:::
Das gehashte Passwort ist hier raspberry
.
Raspberry Pi starten
Fügen Sie die SD-Karte nun ins Rapsberry Pi ein. Verbinden Sie UART gemäss Datenblatt und speisen Sie das Raspberry Pi via USB.
Serial Adapter mit Raspberry Pi verbinden
- Zuerst eine Massefläche auf dem Raspi berühren! (Ethernet- oder USB-Stecker)
- Vermeiden Sie Verbindung auf die 5V-Pins der Raspi-Stiftleiste - es zerstört den USB-Adapter!
- Beim Verbinden immer als erstes die GND-Verbindung erstellen! (noch vor den Signalleitungen!)
- Verwenden Sie hierzu aus dem Kabelset die erste Dreiergruppe Kabel (z.B. sw, bn, rt)
Als nächstes wollen wir via USB-Serial auf die console von Linux zugreifen. Hierfür verwenden wir Hostseitig das Tool picocom
.
Installieren Sie picocom
via sudo apt install picocom
.
Deaktivieren Sie auch den brltty
Service, welcher versuchen kann die Serielle Schnittstelle zu übernehmen.
bash
sudo apt remove brltty
Serielle Console zum Target einrichten (Asynchrone Serielle Schnittstelle)
Unser Embedded System hat ja kein Display! Embedded Linux-Systeme unterstützen jedoch fast immer (auch) eine asynchrone serielle Schnittstelle, auf welcher einerseits der Bootvorgang angezeigt und beeinflusst werden kann, andererseits nach booten eine Shell-Console gestartet werden kann.
Um diese auf dem Hostsystem (Notebook) anzuzeigen, wird nebst einem USB-Serial Dongle ein geeignetes Terminal-Emulationsprogramm für die Benutzer-Ein-/Ausgabe benötigt. Serielle Terminal-Emulationsprogramme gibt es diverse – sowohl einfache Console-Programme (minicom, picocom, cu,...) wie auch direkt unter der graphischen X11-Oberfläche lauffähige (gtkterm
, sayon
,...) oder z.B. unter Windows PuTTY (welches gleichzeitig auch ein SSH-Client beinhaltet). Viele dieser Programme sind jedoch etwas "bockig".
Für Linux installieren Sie über den Paketmanager bevorzugt das simple Console-Programm
picocom
.GTK-Term
Nicht alle
gtkterm
-Versionen unterstützt die vt102-Emulation korrekt, in welchem Fall z.B. der Editorvi
darüber nicht korrekt funktioniert – wir verwenden deshalb besser das einfache Console-Programmpicocom
.Da Ihr Notebook wohl kaum direkt eine
Asynchrone Serielle Schnittstelle
(/dev/ttyS0
) hat, stecken Sie das externe USB-Serial-Interface an.Bei virtualisiertem Linux sind USB-Geräte wie erwähnt erst für das Gastsystem verwendbar, wenn diese für das Gastsystem reserviert werden. Reservieren Sie falls nicht schon geschehen also das USB-Serial-Interface temporär unter
Geräte > USB-Geräte > FT232 USB-Serial
.Anmerkung
Wird der Eintrag nicht aktiv, prüfen Sie ob in der Virtualbox-Management-Konsole unter den Gastsystem-Einstellungen die USB-Funktionalität aktiviert ist, danach das USB-RS232-Interface Aus- und Einstecken.
Ev. haben Sie auch bei der Installation von Virtualbox den virtuellen USB-Treiber nicht installieren lassen? (ggf. im Windows Gerätemanager das Device nochmals löschen, neu erkennen lassen und diesmal die Installation des virtuellen USB-Treibers zulassen.)
Kontrollieren Sie nun z.B. mittels:
bashtail -100 /var/log/syslog
ob und unter welchem Devicenamen das Interface von Linux erkannt wurde – ev. unter
ttyUSB0
TIP
Das syslog-File ist auch per Menu
Anwendungen > Systemwerkzeuge > Systemprotokoll → syslog
einsehbar.Verbinden Sie das Interface via USB EMV-gerecht und korrekt mit dem Board:
Achtung
beim direkten berühren des Boards immer zuerst eine Massefläche wie z.B. die Ethernet-Buchse berühren und nicht irgendwelche Signal-Pins berühren, in welchem Fall das Board durch die Elektrostatische Entladung Schaden nehmen könnte!!
Starten Sie danach '
picocom
' mit 115200 Baud sowie ohne Flow Control auf jener Schnittstelle, welche Sie oben ermittelt haben (vermutlich/dev/ttyUSB0
). Beipicocom
werden diese Parameter auf der Kommandozeile angegeben - diepicocom
-Kurzhilfe perbashpicocom --help
zeigt wie Sie Baudrate und tty-Device setzen. (Die volle Hilfe würden Sie per
bashman picocom
erhalten).
Hoppla,
picocom
fehlt offensichtlich das Recht/dev/ttyUSB0
zu öffnen. Einls -l /dev/ttyUSB0
bestätigt dies. Um zukünftig serielle Devicenodes wie/dev/ttyUSB0
auch ohne sudo öffnen zu können, geben Sie Ihrer Benutzer-Id Zugriffsrecht auf die zuvor angezeigte Sicherheitsgruppedialout
perbashsudo usermod -a -G dialout $USER
Achtung!
ohne
-a
würden alle bestehenden Gruppenmitgleidschaften gelöscht!!Da neue Gruppenmitgleidschaften erst nach erneutem Booten wirksam sind, starten Sie nun
picocom
der Einfachheit halber mit vorangestelltemsudo ...
Wenn dies klappt, stecken Sie die SD-Karte auf das SoC-Modul (also auf den kleinen Print mit dem grossen SoC Chip) und stecken das Steckernetzteil am Board ein, worauf Sie den Bootlog des kopierten Yocto-Linux sehen sollten! Auf dem Trägerprint hat es zudem auch einen Reset-Taster...
Tipp
Das Beenden von
picocom
ist möglich mittels: Ctrl-A Ctrl-X . Ein späteres erneutes Starten inkl. Startparameter per bash Rückwärtshistory mit: Ctrl-R pico...Sollte die serielle Schnittstelle nicht oder nur unzuverlässig funktionieren, so schalten Sie nach herunterfahren des Gastsystems im Virtualbox Manager in den
Gastssytem-Einstellungen > USB
die USB-2 Unterstützung aus.
Raspberry Pi Booten
Sobald Sie das Raspbery Pi gebootet haben werden Sie nach dem User / Passwort gefragt. Loggen Sie sich mit dem generierten Passwort ein.
Die BASH Shell (das Programm, welches Ihren Terminal Input interpretiert) wird Sie begrüssen.
pi@raspberrypi:~$
Verbinden Sie sich nun via WiFi ins Netzwerk mit sudo raspi-config
.
Vergewissern Sie sich, dass Sie ins Iternet kommen mit ping 8.8.8.8
.
Wir werden nun das Ethernet Interface konfigurieren um via SSH auf das Target zugreifen zu können. Das erlaubt uns das Arbeiten mit dem Raspberry Pi auch ohne UART Verbindung. Gerade falls das Anschliessen eines UART Adapters zusammen mit dem Sense HAT problematisch ist, kann SSH als Backup verwendet werden.
Hierzu starten wir den SSH Dienst auf dem Raspberry Pi mit sudo systemctl enable ssh --now
. Mit netstat
verifizieren wir, dass SSH auch tatsächlich auf port 22 hört.
netstat -n4telp
zeigt uns
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
SSH hört also auf Port 22 auf allen Netzwerkinterfaces.
Ermitteln Sie die IP Adresse des WiFi interfaces mit ifconfig wlan0
. Loggen Sie sich vom Hostsystem ein mit ssh pi@IP-ADRESSE
.
Wenn Sie sich das erste mal mit SSH verbinden wird folgende Nachricht auftauchen:
The authenticity of host '192.168.50.1 (192.168.50.1)' can't be established.
ED25519 key fingerprint is SHA256:LlIvfSDk25fy7ws/hww4kyAceMMGEbu7H3YlJZzJKKY.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:1: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Hier geht es darum zu verhindern, dass sich jemand als Host ausgibt (MITM Attack). Beantworten Sie in diesem Fall die Frage mit yes
. Achten Sie aber natürlich im Feld auf den Fingerprint.
Ethernet Interface konfigurieren
Für das Ethernet Interface verwenden wir eine statische IP Adresse im Netz 192.168.50.0/24
.
Verwenden Sie hierzu nmtui
:
Infos zur Config
Genauere Informationen zur Config finden Sie hier https://www.raspberrypi.com/documentation/computers/configuration.html#static-ip-addresses
Schliessen Sie nun das Twisted Pair Kabel ans Ethernet Interface an und den USB-Ethernet Adapter an Ihrem Hostsystem. Tunneln Sie den USB Port auch hier wie beim UART Adapter in Ihr Gastsystem durch.
Konfigurieren Sie das neue Ethernet Interface in Ubuntu via GUI (Settings oben rechts).
Validieren Sie mit ip addr
hostseitig, dass die Konfiguration geklappt hat. Versuchen Sie nun das Target mit ping 192.168.50.1
zu erreichen. Falls das klappt können Sie mit ssh pi@192.168.50.1
einloggen.
ifconfig vs ip
Der Command ifconfig
ist weit verbreitet und erlaubt die Konfiguration auf Netzwerk Intrfaces. Allerdings wird er in Zukunft durch den generischeren Command ip
ersetzt, welcher auch andere Tools beinhaltet.
Mehr dazu hier unter net-tools
: https://wiki.archlinux.org/title/Network_configuration
Booten Sie Host und Target neu um sicherzustellen, dass die Verbindung via Ethernet klappt, da im folgenden Teil UART nicht vorhanden sein wird.
GPIO
GPIO Mapping bei den B/B+ Models des Raspberry PI
Achtung
Alle Signale und Schnittstellen auf der GPIO-Stiftleiste führen ungeschützt auf den SoC und haben 3.3V CMOS Logikpegel. Daran angelegte Signale müssen deshalb zwingend im Bereich 0V...3.3V liegen, andernfalls nimmt der SoC schaden!! Generell gilt: Zwecks Potenzialausgleich allfällig vorhandener statischer Ladung sollten GPIO- und Bauteilpins nie mit den Fingern berührt werden sonder zuerst immer die Print-Kanten sowie ein leitendendes Stecker-Gehäuse!
- Verwenden Sie den Command
'raspi-gpio
um den Zustand der GPIOS zu lesen. - Schliessen Sie den Taster im Kit an einen der GPIOs und GND an (Pin 39 und 40).
- Konfigueiren Sie den Pin als Pullup und versuchen Sie einen "Button Press" zu detektieren.
Arbeiten mit dem Terminal
Im folgenden finden Sie die wichtigsten Eckpfeiler im Umgang mit dem Terminal auf Linux.
Führen Sie nachfolgend alle Commands auf Ihrem Target aus.
BASH Basics
Pfade
Das HOME Directory kann unter $HOME
oder ~
gefunden werden.
Folgende Commands wechseln alle ins HOME
.
bash
cd $HOME
cd ~
cd
keine sudo im Home
In Ihrem Homeverzeichnis benötigen Sie sudo
nicht.
Copy + Paste
SHIFT + CTRL + C
SHIFT + CTRL + V
Shell verlassen
Sie können eine Shell entweder mit CTRL + D
oder via exit
verlassen.
Programm abbrechen
Dauert ein Programm zu langen, können Sie es mit CTRL + C
abbrechen.
ping 8.8.8.8
CTRL + C
Programm stoppen und in den Hintergrund spedieren
Mit CTRL+Z
unterbrechen Sie ein Programm. Mit bg
schieben Sie es in den Hintergrund des Terminals, wo es weiterlaufen wird. Mit fg
können Sie das Programm wieder in den Vordergrund holen.
ping 8.8.8.8
CTRL + Z
bg
ping 8.8.4.4
CTRL + C
fg
CTRL +C
ping
Mit ping senden Sie einem Host einen Layer 3 ICMP
request um zu sehen ob er responsive ist. Ein Host muss aber nicht zwingend Antworten.
ping gitlab.fhnw.ch
TIP
Falls Sie das WiFi Netz dnet
im Lab verwenden um "nach aussen" zu pingen, wird dies nicht funktionieren, das der Ping aus Infrastrukturgründen unterdrückt wird. HTTP requests werden allerdings funktionieren.
curl
Command um eine HTTP Verbindung aufzubauen. Installieren Sie curl
nach:
bash
sudo apt install curl
bash
sudo curl -vvv https://gitlab.fhnw.ch
Aufgabe
Schauen Sie sich die Headers genau an. Was fällt Ihnen auf?
cat
Fileinhalt ausgeben:
cat /etc/network/interfaces
nano
Editieren Sie dieses File mit nano und speichern Sie es
nano /etc/network/interfaces
Was fällt Ihnen auf?
sudo
Super do (etwas als Administrator ausführen)
sudo nano /etc/network/interfaces
raspi-config
Einfaches UI für raspbian um das System zu konfigurieren.
echo
echo "Hallo!!"
File schreiben
echo "Hallo!!" > hello.txt
cat hello.txt
echo "... WORLD" >> hello.txt
cat hello.txt
manual pages (man)
Man pages enthalten Dokumentation zu den Commands: Lesen Sie man ls
.
dmesg
Kernel Messages, können auf Probleme hinweisen.
bash
dmesg
tail
Bei viel Output interessiert vielleicht nur die letzten paar Zeilen:
bash
tail /var/log/syslog
bash
dmesg | tail -50
grep
Suchen:
bash
cat /etc/network/interfaces | grep eth1
Rekursiv im Pfad (hier /etc
):
bash
grep -sr "eth1" /etc
Welche Packages wurden selber nachinstalliert?
bash
cat /var/log/apt/history.log
BASH Scripts
Ein BASH-Script erlaubt das ausführen verschiedener Commands hintereinander. Folgendes Script-File config.sh
konfiguriert eth0
.
bash
#!/bin/bash
ifconfig eth0 192.168.60.1 netmask 255.255.255.0
Die Zeile #!/bin/bash
gibt an, dass es sich in diesem File um ein BASH Script handelt.
Ausgeführt werden kann das Script folgendermassen:
bash
bash config.sh
Das File kann auch ausführbar gemacht werden:
bash
chmod 755
./config.sh
... das hat den Vorteil, dass bash
nicht mehr vor den Filenamen gesetzt werden muss.
config File schreiben via BASH Script
Oftmals würde man gerne den Inhalt eines config Files direkt in einem BASH-Script zwecks Übersicht übergeben. Ein mehrzeiliges File wlan.conf
kann folgendermassen geschrieben werden:
bash
#!/bin/bash
cat << EOF > wlan.conf
#ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CH
network={
ssid="ESSID"
psk="PASSWORT"
}
EOF
config File mit sudo
Für Systemweite Files wie /etc/network/interfaces
oder /etc/dnsmasq.conf
funktioniert dies leider nicht, da die Berechtigung fehlt. Im folgenden kann tee
zusammen mit sudo
verwendet werden um das Problem zu lösen.
bash
#!/bin/bash
cat << EOF | sudo tee /etc/network/interfaces
auto eth0 lo
iface eth0 inet static
address 192.168.60.1/24
EOF
Netzwerkkonfiguration persistieren
Klassisch wird in Unix Systemen das File /etc/network/interfaces
zur Konfiguration von Netzwerkinterfaces verwendet.
Je nach Distribution werden andere Configfiles für das Managemnet von Netzwerkinterfaces verwendet. Eine übersich finden Sie im Arch Wiki, welches die wichtigsten aufzählt: https://wiki.archlinux.org/title/Network_configuration
Unter anderem bringt auch systemd
einen eigenen Service systemd-networkd
hierfür mit.