Devuan 5 Daedalus with Zoneminder 1.36 from ZM Repo

From ZoneMinder Wiki
Jump to navigationJump to search

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
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)

Main Instructions

apt-get update
apt-get install apt-transport-https gnupg
wget -O - https://zmrepo.zoneminder.com/debian/archive-keyring.gpg | sudo apt-key add -
# with daedalus it will complain if you apt update about a deprecated key storage so now do
mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d/zmrepo.gpg
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 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

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