123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- Objective: To install ZM on an rpi3 with mmal support and verify it's using mmal. Evaluate.
- Preface:
- I tried before to install Devuan directly from IMG provided, and then build ffmpeg with mmal included.
- I don't think was necessary as we are not compiling ffmpeg, but instead using libavcodec (I know this now, but
- didn't at the time).
- In any case, if you want ZM to have mmal working you must have the libavcodec development headers that include mmal
- and you can confirm it by switching debug logging on zmc_m1 (if 1 is your test camera)
- But let's cover install steps.
- The goal is to:
- install raspbian stretch lite
- update
- install ffmpeg, verify mmal is included
- if it does, then install git of zm
- compile zm, from a more recent branch that includes the Hardware peripheral calls (HWACCEL)
- migrate to devuan (this ended up being required for my setup, as the docker entrypoint.sh doesn't run with zmsystemctl)
- it's important to migrate to devuan after installing ffmpeg, as i think the raspbian mirrors are supposed
- to have support for mmal in ffmpeg but the devuan mirrors may not. Devuan pulls from debian, not Raspbian.
- Don't bother trying to custom compile ffmpeg, as I mentioned before, you need libavcodec, not ffmpeg.
- OK, now to install ZM from git...
- git clone https://github.com/zoneminder/zoneminder.git
- also this dockerfile has instructions for building a
- ubuntu
- img. That might work...
- https://github.com/ZoneMinder/zmdockerfiles/blob/master/development/ubuntu/xenial/Dockerfile
- the only changes we will make is:
- remove libjpeg-turbo8
- remove libjpeg-turbo8-dev
- remove libmysqlclient-dev
- remove libmime-perl
- from list
- as they are named differently. We'll add them back in later.
- also removing the no depends...
- so
- apt-get update
- apt-get dist-upgrade
- then
- the command I'll run (similar to docker file)
- is
- apt-get install -y \
- apache2 \
- build-essential \
- cmake \
- dh-autoreconf \
- dpatch \
- git \
- libapache2-mod-php \
- libarchive-zip-perl \
- libavcodec-dev \
- libavdevice-dev \
- libavfilter-dev \
- libavformat-dev \
- libavresample-dev \
- libav-tools \
- libavutil-dev \
- libbz2-dev \
- libcurl4-gnutls-dev \
- libdate-manip-perl \
- libdbd-mysql-perl \
- libdbi-perl \
- libdevice-serialport-perl \
- libgcrypt-dev \
- libgnutls-openssl-dev \
- libmime-lite-perl \
- libmp4v2-dev \
- libnet-sftp-foreign-perl \
- libnetpbm10-dev \
- libpcre3 \
- libpcre3-dev \
- libpolkit-gobject-1-dev \
- libpostproc-dev \
- libssl-dev \
- libswscale-dev \
- libsys-cpu-perl \
- libsys-meminfo-perl \
- libsys-mmap-perl \
- libtheora-dev \
- libtool \
- libv4l-dev \
- libvlc5 \
- libvlccore8 \
- libvlccore-dev \
- libvlc-dev \
- libvorbis-dev \
- libvpx-dev \
- libwww-perl \
- libx264-dev \
- mysql-client \
- mysql-server \
- php \
- php-cli \
- php-gd \
- php-mysql \
- ssmtp \
- software-properties-common \
- vlc-data \
- yasm \
- zip
- hopefully that finishes without any errors.
- I had dpkg stall halfway through, but that was because I forgot to resize the fs when originally using the Devuan img.
- With the raspbian img, I think it might auto resize the FS.
- I reinstalled at that point. easy enough.
- and it went through without error.
- The four libraries we had to remove
- we will now add back in
- libturbojpeg0 - TurboJPEG runtime library - SIMD optimized
- libturbojpeg0-dev - Development files for the TurboJPEG library
- default-libmysqlclient-dev - MySQL database development files (metapackage)
- libmariadbclient-dev-compat - MariaDB database development files (libmysqlclient compatibility)
- libmime-base32-perl - Base32 encoder/decoder
- libmime-base64-urlsafe-perl - Perl version of Python's URL-safe base64 codec
- libmime-charset-perl - module for MIME character set information
- libmime-encwords-perl - Perl interface to deal with RFC 2047 encoded words
- libmime-explode-perl - Perl extension to explode MIME messages
- libmime-lite-html-perl - Transform HTML page into MIME email
- libmime-lite-perl - module for convenient MIME message creation
- libmime-lite-tt-html-perl - module to create HTML mail with MIME::Lite and T
- T
- libmime-lite-tt-perl - module to generate MIME messages from Template Toolki
- t templates
- libmime-tools-perl - Perl5 modules for MIME-compliant messages
- libmime-types-perl - Perl extension for determining MIME types and Transfer
- Encoding
- libemail-mime-perl
- probably a few extra here we don't need, but regardless...
- so
- apt-get install libturbojpeg0 libturbojpeg0-dev default-libmysqlclient-dev \
- libmariadbclient-dev-compat libmime-base32-perl libmime-base64-urlsafe-perl \
- libmime-charset-perl libmime-encwords-perl libmime-explode-perl libmime-lite-html-perl \
- libmime-lite-perl libmime-lite-tt-html-perl libmime-lite-tt-perl libmime-tools-perl \
- libmime-types-perl libemail-mime-perl
- then follow the docker guide:
- git clone --recursive https://github.com/ZoneMinder/ZoneMinder
- cd ZoneMinder
- If you want a certain tagged or commit of ZM now's the time to git checkout
- e.g. I am doing
- git checkout f07b1105d33c088cce4130970ee2f776867f67d0
- just so I'm always using the same commit.
- then
- cmake .
- this comes up with a jpeg error...
- that is explained here:
- in CMakeLists.txt
- //
- # jpeg
- find_package(JPEG)
- if(JPEG_FOUND)
- set(HAVE_LIBJPEG 1)
- list(APPEND ZM_BIN_LIBS "${JPEG_LIBRARIES}")
- #link_directories(${JPEG_LIBRARY})
- include_directories("${JPEG_INCLUDE_DIR}")
- set(CMAKE_REQUIRED_INCLUDES "${JPEG_INCLUDE_DIR}")
- check_include_files("stdio.h;jpeglib.h" HAVE_JPEGLIB_H)
- if(NOT HAVE_JPEGLIB_H)
- message(FATAL_ERROR
- "ZoneMinder requires libjpeg headers - check that libjpeg development
- packages are installed")
- endif(NOT HAVE_JPEGLIB_H)
- else(JPEG_FOUND)
- message(FATAL_ERROR
- "ZoneMinder requires jpeg but it was not found on your system")
- endif(JPEG_FOUND)
- //
- /usr/lib/aarch64-linux-gnu/
- so do this.
- apt-get install libjpeg-dev libjpeg62-turbo-dev libjpeg62-turbo libjpeg-turbo-progs
- one of those will handle jpeg
- NOTE: we might be losing turbo jpeg support, with libjpeg, so beware this is not
- optimized for MJPEG... I only plan to use this for RTSP H264 streams, (whole point of this)
- so your needs may vary.
- # Configure ZoneMinder
- RUN cmake .
- # Build & install ZoneMinder
- RUN make && make install
- # ensure writable folders
- RUN ./zmlinkcontent.sh
- this all worked, no problem. Devuan ascii.
- I skipped the volumes part, as we are not using docker.
- service mysql stop && service apache2 stop
- # Configure Apache
- cp misc/apache.conf /etc/apache2/sites-available/000-default.conf
- echo "ServerName localhost" > /etc/apache2/conf-available/servername.conf && a2enconf -q
- servername
- a2enmod -q cgi && a2enmod -q rewrite
- This came up with an error for rewite..
- //
- AH00526: Syntax error on line 62 of /etc/apache2/sites-enabled/000-default.conf:
- Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in
- the server configuration
- //
- It can be ignored, as we hadn't enabled module rewrite when that loaded.
- echo "sql_mode=NO_ENGINE_SUBSTITUTION" >> /etc/mysql/mysql.conf.d/mysqld.cnf
- this fails, but you can change /etc/mysql/mysql.conf.d/mysqld.cnf
- to
- /etc/mysql/my.cnf
- We have ZM, but not init scripts.
- Since we are testing, here. Let's just use the dockerfile's entrypoint.sh
- That works just as well, as an init script.
- wget https://raw.githubusercontent.com/ZoneMinder/zmdockerfiles/master/utils/entrypoint.sh
- root@devuan:~# mv entrypoint.sh /usr/local/bin/.
- root@devuan:~# chmod 755 /usr/local/bin/entrypoint.sh
- root@devuan:~#
- now run
- /usr/local/bin/entrypoint.sh
- I sometimes run it in a screen session
- apt-get install screen
- # screen
- type
- ctrl-a :sessionname entrypoint
- ctrl-d to disconnect
- root@devuan:~# /usr/local/bin/entrypoint.sh
- mysql: unknown variable 'sql_mode=NO_ENGINE_SUBSTITUTION'
- * Removing stale lock file
- * Starting MySQL database server service ...done.
- * Warning: Mysql startup timer expired!
- mysql: unknown variable 'sql_mode=NO_ENGINE_SUBSTITUTION'
- * First run of mysql in the container, creating ZoneMinder dB.
- mysql: unknown variable 'sql_mode=NO_ENGINE_SUBSTITUTION'
- * Starting Apache http web server service ...done.
- * Starting ZoneMinder video surveillance recorder ...failed!
- //
- this fails, but we are close.
- The error I had made before was accidentally following the docker exactly.
- It added the 'sql_mode=NO_ENGINE_SUBSTITUTION' to my.cnf
- and my.cnf didn't understand it.
- So simply comment that out, if you added that by accident.
- when you run entrypoint you should see
- root@devuan:~# /usr/local/bin/entrypoint.sh
- * Removing stale lock file
- * MySQL database server already running.
- * First run of mysql in the container, creating ZoneMinder dB.
- * Starting Apache http web server service ...done.
- * Starting ZoneMinder video surveillance recorder ...done.
- And that tells us everything is working.
- If you go to ZM at the IP address, you should see it "Running". If you see it stopped, and you still have
- raspbian... read below.
- NOW, one problem I had is that when I was testing this is raspbian, it tried to call zmsystemctl
- which failed to actually run ZM.
- At this point I migrated to Devuan, following the dev1fanboy ascii migration guide (this is what I did)
- * add devuan repos to apt/sources
- * apt-get install sysvinit-core
- * make sure /etc/inittab is there and has init data
- * reboot
- And then running the entrypoint.sh didn't try to call zmsystemctl, and it worked.
- Now follow the next guide for details about my testing with mmal and a camera.
|