Inhalt

In diesem Artikel wird beschrieben, wie ein Basic Setup für den Raspberry Pi vorzunehmen ist um eine Basis für die meisten Projekte zu schaffen. Von der Vorbereitung der SD-Karte bis zum Betreiben des NGINX Webservers oder der Neopixel-Library.

Basic Raspberry Setup

1. Raspbian Stretch

Raspbian Stretch herunterladen: Raspberry.org

2. SD-Karte flashen

SD-Karte mit der aktuellen Version von Raspbian Stretch flashen

3. Headless Setup

Die folgende Datei herunterladen und dessen Inhalte in das Root-Verzeichnis der Speicherkarte legen:
Datei Download (raspberry-headless.zip)

country=CH
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="Zeltfunk"
psk="D8317iegbTfuz!"
id_str="home"
}

4. SSH Connection

SD-Karte in Raspberry einlegen und booten. IP-Adresse ausfindig machen und per SSH auf den Raspberry connecten.

ssh pi@10.0.0.xxx

5. Raspi Config

Raspi-Config aufrufen und Einstellungen für Dateisystem, Hostname, Passwort, Netzwerk, Update vornehmen.

  • Enlarge Filesystem
  • Reboot
  • Hostname setzen
  • Passwort ändern
  • “Wait for Network at boot”
  • Update raspi-config
  • Reboot

6. Allgemeine Updates

Um das System vorzubereiten sollten ein paar allgemeine Updates durchgeführt werden um alle Pakete auf den aktuellsten Stand zu bringen und nachfolgende Probleme zu vermeiden.

sudo apt-get dist-upgrade
sudo apt-get update
sudo apt-get upgrade

7. Allgemeine Paket-Installation

Als nächstes werden ein paar Pakete installiert, welche immer von Nutzen sein werden und in den meisten Projekten benötigt werden:

sudo apt-get install build-essential python-dev python-setuptools git swig i2c-tools

8. Python Version 3.x

Damit mit aktuellsten Voraussetzungen entwickelt wird, sollte der Default der Python-Version auf 3.x geändert werden. Hierzu müssen lediglich die beiden folgenden Befehle ausgeführt werden:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2

9. NGINX Installation

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 nginx
sudo /etc/init.de/nginx start

10. PHP 7 installieren

Um PHP (in Version 7.x) zu installieren wird folgender Befehl ausgeführt:

sudo apt-get install php-fpm

11. MySQL (Server) installieren

MySQL ist für die Datenbanken zuständig. MySQL Datenbanken können erst angelegt und verwendet werden, wenn der MySQL Server installiert ist. Dies wird über folgenden Befehl erreicht:

sudo apt-get install mysql-server

12. MySQL Konfiguration

Für MySQL wird als erstes eine dem Projekt entsprechende Datenbank erstellt, welche danach vom Web-Interface und von der Python-Applikation angesteuert wird. Hierfür wird MySQl im Terminal gestartet:

sudo mysql -u root

Um eine neue Datenbank zu erstellen, wird folgender Befehl genutzt. Als Datenbank-Name wird der Projektname in lowercase verwendet:

CREATE DATABASE aquapi;

Für die gerade erstellte Datenbank wird ein Benutzer mit Passwort erstellt und entsprechende Zugangsberechtigungen vergeben. Hierbei werden username, dbname und password entsprechend ersetzt.

CREATE OR REPLACE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Zuletzt muss in der Config noch die bind-address eingetragen werden:

sudo nano /etc/mysql/my.cnf

Hier werden dann am Ende der Datei die folgenden zwei Zeilen eingetragen:

[mysqld]
bind-address = 0.0.0.0

Danach: Neustarten des MySQL service via:

sudo systemctl restart mysql.service

13. Github-Projekt klonen

Als nächstes kann das Beispiel-Projekt von Github geklont werden um die wichtigsten und initialen Files für ein Projekt auf dem Raspberry zur Verfügung zu haben. Hierbei wird target durch das entsprechende Ziel-Verzeichnis ersetzt.

git clone https://github.com/Tetrikus/BasePi /home/pi/target

Da das Projekt auf Github als “privat” gelistet ist, wird für den Klon-Vorgang ein Benutzername und ein Passwort benötigt.

14. NGINX Konfiguration

Die NGINX-Config ist im Applikations-Verzeichnis des Base-Projekts enthalten (/web/nginx.conf). Dieses muss allerdings zuerst noch angepasst werden:

  • Zeile 7: Korrekten Pfad zum /web Verzeichnis einfügen
  • Zeile 11: Sinnvollen Servernamen verwenden

Im NGINX-Verzeichnis (/etc/nginx/sites-enabled/) gibt es bereits eine Default-Config, welche mit folgendem Befehl überschrieben wird – hierbei muss projectpath mit dem korrekten Namen des Verzeichnisses überschrieben werden:

sudo cp -r /home/pi/projectpath/web/nginx.conf /etc/nginx/sites-enabled/default

Die Ursprungsdatei im /web Verzeichnis sollte gelöscht werden, wenn sie nicht mehr weiter benötigt wird. Folgendes ist ein Backup der Default-Konfiguration:

# Default NGINX server configuration
#
server {
	listen 80 default_server;
	listen [::]:80 default_server;

	root /home/pi/projectpath/web;

	index index.php index.html index.htm index.nginx-debian.html;

	server_name aqua.pi;

	location / {
		try_files $uri $uri/ /index.php?$args;
	}

	# pass PHP scripts to FastCGI server
	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
	}

	location ~ /\.ht {
		deny all;
	}
}

Nachdem die Konfiguration entsprechend überschrieben wurde, muss diese neu geladen werden, damit nginx mitbekommt, dass sich die Config geändert hat:

sudo /etc/init.d/nginx reload

15. MySQL für PHP (php-mysql)

Damit PHP mit MySQL kommunizieren kann, wird ein weiteres Package benötigt. Dieses kann mittels folgendem Befehl installiert werden:

sudo apt-get install php-mysql

16. MySQL für Python (PyMySQL)

Damit Python ebenfalls mit MySQL kommunizieren kann, wird folgendes Package benötigt:

pip install pymysql

17. Python Requests

Requests Package für Web-Requests von PHP und Python

sudo apt-get install python-requests requests

18. NeoPixel Installation

Die Neopixel Library wird über folgenden Befehl installiert:

sudo pip install rpi_ws281x

19. NeoPixel Konfiguration