Flashing Raspberry
Der Raspberry PI Imager ist die einfachste Möglichkeit, eine SD-Karte für einen Raspberry vorzubereiten.
Headless Setup
Für ein Headless Setup sollten während des Flash-Vorgangs die wichtigsten Informationen vor-eingestellt werden. Hierzu gehören die WiFi-Verbindung (falls benötigt), das Passwort und die Aktivierung von SSH.
Updates durchführen
sudo apt-get dist-upgrade
sudo apt-get update
sudo apt-get upgradeAllgemeine Packages
Folgende Pakete werden meistens benötigt und werden bei Bedarf OS-weit installiert:
sudo apt-get install build-essential
sudo apt-get install python3-full
sudo apt-get install python3-dev
sudo apt-get install python3-setuptools
sudo apt-get install python3-pil
sudo apt-get install git
sudo apt-get install swig
sudo apt-get install i2c-toolsVirtual Environment Setup
Gerade bei neueren Versionen des Raspberry PI muss zuerst eine virtuelle Umgebung erstellt werden.
Als erstes wird dazu eine virtuelle Umgebung definiert und erstellt:
python3 -m venv --system-site-packages VENVNAMEDie Option --system-site-packages gibt an, dass Module, die auf System-Ebene installiert sind, ebenfalls in der VENV erreichbar sind. Der Name für die virtuelle Umgebung kann frei gewählt werden. Als Beispiel wird hier venvtp verwendet. Die Installation der virtuellen Umgebung kann im User-Verzeichnis /home/pi/ durchgeführt werden.
Danach wird die virtuelle Umgebung “aktiviert”:
source /home/pi/venvtp/bin/activateDamit nicht bei jedem Start einer Applikation der gesamte Befehl sudo /home/pi/venvtp/bin/python3 script.py eingegeben werden muss, kann ein Alias erstellt werden, welcher das abkürzt:
alias supy='sudo /home/pi/venvtp/bin/python3'Danach können Scripts ganz einfach über den Befehl supy start.py aufgerufen werden. Allerdings muss dieser Alias zusätzlich in die Datei .bashrc gespeichert werden, damit er dauerhaft bestehen bleibt. Ausserdem wird ein Eintrag für die Aktivierung der VENV hinzugefügt. Dazu wird die Datei ~/.bashrc mittels nano geöffnet und am Ende der Datei folgende Zeilen eingesetzt:
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
alias supy='sudo /home/pi/venvtp/bin/python3'
alias venv='source /home/pi/venvtp/bin/activate'Webserver Setup
Apache deinstallieren
Zuerst soll die Apache-Installation deaktiviert und deinstalliert werden, falls vorhanden und aktiv:
sudo systemctl stop apache2
sudo systemctl disable apache2
sudo apt remove apache2
sudo apt autoremove
sudo apt clean all && sudo apt update && sudo apt dist-upgrade
sudo apt purge apache2NGINX installieren
NGINX ist eine Webserver-Applikation, welche die Grundfunktionalitäten für den Webserver bereitstellt. Diese wird über folgende Befehle installiert und dann gestartet.
sudo apt-get install nginxNach der Installation von nginx sollte die IP-Adresse des Raspberry pi über einen Webserver aufrufbar sein und die nginx Welcome-Seite dargestellt werden.
PHP installieren
Um PHP zu installieren wird folgender Befehl ausgeführt:
sudo apt-get install php-fpmDie fpm-Version wird benötigt, falls der Webserver auf NGINX und nicht Apache2 basiert.
MySQL Server installieren
MySQL (mariadb) wird mit folgendem Befehl installiert:
sudo apt-get install default-mysql-serverNGINX Konfiguration
Als erstes wird die Konfigurations-Datei aufgerufen:
sudo nano /etc/nginx/sites-enabled/defaultHier werden einige Konfigurationen benötigt. Das folgende Beispiel zeigt eine Möglichkeit, den Server zu konfigurieren. Hierbei werden folgende Einstellungen vorgenommen:
- Das Root-Verzeichnis der Website (/home/pi/…./web)
- Das reagieren auf die index.php als Eingangspunkt
- Der Server-Name xyz.pi
- Das Reagieren und Auslesen auf URL-Argumente wie z.B.
index.php?page=settings - Zugriff auf .htaccess verhindern
Am Ende sollte die Config-Datei ungefähr wie folgt aussehen:
server {
listen 80 default_server;
listen [::]:80 default_server;
# define the website root
root /home/pi/wClock/web;
#define to listen to index.php first
index index.php index.html index.htm index.nginx-debian.html;
# define the server name
server_name puzzle.pi;
# define to process arguments within the urls
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
# pass PHP scripts to FastCGI server
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}Berechtigungen für das Web-Verzeichnis setzen. Der gesamte Pfad benötigt read und execute Permissions:
# sudo chown -R www-data:www-data /home/pi/testipi/web
# sudo chown -R www-data:www-data /home /home/pi /home/pi/testipi/ /home/pi/testipi/web
# sudo chmod 755 /home/pi/testipi/web
sudo chmod +rx /home /home/pi /home/pi/testipi/ /home/pi/testipi/web/Nach diesen Anpassungen muss der NGINX-Service neu gestartet werden:
sudo systemctl reload nginxNun sollte der Webserver und eine index.php im Verzeichnis /web per Browser aufrufbar sein.
PHP Error Reporting & Display
Wenn beim Aufruf einer PHP-Seite Fehler passieren, werden Sie aktuell noch nicht im Browser sondern nur im Error-Log von nginx ausgegeben. Um das zu ändern, müssen noch ein paar Schritte unternommen werden. Zuerst wird die entsprechende php.ini geöffnet.
sudo nano /etc/php/8.2/fpm/php.iniDer Wert display_errors (relativ weit unten im File) wird von Off zu On geändert und die Datei gespeichert.
PHP Short Tags
Ausserdem können in der PHP.ini die PHP Shorttags (also <? anstatt <?php) aktiviert werden:
short_open_tag = OnNach dem Update der Datei, wird der PHP service neu gestartet:
sudo /etc/init.d/php8.2-fpm restartNun werden die Errors sowohl im nginx Log gespeichert wie auch im Browser direkt ausgegeben.
MySQL Konfiguration
Nach der Installation von MySQL (MariaDB) wird die Konfiguration gestartet. Das Basis-Setup ist durch folgenden Befehl zu erreichen:
sudo mysql_secure_installationDie Passwort-Abfrage kann mit Enter bestätigt werden, da noch keines gesetzt wurde. Dann soll mit Y zur unix_socket_authentification gewechselt werden. Abermals Y führt zur neuen Passwort-Vergabe für den root user. Danach wird für anonymous_users, disalow_rootlogin, remove_testdatabase und reload_configuration ebenfalls jeweils mit Y geantwortet. Damit ist das Setup grundsätzlich abgeschlossen und mittels folgendem Befehl kann auf mysql zugegriffen werden:
sudo mysql -uroot -pDanach wird das root Passwort abgefragt, welches vorher gesetzt wurde. Die Installation kann zum Beispiel mittels SHOW DATABASES; getestet werden, welches die bereits vorhandenen Datenbanken ausgeben sollte.
Datenbank und User definieren
Mittels folgender Befehle wird eine neue Datenbank und ein dazugehöriger User erstellt, ihm alle Rechte gegeben und die Konfiguration reloaded:
CREATE DATABASE db_test;
CREATE OR REPLACE USER 'usr_test'@'%' IDENTIFIED BY 'test77';
GRANT ALL PRIVILEGES ON db_test.* TO 'usr_test'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Um diesen Schritt zu testen, kann eine Verbindung mit dem neuen User zu MySQL hergestellt werden:
sudo mysql -u usr_test -pNach Eingabe des vorher vergebenen Passwortes, gelangt man wieder in die MySQL-Umgebung, diesmal mit dem neuen User.
Damit die Datenbank auch von extern zu erreichen ist, muss in der Konfiguration noch ein sogenanntes Bind eingetragen werden:
sudo nano /etc/mysql/my.cnfFolgende beiden Zeilen werden am Ende der Konfiguration eingetragen:
[mysqld]
bind-address = 0.0.0.0Danach wird der Server über folgenden Befehl neu gestartet. Danach sollte eine Verbindung von ausserhalb (z.B. PyCharm, etc.) möglich sein.
sudo systemctl restart mysql.serviceMySQL für PHP installieren
sudo apt-get install php-mysqlMySQL für Python installieren
pip3 install pymysqlInstall Adafruit Blinka
Adafruit Blinka ist ein Framework, welches es erleichtert, auf Hardware-Komponenten des Raspberry PI zuzugreifen. Es kann ganz einfach mittels folgendem Script installiert werden, nachdem eine virtuelle Umgebung erstellt und aktiviert wurde:
cd ~
pip3 install --upgrade adafruit-python-shell
wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/raspi-blinka.py
sudo -E env PATH=$PATH python3 raspi-blinka.pyDas Script aktiviert die benötigten Hardware-Schnittstellen (I2C, SPI, etc.) installiert blinka und die Dependencies. Der Prozess wird durch einen Neustart beendet.
Adafruit SPI Display Setup
Zuerst wird die entsprechende Library via pip in die venv installiert:
pip3 install adafruit-circuitpython-rgb-displayDanach wird die Font “Dejavu” installiert, falls sie nicht bereits im System vorhanden ist:
sudo apt-get install fonts-dejavuasdf
I2C Port Expander (MCP23017)
Um einen (oder mehrere) I2C Port-Expander zu verwenden, muss das entsprechende Package installiert werden:
pip3 install adafruit-circuitpython-mcp230xxAdafruit 16×2 LCD Display (I2C)
Um die benötigten Daten zu installieren wird folgender Befehl innerhalb der venv ausgeführt:
pip3 install adafruit-circuitpython-charlcdDanach kann das Display bereits über die I2C-Schnittstelle angesprochen werden.
1.3″ OLED (I2C) Display
Das Display hat die fixe I2C Adresse 0x3C, es können somit nicht mehrere desselben Displays gleichzeitig angesteuert werden. Für die Ansteuerung des Displays wird das folgende Modul über die venv installiert:
pip3 install luma.oledtext
1.3* LCD SPI Display
pip3 install numpyServo Hat Setup
Um den Waveshare Servo Hat zu installieren, wird zuerst das Modul smbus installiert:
pip3 install smbusDa
LUX Sensor (I2C) – Adafruit TSL2561
Der LUX-Sensor hat standardmässig die Adresse 0x39. Das dazugehörige Modul wird mittels folgendem Befehl installiert:
pip3 install adafruit-circuitpython-tsl2561Rotary Knobs Breakout – Adafruit NeoRotary 4
Das Breakout Board hat standardmässig die Adresse 0x49. Das dazugehörige Modul wird mittels folgendem Befehl installiert:
pip3 install adafruit-circuitpython-seesawSparkfun Audio Hat (MAX38957a)
In raspi-config wird zuerst das entsprechende Gerät als Audio-Gerät ausgewählt. Danach muss folgendes Script aus der venv ausgeführt werden. Die Installation wird mit einem Reboot abgeschlossen.
sudo apt install -y wget
wget https://github.com/adafruit/Raspberry-Pi-Installer-Scripts/raw/main/i2samp.py
sudo -E env PATH=$PATH python3 i2samp.py
Das selbe Script wird danach nochmal ausgeführt und erneut mit einem Reboot beendet. Danach sollte der alsamixer verfügbar sein.
Um die Sound-Ausgabe zu testen, kann folgender Befehl ausgeführt werden, welcher ein Test-File ausgibt:
speaker-test -c2 --test=wav -w /usr/share/sounds/alsa/Front_Center.wavNeopixel (rpi_ws281x) Setup
Um die Neopixel Library zu installieren wird folgender Befehl innerhalb der venv ausgeführt:
pip3 install rpi_ws281xasdf