ZoneMinder újratelepítése TrueNAS 12 jail-ben

Az előző posztban az UniFi Controller telepítéséről, illetve frissítéséről volt szó. Lássuk hát a ZoneMinder frissítését.

Az alábbi dokumentáció elkészítéséhez segítségemre volt a közösségi plugin, illetve annak szkriptjei. Itt találjátok: https://github.com/freenas/iocage-plugin-zoneminder

A wiki szerint a mentés és visszaállítás egyrészt a fájlrendszer visszaállítását (események, konfiguráció), másrészt a MySQL adatbázis visszaállítását jelenti.

Ezen felül a webszerver (nginx) konfigurációját is érdemes elmenteni.

Kezdjük az adatbázissal. A munkát a jail-ben kezdem, a szolgáltatást leállítom:

root@truenas:/ # iocage console ZoneMinder
root@ZoneMinder:~ # service zoneminder stop

Mivel nem ismerem az adatbázist, ezért mindent exportálok:

root@ZoneMinder:~ # mysqldump --user=root --password --set-gtid-purged=OFF --add-drop-database --triggers --routines --events --databases zm > /tmp/dump.sql

A mentés a jail-ben van, ezért ki kell másolnunk valahova, ahol az új jail-ből hozzáférünk:

root@ZoneMinder:~ # exit
logout
root@truenas:/ # cd /mnt/vol0/iocage/jails/ZoneMinder/root/tmp/
root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root/tmp # cp dump.sql /mnt/vol0/dataset2/Backup/ZoneMinder/

Folytassuk a fájlrendszerrel, de hol található a konfiguráció?

root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root # find . -name zm.conf
./usr/local/etc/zm.conf

Várjunk csak, nem ez kell nekünk, hanem a zoneminder mappa alatti fájlok:

root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root # cd usr/local/etc
root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root/usr/local/etc # cat zm.conf
==========================================================================
#
ZoneMinder Base Configuration
#
==========================================================================
#
*** DO NOT EDIT THIS FILE ***
#
To make custom changes to the variables below, create a new configuration
file, with an extention of .conf, under the /usr/local/etc/zoneminder
folder, containing your desired modifications.
#

Akkor mentsük ki fájlokat a jail-ből az egyik dataset-re:

root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root # cd zoneminder
root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root/usr/local/etc/zoneminder # cp *.conf /mnt/vol0/dataset2/Backup/ZoneMinder/

Következnek az események. Az események könyvtára a 01-system-paths.conf fájlban ZM_DIR_EVENTS változóban található (/var/db/zoneminder/events). Én ezekkel most nem foglalkozom, de ugyanúgy menthetőek, mint a konfiguráció.

root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root/usr/local/etc/zoneminder # grep ZM_DIR_EVENTS < 01-system-paths.conf
ZM_DIR_EVENTS=/var/db/zoneminder/events

Végül a webszerver konfigurációjának mentését végezzük el:

root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root/usr/local/etc/nginx # cp nginx.conf /mnt/vol0/dataset2/Backup/ZoneMinder/
root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root/usr/local/etc/nginx # cp conf.d/zoneminder.conf /mnt/vol0/dataset2/Backup/ZoneMinder/

A TrueNAS felhasználói felületén keresztül a közösségi plugin-ek között elérhető a Zoneminder, viszont a plugin a 12.1-es verzióra épül, ezért nem így fogom telepíteni.

Helyette létrehozok egy új jail-t a felhasználói felületen, majd frissítem a csomagokat és telepítem a zoneminder-t.

root@truenas:~ # iocage console ZoneMinder
root@ZoneMinder:~ # pkg update && pkg upgrade
root@ZoneMinder:~ # pkg install zoneminder
root@ZoneMinder:~ # exit

A poszt írásakor az 1.34.9-es verzió volt elérhető. Telepítés után kapunk egy több oldalas leírást, hogy mit kell még telepítenünk, beállítanunk. Következzenek sorban a lépések:

1. ZoneMinder konfigurációs fájlok és adatbázis mentés visszaállítása:

root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root/usr/local/etc/zoneminder # cp /mnt/vol0/dataset2/Backup/ZoneMinder/*.conf .
root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root/tmp # cp /mnt/vol0/dataset2/Backup/ZoneMinder/dump.sql .

2. MySQL telepítés, adatbázis import

A kezdeti root jelszó a szolgáltatás indítása untán a /root/.mysql_secret fájlban található és illik rögtön megváltoztatni. Ezen felül létrehozunk egy felhasználót a ZoneMinder-nek zmuser néven. Ez a felhasználó szerepel az előző lépésben visszaállított konfigurációs fájlban:

root@truenas:~ # iocage console ZoneMinder
root@ZoneMinder:~ # pkg install mysql57-server

Initial password for first time use of MySQL is saved in $HOME/.mysql_secret
ie. when you want to use "mysql -u root -p" first you should see password
in /root/.mysql_secret

root@ZoneMinder:~ # sysrc mysql_enable="YES"
root@ZoneMinder:/ # service mysql-server start
root@ZoneMinder:/ # mysql --user=root --password
Enter password:

root@localhost [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '*****';
Query OK, 0 rows affected (0.02 sec)

root@localhost [(none)]> GRANT ALL PRIVILEGES ON zm.* TO 'dbadmin'@'localhost' IDENTIFIED BY '****';
Query OK, 0 rows affected, 1 warning (0.03 sec)

root@localhost [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)

root@localhost [(none)]> exit
Bye
root@ZoneMinder:/ # mysql --user=root --password < /tmp/dump.sql
Enter password:

3. nginx webszerver telepítése:

root@ZoneMinder:~ # pkg install nginx
root@ZoneMinder:~ # sysrc nginx_enable="YES"
root@ZoneMinder:~ # exit

nginx konfiguráció visszatöltése:

root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root/usr/local/etc/nginx # cp /mnt/vol0/dataset2/Backup/ZoneMinder/nginx.conf .
root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root/usr/local/etc/nginx # mkdir conf.d
root@truenas:/mnt/vol0/iocage/jails/ZoneMinder/root/usr/local/etc/nginx # cp /mnt/vol0/dataset2/Backup/ZoneMinder/zoneminder.conf conf.d/

ideiglenes SSL tanúsítvány generálása, ha van, akkor a tanúsítvány visszaállítása

root@truenas:~ # iocage console ZoneMinder
root@ZoneMinder:~ # # /usr/bin/openssl req -new -newkey rsa:2048 -days 366 -nodes -x509 -subj "/O=Temporary Certificate Please Replace/CN=*" -keyout /usr/local/etc/ssl/key.pem -out /usr/local/etc/ssl/cert.pem

szolgáltatás indítása

root@ZoneMinder:~ # service nginx start

4. cgi-wrapper telepítése, beállítása

root@ZoneMinder:~ # pkg install fcgiwrap
root@ZoneMinder:~ # sysrc fcgiwrap_enable="YES"
root@ZoneMinder:~ # sysrc fcgiwrap_user="www"
root@ZoneMinder:~ # sysrc fcgiwrap_socket_owner="www"
root@ZoneMinder:~ # sysrc fcgiwrap_flags="-c 4"

5. php beállítása

root@ZoneMinder:~ # touch /usr/local/etc/php-fpm.d/zoneminder.conf
root@ZoneMinder:~ # vi /usr/local/etc/php-fpm.d/zoneminder.conf

Az alábbi sorok bemásolása:
listen = /var/run/php-fpm.sock
listen.owner = www
listen.group = www
env[PATH] = /usr/local/bin:/usr/bin:/bin

root@ZoneMinder:~ # echo date.timezone = '"UTC"' > /usr/local/etc/php/overrides.ini
root@ZoneMinder:~ # sysrc php_fpm_enable="YES"
root@ZoneMinder:~ # service php-fpm start

6. Könyvtárak létrehozása

Az alábbi lépéseket utólag dokumentáltam, mivel ezekre hibakeresés során derült fény:

root@ZoneMinder:~ # mkdir /var/log/zm
root@ZoneMinder:~ # chown www:www /var/log/zm
root@ZoneMinder:~ # su -m www -c 'mkdir /var/db/zoneminder/events'
root@ZoneMinder:~ # su -m www -c 'mkdir /var/db/zoneminder/images'

7. ZoneMinder indítása

root@ZoneMinder:~ # sysrc zoneminder_enable="YES"
root@ZoneMinder:~ # service zoneminder start
root@ZoneMinder:~ # exit

Készen vagyunk.

Ráadás: Ideiglenes fájlrendszer (tmpfs)
A leírás szerint a ZoneMinder a kamerák felvételeinek utolsó néhány képkockáját megtartja, riasztás esetére. Ajánlott ezeket a felvételeket a memóriában tárolni, hogy a tárolókat kíméljük.
Az alábbi linken találtam egy jó leírást a beállításokról.

A felhasználói felületen a jail beállításaiban kapcsoljuk be az „allow_raw_sockets”-t és az „allow_mount”-ot és alatta válasszuk ki az „allow_mount_tmpfs”-t.
Adjuk hozzá az alább sort a jail fájlrendszer táblájához (fstab):

root@truenas:/mnt/vol0/iocage/jails/ZoneMinder # echo tmpfs /mnt/vol0/iocage/jails/ZoneMinder/root/tmp tmpfs rw,nosuid,noexec,mode=01777 0 0 >fstab

A tmpfs csak akkor csatolható a jail-ben, ha az enforce_statfs 2-nél kisebb értékre van beállítva, ezért állítsuk 1-re:

root@truenas:/mnt/vol0/iocage/jails/ZoneMinder # iocage set enforce_statfs=1 ZoneMinder
enforce_statfs: 2 -> 1

A jail-ben ellenőrizzük a fájlrendszert:

root@ZoneMinder:/ # mount
vol0/iocage/jails/ZoneMinder/root on / (zfs, local, nfsv4acls)
tmpfs on /tmp (tmpfs, local, noexec, nosuid)
devfs on /dev (devfs, local, multilabel)
fdescfs on /dev/fd (fdescfs)

A ZoneMinder így már üzemképes.