Hamburger Menü
dietzens.de

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 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