Devuan 5 Daedalus with Zoneminder 1.36 from ZM Repo
Tested 2024/09 with amd64
Make sure to add in the /etc/init.d/zoneminder file from Zoneminder_Init_Script EDIT: this is not necessary anymore.
Tools:
- Debian Bookwork | buster /sysvinit
- Devuan Daedalus
- Zoneminder 1.36
Install
install mariadb, apache2, php based on: https://www.howtoforge.com/tutorial/install-apache-with-php-and-mysql-lamp-on-debian-stretch/
apt-get install mariadb-server apache2 php8.2 libapache2-mod-php8.2
restart apache
service apache2 restart
Add zmrepo to /etc/apt/sources.list
deb https://zmrepo.zoneminder.com/debian/release-1.36/ bookworm/
NOTE: In order to make this guide, all the existing guides for Debian were parsed.
https://wiki.zoneminder.com/Debian_9_64-bit_with_Zoneminder_1.30.4_the_Easy_Way https://wiki.zoneminder.com/Debian_10_Buster_with_Zoneminder_1.34.x_from_ZM_Repo (these names are changed periodically, so refer to Debian)
apt-get update apt-get install apt-transport-https gnupg wget -O - https://zmrepo.zoneminder.com/debian/archive-keyring.gpg | sudo apt-key add - apt-get update apt-get install zoneminder vlc-plugin-base php8.2-gd adduser www-data video apt-get install zoneminder a2enmod cgi a2enmod rewrite a2enconf zoneminder chmod 740 /etc/zm/zm.conf chown root:www-data /etc/zm/zm.conf mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql mysql -uroot -p -e "grant all on zm.* to 'zmuser'@localhost identified by 'zmpass';" mysqladmin -uroot -p reload
The zmupdate.pl call may fail during install of zoneminder. Run it manually to update the db.
# zmupdate.pl
Then apt should complete successfully. Some systemctl commands will fail, but these can be ignored for now.
may need to set timezone in /etc/php/8.2/apache2/php.ini (and In 1.34 in zm web console options)
e.g. date.timezone America/New_York Beware that if php is updated, you may need to update the timezone again.
service apache2 restart
There used to be an issue where the sysvinit script (/etc/init.d/zoneminder) was removed from ZM but it has been restored. In case you are missing it: I'm going to put the init script from 1.30.4 in Zoneminder_Init_Script Remember to chmod +x /etc/init.d/zoneminder
zoneminder should start:
# service zoneminder start Starting ZoneMinder: 01/27/2020 12:27:42.776878 zmpkg[2722].INF [main:57] [Command: start] 01/27/2020 12:27:42.778627 zmpkg[2722].INF [main:305] [Sanity checking States table...] 01/27/2020 12:27:42.780839 zmpkg[2722].INF [main:97] [Command: start] 01/27/2020 12:27:44.231615 zmpkg[2722].INF [main:205] [Single server configuration detected. Starting up services.] success
double check by reviewing
ps auxw | grep zm
Now, navigate to the Apache server which hosts ZM gui at http://serverip/zm
Review syslog for any error messages.
Upgrading DB
NOTE: this covers DB upgrades only. Not upgrade steps. See install above for general upgrade.
If you are importing an existing db, now is a good time. Stop zm, and import the db.
service zoneminder stop
mysqldump -u root -p zm > dump.sql (export old db) mysql -uroot -p zm < dump.sql (import old db)
After this is done, you need to update the db
# zmupdate.pl
run this at least twice, as it tends to error out. If it's already updated, nothing new will happen.
you should see something like: Database upgrade to version 1.32.3 successful.
Then start zm
service zoneminder start
you might want to run zmaudit.pl to delete non existing events on the new install
Troubleshooting
- zmupdate.pl if apt-get fails db upgrade during install of zoneminder.
- You might have to install zoneminder again, instead of an update. Backup DB, and nothing will be lost.
- if localhost/zm says 'page not found' check /etc/apache/conf-available/ which points to /usr/share/zoneminder/www and which may not have the correct permissions (needs apache / www-data user) with 0755 / chown root:www-data
- also check that you enabled the conf in apache: a2enconf zoneminder
- unable to connect to db driver missing, is an issue with multiple php versions - see forums. (a2dismod php7.0, a2enmod php7.3)
Postinstall script Errors
NOTE: this is not necessary anymore. It used to be that the /var/lib/dpkg/info/zoneminder.postinst script would fail due to lack of systemctl. The script can be edited similar to below to quiet the error messages (note: assumes an upgrade. Read the original script if you don't know what it's doing! Essentially, it's just stopping ZM, then running zmupdate.pl and changing possibly apache's zm config. )
#! /bin/sh set +e if [ "$1" = "configure" ]; then . /etc/zm/zm.conf for CONFFILE in /etc/zm/conf.d/*.conf; do . "$CONFFILE" done # The logs can contain passwords, etc... so by setting group root, only www-data can read them, not people in the www-data group chown www-data:root /var/log/zm chown www-data:www-data /var/lib/zm if [ -z "$2" ]; then chown www-data:www-data /var/cache/zoneminder /var/cache/zoneminder/* fi if [ ! -e "/etc/apache2/mods-enabled/cgi.load" ] && [ "$(command -v a2enmod)" != "" ]; then echo "The cgi module is not enabled in apache2. I am enabling it using a2enmod cgi." a2enmod cgi fi if [ ! -e "/etc/apache2/mods-enabled/rewrite.load" ] && [ "$(command -v a2enmod)" != "" ]; then echo "The rewrite module is not enabled in apache2. I am enabling it using a2enmod rewrite." a2enmod rewrite fi if [ "$ZM_DB_HOST" = "localhost" ]; then if [ -e "/lib/systemd/system/mysql.service" ] || [ -e "/lib/systemd/system/mariadb.service" ] || [ -e "/etc/init.d/mysql" ]; then # Ensure zoneminder is stopped #deb-systemd-invoke stop zoneminder.service || exit $? service zoneminder stop # # Get mysql started if it isn't running # if [ -e "/lib/systemd/system/mariadb.service" ]; then DBSERVICE="mariadb.service" else DBSERVICE="mysql.service" fi echo "Detected db service is $DBSERVICE" zmupdate.pl --nointeractive zmupdate.pl --nointeractive -f # Add any new PTZ control configurations to the database (will not overwrite) zmcamtool.pl --import >/dev/null 2>&1 echo "Done Updating; starting ZoneMinder." else echo 'NOTE: MySQL/MariaDB not running; please start mysql and run dpkg-reconfigure zoneminder when it is running.' fi else echo 'MySQL/MariaDB not found; assuming remote server.' fi else echo "Not doing database upgrade due to remote db server ($ZM_DB_HOST)." fi # deb-systemd-invoke restart zoneminder.service service zoneminder restart
Additional Notes
It's recommended to put videos on a separate drive: Using_a_dedicated_Hard_Drive You will probably want ZMES as well.
Unfinished Source Build Notes
Source build is not impossible, though you will want to dedicate some time to it. It's something like:
git clone github.com/zoneminder/zoneminder cd zoneminder apt-get install python-sphinx apt-get install libjpeg-dev apt-get install javascript-common libnet-sftp-foreign-perl libdevice-serialport-perl \ libimage-info-perl libjson-maybexs-perl liburi-encode-perl libdatetime-perl \ libclass-std-fast-perl libsoap-wsdl-perl libio-socket-multicast-perl \ libsys-cpu-perl libsys-meminfo-perl libnumber-bytes-human-perl \ libfile-slurp-perl php-apcu php-apc policykit-1 zip ./utils/do_debian_package.sh --distro=beowulf -s=stable -t=binary
WIP