Disassembler

Artificial intelligence is no match for natural stupidity.
21červen2012

ZoneMinder - vševidoucí hlídač


ZoneMinder je zajímavé CCTV a videozabezpečovací řešení, které je kompletně open-source. Jeho obrovskou výhodou je, že se díky integraci přehršle kodeků velmi ochotně baví s téměř jakoukoliv IP kamerou, včetně všelijakých laciných čínských šmejdů za tisícovku. Pokud hledáte levné domácí řešení nebo pokud je váš šéf držgrešle, pak je ZoneMinder přesně pro vás.

Neváhej a toč!


ZoneMinder nabízí relativně snadno konfigurovatelné a funkcemi hýřící webové rozhraní. Podobně jako u profesionálních řešení, je možno nastavit, zda se má uchovávat celý záznam, pouze snímky pohybu nebo zda bude kamera pouze posílat obrázky „k okamžité spotřebě“ bez toho, aby byly nahrávány. V případě rozpoznávání pohybu je samozřejmě možné vybrat si i oblast, kde se má pohyb registrovat a také míra změny, při které má začít nahrávat. Snad jediné co v ZoneMinderu nastavit nelze, je automatické čištění čočky kamery a zametání pavoučích sítí, které i v jemném vánku divoce generují kamerové události. Webový server a rozsáhlé rozhraní psané v PHP nejsou ale k provozu ZoneMinderu vůbec potřeba. Samotný ZoneMinder je totiž psaný v C++ a jeho obslužné rutiny pak v jediném jazyce, který vypadá stejně před i po obfuskaci (uhodli jste, je to Perl). I přesto, že je tedy psaný v relativně slušných jazycích, je poměrně náročný na systémové prostředky. Ne že by to bylo u zpracování videa něco zvláštního, ale je třeba s tím při návrhu kamerového serveru počítat a nestavět jej na nějaké vyřazené čtyriosumšestce. Nějakých 15 kamer v módu záznamu pohybu dokáže vytížit i5-2400 (tj. 4 x 3,10GHz) na 0,6 až 1,2 (průměrně tedy nějakých 16% na každé ze čtyř jader) a z RAM si je ZoneMinder při tomto počtu kamer schopen ukrást 1 - 2 GB. Největší nároky si ovšem klade na rychlost zápisu na pevné disky. Při souběžném zápisu záznamu ze všech patnácti kamer není totiž problém vytížit RAID 10, poskládaný z WD RE4 WD1003FBYX, na 100 %.

Ubuntizace


Instalace samotného ZoneMinderu je primitivní. Prosté

# apt-get install zoneminder

postačí, ale pravděpodobně budete chtít ZoneMinder i nastavovat přes webové rozhraní. V takovém případě je potřeba symlinknout předem připravený konfigurák Apache a povolit zpracování CGI skriptů.

# ln -s /etc/zm/apache.conf /etc/apache2/conf.d/zoneminder.conf
# service apache2 reload

Poté bude GUI přístupno na adrese http://<ip_serveru>/zm.

Je od Canonicalu sice hezké, že poskytují ZoneMinder přímo ve svých balíčcích, ale tak nějak jej poskytují trochu rozbitý. V drtivé většině případů vám totiž ZoneMinder po startu serveru nenaběhne. Respektive naběhne, ale hned zase chcípne. Je to proto, že ZoneMinder je závislý na MySQL databázi, ale protože MySQL je startováno přes nový a svěží Upstart a ZoneMinder stále přes starý a dýchavičný System V init, není možno vytvořit startovací závislosti mezi těmito službami tím správným způsobem. Je tedy potřeba ZoneMinder trochu postrčit. V jeho init skriptu, nacházejícím se v umístění /etc/init.d/zoneminder doplňte ve funkci start() nad řádek zmfix -a následující

while [ ! -e /var/run/mysqld/mysqld.sock ]
do
    sleep 1
done

A protože sysvinit startuje služby sekvenčně, můžete spouštění ZoneMinderu posunout dozadu, aby tolik nezdržoval.

# update-rc.d -f zoneminder remove
# update-rc.d zoneminder defaults 92

Geronimo


Nehodláte-li Apache zneužít k dalším bohulibým účelům, možná jej budete chtít nastavit tak, aby byl ZoneMinder jednoduše přístupný přímo na http://<ip_serveru>. V takovém případě neprovádějte výše uvedený symlink konfigurace, ale raději upravte existující /etc/apache2/sites-available/default následovně

<VirtualHost *:80>
    DocumentRoot /usr/share/zoneminder
    
    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order Deny,Allow
        Deny from all
    </Directory>

    <Directory /usr/share/zoneminder>
        php_flag register_globals off
        Order Allow,Deny
        Allow from all
        <IfModule mod_dir.c>
            DirectoryIndex index.php
        </IfModule>
    </Directory>
    
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI
        Order Allow,Deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

a reloadněte Apache.

Požadujete-li aby na vás ZoneMinder mluvil jinou řečí než výchozí angličtinou, je možno ji v možnostech v GUI změnit (záložka System, hodnota LANG_DEFAULT). V případě češtiny a dalších jazyků využívajících diakritiku či jiné obskurní znaky je pro správné zobrazení nutné ještě v konfiguraci Apache upravit kódování servírovaných stránek. Konkrétně pro češtinu je potřeba v konfiguračním souboru /etc/apache2/conf.d/charset odkomentovat a změnit řádek s direktivou AddDefaultCharset na

AddDefaultCharset ISO-8859-2

Reloadněte Apache a zčistajasna se z Moľností stanou Možnosti.

A navrch trocha sýra


Velice užitečná věc do firemního prostředí je plugin Cambozola. ZoneMinder totiž ukládá a přehrává všechny záznamy v poměrně obskurním formátu multipart JPEG stream neboli M-JPEG. Tuhle hrůzu z počátku devadesátých let nativně podporuje pouze Mozilla Firefox a trochu méně nativně pak Netscape-based browsery, takže pokud potřebujete záznamy efektivně přehrávat i v jiných prohlížečích, pak je pro vás Cambozola jako dar z nebes. Jedná se totiž o javový plugin, určený právě k přehrávání M-JPEG formátu. Jeho integrace se ZoneMinderem je velice jednoduchá, protože z celého balíku Cambozoly potřebujete jen klientskou aplikaci a ZoneMinderu pak jen řeknete, že ji chcete použít. Všechno ostatní si už obstará sám.

# wget http://www.charliemouse.com:8080/code/cambozola/cambozola-latest.tar.gz
# tar -xzf cambozola-latest.tar.gz
# cp cambozola*/dist/cambozola.jar /usr/share/zoneminder
# rm -rf cambozola*

Pak už jen v možnostech v GUI ZoneMinderu na záložce Images zaškrtnete checkbox u hodnoty OPT_CAMBOZOLA a restartujete ZoneMinder. A voila, rázem je možno šmírovat skladníky i na firemním Internet Exploreru 7.

Update - Ubuntu 14.04


Tento článek byl psán v době Ubuntu 12.04. Pokud instalujete nebo upgradujete na 14.04, pokračujte článkem Zoneminder a Ubuntu 14.04, kde se dozvíte, jak ošetřit některé potenciálně vzniknuvší chyby.