# Raspberry Pi OS

[Link to Raspberry Pi](https://www.raspberrypi.com/)

# Raspberry Pi OS - IPv6 Deaktivieren/Reaktivieren

<p class="callout info">Hier wird beschrieben wie beim Raspberry OS IPv6 deaktiviert werden kann.</p>

Um IPv6 zu deaktivieren in der **/boot/firmware/cmdline.txt** den eintrag **ipv6.disable=1** hinzufügen.

```bash
echo "ipv6.disable=1" >> /boot/firmware/cmdline.txt
```

Zum Reaktivieren folgenden Befehl ausführen:

```bash
sed -i 's/ipv6.disable=1/ipv6.disable=0/g' /boot/firmware/cmdline.txt
```

Um es erneut zu Deaktivieren folgenden Befehl ausführen:

```bash
sed -i 's/ipv6.disable=0/ipv6.disable=1/g' /boot/firmware/cmdline.txt
```

# Raspberry Pi OS - Backup / Restore

<p class="callout info">Hier wird beschrieben wie ein Backup einer Raspberry Pi OS Installation auf eine Imagedatei und ein Restore von dieser funktioniert.</p>

#### Backup

##### Linux

Um ein Backup einer Raspberry Pi OS Installation durchzuführen, die MicroSD Karte in einen Linux-PC stecken und mit **dd** ein Image erstellen:

```bash
dd if=/dev/mmcblk0 of=raspios.img status=progress
```

Danach mit **sync** sicherstellen, dass alle Schreib/Lesevorgänge abgeschlossen sind:

```bash
sync
```

#### Restore

##### Linux

Das Image kann mit **dd** auf eine MicroSD mit der selben oder größerer Größe geschrieben werden:

<p class="callout warning">Falls nur eine kleinere Speicherkarte zu Verfügung steht, muss das Image nach dieser [Anleitung](https://funktioniert.org/books/raspberry-pi-os/page/raspberry-pi-os-verkleinern-einer-backup-imagedatei) verkleinert werden.</p>

```bash
dd if=raspios.img of=/dev/mmcblk0 status=progress
```

Danach mit **sync** sicherstellen, dass alle Schreib/Lesevorgänge abgeschlossen sind:

```bash
sync
```

<p class="callout info">Im Anschluss die root Partition im **raspi-config** unter **Advanced Options/Expand Filesystem** erweitern.</p>

##### Windows

Auf einem Windows-PC kann das Image mit einen Tool wie [Rufus](https://rufus.ie/de/) auf die Speicherkarte geschrieben werden.

<p class="callout info">Im Anschluss die root Partition im **raspi-config** unter **Advanced Options/Expand Filesystem** erweitern.</p>

# Raspberry Pi OS - WiFi konfigurieren mit dem NetworkManager (nmcli)

<p class="callout info">Hier wird beschrieben wie man eine WiFi Netzwerkverbindung mit dem NetworkManager konfiguriert.</p>

#### Konfigurieren der WLAN Verbindung

<p class="callout info">RaspiOS benötigt die Einstellung der **WiFi localisation** in **raspi-config** vor hinzufügen der Verbindung!</p>



##### Netzwerkverbindung hinzufügen:

Als erstes den Namen des WLAN-Interfaces anzeigen lassen:

```
nmcli
```

Der **con-name** kann frei vergeben werden, dieser wird später bei allen Konfigurationen verwendet.

Die SSID anzeigen lassen:

```
nmcli dev wifi
```

<p class="callout info">Versteckte (hidden) SSIDs werden nicht angezeig!</p>

Die Verbindung hinzufügen (im Beispiel: con-name: home-wifi, SSID: myhomewifi):

```bash
nmcli connection add type wifi con-name "CONNECTIONNAME" ifname wlan0 ssid "SSID" \
wifi-sec.key-mgmt wpa-psk wifi-sec.psk "PASSWORD"
```

<p class="callout info">Um eine versteckte Netzwerkverbindung hinzuzufügen wird **wifi.hidden yes** angefügt.</p>

```bash
nmcli connection add type wifi con-name "CONNECTIONNAME" ifname wlan0 ssid "SSID" \
wifi-sec.key-mgmt wpa-psk wifi-sec.psk "PASSWORD" wifi.hidden yes
```


##### Ändern auf WPA3

Ändern auf WPA3-PSK:

```bash
nmcli connection modify "CONNECTIONNAME" wifi-sec.key-mgmt sae
```

##### Ändern von Anmeldedaten

**<span style="font-family:'Liberation Sans', sans-serif;"><span style="font-weight:normal;">Ändern des Passworts</span></span>**<span style="font-family:'Liberation Sans', sans-serif;"><span style="font-weight:normal;">:</span></span>

```bash
nmcli connection modify "CONNECTIONNAME" wifi-sec.psk "PASSWORD"
```


##### Verbinden mit dem WLAN-Netzwerk

**<span style="font-family:'Liberation Sans', sans-serif;"><span style="font-weight:normal;">Verbindung aktivieren</span></span><span style="font-family:'Liberation Sans', sans-serif;"><span style="font-weight:normal;">:</span></span>**

```bash
nmcli connection up "CONNECTIONNAME"
```

<span style="font-family:'Liberation Sans', sans-serif;">Verbindung testen</span><span style="font-family:'Liberation Sans', sans-serif;">:</span>

```bash
nmcli connection show "CONNECTIONNAME"
```

<p class="callout info">Der Wert **connection.autoconnect-retries** gibt an wieviele Verbindungsversuche durchgeführt werden. Ist der Wert -1 werden vier Versuche durchgeführt. Bei 0 werden unendliche Versuche durchgeführt.</p>

Ändern der Anzahl Verbindungsversuche:

```bash
nmcli connection modify "CONNECTIONNAME" connection.autoconnect-retries 0
```


##### Netzwerkverbindung entfernen

<span style="font-family:'Liberation Sans', sans-serif;">Entfernen der Verbindung mit delete:</span>

```bash
nmcli connection delete "CONNECTIONNAME"
```

# Raspberry Pi OS - WiFi / Bluetooth deaktivieren

<p class="callout info">Hier wird beschrieben wie beim Raspberry OS WiFi und/oder Bluetooth deaktiviert werden kann.</p>

#### Permanent

Um beide permanent zu deaktivieren, in der **/boot/firmware/config.txt** am Ende folgendes hinzufügen:

```
[all]
dtoverlay=disable-wifi
dtoverlay=disable-bt
```

# Raspberry Pi OS  - Verkleinern einer Backup Imagedatei

<p class="callout info">Hier wird beschrieben wie eine Imagedatei, welche nach der Anleitung [Raspberry Pi OS - Backup / Restore](https://funktioniert.org/books/raspberry-pi-os/page/raspberry-pi-os-backup-restore) erstellt wurde, verkleinert werden kann. </p>

<p class="callout warning">Zum Verkleinern der Partition wird **gparted** verwendet, falls es noch nicht installiert ist:</p>

```bash
apt install gparted 
```

Mit **fdisk** die Partitionen der Imagedatei auflisten:

```bash
fdisk -l rpios.img
```

```shell
Disk rpios.img: 29.72 GiB, 31914983424 bytes, 62333952 sectors
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: 0xdacc6ddd

Device         Boot   Start      End  Sectors  Size Id Type
rpios.img1            16384  1064959  1048576  512M  c W95 FAT32 (LBA)
rpios.img2          1064960 62333951 61268992 29.2G 83 Linux
```

<p class="callout info">Notieren des Startsektors der 2. Partition (1064960)</p>

Mit **losetup** ein Loopdevice mit dem Inhalt der 2. Partition der Imagedatei erstellen, als offset wird der Startpunkt (Startsektor\*512) der 2. Partition angegeben:

```bash
losetup /dev/loop99 rpios.img -o $((1064960*512))
```

Mit **gparted** die Partition verkleinern:

```bash
gparted /dev/loop99
```

Verkleinern auf Minimum plus etwas Reserve (~100MB)

<p class="callout info">Notieren der neuen Größe aus dem Infofenster (z.B. 3788800K)</p>

Das Loopdevice wieder löschen:

```bash
losetup -d /dev/loop99
```

Mit **losetup** ein Loopdevice aus der Imagedatei erstellen:

```bash
losetup /dev/loop99 rpios.img
```

Mit **fdisk** die 2. Partition löschen und mit der neuen Größe wieder erstellen:

```bash
fdisk /dev/loop99
```

- Mit d 2 die 2. partition löschen
- Mit n p 2 eine neue 2.Partition anlegen
- Start der 2. Partition 1064960 angeben
- Bei neuer Größe +3788800K angeben
- Mit w in Tabelle schreiben
- Mit q beenden

Mit **fdisk** die Partitionen auflisten:

```bash
fdisk -l /dev/loop99
```

<p class="callout info">Notieren des Endsektors der 2. Partition (z.B. 8642559)</p>

Das Loopdevice wieder löschen:

```bash
losetup -d /dev/loop99
```

Verkleinern der Imagedatei mit **truncate** auf die Größe (Endsektor\*512):

```bash
truncate -s $(((8642559+1)*512)) rpios.img
```

Überprüfen des Ergebnisses mit **fdisk**:

```bash
fdisk -l rpios.img
```

# Raspberry Pi OS - Watchdog

<p class="callout info">Hier wird beschrieben wie der Hardware Watchdog für einen Raspberry Pi aktiviert wird.</p>

##### Aktivieren des Hardware Watchdogs

In der Datei **/boot/firmware/config.txt** unter **\[all\]** folgenden Eintrag hinzufügen:

```shell
dtparam=watchdog=on
```

Weitere Schritte befinden sich in der [Anleitung zur Installation und Konfiguration des Pakets watchdog](https://funktioniert.org/books/sicherheit/page/linux-watchdog).

# Raspberry Pi - Logs vom journald flüchtig oder permanent stellen

Im RaspiOS werden die Logs vom journald standardmäßig nur im RAM gespeichert und sind dadurch nach einem Neustart nicht mehr verfügbar.

Diese Einstellung kann wie folgt geändert werden:

```bash
nano /usr/lib/systemd/journald.conf.d/40-rpi-persistent-storage.conf
```

```bash
[Journal]
#Storage=volatile
Storage=persistent
```

Danach den Dienst neu laden:

```bash
systemctl daemon-reload
```

Mit folgenden Befehl lassen sich alle Einträge im Log löschen:

```bash
journalctl --rotate
journalctl --vacuum-time=1s
```