Raspberry Pi mit normalem Debian einrichten
Die Installation des "Raspians" auf dem Raspberry Pi ist ziemlich einfach. Aber auch ein unmodifiziertes Debian lässt sich mit verhältnismäßig wenig Aufwand auf dem Raspi installieren. Der Vorteil daran: man landet auf dem regulären Updatezweig der Debian-Distributionen und kommt ggf. in den Genuß von 64-Bit-only-Software.
Und bei der Gelegenheit kann der Raspi als multifunktionaler Home-Server eingesetzt werden. Mit läppischen 5 Watt Verbrauch ist er die ideale Homebase. Hier das, was ich gemacht habe. Wer's nachmacht: auf eigene Gefahr, ich leiste keinen Support, falls was doch nicht so funktioniert, wie ich es beschrieben habe.
- Minimalsystem einrichten
- System auf SSD umstellen
- Software installieren
- Zugriff ermöglichen
- Headlessbetrieb
- Datenbankbetrieb
- Windows-Zugriff mittels SAMBA ermöglichen
- Bluetooth abschalten
- Multimediaserver einrichten
- DHCP abschalten
- Raspi als lokalen DNS einsetzen
Minimalsystem mit Bootloader einrichten ↑ nach oben
Passendes Debian-Image herunterladen (hier 3B+)
https://raspi.debian.net/tested-images/
Image auf SD-Karte (/dev/sdx) entpacken - Achtung, Karte wird ohne Rückfrage komplett überschrieben!
xzcat 20210823_raspi_3_bullseye.img.xz | sudo dd of=/dev/sdx bs=64k oflag=dsync status=progress
SD-Karte einsetzen, Monitor und Tastatur anschließen, Strom anschließen => Raspi bootet (dauert eine ganz Weile, weil dabei das Minimalsystem eingerichtet wird.
Eingabeaufforderung (prompt) erscheint: Rootpasswort setzen
passwd
Raspi anhalten
halt
Strom ausschalten
auf SSD-Betrieb umstellen (da SD-Karte nicht für Dauerbeschreiben geeignet) ↑ nach oben
SD-Karte entnehmen und in PC einlegen, SSD (ab 32G) mit ext4 formatieren (bei Linux: gparted)
Alle Ordner von der SD-Karte auf die SSD kopieren (RASPIFIRM/boot wird nur auf SD-Karte benötigt, kann aber als Backup mit auf die SSD in den Ordner boot), das geht am einfachsten mit rsync
rsync -axv /media/albert/RASPIROOT/ /media/albert/SSD32G
auf der SD-Karte in der Datei
/RASPIFIRM/cmdline.txt
console=tty0 console=ttyS1,115200 root=/dev/mmcblk0p2 rw fsck.repair=yes net.ifnames=0 cma=64M rootwait
ändern in
console=tty0 console=ttyS1,115200 root=/dev/sda1 rw fsck.repair=yes net.ifnames=0 cma=64M rootwait
unter /dev/sda1 liegt nach dem Raspi-Boot die SSD und die ist unser neues Arbeits-Dateisystem
net.ifnames=0, damit die Ethernet-Schnittstelle einfach nur eth0 heißt und nicht enp0s31f6irgendwas
auf der SD-Karte die Datei
/RASPIFIRM/config.txt
um Videoeinstellungen am Ende ergänzen
# HDMI Eingang aktivieren auch wenn kein Monitor dran hängt hdmi_force_hotplug=1 # PC-Monitor, kein TV vorgeben falls es Probleme mit der Erkennung gibt hdmi_group=2 # Bildschirmauflösung vorgeben # 16 1024x768 60Hz # 23 1280x768 60Hz # 35 1280x1024 60Hz # 47 1440x900 60Hz # 82 1920x1080 60Hz 1080p # 85 1280x720 60Hz 720p hdmi_mode=82
Auf der SSD in der Datei
/etc/fstab
den Einhängepunkt für das root-Dateisystem auf die SSD setzen
# The root file system has fs_passno=1 as per fstab(5) for automatic fsck. #LABEL=RASPIROOT␣/␣ext4 rw 0 1 /dev/sda1␣/␣ext4 rw 0 1 # All other file systems have fs_passno=2 as per fstab(5) for automatic fsck. LABEL=RASPIFIRM /boot/firmware vfat rw 0 2 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that
Damit sollten alle Vorbereitungen zur Nutzung der SSD beendet sein
SD in den Raspi einschieben, SSD per USB anstecken, LAN-Kabel anstecken, Strom anschließen - läuft (keep your fingers crossed) - ach so, Tastatur und Monitor nicht vergessen ;-)
Nach dem Booten - dauert ein bißchen - Benutzer einrichten
adduser --uid 1000 meinname (user-ID bei Debian > 1000)
es wird dann ein home-Verzeichnis mit entsprechenden Berechtigungen angelegt.
Software installieren ↑ nach oben
Jetzt Software besorgen: einen typischen Satz an Anwendungen (Desktops, Server) bekommt man vorgeschlagen mit
tasksel
dann sammelt das System das typischerweise Notwendige automatisch zusammen, einzelne Pakete kommen dann mit
apt-get install paketname
auf's System.
Hat man eine GUI installiert, dann hilft ganz gut der grafische Paketmanager
apt-get install synaptic
Nach einem
reboot
landet man dann auf einer GUI und kann mit synaptic granular aussuchen. Z.B. falls nicht automatisch mitgekommen:
Samba, MariaDB, Apache2, php, ssh, rsync, NFS-kernel-Server, VNC-Server, MiniDLNA usw.
Zugriff ermöglichen ↑ nach oben
Damit ausgestattet fehlt - mir persönlich - noch der Remote-root-Zugriff
(ACHTUNG, das ist eine potenitelle Sicherheitslücke, im heimischen LAN halte ich das aber für vertretbar)
in der
/etc/ssh/sshd_config
PermitRootLogin no
ändern in
PermitRootLogin yes
den SSH-Service Neustarten mit
service ssh reload
Und jetzt kann der Raspi ohne Monitor und Tastatur in die Rumpelkammer umziehen. Beim ersten remote-Login muss der ssh-Schlüssel permanent akzeptiert werden, ab dann genügt für den Login "ssh root@raspi > passwort"
Hilfreich sind noch ein paar exports (der NFS-Kernelserver ist ja installiert), weil über NFS ein besserer Dateizugriff für die anderen Linux-Rechner im Netz möglich ist.
/etc/exports
/home/benutzername lanmachine1(rw,sync,no_subtree_check) /home/benutzername lanmachine2(rw,sync,no_subtree_check)
Und die exports neu einlesen
exportfs -r
Und damit der Raspi seine Umgebung findet (ich habe feste IP-Adressen vergeben)
/etc/hosts
192.168.1.xxx lanmachine1.home.arpa lanmachine1 192.168.1.xxx lanmachine2.home.arpa lanmachine2
Den Raspi in gleicher Weise bei den lanmachines bekannt machen.
VNC-remote-Access vorbereiten ↑ nach oben
sudo apt-get install tigervnc
VNC-Passwort setzen
vncpasswd ~/.vnc/vncpasswd
VNC-Autostart über die GUI setzen
und dafür sorgen, dass der Server im Falle des Absturzes neu gestartet wird, also die Datei in den Autostart-Ordner legen
/home/pi/bin/vncstart.sh
#!/bin/bash while : do vncrunning=$(ps -A | grep -w x0vncserver) if ! [ -n "$vncrunning" ] ; then x0vncserver -localhost no -SecurityTypes VncAuth -display=:0 -PasswordFile=/home/pi/.vnc/passwd >/dev/null 2>&1 fi sleep 1 done
Im headless-Betrieb größere Bildschirmauflösung einschalten ↑ nach oben
sudo apt-get install xserver-xorg-video-dummy
/usr/share/X11/xorg.conf.d/xorg.conf
Section "Device" Identifier "Configured Video Device" Driver "dummy" VideoRam 64000 EndSection Section "Monitor" Identifier "Configured Monitor" HorizSync 31.5-48.5 VertRefresh 50-70 EndSection Section "Screen" Identifier "Default Screen" Monitor "Configured Monitor" Device "Configured Video Device" DefaultDepth 24 SubSection "Display" Depth 24 Modes "1920x1080" EndSubSection EndSection
Videoeingang wieder einschalten, wenn Monitor benötigt wird,
mv xorg.conf xorg.bak
dann Neustart oder zumindest Xserver neu starten
Datenbankbetrieb ↑ nach oben
MySQL root-passwort setzen
mysqladmin -u root -p user root pass mysqladminpasswort
Maria-DB Speicher anpassen, da die Voreinstellung für große Maschinen vorgesehen ist
/etc/mysql/mariadb.conf.d/50-server.cnf
key_buffer_size = 16M max_allowed_packet = 2M thread_stack = 192K thread_cache_size = 8 myisam_recover_options = BACKUP max_connections = 20 table_cache = 64 table_open_cache = 144 thread_concurrency = 10 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M # # * Query Cache Configuration # query_cache_type = 0 query_cache_size = 0M query_cache_limit = 1M # # * Logging and Replication # log_error = /var/log/mysql/error.log expire_logs_days = 10 max_binlog_size = 100M # # * InnoDB # innodb_buffer_pool_size = 80M innodb_buffer_pool_instances = 1 innodb_additional_mem_pool_size = 2M innodb_log_file_size = 8M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 innodb_large_prefix = true innodb_file_per_table = 1
php-myadmin einrichten
im Installationsdialog Username und Passwort vergeben
Windows-Zugriff mittels SAMBA ermöglichen ↑ nach oben
SMB-Freigaben einrichten
smbpasswd -a benutzername
/etc/samba/smb.conf
[pi] comment = pi path = /home/pi guest ok = yes browseable = yes writable = yes create mask = 0775 directory mask = 0775 force create mode = 0664 force directory mode = 0775
Bluetooth abschalten ↑ nach oben
sudo update-rc.d -f bluetooth remove
manuell ein/ausschalten
sudo service bluetooth start/stop
Multimediaserver einrichten ↑ nach oben
MiniDLNA ist einfach zu konfigurieren aber leistungsfähig genug, Audio und Video vom Raspi aus zu streamen.
/etc/minidlna.conf
user=minidlna media_dir=A,/home/pi/Musik media_dir=V,/home/pi/Filme db_dir=/var/cache/minidlna log_dir=/var/log friendly_name=RaspiDLNA inotify=yes notify_interval=895 port=8200
bei vielen Dateien die Überwachungswerte erhöhen
/etc/sysctl.conf
fs.inotify.max_user_watches=1048576
DHCP abschalten und Gateways ändern ↑ nach oben
sudo service dhcpcd stop sudo systemctl disable dhcpcd
danach reboot
/etc/networking/interfaces
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.42 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 192.168.1.1
Raspi als lokalen DNS einsetzen ↑ nach oben
Unbound zur DNS-Auflösung nutzen, damit im LAN externe Server simuliert werden können./etc/unbound/unbound.conf
server: auto-trust-anchor-file: "/var/lib/unbound/root.key" #root DNS Liste root-hints: "/etc/unbound/root.hints" use-syslog: yes #an allen interfaces lauschen interface: 0.0.0.0 #nur im lokalen Netz access-control: 127.0.0.0/8 allow access-control: 192.168.1.0/24 allow access-control: 0.0.0.0/0 refuse #eigene Domaine private-domain: "home.arpa." remote-control: control-enable:no #alles andere woanders auflösen forward-zone: name: "." # forward-addr: 8.8.8.8 # google # forward-addr: 8.8.4.4 # google forward-addr: 84.200.69.80 # DNS Watch forward-addr: 84.200.70.40 # DNS Watch forward-addr: 77.109.148.136 # Xiala.net forward-addr: 77.109.148.137 # Xiala.net forward-addr: 91.239.100.100 # censurfridns.dk forward-addr: 89.233.43.71 # censurfridns.dk #forward-resolving server: local-zone: "home.arpa." static # fritzbox local-data: "fritz.box. IN A 192.168.1.1" # meine Domaine local-data: "meine-domaine1.home.arpa. IN A 192.168.x.x" local-data: "meine-domaine2.home.arpa. IN A 192.168.x.x+1" # und so weiter # reverse-resolving # meine Domaine local-data-ptr:"192.168.1.x meine-domaine1.home.arpa" local-data-ptr:"192.168.1.x+1 meine-domaine2.home.arpa" # und so weiter