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. ![Tableau de bord de Shinobi 2017](https://wiki.0rion.netlib.re/lib/exe/fetch.php?media=tutorial_en:shinobi_screenshot_dashboard_2017.jpeg) ---- [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. ![Papa NoĂ«l Shinobi](https://wiki.0rion.netlib.re/lib/exe/fetch.php?media=tutorial_en:shinobi_namekal_screenshot_papa_noel_fun.png) ⚖ 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 :** ![screenshot_2018ćčŽ12月30æ—„_shinobicctv_dashboard](https://wiki.0rion.netlib.re/lib/exe/fetch.php?media=tutorial_en:screenshot_2018ćčŽ12月30æ—„_shinobicctv_dashboard.gif) - **`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 :** ![screenshot-2018_12_28-shinobicctv-webui_admin](https://wiki.0rion.netlib.re/lib/exe/fetch.php?media=tutorial_en:screenshot-2018_12_28-shinobicctv-webui_admin.gif) - **`http://your_shinobi:8080/super` ⇒ Gestion de l’administrateur, des comptes utilisateurs et de quelques paramĂštres de base :** ![screenshot-2018_12_28-shinobicctv-webui_super](https://wiki.0rion.netlib.re/lib/exe/fetch.php?media=tutorial_en:screenshot-2018_12_28-shinobicctv-webui_super.gif) 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 ------------------- ![Capture d’écran d’un serveur Shinobi avec 2 camĂ©ras enregistreuses et une camĂ©ra en stream-command top](https://wiki.0rion.netlib.re/lib/exe/fetch.php?media=tutorial_en:screenshot_2018-12-18_shinobi-server_with_2_cameras_record_and_1_camera_stream-command_top.png) ![Tableau de bord de ShinobiCCTV sur Android](https://wiki.0rion.netlib.re/lib/exe/fetch.php?media=tutorial_en:screenshot_20181230-shinobicctv-dashboard-android.gif) 🔗 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). ![Logo de Shinobi](https://wiki.0rion.netlib.re/lib/exe/fetch.php?media=tutorial_en:shinobi_logo.png)

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /