URL: https://linuxfr.org/news/presentation-de-shinobicctv-community-edition Title: đŠ PrĂ©sentation de ShinobiCCTV Community Edition đïž Authors: voxdemonix BenoĂźt Sibaud, Davy Defaud, palm123, theojouedubanjo, claudex et bubarđŠ„ Date: 2018ćčŽ12æ14æ„T13:33:24+01:00 License: CC By-SA Tags: ubuntu, debian, tutoriel, video_surveillance, sĂ©curitĂ©, shinobicctv et zoneminder Score: 19 ShinobiCCTV Community Edition est un serveur de vidĂ©oâsurveillance multiâplateâforme, dont les finitions se situent quelque part entre ZoneMinder et Kerberos.io. Voyons ensemble ses particularitĂ©s, ses avantages et inconvĂ©nients.  ---- [Site officiel ShinobiCCTV](https://shinobi.video/) [Discord ShinobiCCTV Room](https://discordapp.com/invite/mdhmvuH) ---- Version communautaire de Shinobi (Community Edition) ==================================================== đ° Introduction --------------- [ShinobiCCTV](https://shinobi.video/), Shinobi pour les intimes, serveur de vidĂ©oâsurveillance Ă ses heures, naquit dans une rĂ©gion froide du Canada sous les martĂšlements de clavier de [Moe Alam](https://gitlab.com/moeiscool). Ce projet serait _lâalternative de rĂ©fĂ©rence Ă ZoneMinder_ ([source](https://shinobi.video/articles/2017-07-29-why-not-just-use-zoneminder)). Ce quâil pourrait devenir, en effet, compte tenu du peu de choix dans cet Ă©cosystĂšme libre. « Shishi » est basĂ© sur [FFmpeg](https://fr.wikipedia.org/wiki/FFmpeg) et [Node.js](https://fr.wikipedia.org/wiki/Nodejs), utilisant massivement du JavaScript, un peu de Python, ainsi quâun chouia de Shell ([source](https://gitlab.com/Shinobi-Systems/ShinobiCE/graphs/master/charts)). Le serveur est multiâplateâforme ([BSD](https://shinobi.video/docs/start#content-centos-fedora-rhel--the-easier-way), [GNU/Linux](https://shinobi.video/docs/start#content-ubuntu--the-easier-way), [macOS](https://shinobi.video/docs/start#content-macos--native), [Windows](https://shinobi.video/docs/start#content-windows--the-hard-way)) et compatible avec lâ[architecture ARM](https://fr.wikipedia.org/wiki/Architecture_ARM). Une [image Docker](https://shinobi.video/docs/start#content-docker) est aussi disponible. En termes de fonctionnalitĂ©s, ShinobiCCTV se situe quelque part entre [ZoneMinder](https://zoneminder.com) (utilisable en milieu pro mais vieillissant) et [Kerberos.io](https://www.kerberos.io). Il nây a pas de limite en nombre de camĂ©ras (autre que la puissance de calcul de vos machines et la bande passante de votre rĂ©seau). Shinobi se divise en deux branches distinctes : 1. [_Shinobi Community Edition_](https://gitlab.com/Shinobi-Systems/ShinobiCE) â [licence libre](https://gitlab.com/Shinobi-Systems/ShinobiCE/blob/master/LICENSE.md) (gratuit) ; 1. [_Shinobi Pro_](https://gitlab.com/Shinobi-Systems/Shinobi) â [Open Source non libre](https://gitlab.com/Shinobi-Systems/Shinobi/blob/master/LICENSE.md) (payant, sauf exceptions). Nous allons ici, bien entendu, nous intĂ©resser uniquement Ă la version libre. DâaprĂšs [cet article](https://shinobi.video/articles/2017-08-03-shinobi-ce-and-shinobi-pro), la version libre de Shinobi ne reçoit pas de mises Ă jour rĂ©guliĂšres ([historique](https://gitlab.com/Shinobi-Systems/ShinobiCE/commits/master)) et nâaccepte aucun demande dâintĂ©gration (_pull request_). Sâil existe donc bien une version libre de Shinobi, elle nâest, Ă lâheure de la rĂ©daction de cet article, hĂ©las point communautaire. Il faut nĂ©anmoins souligner que [Moe](https://gitlab.com/moeiscool), pour le moment lâunique dĂ©veloppeur, est trĂšs rĂ©actif, Ă lâĂ©coute et surtout quâil utilise le logiciel quâil code (_cf._ [les tarifs du support](https://shinobi.video/support)). đ ïž FonctionnalitĂ©s et capacitĂ©s ------------------------------- - capacitĂ© de rĂ©cupĂ©rer des flux audioâvidĂ©o des camĂ©ras via HTTP, [RTP](https://fr.wikipedia.org/wiki/Real-time_Transport_Protocol "Realâtime Transport Protocol")/[RTSP](https://fr.wikipedia.org/wiki/Real_Time_Streaming_Protocol) et [ONVIF](https://en.wikipedia.org/wiki/ONVIF) ; HTTPS est pris en charge, mais uniquement avec des certificats X.509 valides ; - enregistrement aux formats vidĂ©o compatible avec lâ[accĂ©lĂ©ration matĂ©rielle](https://shinobi.video/docs/gpu), avec trois modes dâenregistrement diffĂ©rents (enregistrement continu, enregistrement lors dâĂ©vĂ©nements avec ou sans tampon, enregistrement puis suppression si pas dâĂ©vĂ©nement dĂ©tectĂ©) ; - enregistrement possible de lâaudio ; - [dĂ©tection de mouvements](https://shinobi.video/docs/motion) et [analyse de formes](https://shinobi.video/docs/object) ; - diversitĂ© de formats dâenregistrement ([liste](https://shinobi.video/docs/settings#content-record)) ; - diversitĂ© dans les mĂ©thodes de diffusion ; en revanche, le dĂ©lai entre la rĂ©alitĂ© et ce que lâon voit sur lâĂ©cran peut ĂȘtre important (jusquâĂ 8 s avec [HLS](https://shinobi.video/docs/settings#content-stream--hls)) suivant la [mĂ©thode de diffusion](https://shinobi.video/docs/settings#content-stream) choisie ; - gestion des stockages distants ([Amazon S3](https://en.wikipedia.org/wiki/Amazon_S3), [WebDAV](https://fr.wikipedia.org/wiki/WebDAV), [Backblaze B2](https://en.wikipedia.org/wiki/Backblaze)) ; - possibilitĂ© de dĂ©finir le stockage pour chaque camĂ©ra ; - gestion dâune petite partie des commandes pour camĂ©ras ([PTZ](https://fr.wikipedia.org/wiki/Cam%C3%A9ra_pan_tilt_zoom), IR) ; - possibilitĂ© de permuter entre le mode de diffusion « normal » et le mode JPEG, moins gourmand en bande passante et avec une plus faible latence (trĂšs utile pour dĂ©placer les [PTZ](https://fr.wikipedia.org/wiki/Cam%C3%A9ra_pan_tilt_zoom) ou couper les flux audio) ; - utilisation de robots pour les alertes (courriel, _discord_) ; - compatibilitĂ© [LDAP](https://fr.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol) ; - ligne du temps, [accĂ©lĂ©rĂ© (_timeâlapse_)](https://en.wikipedia.org/wiki/Time-lapse_photography) ; - lancement de scripts (par dĂ©faut en superâutilisateur) lors dâĂ©vĂ©nements ; - calendrier par camĂ©ra oĂč sont indiquĂ© les Ă©vĂšnements ; ce calendrier nâest pas encore synchronisable ; - le mode [grappe de serveurs](https://fr.wikipedia.org/wiki/Grappe_de_serveurs) (_cluster_) de Shinobi est basĂ© sur le systĂšme maĂźtreâesclave, permettant de [rĂ©partir la charge](https://fr.wikipedia.org/wiki/R%C3%A9partition_de_charge), mais pas dâavoir de la [haute disponibilitĂ©](https://fr.wikipedia.org/wiki/Haute_disponibilit%C3%A9) ; seul le serveur maĂźtre sâoccupe de la communication avec la base de donnĂ©es, si ce serveur plante, tout plante ; - sur la WEBUI vous pouvez adapter votre tableau de bord grĂące au glisserâdĂ©poser ([_drag & drop_](https://fr.wikipedia.org/wiki/Glisser-d%C3%A9poser)) sur les diffĂ©rents moniteurs de camĂ©ra.  âïž Quelques diffĂ©rences avec les autres -------------------------------------- 1. ZM et Shinobi permettent tous deux de visualiser plusieurs _moniteurs_ simultanĂ©ment (pas Kerberos.io) ; en revanche, avec Shinobi vous ne pouvez choisir la taille de lâaffichage ; 1. la ligne du temps de Shinobi se base sur des points fixes sans image de prĂ©visualisation ; pour voir ce quâil sâest dĂ©roulĂ© entre deux points, il faut visualiser la vidĂ©o liĂ©e ; sur ZM, il suffit de survoler la ligne du temps pour charger une image de lâinstant T ; vous ne pourrez donc pas visualiser une journĂ©e entiĂšre en quelques secondes comme avec ZM ; impossible aussi de trouver un Ă©vĂšnement si vous ne savez pas le dater ; 1. Sur Shinobi il faudra paramĂ©trer les commandes [PTZ](https://fr.wikipedia.org/wiki/Cam%C3%A9ra_pan_tilt_zoom) de chaque camĂ©ra, sauf pour celles compatibles [ONVIF](https://en.wikipedia.org/wiki/ONVIF) ; vous pouvez Ă©ventuellement recopier la configuration dâune camĂ©ra, mais, pour le moment, pas choisir dans une liste de prĂ©âconfiguration, comme avec ZM ; 1. Shinobi nâest pas capable de contrĂŽler autant de commandes pour les [PTZ](https://fr.wikipedia.org/wiki/Cam%C3%A9ra_pan_tilt_zoom), infrarouge, etc., que ZoneMinder ; 1. la session utilisateur nâest pas liĂ©e au navigateur mais Ă lâonglet, sauf bogue ; 1. la consommation dâespace dâĂ©change mĂ©moire ([_swap_](https://fr.wikipedia.org/wiki/Espace_d%27%C3%A9change)) est assez imposante, et lâon ne peut dĂ©finir son chemin dâaccĂšs ; 1. Shinobi utilise massivement le superâutilisateur [_root_](https://fr.wikipedia.org/wiki/Utilisateur_root) (pm2, ffmpeg, etc.) ; 1. ZoneMinder et Kerberos.io utilisent tous deux un serveur Web, Shinobi intĂšgre le sien ; vous devrez donc allouer un port diffĂ©rent (par dĂ©faut 8080) et ne pourrez [journaliser](https://fr.wikipedia.org/wiki/Historique_(informatique)) les infos ni les exploiter avec [Piwik/Matamo](https://matomo.org/), sauf Ă passer par un [serveur mandataire](https://fr.wikipedia.org/wiki/Proxy) (exemple avec [HaProxy](https://linuxfr.org/wiki/ubuntu-debian-installation-complete-de-shinobi-community-edition#toc-ajouter-un-frontend-haproxy-avec-https)) ; Node.js oblige, ShinobiCCTV nĂ©cessite de lâexpĂ©rience en Node.js/expressjs afin de pouvoir ajouter des pages Web sur le serveur (par exemple un fichier _healthcheck_) ; 1. Avec ZoneMinder le mode [grappe de serveurs](https://fr.wikipedia.org/wiki/Grappe_de_serveurs) (_cluster_) nĂ©cessite de rĂ©partir manuellement les camĂ©ras sur plusieurs nĆuds et, si vous pouvez visionner les enregistrements depuis nâimporte quel nĆud, le direct quant Ă lui est limitĂ© aux camĂ©ras gĂ©rĂ©es par le serveur ; Shinobi semble lui [rĂ©partir la charge](https://fr.wikipedia.org/wiki/R%C3%A9partition_de_charge) entre ses nĆuds fils automatiquement, en se basant sur lâutilisation du processeur ; le visionnage du direct ou des enregistrements se fait donc uniquement sur le serveur maĂźtre ([source](https://shinobi.video/articles/2018-05-23-how-to-cluster-multiple-shinobi-child-nodes)) ; le systĂšme de ZoneMinder permet de crĂ©er une grappe de serveurs rĂ©partie sur plusieurs rĂ©seaux, Shinobi semble capable dâaccomplir aussi cette tĂąche ; 1. le [dĂ©tecteur de mouvement](https://shinobi.video/docs/motion) est plus difficile Ă configurer sur Shinobi (sur ZoneMinder, il se rĂ©sume Ă lâactiver et optionnellement adapter le niveau de « bruit ») ; 1. Kerberos utilise un mĂ©canisme de mise Ă jour via la WEBUI [[_source_](https://doc.kerberos.io/2.0/installation/upgrade)], ZoneMinder est directement intĂ©grĂ© au systĂšme ; Shinobi, quant Ă lui, passe par Git [[_source_](https://shinobi.video/articles/2018-05-15-how-to-update-shinobi-manually-from-terminal)]. đ Composition de Shinobi ------------------------- ### đĄ Au niveau logiciel - [Node.js](https://fr.wikipedia.org/wiki/Node.js), moteur JavaScript basĂ© sur Chromium â nom des processus : _node_ (tourne en [superâutilisateur](https://fr.wikipedia.org/wiki/Utilisateur_root)) ; - [pm2](https://pm2.io/doc/en/runtime/overview/), gestionnaire de processus pour Node.js â nom des processus : _PM2 v3.2.2: God Daemon_ (tourne en [superâutilisateur](https://fr.wikipedia.org/wiki/Utilisateur_root)) ; - [ffmpeg](https://fr.wikipedia.org/wiki/FFmpeg), acquisition et traitement des flux vidĂ©o et audio â nom des processus : _ffmpeg_ (tourne en [superâutilisateur](https://fr.wikipedia.org/wiki/Utilisateur_root)) ### đĄ Au niveau des dĂ©pendances Ces logiciels peuvent ĂȘtre installĂ©s sur la mĂȘme machine ou rĂ©partis sur plusieurs : - [MariaDB](https://fr.wikipedia.org/wiki/MariaDB), le serveur de [base de donnĂ©es](https://fr.wikipedia.org/wiki/Base_de_donn%C3%A9es), nom des processus : _mysqld_ (tourne sous lâutilisateur « _mysql_ ») ; - si accessible via [WAN](https://fr.wikipedia.org/wiki/R%C3%A9seau_%C3%A9tendu), un [frontal](https://fr.wikipedia.org/wiki/Frontal_(serveur)) au choix ([HAProxy](https://linuxfr.org/wiki/ubuntu-debian-installation-complete-de-shinobi-community-edition#toc-ajouter-un-frontend-haproxy-avec-https), Apache 2, etc.) ; - si sur plusieurs machines, un logiciel pour chiffrer les communications entre le ou les frontaux et le serveur maĂźtre ShinobiCCTV, voire entre ShinobiCCTV et le(s) serveur(s) de base de donnĂ©es. ### đ± Au niveau de la WEBUI (interface Web) - **`http://your_shinobi:8080` â Tableau de bord :**  - **`http://your_shinobi:8080/admin` â Ici les utilisateurs créés par lâadministrateur pourront crĂ©er euxâmĂȘmes des « sousâutilisateurs » (Ă©quivalent des _modĂ©rateurs_), permettant de partager lâaccĂšs Ă des camĂ©ras :**  - **`http://your_shinobi:8080/super` â Gestion de lâadministrateur, des comptes utilisateurs et de quelques paramĂštres de base :**  Mise en place ============= đ± Installation (de base) ------------------------- Est expliquĂ© comment faire une installation minimale de Shinobi _Community Edition_. Pour une installation complĂšte, avec notamment HTTPS, voyez le tutoriel « [Ubuntu/Debian Installation complĂšte de Shinobi Community Edition](https://linuxfr.org/wiki/ubuntu-debian-installation-complete-de-shinobi-community-edition) ». **Lancez lâinstallation du logiciel :** ```bash mv /tmp/ wget https://gitlab.com/Shinobi-Systems/Shinobi-Installer/raw/master/shinobi-install.sh sudo bash shinobi-install.sh ``` **CrĂ©ez la base de donnĂ©es et son utilisateur avec multiple accĂšs.** Adaptez, bien entendu, le mot de passe ainsi que « 10.8.%.% » qui, dans cet exemple, autorise lâaccĂšs Ă nâimporte quel client ayant une [adresse IP](https://fr.wikipedia.org/wiki/Adresse_IP) comprise entre 10.8.0.0 et 10.8.255.255. Attention, _localhost_ est diffĂ©rent de 127.0.0.1 et autoriser lâun nâautorise pas automatiquement lâautre : ```SQL GRANT ALL PRIVILEGES ON ccio.* TO 'shinobi'@'localhost' IDENTIFIED BY 'my_super_password'; GRANT ALL PRIVILEGES ON ccio.* TO 'shinobi'@'10.8.%.%' IDENTIFIED BY 'my_super_password'; FLUSH PRIVILEGES; ``` **Ăditez `/home/Shinobi/conf.json` afin dây ajouter les informations concernant la base de donnĂ©es :** ```bash nano /home/Shinobi/conf.json ``` **Initialisez la base de donnĂ©es :** ```bash mysql -u shinobi -p shinobi < /home/Shinobi/sql/framework.sql mysql -u shinobi -p shinobi < /home/Shinobi/sql/tables.sql mysql -u shinobi -p shinobi < /home/Shinobi/sql/database.sql ``` **RedĂ©marrez le cĆur de Shinobi :** ```bash pm2 --update-env restart all ``` đïž DĂ©sinstallation ------------------ **Suppression de la base de donnĂ©es et de son utilisateur :** ```bash mysql -uroot -p -e "DROP DATABASE ccio;" mysql -uroot -p -e "DROP USER âshinobiâ@âlocalhostâ;" mysql -uroot -p -e "DROP USER âshinobiâ@â10.8.%.%â;" ``` **Suppression et purge des logiciels :** ```bash pm2 kill sudo npm uninstall pm2 -g sudo apt remove ffmpeg mariadb-server nodejs -y && sudo apt autoremove -y && sudo apt-get autoclean sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* /usr/local/lib/dtrace/node.d ~/.npm ~/.node-gyp /opt/local/bin/node /opt/local/include/node /opt/local/lib/node_modules /usr/local/lib/node* /usr/local/include/node* /usr/local/bin/node* /home/Shinobi ``` Bonus ===== đ Anecdotes ------------ ### đ Sondages Un [petit sondage](https://www.strawpoll.me/17044941/r), non reprĂ©sentatif, indique quâUbuntu semble ĂȘtre le serveur le plus utilisĂ©. Un [autre sondage](https://www.strawpoll.me/17088655/r), pas plus reprĂ©sentatif, semble indiquer que la version la plus utilisĂ©e est Shinobi Pro. ### đšïž Avis personnels _Les avis du ou des auteurs sont subjectifs et ne doivent pas ĂȘtre pris comme rĂšgles._ #### âïž Avis de Voxdemonix (2018) Les technologies utilisĂ©es autant pour le cĆur (Node.js), la lâinterface Web (HTML 5), le support ([Discord](https://discordapp.com/invite/mdhmvuH/), la messagerie instantanĂ©e avec [Moe](https://gitlab.com/moeiscool) intĂ©grĂ©e dans la documentation) que les fonctionnalitĂ©s (Discord bot, WebDAV, reconnaissance dâobjets) sont rafraĂźchissantes. Aucun autre projet que jâai testĂ© ne discute de lâutilisation de rĂ©seaux neuronaux. En revanche, voir tourner Node.js et FFmpeg en superâutilisateur amĂšne une certaine apprĂ©hension sur la sĂ©curitĂ©. Pour info, FFmpeg est suffisamment soumis Ă risque pour que le projet Nextcloud dĂ©conseille complĂštement son utilisation (afin dâĂ©viter quâun fichier corrompu ne passe dans le gĂ©nĂ©rateur de prĂ©visualisation). FFmpeg qui rĂ©cupĂšre un flux rĂ©seau non sĂ©curisĂ© en superâutilisateur, câest assez dangereux. Ă tester si la [version Docker](https://github.com/moeiscool/docker-shinobi) corrige ce problĂšme important. Il manque quelques fonctionnalitĂ©s (prĂ©âsĂ©lections de camĂ©ras, voire balayage Ă la ZoneMinder, ainsi que des boutons importants, notamment au niveau des PTZ (ex : IR auto on/off), il nây a pas de date sur les flux) et certaines fonctionnalitĂ©s ne sont pas terribles (ligne du temps qui nĂ©cessite de pouvoir dater un Ă©vĂšnement pour le retrouver). Le fait que ShinobiCCTV nâapplique les mises Ă jour et les demandes dâintĂ©gration que sur le projet proprio fait aussi peur, peutâĂȘtre Ă tort, que le dĂ©veloppeur ne ferme le projet dĂšs quâil aura des clients (Ă©poque [#OpenWashing](https://fr.wikipedia.org/wiki/Openwashing) oblige). Sans compter que cela casse un peu lâenvie de participer, surtout au niveau code et rapport de bogue. Quand aucun utilisateur nâest sur la WEBUI, la [charge systĂšme](https://fr.wikipedia.org/wiki/Load_average) machine reste sous 0,5. En revanche, dĂšs quâun utilisateur se connecte sur la WEBUI et affiche des flux, la charge monte rapidement entre 1,5 et 2,5. Plusieurs utilisateurs mâont indiquĂ© utiliser ou tester ShinobiCCTV sur Raspberry Pi 3 sans rĂ©el problĂšme, il nây a eu aucun retour quant aux ARM non 32/64 bits en revanche. Bref, il y a encore du boulot pour que ShinobiCCTV devienne utilisable en milieu professionnel, mais les fonctionnalitĂ©s vitales sont dĂ©jĂ disponibles pour une utilisation familiale ou PME (si lâon rajoute une surcouche de sĂ©curitĂ©). ### âŸïž Remerciements Gros remerciement Ă la communautĂ© et Ă Moe pour leur participation ! đ đïž Captures dâĂ©cran -------------------   đ Liens -------- - [_Linux Surveillance Camera Software Evaluation 2018_](https://blog.jasonantman.com/2018/05/linux-surveillance-camera-software-evaluation/) ; - [_Nextcloud : les crĂ©ateurs dâownCloud rebootent leur projet_](https://www.silicon.fr/nextcloud-les-createurs-downcloud-rebootent-leur-projet-149068.html) ; - [_Genetec Security Center_](https://www.genetec.com/solutions/all-products/security-center). 