# Raspberry Pi

## Raspbian lite installieren

Auf der vorbereiteten SD-Karte muss im Laufwerk "boot" eine leere Datei `ssh` angelegt werden, damit der SSH-Zugang freigeschaltet wird.

### Nach dem ersten Login:

```
sudo apt update
sudo apt upgrade
```

### Konfiguration anpassen:

```
sudo raspi-config
```

- Zeitzone anpassen
- Passwort ändern
- Spracheinstellungen ändern

## Zusatzprogramme installieren

```
sudo apt install mc git zbar-tools build-essential python-dev nginx
```

## Benutzer anlegen

Damit der Benutzer auch auf die GPIOs zugreifen kann, muss er zur Gruppe `pgio` hinzugefügt werden.

```
adduser kamera
...
sudo usermod -a -G gpio kamera
```

## virtuelle Python Umgebung einrichten

```
sudo apt install python3-venv
cd /opt
sudo python3 -m venv kamera
sudo chown -R kamera:kamera /opt/kamera/
```

### virtuelle Umgebung aktivieren

```
su kamera
cd /opt/kamera
source bin/activate
```

Wenn alles geklappt hat, befindet man sich jetzt in der virtuellen Python Umgebung und kann dort die benötigten Module installieren

```
pip install rpi.gpio flask uwsgi
deactivate
```

### streaming-kamera klonen

```
cd /opt/kamera
git clone https://git.jgz-energie.net/ENERGIE/streaming-kamera.git
```

Außerhalb der virtuellen Umgebung kann das Programm mit `/opt/kamera/bin/python /opt/kamera/streaming-kamera/kamera.py gestartet` werden.

Der uWSGI-Server kann mit `/opt/kamera/bin/uwsgi --socket 0.0.0.0:8000 --protocol=http -w server:first_app`, wenn man sich in dem Arbeitsverzeichnis (/opt/kamera/streaming-kamera) befindet.

### Service für uWSGI anlegen

/opt/kamera/uwsgi_config.ini

```
[uwsgi]

chdir = /opt/kamera/streaming-kamera
module = kamera_server:kamera_server

master = true
processes = 1
threads = 2

uid = www-data
gid = www-data
socket = /tmp/sample_app.sock
chmod-socket = 664
vacuum = true

die-on-term = true
```

/etc/systemd/system/uwsgi.service

```
[Unit]
Description=uWSGI Service
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/opt/kamera/streaming-kamera/
ExecStart=/opt/kamera/bin/uwsgi --ini /opt/kamera/uwsgi_config.ini

[Install]
WantedBy=multi-user.target
```

Dienst starten

```
sudo systemctl daemon-reload
sudo systemctl start uwsgi.service
sudo systemctl status uwsgi.service
sudo systemctl enable uwsgi.service
```

### nginx anpassen

```
sudo rm /etc/nginx/sites-enabled/default
```

/etc/nginx/sites-available/kamera_server

```
server {
    listen 80;
    server_name localhost;

    location / { try_files $uri @app; }
        location @app {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/kamera_server.sock;
    }
}
```

Konfiguration aktivieren

```
sudo ln -s /etc/nginx/sites-available/kamera_server /etc/nginx/sites-enabled
sudo systemctl restart nginx
```