Raspberry Pi OS Installation

Aus Laub-Home.de Wiki
Zur Navigation springen Zur Suche springen

Der Raspberry Pi ist perfekt geeignet für alle Möglichen Spielereien. Gerade im Home Automation Bereich ist der Stromsparende Mini Computer bestens geeignet. Das hier beschriebene Grundsetup mit dem für den Raspberry Pi angepassten Debian, Raspberry Pi OS (früher Raspbian genannt), nimmt in etwa 10 Minuten an Zeit ein. Ich habe dieses Setup mit den folgenden Raspberry Pis durchgeführt, sollte aber für alle Pis so funktionieren.

Als Hardware wird folgendes benötigt:

Installation Raspbian auf SD-Karte

Als erstes nehmen wir den Raspberry Pi, bauen diesen in ein Gehäuse ein und nehmen eine Frische SD oder bei neueren Pis eine Micro SD Karte zur Hand. Nun laden wir auf der Raspberry Pi Seite das Image Tool herunter und starten es:

Hier kann man direkt das gewünschte Raspberry Pi OS auswählen. Ich nutze hier das Raspberry Pi OS Lite, da ich keinen Desktop im normal Fall benötige.

Optional: balenaEtcher Setup

Eine andere Option ist es über den balenaEtcher die SD Karte zu betanken. Hierfür kann man auf der Raspberry Pi Seite das gewünschte Raspberry Pi OS manuell herunterladen:

Als nächste bringen wir das Image auf die SD Karte, dafür verwenden wir das Tool balenaEtcher dieses und die offizielle Anleitung zum Installieren von Raspbian findet ihr hier. Der Download von balenaEtcher ist hier zu finden:

Das Tool wird einfach gestartet, die SD Karte mit einem Card Reader verbunden und einfach das Image ausgewählt, dann auf Flash klicken und schon geht es los:

Vorher heruntergelassenes Raspbian Image auswählen
Flash anklicken, und los geht es

Wenn alles richtig gelaufen ist, kommt es zur Meldung "Flash Complete"

SSH beim Booten Aktivieren

Hat man wie ich, nicht vor an den PI Tastatur, Maus und Monitor zu hängen, muss man den SSH Daemon beim Booten aktivieren. Das ermöglicht es den Raspberry Pi headless zu betreiben. Zum Aktivieren des SSH Daemon muss lediglich auf der SD-Card im /boot Verzeichnis eine leere Datei Namens ssh angelegt werden. Bei mir auf dem MAC geht das im Terminal wie folgt:

cd /Volumes/boot/
touch ssh

WLAN Verbindung beim Booten herstellen

Nutzt man einen Raspberry Pi zero w oder hat keine Möglichkeit den Raspberry Pi an ein LAN Kabel anzuschließen, muss man vor dem ersten Booten noch das WLAN einrichten. Hierfür legt man die Konfigurationsdatei einfach im /boot Verzeichnis / Boot Partition ab. Die Datei heißt wpa_supplicant.conf und bekommt folgenden Inhalt:

wpa_supplicant.conf

# Datei wpa_supplicant.conf in der Boot-Partition
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
       ssid="MySSID"
       psk="MyWiFiPassword"
}

Hier bitte MySSID und MyWiFiPassword ändern!

Hat man zufällig ein Linux mit dem Tool wpa_passphrase zur Hand, kann man das Passwort auch als Hashwert in der Datei abspeichern. Das gehashte Passwort bekommt ihr so

wpa_passphrase "MySSID" "MyWiFiPassword"

Booting

Nachdem nun alles nötige auf der SD Karte ist, kann diese ausgeworfen werden. Auf dem Mac geht das mit CMD+E . Nun die SD-Karte in den Raspberry Pi stecken und ggf. noch mit einem LAN Kabel an den Router verbinden. Dann einfach die Stromzufuhr aktivieren und booten. Da ich einen DHCP/DNS Server habe, konnte ich mich einfach mit dem Namen des PI (standardmäßig: raspberrypi) via SSH verbinden. Sollte das nicht möglich sein, am besten schauen welche IP dem Pi zugewiesen wurde (sollte man ggf. im Router Webinterface herausbekommen):

ssh pi@raspberrypi

Das Standard Passwort des pi Benutzers ist übrigens "raspberry"

Möchtet ihr nun euren Raspberry Pi nicht händisch konfigurieren, schaut direkt mal zum Abschnitt Raspberry Pi OS via Skript konfigurieren

Root User freischalten

Als erstes sollten wir das Passwort ändern und dann noch den Root User freischalten:

passwd

dann noch das Root Passwort festlegen:

sudo passwd

Zuguter Letzt müssen wir dem Root User noch erlauben via SSH auf das System zugreifen zu dürfen: Dafür der Datei /etc/ssh/sshd_config, welche wir am besten so aufrufen:

sudo nano /etc/ssh/sshd_config

hier die folgende Zeile einfügen:

PermitRootLogin yes

dann den Dienst Neustarten:

sudo systemctl restart ssh

nun am besten mit einer neuen SSH Verbindung den Root Account Zugang testen:

ssh root@raspberrypi

Updates installieren

Nachdem wir uns nun als Root eingeloggt haben, können wir erstmal alle Updates installieren:

apt update && apt dist-upgrade

# dies nur ausführen wenn ihr wisst was ihr tut
# und aus irgendeinem Grund eine Neuere Firmware braucht.
rpi-update

Nach dem alle Updates installiert sind, kann man Raspbian auf 64Bit umstellen. Dies ist allerdings optional und ist wohl auch noch ein wenig buggy. Dennoch hier eine kleine Anleitung wie dies geht:

Konfiguration von Raspbian

die wichtigsten Dinge kann man bequem mit dem raspi-config Tool erledigen:

raspi-config

Ich habe hier unter den "Network-Options" den Hostname des Systems und unter den "Localisation Options", die Timezone und das Wi-Fi Country geändert . Das System habe ich in Englischer Sprache gelassen. Man kann das ganze auch via Konsole und dem nointeractive mode von raspi-config machen:

raspi-config nonint do_hostname "YOURHOSTNAME"
raspi-config nonint do_wifi_country DE
timedatectl set-timezone Europe/Berlin

Optional: Avahi deaktivieren / deinstallieren

Raspbian bringt Standardmäßig den Avahi Daemon mit, damit man sich auch ohne DHCP Server im Netz mit dem Raspberry Pi via Netzwerk verbinden kann. Wer allerdings eh einen Router oder ein anderes Setup mit einem DHCP Server hat, oder der Pi gar eh feste IP Adressen bekommt, kann der Avahi einfach deaktiviert werden:

Stoppen des avahi Daemon:

systemctl stop avahi-daemon.service

Deaktivieren des Autostarts des avahi Daemon:

systemctl disable avahi-daemon.service

Deinstallation vom avahi Daemon:

apt -y --auto-remove purge avahi-daemon

Optional: Tuning

folgende Dinge können nun noch das Grundsetup abrunden:

danach sollte man den Raspberry Pi einmal Neustarten:

reboot

Raspberry Pi OS via Skript konfigurieren

Ich habe um mir das Leben etwas einfacher zu machen ein kleines Bash Script geschrieben, das es mir ermöglicht nach dem die SD Karte mit dem neusten Image versorgt ist und der Pi gebootet hat, diesen automatisch zu konfigurieren. Hierzu müssen lediglich die Variablen des Scriptes angepasst werden und das script gestartet werden.

Download des Scriptes hier: https://raw.githubusercontent.com/alaub81/rpi_autoconf/main/rpi_autoconf.sh

/home/pi/rpi_autoconf.sh

#!/usr/bin/env bash
#########################################################################
#Name: rpi_autoconf.sh
#Subscription: This Script setups a Raspeberry Pi OS
##by A. Laub
#andreas[-at-]laub-home.de
#
#License:
#This program is free software: you can redistribute it and/or modify it
#under the terms of the GNU General Public License as published by the
#Free Software Foundation, either version 3 of the License, or (at your option)
#any later version.
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
#or FITNESS FOR A PARTICULAR PURPOSE.
#########################################################################
#Set the language
export LANG="en_US.UTF-8"
#Load the Pathes
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# set the variables

## Pi's setup configuration
# Disable Swap File (be carefull with that!)
SWAPDISABLE="False"
# Pi User new Password
PIPASSWORD="YOURPASS1234"
# Root User new Password
ROOTPASSWORD="YOURPASS1234"
# Raspberry Pi's hostname
PIHOSTNAME="YOURRASPI"
# the wifi Country
WIFICOUNTRY="DE"
# your Raspberry Pi's timezone
TIMEZONE="Europe/Berlin"

## True or False
# Deinstallation of the avahi Daemon
AVAHIUNINSTALL="False"
# Deactivate USB Hub to save power (not working on Pi zero)
USBDISABLE="False"
# Disable Bluetooth to save power
BTDISABLE="False"
# Disable HDMI to save power
HDMIDISABLE="False"
# Disable Soundcard
SOUNDDISABLE="False"
# Minimizie Syslog Messages a little bit
SYSLOGBLOCK="False"
# /tmp as tmpfs mounting
TMPTMPFS="False"
# tmpfs Size (recommended: 32M for pi zero / 128M for Pi 4)
TMPFSSIZE="32M"

## Interface Configuration
## 0 Enable / 1 Disable 
# i2c bus
I2CBUS="1"
# spi bus
SPIBUS="1"
# one wire bus
ONEWIRE="1"
# Raspberry Pi's camera module
CAMERA="1"


### Do the stuff
# Change the pi User Password
echo -e "$PIPASSWORD\n$PIPASSWORD" | sudo passwd pi
# set the root password
echo -e "$ROOTPASSWORD\n$ROOTPASSWORD" | sudo passwd
# enable SSH Root Login
echo -e "\n# Enable Root SSH Login\nPermitRootLogin yes" | sudo tee -a /etc/ssh/sshd_config
sudo systemctl restart ssh
# create autostart cron file
echo -e "# Stuff which will running on System Startup" | sudo tee -a /etc/cron.d/autostart
# Update package lists
sudo apt update
# Backup config.txt
sudo cp /boot/config.txt /boot/config.txt.bak 

# disable swap file
if [ $SWAPDISABLE == "True" ]; then
	sudo systemctl disable dphys-swapfile
fi
# Avahi deinstall
if [ $AVAHIUNINSTALL == "True" ]; then
	sudo apt -y --auto-remove purge avahi-daemon
fi
# disable usbhub
if [ $USBDISABLE == "True" ]; then
	sudo apt install uhubctl -y
	echo -e "# disable the USB Hub\n@reboot root /usr/sbin/uhubctl -a 0" | sudo tee -a /etc/cron.d/autostart
fi
# disable Bluetooth
if [ $BTDISABLE == "True" ]; then
	sudo apt purge --autoremove -y bluez
	echo -e "\n# disable bluetooth\ndtoverlay=disable-bt" | sudo tee -a /boot/config.txt
fi
# disable HDMI
if [ $HDMIDISABLE == "True" ]; then
	echo -e "\n# HDMI Blanking\nhdmi_blanking=1" | sudo tee -a /boot/config.txt
	echo -e "# disable the HDMI port\n@reboot root /usr/bin/tvservice -o" | sudo tee -a /etc/cron.d/autostart
fi
# disable Soundcard
if [ $SOUNDDISABLE == "True" ]; then
	sudo systemctl disable alsa-restore.service alsa-state.service
fi
# mount tmp as tmpfs
if [ $TMPTMPFS == "True" ]; then
	echo -e "\ntmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=$TMPFSSIZE 0 0" | sudo tee -a /etc/fstab
fi
# Syslog Blocklist
if [ $SYSLOGBLOCK == "True" ]; then
	sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.bak
	sudo sed -i 's/^*.*;auth,authpriv.none/*.*;cron,auth,authpriv.none/g' /etc/rsyslog.conf
	sudo sed -i 's/^mail./#mail./g' /etc/rsyslog.conf
	sudo sed -i 's/^daemon./#daemon./g' /etc/rsyslog.conf
	sudo sed -i 's/^kern./#kern./g' /etc/rsyslog.conf
	sudo sed -i 's/^lpr./#lpr./g' /etc/rsyslog.conf
	sudo sed -i 's/^user./#user./g' /etc/rsyslog.conf
	sudo sed -i 's/^*.=/#*.=/g' /etc/rsyslog.conf
	sudo sed -i 's/^\t/#\t/g' /etc/rsyslog.conf
	sudo tee -a /etc/rsyslog.d/01-blocklist.conf <<EOF
# Cronjob-Spam umleiten
if $msg contains "pam_unix(cron:session):" then {
	stop
}
# SSH Login without string
if $msg contains "Did not receive identification string from" then {
	stop
}
# rngd stop logging
if $programname == "rngd" then {
	stop
}
EOF
fi


# setup raspberry pi
sudo raspi-config nonint do_hostname $PIHOSTNAME
sudo raspi-config nonint do_wifi_country $WIFICOUNTRY
sudo timedatectl set-timezone $TIMEZONE
sudo raspi-config nonint do_i2c $I2CBUS
sudo raspi-config nonint do_spi $SPIBUS
sudo raspi-config nonint do_onewire $ONEWIRE
sudo raspi-config nonint do_camera $CAMERA

# Include ASCII Art on login
sudo apt install figlet -y
figlet $PIHOSTNAME | sudo tee -a /etc/motd /etc/motd.tail

# cleanup Raspberry Pi OS
sudo apt purge --autoremove -y htop nfs-common ntfs-3g python

# Install Updates
sudo apt dist-upgrade -y

# last, do a reboot
echo -e "\n\n#########################\n\nAll done!!!\nreconnect with:\n# ssh root@$PIHOSTNAME"
sleep 3
sudo reboot

das Script kann via wget heruntergeladen, dann die richtigen Rechte vergeben und an euere Bedürfnisse ange

passt werden.

cd && wget https://raw.githubusercontent.com/alaub81/rpi_autoconf/main/rpi_autoconf.sh
chmod 700 rpi_autoconf.sh
nano rpi_autoconf.sh

nachdem es konfiguriert ist einfach starten:

/home/pi/rpi_autoconf.sh

Zum Schluss startet das Script den Pi einmal neu, danach ist er mit eurem neuen Hostname und direkt als root via ssh verfügbar:

ssh root@yourpisnewhostname