{"id":1576,"date":"2022-05-24T08:51:35","date_gmt":"2022-05-24T08:51:35","guid":{"rendered":"https:\/\/www.dev-metal.ch\/?p=1576"},"modified":"2022-11-11T22:07:05","modified_gmt":"2022-11-11T22:07:05","slug":"shinobi-mit-pm2","status":"publish","type":"post","link":"https:\/\/www.dev-metal.ch\/?p=1576","title":{"rendered":"Shinobi auf HC4"},"content":{"rendered":"<p>Mein neues <a href=\"https:\/\/www.dev-metal.ch\/?p=1659\" target=\"_blank\" rel=\"noopener\">HC4 NAS<\/a> m\u00f6chte ich gerne auch als \u00dcberwachungs-Station verwenden. Ich entscheide mich <a href=\"https:\/\/www.shinobi.video\/\" target=\"_blank\" rel=\"noopener\">Shinobi<\/a> eine Chance zu geben.<\/p>\n<p>Da Shinobi eine MariaDB einsetzt, wird es hier etwas &#8222;unseri\u00f6s&#8220;. 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\u00fcr\u00a0 auch die &#8222;Anzahl writes&#8220; auf die SD-Karte.<\/p>\n<p>Im weiteren ist Armbian nicht unter dem offiziell unterst\u00fctzen OS. Es wird Ubuntu empfohlen. Armbian bassiert aber wie Ubuntu auf Debian. Es besteht also eine Chance&#8230; \ud83d\ude09<\/p>\n<h2>Installation<\/h2>\n<p>Hier habe ich Installations-Instruktionen f\u00fcr Shinobi auf Armbian gefunden:<\/p>\n<p><a href=\"https:\/\/i12bretro.github.io\/tutorials\/0548.html\" target=\"_blank\" rel=\"noopener\">https:\/\/i12bretro.github.io\/tutorials\/0548.html<\/a><\/p>\n<pre>sudo apt update\r\nsudo apt upgrade -y\r\nsudo apt install git -y\r\ncd ~git clone https:\/\/gitlab.com\/Shinobi-Systems\/Shinobi.git Shinobi\r\ncd Shinobi\r\nsudo chmod +x INSTALL\/ubuntu.sh<\/pre>\n<ul>\n<li>mariadb installieren (y) und passwort setzen<\/li>\n<li>shinobi Datenbank installieren (y)<\/li>\n<li>State Shinobi on boot (y)<\/li>\n<\/ul>\n<p>===&gt; Installation beendet.<\/p>\n<h3>NodeJs<\/h3>\n<p>W\u00e4hrend der Installation wurde ich darauf hingewiesen, dass die aktuell installierte Version von nodejs veraltet ist. Auf armbian &#8222;jammy&#8220; ist aktuell Verison 12 installiert. Ich installiere nun Version 16 (LTS-Version), welche von shinobi empfohlen wird:<\/p>\n<p>Achtung, bevor die Installation der neuen VErsion durchgef\u00fchrt werden kann, sollte die alte nodejs Version deinstalliert werden:<\/p>\n<pre>sudo apt-get purge nodejs\r\nsudo apt-get autoremove<\/pre>\n<p>Anschliessend den Instruktionen von Shinobi folgen:<\/p>\n<p><a href=\"https:\/\/hub.shinobi.video\/articles\/view\/JX1o76s8R8Lm56D\" target=\"_blank\" rel=\"noopener\">https:\/\/hub.shinobi.video\/articles\/view\/JX1o76s8R8Lm56D<\/a><\/p>\n<h3>MariaDb Datenverzeichnis wechseln (armbian)<\/h3>\n<p>Da ich die mariadb auf einer SD-Karte betreibe, verschiebe die die Datenverzeichnisse auf die HDD:<\/p>\n<p>Als erstes \u00fcberpr\u00fcfen wir, wo sich das Datenverzeichnis von MariaDb befindet<\/p>\n<pre>sudo mysql -u root -p<\/pre>\n<pre>MariaDB [(none)]&gt; select @@datadir;\r\n+-----------------+\r\n| @@datadir |\r\n+-----------------+\r\n| \/var\/lib\/mysql\/ |\r\n+-----------------+\r\n1 row in set (0.000 sec)<\/pre>\n<pre>MariaDB [(none)]&gt; exit<\/pre>\n<p>Offenkundig liegt es unter \/var\/lib\/mysql. Dieses Verzeichnis m\u00fcssen wir nun auf unser gew\u00fcnschtes Ziel hin syncronisieren.<\/p>\n<p>Dazu erstmal die DB stoppen<\/p>\n<pre>sudo service mariadb stop<\/pre>\n<p>Ich habe mir f\u00fcr das Zielverzeichnis ein <a href=\"https:\/\/www.dev-metal.ch\/?p=1659#Subvolumes_einrichten\" target=\"_blank\" rel=\"noopener\">subvolume auf btrfs<\/a> erstellt. Die Daten sollen neu auf &#8222;\/mnt\/program_data\/mariadb\/data&#8220; geschrieben werden:<\/p>\n<pre>sudo rsync -av \/var\/lib\/mysql \/mnt\/program_data\/mariadb\/data<\/pre>\n<p>Zur Sicherheit das alte Datenverzeichnis umbenennen<\/p>\n<pre>sudo mv \/var\/lib\/mysql \/var\/lib\/mysql.bak<\/pre>\n<p>Jetzt &#8222;biegen&#8220; wir das data Verzeichnis der MariaDB Konfiguration auf das neue Ziel um.<\/p>\n<pre>sudo vi \/etc\/mysql\/mariadb.conf.d\/50-server.cnf<\/pre>\n<pre>[mysqld]\r\n. . .\r\ndatadir=\/mnt\/program_data\/mariadb\/data\/mysql\r\nsocket=\/mnt\/program_data\/mariadb\/data\/mysql\/mysql.sock<\/pre>\n<pre>sudo vi \/etc\/mysql\/mariadb.conf.d\/50-client.cnf\r\n[client]\r\nsocket=\/mnt\/program_data\/mariadb\/data\/mysql\/mysql.sock\r\n\r\n[client-mariadb]<\/pre>\n<p>Jetzt mariadb neu starten<\/p>\n<pre>sudo service mariadb start<\/pre>\n<p>und status \u00fcberpr\u00fcfen<\/p>\n<pre>sudo service mariadb status<\/pre>\n<p>Und nun noch \u00fcberpr\u00fcfen ob mariadb die \u00e4nderung \u00fcbernommen hat:<\/p>\n<pre>sudo mysql -u root -p<\/pre>\n<pre>MariaDB [(none)]&gt; select @@datadir;\r\n+---------------------------------------+\r\n| @@datadir |\r\n+---------------------------------------+\r\n| \/mnt\/program_data\/mariadb\/data\/mysql\/ |\r\n+---------------------------------------+\r\n1 row in set (0.000 sec)<\/pre>\n<pre>MariaDB [(none)]&gt; exit<\/pre>\n<h3>MariaDB Runlevel<\/h3>\n<p>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\u00fcgbar sind. Es ist daher n\u00f6tig, die Reihenfolge der Services zu beeinflussen. <a href=\"https:\/\/www.dev-metal.ch\/?p=1913\" target=\"_blank\" rel=\"noopener\">Hier habe ich beschrieben<\/a> wie ich das konkret umgesetzt habe.<\/p>\n<h3>Konfiguration shinobi<\/h3>\n<p>\u00dcber die Admin-Oberfl\u00e4che einloggen:<\/p>\n<pre>http:\/\/192.168.x.x:8080\/super<\/pre>\n<ul>\n<li>Passwort von admin@shinobi.video \u00e4ndern unter &#8222;Preferences&#8220; \u00e4ndern.<\/li>\n<li>Neuer Account unter &#8222;Accounts&#8220; erstellen.<\/li>\n<\/ul>\n<p>Die Videos sollen auf meinem HC4 auf den HDD gespeichert werden, nicht auf dem default &#8222;video&#8220;, welches shinobi vorgibt. Dazu in der Config &#8222;Streamdir&#8220; und &#8222;VideoDir&#8220; anpassen<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1801\" src=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/05\/Bildschirmfoto-vom-2022-08-01-12-42-09.png\" alt=\"\" width=\"1046\" height=\"1190\" srcset=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/05\/Bildschirmfoto-vom-2022-08-01-12-42-09.png 1046w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/05\/Bildschirmfoto-vom-2022-08-01-12-42-09-264x300.png 264w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/05\/Bildschirmfoto-vom-2022-08-01-12-42-09-900x1024.png 900w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/05\/Bildschirmfoto-vom-2022-08-01-12-42-09-768x874.png 768w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/05\/Bildschirmfoto-vom-2022-08-01-12-42-09-1x1.png 1w\" sizes=\"auto, (max-width: 1046px) 100vw, 1046px\" \/>Anschliessend reboot oder Shinobi Restart.<\/p>\n<p>Jetzt \u00fcber der Benutzer-Oberfl\u00e4che mit dem eben erstellen User einloggen.<\/p>\n<pre>http:\/\/192.168.x.x:8080<\/pre>\n<p>Anschliessend diesen punkten folgen:<\/p>\n<p><a href=\"https:\/\/hub.shinobi.video\/articles\/view\/gMQEOex93THDnMr\" target=\"_blank\" rel=\"noopener\">Was ist zu tun nach einer Shinobi-Installation<\/a>?<\/p>\n<h2>Restart Shinobi<\/h2>\n<p>Wenn sich Shinobi aus irgendeinem Grunde aufgeh\u00e4ngt hat, kann man den Service neu starten:<\/p>\n<pre>cd ~\/Shinobi\r\nsudo pm2 restart all<\/pre>\n<h3>Logs<\/h3>\n<p>Die Shinobi-Logs sind \u00fcber PM2 einsehbar<\/p>\n<pre>sudo pm2 logs<\/pre>\n<h2>Steams<\/h2>\n<p>Einder der Gr\u00fcnde wieso ich mich f\u00fcr Shinobi entschieden habe, ist die M\u00f6glichkeit alle Streams f\u00fcr externe Anwendungen (z.B. zum Einbinden als iFrame) zu verwenden. Hier ein <a href=\"https:\/\/docs.shinobi.video\/api\/get-streams\" target=\"_blank\" rel=\"noopener\">Link auf die Dokumentation<\/a>, wie die Streams eingebunden werden k\u00f6nnen.<\/p>\n<h3>Tempor\u00e4r vs. Permanenter API-Key<\/h3>\n<p>Ich hatte zu Beginn das Problem, dass nach jedem Shinobi Restart die Stream-Adresse ge\u00e4ndert hat. Konkret \u00e4ndert der API-Key unter welchem auf den Stream zugegriffen werden kann. <a href=\"https:\/\/medium.com\/@ShinobiSystems\/how-to-view-shinobi-stream-in-vlc-bb77c64d08f1\" target=\"_blank\" rel=\"noopener\">Hier<\/a> findet man die L\u00f6sung. Offenbar gibt es ein tempor\u00e4rer API-Key, der bei verwendet wird, wenn man auf der Kamera-\u00dcbersichtsseite einen Stream anw\u00e4hlt. 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\u00fcr die Einbindung des Streams in eine andere Applikation muss der permanente API-Key verwendet werden.<\/p>\n<h2>Links<\/h2>\n<blockquote class=\"wp-embedded-content\" data-secret=\"zPNFXGl0mb\"><p><a href=\"https:\/\/magazine.odroid.com\/article\/shinobi-closed-circuit-tv-cctv-creating-video-monitoring-system-using-odroid-hc2\/\">Shinobi Closed Circuit TV (CCTV): Creating a Video Monitoring System Using the ODROID-HC2<\/a><\/p><\/blockquote>\n<p><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;Shinobi Closed Circuit TV (CCTV): Creating a Video Monitoring System Using the ODROID-HC2&#8221; &#8212; ODROID Magazine\" src=\"https:\/\/magazine.odroid.com\/article\/shinobi-closed-circuit-tv-cctv-creating-video-monitoring-system-using-odroid-hc2\/embed\/#?secret=zPNFXGl0mb\" data-secret=\"zPNFXGl0mb\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<p>https:\/\/i12bretro.github.io\/tutorials\/0548.html<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"sgVmDJ62tn\"><p><a href=\"https:\/\/cloudinit.co\/how-to-configure-a-linux-service-to-start-automatically-after-a-crash-or-reboot-part-2-reference\/\">How To Configure a Linux Service to Start Automatically After a Crash or Reboot \u2013 Part 2: Reference<\/a><\/p><\/blockquote>\n<p><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;How To Configure a Linux Service to Start Automatically After a Crash or Reboot \u2013 Part 2: Reference&#8221; &#8212; Cloud Init Technologies\" src=\"https:\/\/cloudinit.co\/how-to-configure-a-linux-service-to-start-automatically-after-a-crash-or-reboot-part-2-reference\/embed\/#?secret=sgVmDJ62tn\" data-secret=\"sgVmDJ62tn\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<p>https:\/\/docs.shinobi.video\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mein neues HC4 NAS m\u00f6chte ich gerne auch als \u00dcberwachungs-Station verwenden. Ich entscheide mich Shinobi eine Chance zu geben. Da Shinobi eine MariaDB einsetzt, wird es hier etwas &#8222;unseri\u00f6s&#8220;. 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. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-1576","post","type-post","status-publish","format-standard","hentry","category-techdocs"],"modified_by":"ralph","_links":{"self":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1576"}],"version-history":[{"count":33,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1576\/revisions"}],"predecessor-version":[{"id":1923,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1576\/revisions\/1923"}],"wp:attachment":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}