Mein neues HC4 NAS möchte ich gerne auch als Überwachungs-Station verwenden. Ich entscheide mich Shinobi eine Chance zu geben.
Da Shinobi eine MariaDB einsetzt, wird es hier etwas „unseriös“. Dies, weil ich das Betriebssystem auf dem HC4 auf einer SD Karte betreibe. Eine Datenbank auf einer SD-Karte zu betreiben ist bekanntlich eine sehr schlechte Idee. Deswegen werde ich das Daten-Verzeichnis von mariaDB nach der Installation auf die HDD Disk verlegen (siehe Installation). Das wird zwar die Geschwindigkeit der DB reduzieren, aber dafür auch die „Anzahl writes“ auf die SD-Karte.
Im weiteren ist Armbian nicht unter dem offiziell unterstützen OS. Es wird Ubuntu empfohlen. Armbian bassiert aber wie Ubuntu auf Debian. Es besteht also eine Chance… 😉
Installation
Hier habe ich Installations-Instruktionen für Shinobi auf Armbian gefunden:
https://i12bretro.github.io/tutorials/0548.html
sudo apt update sudo apt upgrade -y sudo apt install git -y cd ~git clone https://gitlab.com/Shinobi-Systems/Shinobi.git Shinobi cd Shinobi sudo chmod +x INSTALL/ubuntu.sh
- mariadb installieren (y) und passwort setzen
- shinobi Datenbank installieren (y)
- State Shinobi on boot (y)
===> Installation beendet.
NodeJs
Während der Installation wurde ich darauf hingewiesen, dass die aktuell installierte Version von nodejs veraltet ist. Auf armbian „jammy“ ist aktuell Verison 12 installiert. Ich installiere nun Version 16 (LTS-Version), welche von shinobi empfohlen wird:
Achtung, bevor die Installation der neuen VErsion durchgeführt werden kann, sollte die alte nodejs Version deinstalliert werden:
sudo apt-get purge nodejs sudo apt-get autoremove
Anschliessend den Instruktionen von Shinobi folgen:
https://hub.shinobi.video/articles/view/JX1o76s8R8Lm56D
MariaDb Datenverzeichnis wechseln (armbian)
Da ich die mariadb auf einer SD-Karte betreibe, verschiebe die die Datenverzeichnisse auf die HDD:
Als erstes überprüfen wir, wo sich das Datenverzeichnis von MariaDb befindet
sudo mysql -u root -p
MariaDB [(none)]> select @@datadir; +-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.000 sec)
MariaDB [(none)]> exit
Offenkundig liegt es unter /var/lib/mysql. Dieses Verzeichnis müssen wir nun auf unser gewünschtes Ziel hin syncronisieren.
Dazu erstmal die DB stoppen
sudo service mariadb stop
Ich habe mir für das Zielverzeichnis ein subvolume auf btrfs erstellt. Die Daten sollen neu auf „/mnt/program_data/mariadb/data“ geschrieben werden:
sudo rsync -av /var/lib/mysql /mnt/program_data/mariadb/data
Zur Sicherheit das alte Datenverzeichnis umbenennen
sudo mv /var/lib/mysql /var/lib/mysql.bak
Jetzt „biegen“ wir das data Verzeichnis der MariaDB Konfiguration auf das neue Ziel um.
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld] . . . datadir=/mnt/program_data/mariadb/data/mysql socket=/mnt/program_data/mariadb/data/mysql/mysql.sock
sudo vi /etc/mysql/mariadb.conf.d/50-client.cnf [client] socket=/mnt/program_data/mariadb/data/mysql/mysql.sock [client-mariadb]
Jetzt mariadb neu starten
sudo service mariadb start
und status überprüfen
sudo service mariadb status
Und nun noch überprüfen ob mariadb die änderung übernommen hat:
sudo mysql -u root -p
MariaDB [(none)]> select @@datadir; +---------------------------------------+ | @@datadir | +---------------------------------------+ | /mnt/program_data/mariadb/data/mysql/ | +---------------------------------------+ 1 row in set (0.000 sec)
MariaDB [(none)]> exit
MariaDB Runlevel
Da ich die DB auf einem btrfs mount verschoben habe, muss sichergestellt sein, dass MariaDB erst dann gestartet wird, wenn die mounts im System verfügbar sind. Es ist daher nötig, die Reihenfolge der Services zu beeinflussen. Hier habe ich beschrieben wie ich das konkret umgesetzt habe.
Konfiguration shinobi
Über die Admin-Oberfläche einloggen:
http://192.168.x.x:8080/super
- Passwort von admin@shinobi.video ändern unter „Preferences“ ändern.
- Neuer Account unter „Accounts“ erstellen.
Die Videos sollen auf meinem HC4 auf den HDD gespeichert werden, nicht auf dem default „video“, welches shinobi vorgibt. Dazu in der Config „Streamdir“ und „VideoDir“ anpassenAnschliessend reboot oder Shinobi Restart.
Jetzt über der Benutzer-Oberfläche mit dem eben erstellen User einloggen.
http://192.168.x.x:8080
Anschliessend diesen punkten folgen:
Was ist zu tun nach einer Shinobi-Installation?
Restart Shinobi
Wenn sich Shinobi aus irgendeinem Grunde aufgehängt hat, kann man den Service neu starten:
cd ~/Shinobi sudo pm2 restart all
Logs
Die Shinobi-Logs sind über PM2 einsehbar
sudo pm2 logs
Steams
Einder der Gründe wieso ich mich für Shinobi entschieden habe, ist die Möglichkeit alle Streams für externe Anwendungen (z.B. zum Einbinden als iFrame) zu verwenden. Hier ein Link auf die Dokumentation, wie die Streams eingebunden werden können.
Temporär vs. Permanenter API-Key
Ich hatte zu Beginn das Problem, dass nach jedem Shinobi Restart die Stream-Adresse geändert hat. Konkret ändert der API-Key unter welchem auf den Stream zugegriffen werden kann. Hier findet man die Lösung. Offenbar gibt es ein temporärer API-Key, der bei verwendet wird, wenn man auf der Kamera-Übersichtsseite einen Stream anwählt. Und dann gibt es noch einen permanenten API-Key. Diesen muss man einmalig erstellen. Dabei kann man auch den Zugriff auf eine bestimmte IP eingrenzen. Für die Einbindung des Streams in eine andere Applikation muss der permanente API-Key verwendet werden.
Links
Shinobi Closed Circuit TV (CCTV): Creating a Video Monitoring System Using the ODROID-HC2
https://i12bretro.github.io/tutorials/0548.html
How To Configure a Linux Service to Start Automatically After a Crash or Reboot – Part 2: Reference
https://docs.shinobi.video/