jueves, 17 de septiembre de 2015

Algunos apuntes sobre como sobrevivir a una implementación de ZoneMinder

Instalación:

Se describe en la wiki de ZoneMinder la instalación para muchas distribuciones, entre ellas en Debian: Debian 8.1 64-bit with Zoneminder 1.28.1 the Easy Way. Esta es la forma en que debe hacerse. No entiendo las razones (Y no tengo la disposición por ahora de descubrirlas) pero tuve un fallo en instalando en un servidor de prueba donde había un servidor apache previamente instalado. Los problemas obtenidos fueron miles, como por ejemplo:

01/07/12 19:49:32.342530 zmpkg[2016].ERR [Unable to run "/usr/bin/zmdc.pl startup", output is "Starting server"] 
Y no tuve más que virtualizar otro servidor de prueba, y empezar la instalación desde cero siguiente exactamente los pasos descritos en la wiki. Alguien en esta lista de usuarios Debian (Que a su vez referencia a un lista de usuarios de Ubuntu, atentos a #5 y #8) habla como si fuera un problema de orden en los pasos a seguir. Nunca a este nivel, pienso, pero no he podido ahondar más en las causas reales.

Configuración inicial: Siguen los problemas

Hacer el primer intento por agregar cámaras hizo que los siguientes problemas aparecieran:
Sep 17 03:42:58 zoneminder zmc_m2[28085]: INF [Starting Capture]
Sep 17 03:42:59 zoneminder web_php[20362]: ERR [socket_sendto( /var/run/zm/zms-933322s.sock ) failed: No such file or directory]
Sep 17 03:42:59 zoneminder web_php[20362]: ERR [getStreamCmdResponse stream error: socket_sendto( /var/run/zm/zms-933322s.sock ) failed: No such file or directory - checkStreamForErrors()]
Sep 17 03:43:01 zoneminder zmc_m1[26920]: ERR [Unable to open input rtsp://admin:12345@192.0.2.1//Streaming/Channels/1 due to: Operation now in progress]
Sep 17 03:43:03 zoneminder zmc_m2[28085]: ERR [RTP timed out]
Sep 17 03:43:06 zoneminder web_php[21144]: ERR [socket_sendto( /var/run/zm/zms-298700s.sock ) failed: No such file or directory]
Sep 17 03:43:06 zoneminder web_php[21144]: ERR [getStreamCmdResponse stream error: socket_sendto( /var/run/zm/zms-298700s.sock ) failed: No such file or directory - checkStreamForErrors()]
Sep 17 03:43:11 zoneminder zmc_m1[26920]: ERR [Unable to open input rtsp://admin:12345@192.0.2.1//Streaming/Channels/1 due to: Operation now in progress]
Sep 17 03:43:12 zoneminder zmc_m2[28085]: ERR [Failed to pre-capture monitor 2 (0/1)]
Sep 17 03:43:12 zoneminder zmc_m2[28085]: INF [Terminating Logger]
No entiendo si en realidad se debía a que las cámaras pudieran estar apagadas en ese momento (Algo que es posible debido al escaso control que tengo sobre ellas), o al error que pude solucionar en Apache, que solucioné de la forma más chapucera: En el fichero /etc/apache2/conf-enabled/serve-cgi-bin.conf
<ifmodule mod_alias.c="">
        <ifmodule mod_cgi.c="">
                Define ENABLE_USR_LIB_CGI_BIN
        </ifmodule>

        <ifmodule mod_cgid.c="">
                Define ENABLE_USR_LIB_CGI_BIN
        </ifmodule>

        <ifdefine enable_usr_lib_cgi_bin="">
        ScriptAlias /cgi-bin "/usr/lib/zoneminder/cgi-bin"
        <directory cgi-bin="" lib="" usr="" zoneminder="">
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            AllowOverride All
            Require all granted
        </directory>
        </ifdefine>
</ifmodule>
es necesario borrar la configuración de los alias por defecto para cgi, lo cual puede ser un problema si acaso se usan otros en el mismo sistema, para que quede de la siguiente forma:
<ifmodule mod_alias.c="">
        <ifmodule mod_cgi.c="">
                Define ENABLE_USR_LIB_CGI_BIN
        </ifmodule>

        <ifmodule mod_cgid.c="">
                Define ENABLE_USR_LIB_CGI_BIN
        </ifmodule>
</ifmodule>
Con lo cual la única configuración al respecto será la contenida en el fichero /etc/apache2/conf-available/zoneminder.conf que debe cargarse en el momento justo en que la guía de configuración que referí arriba lo requiera

Configurando cámaras.

Aunque pensé que sería un dolor de cabeza, lo cierto es que soportan bastante hardware (Lo de basarse en protocolos abiertos, supongo). Mi equipo es un DS-2CD2132-I que alguién ya se había descrito en la wiki. Aunque es posible usar directamente RTSP en lugar de RTSP mediante ffmpeg, resulta que la opción directa presenta problemas de rendimiento brutales. Con ffmpeg tiene un nivel bastante aceptable, sobre todo en lo referente a la alarma por zonas.

Otros apuntes interesantes

Otros apuntes interesantes