Benutzer-Werkzeuge

Webseiten-Werkzeuge


raspberry

Informationen zum Raspberry PI

Grundlegende Konfiguration

Image schreiben:

dd bs=4M if=<imagefile> of=<device> status=progress

mit kill -USR1 <Prozessnr> kann der aktuelle Fortschritt ausgegeben werden. Ab Version 8.2 auch mit dem Parameter status=progress. Die Prozessnummer erhält man mit ps -a.

Die Konfiguration erreicht man mit sudo raspi-config

Pi konfigurieren:

  1. Expand Filesystem ausführen damit wir genug Platz für Pakete, ownCloud an sich und Uploads haben
  2. Unter Advanced Options Memory Split auf „16“ MB einstellen.
  3. overclock auf „Medium“
  4. SSH-Verbindung aktivieren
  5. Hostname setzen

Nach einem Reboot ist der Raspberry über <hostname>.fritz.box ansprechbar und die SSH Verbindung kann aufgebaut werden.

System aktualisieren

sudo apt-get update
sudo apt-get dist-upgrade
sudo rpi-update
Benötigte Pakete installieren
sudo apt install apache2 php7.3 curl libcurl4 libcurl4-openssl-dev sqlite rsync

64 bit System

Die Zeile

arm_64bit=1

in die Datei /boot/config.txt einfügen.

Pi absichern

neuen Benutzer mit Root-Rechten anlegen

sudo useradd -m user -G sudo
sudo passwd user

Danach abmelden und mit neuem Benutzer anmelden

Ab Debian version: 12 wird bei der Installation ein Benutzer angelegt, der Root-Rechte hat. Ein Standarduser wird nicht mehr angelegt und muß auch nicht mehr gelöscht werden. Der angelegte User kann allerdings mit sudo alle Befehle ohne Passwort ausführen. Um das zu ändern, muß nur in /etc/sudoers.d/010_pi-nopasswd die einzige vorhandene Zeile auskommentiert werden.

Standarduser löschen

sudo deluser -remove-home pi

SSH Zugang absichern Es ist sinnvoll den root-Zugang zu sperren und den Port für SSH zu ändern. Änderungen in der Datei /etc/ssh/sshd_config PermitRootLogin no Port 10115

SSH absichern mit Private Key

Zuerst muß ein Schlüsselpaar für den User generiert werden, der sich am Raspberry anmelden will. Hier ist eine Anleitung, wie das Schlüsselpaar mit ssh_keygen erzeugt wird. Anschließend auf dem Raspberry das Verzeichnis .ssh im Home-Verzeichnis des Users anlegen und mit nano ~/.ssh/authorized_keys den pub-Key einfügen. In der Datei /etc/ssh/sshd_config muß die RSA-Autentifizierung noch eingestellt werden:

PubkeyAuthentication yes
PasswordAuthentication no # damit wird das normale Login mit Passwort ausgeschaltet

Raspberry pi absichern http://raspberry.tips/raspberrypi-tutorials/raspberry-pi-im-internet-absichern-eures-mini-rechners/

Zeit vom Zeitserver

Zuerst muß der systemd-timesyncd gestoppt werden. (läuft defaultmäsig im rasbian)

sudo systemctl stop systemd-timesyncd
sudo systemctl disable systemd-timesyncd

Danach kann ntp installiert werden.

sudo apt install ntp
sudo systemctl enable ntp
sudo timedatectl set-ntp 1

ntp syncronisiert die Zeit aber nicht. Über die Kommandozeile

sudo ntpd -qg

wird die Zeit syncronisiert. Der systemd service startet das Script: /usr/lib/ntp/ntp-systemd-wrapper. Dort habe ich den Befehl „sudo ntpd -qg“ eingefügt. Damit wird die Zeit gesetzt aber der Service wird daraufhin beendet.

NTP ist relativ komplex und kann durch systemd-timesyncd ersetzt werden. Die Beschreibung ist hier. systemd-timesyncd legt den timestamp im Filesystem unter /var/lib/systemd/timesync/clock ab. Dieser Pfad ist hart codiert und kann nicht geändert werden. Deshalb kann systemd-timesyncd mit read-only Filesystem nicht eingesetzt werden.

Filesystem

Damit die SD-Karte länger hält, empfehle ich das root-Filesystem read-only zu mounten.Hier ist eine ausführliche Beschreibung. Dafür wird Raspbian wie oben beschrieben installiert und anschließend folgende Änderungen als root durchgeführt:

Zuerst werden alle unnötigen Pakete entfernt.

apt-get remove --purge logrotate triggerhappy dphys-swapfile fake-hwclock samba-common libx11-.*

Das Verzeichnis /tmp braucht die Rechte 777.

Danach allte temporären Dateien ins RAM legen:

rm -rf /var/lib/dhcp/ /var/spool /var/lock /var/mail
ln -s /tmp /var/lib/dhcp
ln -s /tmp /var/spool
ln -s /tmp /var/mail
rm -rf /etc/resolv.conf
ln -s /tmp/resolv.conf /etc/resolv.conf
rm -r /var/lib/sudo
ln -s /tmp /var/lib/sudo

Nun wird die Datei /etc/fstab angepasst:

Vorher:

                                                                                                                    
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

Nachher:

                                                                                                                    
/dev/mmcblk0p1  /boot           vfat    ro,defaults          0       2
/dev/mmcblk0p2  /               ext4    ro,defaults,noatime  0       1

des Weiteren fügen Sie am Ende der Datei die folgenden drei Zeilen ein. Dadurch wird für die Verzeichnisse /tmp, /var/log und /var/tmp jeweils ein temporäres Dateisystem eingerichtet.

tmpfs           /tmp            tmpfs   rw,nodev,nosuid,size=500M         0       0
tmpfs           /var/log        tmpfs   nodev,nosuid         0       0
tmpfs           /var/lock       tmpfs   nodev,nosuid         0       0
tmpfs           /var/tmp        tmpfs   nodev,nosuid         0       0

Bevor Sie das System neu starten können, müssen Sie noch die /boot/cmdline.txt anpassen. Öffnen Sie diese dazu mit einem Editor. Hier sollten Sie nur die folgende Zeile vorfinden.

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Fügen Sie am Ende der Zeile die Optionen fsck.mode=skip und noswap hinzu. Durch die Option fsck.mode=skip wird die Überprüfung des Dateisystems beim Systemstart abgeschalten. noswap sorgt dafür, dass Linux keine Swap-Datei anlegt.

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait fsck.mode=skip noswap

Nach dem Neustart läuft das System mit root und boot Partition als readonly. Wenn nun auf die SD-Karte geschrieben werden soll, muß es wieder beschreibbar gemountet werden:

Mount read/write

sudo mount -o remount,rw /

Mount readonly

sudo mount -o remount,ro /
Anmerkungen:

Für Sessions braucht php Schreibzugriff auf /var/lib/php/sessions. Das kann mit einem symbolischen Link nicht realiesiert werden. Den Grund dafür habe ich nicht herausgefunden. Ich habe es mit einem zusätzlichen Mount gelöst. Die Mount-Zeile:

tmpfs           /var/lib/php/sessions        tmpfs   nodev,nosuid         0       0

Alternative Overlayfs

Das linux-magazin beschreibt die Möglichkeit ein OverlayFS einzurichten.

Es gibt mitlerweile auch ein Git-Repo (https://github.com/ghollingworth/overlayfs) um das Overlayfs am Raspberry einzurichten.

raspi-config hat unter „Performance Options“ / „Overlay File System“ auch die Möglichkeit ein OverlayFS einzurichten.

Overlayfs einrichten

Damit Overlayfs verwendet werden kann, muß das Swapen deaktiviert werden.

sudo systemctl disable dphys-swapfile.service
sudo apt-get purge dphys-swapfile

Nun loggt sich der Benutzer in das vorbereitete System ein und wird durch Eingabe von »sudo su« zum Superuser. Jetzt geht es ans Konfektionieren des Initram-FS:

Damit der Kernel das Modul »overlay« lädt, trägt der Superuser den Modulnamen in die Datei »/etc/initramfs-tools/modules« ein:

echo "overlay" >> /etc/initramfs-tools/modules

Für die eigentliche Aktivierung des Overlay muss er das Skript »root-ro« an der richtigen Stelle in das Initram-FS aufnehmen und ausführbar machen:

cd /etc/initramfs-tools/scripts/init-bottom
wget https://gist.github.com/niun/34c945d70753fc9e2cc7/raw/3d60338cd8d8daf740692f426a5a1ec17839d613/root-ro
chmod +x root-ro

Danach geht es weiter mit dem Generieren des Initram-FS:

update-initramfs -c -k $(uname -r)

Achtung! nach einem Kernel-Update muß vor dem generieren des initramfs ein Reboot gemacht werden.

update-initramfs legt eine neue Datei in /boot an. Diese wird anschließend in initrd7.img umbenannt. Der letzte Schritt vor dem Reboot aktiviert das Initram-FS auf dem Raspberry Pi, indem

cd /boot
echo "initramfs initrd7.img" >>config.txt

den Bootloader anpasst. Achtung: Diese Konfigurationsoption verlangt kein Gleichheitszeichen zwischen Optionsname und Wert.

Fertig! Mit dem nächsten Reboot ist der Zugriff auf die SD-Karte nur noch lesend möglich.

Apache 2

Notwendige Dienste aktivieren

sudo a2enmod rewrite
sudo a2enmod ssl

Damit der Browser nicht die Verzeichnisstruktur anzeigt, wenn ein Verzeichnis keine Default Datei (index.html) enthält, muss in der Datei /etc/apache2/apache2.conf im Abschnitt <Directory /var/www> die Option Indexes entfernt werden. Um eine .htaccess Datei zu verwenden muß in diesem Abschnitt auch AllowOverride auf All gesetzt werden.

Mit der .htaccess kann auch ein Zugangsschutz (Benutzerverwaltung) eingebaut werden. Eine genaue Beschreibung steht auf https://wiki.selfhtml.org/wiki/Webserver/htaccess.

Rewrite

Mit Rewrite kann z.B. die HTTP Anfrage nach HTTPS umgeleitet werden. Dafür muss folgende Zeile in die Datei /etc/apache2/sites-available/000-default.conf unter „<VirtualHost *:80>“ eingefügt werden:

Redirect permanent / https://guettinger.dynv6.net/

Das ist mit Let's Encrypt nicht mehr notwendig, es wird bei der Installation von Let's Encrypt automatisch gemacht.

Um das Rewrite zu überprüfen, muss die Datei /etc/apache2/apache2.conf geändert werden. Bei LogLevel muss „rewrite:trace3“ angehängt werden. (Beschreibung) Die Meldungen werden nach /var/log/apache2/error.log geschrieben.

Einstellungen

Die Einstellungen werden unter anderem im php.ini vorgenommen. Welches php.ini verwendet wird, kann durch phpinfo() angezeigt werden. Folgende Einstellungen habe ich verändert:

NameBeschreibung
session.save_pathPfad für temporäre Informationen über die Session (kann nicht verändert werden, funktioniert nur mit original Einstellungen)
Anmerkung:

Apache legt standardmäßig ein eigenes tmp-Verzeichnis an. Das funkioniert nicht mehr, wenn das Root-Filesystem readonly ist. Um dies zu Ändern muß die Datei /lib/systemd/system/apache2.service nach /etc/systemd/system/ kopiert werden und anschließend die Zeile

PrivateTmp=true

auskommentiert werden.

Let's Encrypt

Let's Encrypt stellt kostenlos SSL-Zertifikate für Server zur Verfügung. Die Einrichtung ist hier beschrieben. Sie kann aber mit den folgenden Befehlen zusammengefasst werden:

sudo apt install certbot
sudo apt install python-certbot-apache
sudo certbot --apache

Zertifikat erneuern

Zum erneuern wird

sudo certbot certonly --renew-by-default --apache --rsa-key-size 4096 -d domain.tld

verwendet.

Zertifikat erneuern (alter Raspi)

Apache stoppen
Zertifikat mit

cd /opt/letsencrypt/
./letsencrypt-auto -d ERSTE_DOMAIN -d ZWEITE_DOMAIN --redirect -m DEINE_MAIL --agree-tos --renew-by-default

erneuern

Das Zertifikat kann auch ohne das virtielle Environment erneuert werden:

cd /opt/letsencrypt/
sudo certbot renew --apache

Apache wieder starten

Festplatte / USB-Stick einrichten

UUID feststellen:

sudo blkid /dev/sda1

Mountzeile für /etc/fstab

UUID=215bdbe3-989d-476f-a4db-e5d981df79d5 /media/usb-hdd/ ext4 permissions,defaults,auto

Dokuwiki

Dokuwiki wird mit sudo apt-get install dokuwiki installiert. Danach muß in die Datei /etc/apache2/sides-available/000-default.conf noch folgendes eingetragen werden:

<Directory /usr/share/dokuwiki/>
  Options FollowSymLinks
  AllowOverride None
  Order allow,deny
  allow from all
</Directory>

Konfiguration anpassen

Die Konfiguration steht in /etc/dokuwiki/dokuwiki.php und /etc/dokuwiki/local.php. Zum Sperren des Punktes Registrieren muss in dokuwiki.php die Zeile

$conf['disableactions'] = 'register';

eingetragen werden.

Die Benutzerdaten stehen in /var/lib/dokuwiki/acl. Hierfür sind standardmässig zwei Links in /etc/dokuwiki/. Diese können auf die aktuelle Konfiguration angepasst werden.

acl.auth.php -> /var/lib/dokuwiki/acl/acl.auth.php
users.auth.php -> /var/lib/dokuwiki/acl/users.auth.php

MySQL

Anstatt MySQL kann auch mariadb verwendet werden. Es ist ein Fork von MySQL. Es unterstützt die gleichen Funktionen und ist performanter.

apt-get install mariadb-server

Hierbei wird das Root-Passwort für mysql abgefragt. (nicht mehr!)

Verzeichnis von Mysql ändern Nachdem die Datenbanken in das neue Verzeichnis kopiert wurde muss in der MySQL Configdatei unter /etc/mysql/mariadb.conf.d/50-server.cnf der Pfad unter „datadir“ angepasst werden.

Datenbank neu anlegen:

sudo /usr/bin/mysql_install_db --user=mysql --datadir=<Verzeichnis> --skip-auth-anonymous-user

Das Verzeichnis unter –datadir muß das gleiche sein, wie in /etc/mysql/mariadb.conf.d/50-server.cnf.

Anschließend muß das Root-Passwort neu gesetzt werden. Dazu mit mysql -u root den Datenbank Manager starten und folgendes eingeben:

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

Hier steht, wie das Datenverzeichnis neu erstellt wird.

root-Passwort zurücksetzen

Die Datenbank kann mit:

sudo mysqld_safe --skip-grant-tables

in einen Mode geschaltet werden, wo sie kein Password erwartet. Damit dies funktioniert muß in /proc/run noch ein Verzeichnis für den user mysql angelegt werden. Danach kann mysql mit mysql -u root gestartet werden und über „update user set authentication_string=password('1111') where user='root';“ das root-Passwort geändert werden.

Dump einspielen
mysql -uBENUTZERNAME -p DATENBANKNAME < PFAD_ZUR_DATEI

rsync

Damit rsync mit root-Rechten auf den Server zugreifen kann muß am Ende der Datei /etc/sudoers die Berechtigung hinzugefügt werden:

<benutzer> ALL = NOPASSWD: /usr/bin/rsync

<benutzer> muß mit dem Benutzernamen ersetzt werden. Nun kann rsync mit der Option -e „SSH“ –rsync-path=„sudo rsync“ benutzer@example.com:/quelle ziel die Daten kopieren.

Backup

Verschiedene Backupmethoden sind hier beschrieben. Der beste Weg scheint mysqlhotcopy zu sein. Hier ist auch eine Möglichkeit beschrieben, die Dateien über SSH zu sichern.

TT-RSS

Installationsanleitung: https://allesit.de/anwendung/tiny-tiny-rss-reader-installieren-924

sudo apt-get install tt-rss

Beim ersten Login muss (username: admin, password: password) verwendet werden.

Installationsverzeichnis

TT-RSS wird standardmäßig nach /usr/share/tt-rss/www installiert.

Für die Konfiguration mit read-only Root Filesystem muß die Datei /etc/tt-rss/config.php angepasst werden. Hier sind verschiedene Pfade eingetragen, wo das Programm hinschreiben will.

Konfiguration

Die Konfigurationsdatei ist /etc/tt-rss/config.php.

Cron

Für den update kann ein Cronjob eingerichtet werden. Dazu soll die der Befehl sudo -u www-data php /usr/share/tt-rss/www/update_daemon2.php ausgeführt werden.

Eine genaue Beschreibung steht unter https://tt-rss.org/gitlab/fox/tt-rss/wikis/UpdatingFeeds

Dirk Deimeke hat eine Beschreibung für systemd veröffentlicht. Hier noch ein Link zu einer deutschen Beschreibung von tt-rss: http://office-tipps.net/tiny-tiny-rss-tutorial-1-installation-konfiguration/
http://office-tipps.net/tiny-tiny-rss-tutorial-2-optische-anpassungen-und-plugins/
http://office-tipps.net/tiny-tiny-rss-tutorial-3-artikel-feiner-strukturieren/
http://office-tipps.net/tiny-tiny-rss-tutorial-4-noch-ein-paar-kleinigkeiten/

Composer

Hier sind mehrere Möglichkeiten beschrieben, wie man Composer installiert. ich denke am sinnvollsten ist:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

PHPMailer

PHPMailer ist ein PHP-Skript, was E-Mails verschickt. Es wird mit Composer installiert.

Syslog

Raspian verwendet rsyslog als Dienst. Es kann über /etc/rsyslog.conf konfiguriert werden. Hier können auch Filter eingetragen werden.

In diesem [https://www.heise.de/ct/artikel/Erweiterte-Systemueberwachung-mit-rsyslog-846750.html|Artikel]] wird rsyslog beschrieben.

E-Mail

TLS

https://www.axxeo.de/blog/technisches/exim-mit-tls.html

https://www.heise.de/security/artikel/StartTLS-785453.html beschreibt den Test von TLS. Hier ist allerdings die Befehlssequenz für IMAP falsch. Der Login funktioniert mit „a1 LOGIN user password“.

Postfix
ssmtp

SSMTP funkitoniert auf dem Raspi mit Arcor und den untenstehenden Einstellungen nach dieser Beschreibung. Es gibt auch eine Beschreibung auf Linux und Ich.

Installation:

sudo apt-get install ssmtp

Die Datei /etc/ssmtp/ssmtp.conf

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=<email>

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=mail.arcor.de:465

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
hostname=<email>

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES
UseTLS=YES
AuthUser=<user>
AuthPass=<password>
FromLineOverride=NO

Die Datei /etc/ssmtp/revaliases

# sSMTP aliases
# 
# Format:	local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
root:guettinger@arcor.de:mail.arcor.de:465
www-data:guettinger@arcor.de:mail.arcor.de:465
thomas:guettinger@arcor.de:mail.arcor.de:465

Das Logfile wird nach /var/log/mail.log geschrieben.

Eine Alternative ist auch msmtp.

PHPMailer

In Github gibt es ein Projekt PHPMailer. Es kümmert sich um den Versand von E-Mails.

Owncloud / Nextcloud

Wie man Nextcloud auf dem Raspi installiert ist im Raspberry PI Magazin 05/2016 , S. 56 beschrieben

Hardware abfragen

mit vcgencmd kann die Hardware abgefragt werden (als root)

vcgencmd measure_volts

gibt die Spannung aus

vcgencmd measure_temp

gibt die Temperatur aus

Beschreibung auf http://elinux.org/RPI_vcgencmd_usage

Allgemeines

Nützliche Tools

Messanger

Hier gibt es eine Beschreibung, wie Whatsapp auf dem Raspberry installiert werden kann.

Es gibt die Möglichkeit mit XMPP einen Messanger auf dem Raspi zu hosten. Eine Möglichkeit ist ejabberd. Die installation wird auf https://0fury.de/blog/?/post/%5BTutorial%5D+Wie+mache+ich+meinen+Raspberry+Pi+zu+einem+Instant-Messaging-Server%3F/ beschrieben.
Es soll auch möglich sein XMPP mit Whatsapp zu verbinden. Eine Möglichkeit wird auf https://www.andreas-peters.net/linux/2016/03/01/whatsapp_xmpp_transport.html beschrieben. Eine weitere Installationsanleitung für XMPP auf dem Raspberry: https://jankarres.de/2015/08/raspberry-pi-xmpp-server-prosody-installieren/

raspberry.txt · Zuletzt geändert: 2023/12/10 17:12 von thomas