540 Commits
Author SHA1 Message Date
Steve GilvarryandClaude Opus 5 be9a98d856 docs: correct the macOS guide against a real install refs #4998
The guide was written from a verified build and install, but the steps
past that point were derived from the Debian packaging rather than run.
Working through them on Apple Silicon to a running system turned up
three things that were wrong or missing.

mysql -u root does not work. A Homebrew MariaDB authenticates root with
the unix_socket plugin, so only the operating system's root matches it;
your own account gets the administrative account, which is what plain
mariadb uses.

Nothing said ZoneMinder has to be started as ZM_WEB_USER. zmpkg.pl
compares the current user against it and tries sudo -u and two forms of
su to become it, all of which fail for an ordinary user, and stops with
"Unable to find valid su syntax". systemd hides this on Linux by
starting the unit as the web user. Now says so, and gives the
workstation alternative of running everything as one account.

The web server section did not mention that zms is a CGI binary. Apache
runs those with mod_cgi; nginx needs a wrapper such as fcgiwrap, which
Homebrew does not package, so with nginx alone the console works and
live streams do not. Also noted that the generated samples reference
/etc/pki, /etc/nginx and /run/fcgiwrap.sock, none of which exist here.

Added the hardcoded taint-safe PATH to the known gaps, since it is what
breaks zmupdate.pl on Apple Silicon: seventeen scripts pin
/bin:/usr/bin:/usr/local/bin, so the database client in the Homebrew
prefix cannot be found. Worth making configurable - it would equally
affect a --prefix=/opt install on Linux. Sys::CPU is listed too; it has
been removed from CPAN and only zmtelemetry.pl uses it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B5KL9Xbi7K5aGsauLtd8tG
2026-09-13 12:50:36 +10:00
Steve GilvarryandClaude Opus 5 9ef8c2a17c docs: describe the launchd job in the macOS guide refs #4998
Replaces the "there is no launchd job yet" note with how to install and
load the generated one, and why unloading it does not stop ZoneMinder.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B5KL9Xbi7K5aGsauLtd8tG
2026-09-12 22:19:09 +10:00
Steve GilvarryandClaude Opus 5 da331916c8 docs: add a macOS installation guide refs #4998
ZoneMinder now builds and installs on macOS, but the steps that make it
work existed nowhere. The installation guide has pages for Debian,
Ubuntu, Redhat and WSL, and nothing for macOS.

Covers the parts that are not guessable, each one walked through on a
real machine rather than reasoned about:

- Sys::Mmap, Date::Manip and a DBD driver are missing from the Perl Apple
  ships, and configure only warns, so it is easy to get a clean build and
  a system whose Perl daemons cannot read monitor state at all. A
  Homebrew Perl additionally needs DBI and LWP::UserAgent, since it has
  none of the extras Apple bundles.
- DBD::MariaDB does not install without help. mysql_config hands its
  configure step -lzstd -lssl -lcrypto, but a Homebrew Perl's ldflags
  carry no -L for the Homebrew prefix, so it fails with "Can't
  link/include C library 'zstd', 'ssl', 'crypto', aborting". The guide
  gives the --libs and --cflags that get it through.
- ZoneMinder's Perl modules land in vendorlib and survive Perl upgrades;
  the CPAN modules land in sitelib, which resolves into the Cellar and
  does not. Worth knowing before an upgrade quietly breaks the daemons.
- ZM_NO_MMAP is not a way around Sys::Mmap. macOS caps SysV shared memory
  at 4 MiB per segment across 8 segments, and a 1080p RGB frame does not
  fit in one.
- mysql-client is keg-only, so the build needs an explicit -I or it stops
  at "'mysql/mysql.h' file not found".
- Nothing creates the runtime directories. On Linux the package does it.
- The test binary has to run from build/tests, because zm_font.cpp loads
  its fixtures by relative path.
- zmpkg.pl falls back to zmdc.pl without systemd, so there is a way to
  start ZoneMinder before a launchd plist exists.

Honest about what is missing rather than papering over it: no plist, no
Homebrew formula, no log rotation, no local cameras, and the arp-scan and
ip warnings configure emits. Also separates Homebrew's prefix from
ZoneMinder's install prefix, which differ on Apple Silicon and are easy
to conflate.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B5KL9Xbi7K5aGsauLtd8tG
2026-09-12 22:11:44 +10:00
singhharsh1708 57a5da2f20 docs: drop the Frame Skip setting, it no longer exists 2026-09-06 11:37:37 +05:30
Isaac Connor bd74472fa3 Merge pull request #5079 from AJ0070/docs/4486-zone-min-alarm-area
docs: minimum alarmed area cannot be 0
2026-08-30 22:35:57 -04:00
Jash 5f8e99f05f docs: note the render group for vaapi and qsv decoding fixes #4205 2026-08-30 01:53:35 +05:30
Jash 3082cdd9f9 docs: minimum alarmed area cannot be 0, the zone form rejects it fixes #4486 2026-08-30 01:39:13 +05:30
АнтонandClaude Opus 4.8 d01fc48848 docs: explain how Event Start/End Command are actually executed
The Recording tab docs said only that 'the parameters to the command
will be the event id and the monitor id', which is true only when the
command contains no '%' - and hides several surprises discovered by
reading zm_monitor.cpp:

- without '%' the whole string is exec'd as ONE executable path with
  event id / monitor id appended; a command with inline arguments
  ('/path/script.sh start') is treated as a single file name and fails;
- with '%' the string runs via /bin/sh -c after %EID%/%MID%/%EC%
  substitution, and nothing is appended automatically (%EC% exists for
  the start command only);
- the child runs in the background as the capture-process user with all
  file descriptors closed, so any output silently disappears;
- the end command fires after the event is finalized, so the video file
  is complete by then.

Document all of that where the two options are described.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 18:29:04 +03:00
alex-s-iv b6197c02b7 Update packpack.rst
Added -- recursive to git clone operation.
Specified correct command cd ./zoneminder
2026-06-21 22:39:08 +03:00
Isaac Connor 55bbec4c55 Merge pull request #4924 from SteveGilvarry/3816-db-ssl-verify-server-cert
feat: add ZM_DB_SSL_VERIFY_SERVER_CERT option (portable across MySQL/MariaDB)
2026-06-14 09:39:36 -04:00
SteveGilvarry e60bdc67b2 feat: add ZM_DB_SSL_VERIFY_SERVER_CERT option (portable across MySQL/MariaDB)
Add a ZM_DB_SSL_VERIFY_SERVER_CERT setting so a database connection that uses
ZM_DB_SSL_CA_CERT can talk to a server with a self-signed or otherwise
non-matching certificate. When enabled, verification is by identity (the cert
must chain to the CA and its CN/SAN must match ZM_DB_HOST), consistent across
the C++ daemons, the PHP web interface, the CakePHP API and the Perl scripts.

This re-does the reverted #3817. That PR broke the build because it called
mysql_options(MYSQL_OPT_SSL_VERIFY_SERVER_CERT, ...), and that enum was removed
from the MySQL 8.0 C client in favour of MYSQL_OPT_SSL_MODE; it also passed a
c_str() where a my_bool* was expected, and referenced the PHP constant
unconditionally (fatal on PHP 8 for an upgraded install whose zm.conf predates
the option).

The option that controls server-cert verification differs by client library and
the symbols are enum values, not macros, so CMake feature-detects them by
compiling:
  - HAVE_MYSQL_OPT_SSL_MODE  (MySQL 5.7.11+/8.0, MariaDB Connector/C 3.1+)
  - HAVE_MYSQL_OPT_SSL_VERIFY_SERVER_CERT  (older MariaDB/MySQL)
zm_db.cpp uses SSL_MODE_VERIFY_IDENTITY / SSL_MODE_REQUIRED when the former is
available, else falls back to the latter with a proper my_bool.

Value handling is three-way in every layer: a truthy value verifies, a false-y
value (0/false/no/off) skips verification, and an empty/unset value leaves the
client default in place so existing installs are unchanged on upgrade. PHP, the
API datasource (via PDO flags) and the Perl DSN are all guarded with defined()
checks. Fresh installs default to 1.

Documents the full ZM_DB_* connection and SSL settings, including the hostname
verification gotcha when connecting by IP, in docs/userguide/configfiles.rst.

refs #3816
2026-06-14 13:20:00 +10:00
Isaac Connor e71878564a docs: add per-column event sort design and plan 2026-06-09 13:10:13 -04:00
Isaac ConnorandClaude Opus 4.7 c4073c964c feat: encoder parameter templates with editor + REST API closes #4778 closes #4802
Adds a curated, per-encoder parameter-template library to ZoneMinder:

- Monitor edit page: a new Template row above the EncoderParameters
  textarea offers per-encoder templates (Balanced / Archival / Low
  Power / Low CPU). Apply merges the template's params into the
  textarea, preserving user-only keys. Advisory lint flags option
  keys that aren't recognised for the selected encoder. Switching
  encoders offers a same-name template on the new encoder via a
  native confirm.

- Options page: a new Encoder Templates tab with full CRUD —
  list / edit / copy / delete — backed by a new CakePHP REST API
  at /api/encoder_templates.

- Storage: a new EncoderTemplates DB table seeded with 14 shipped
  defaults across libx264 / libx265 / h264_nvenc / hevc_nvenc /
  h264_vaapi / hevc_vaapi. The table is mutable; ZM upgrades do not
  re-seed user-edited rows.

- valid_keys (the lint allow-list) stays in PHP code as ffmpeg
  vocabulary, not user data.

- Default params explicitly include pix_fmt to avoid the yuvj420p
  HEVC HW-decode rejection issue we hit earlier.

No C++ change. The textarea content is parsed by the existing
av_dict_parse_string call in src/zm_videostore.cpp.

version.txt -> 1.39.6.

Specs: docs/superpowers/specs/2026-05-0{1,2}-*.md
Plans: docs/superpowers/plans/2026-05-0{1,2}-*.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 17:24:17 -04:00
copilot-swe-agent[bot]andconnortechnology 04aa0a7781 docs: document all ONVIF_Options key=value pairs
Replaces the uninformative "Any ONVIF options required. This is an
optional field." with a full reference covering:
- key=value,key=value format with an example
- pull_timeout, subscription_timeout, max_retries,
  timestamp_validity, soap_log, renewal_enabled, expire_alarms,
  closes_event — including defaults, valid ranges, and when to use each

Also fixes pre-existing typo: "alam" → "alarm".

Agent-Logs-Url: https://github.com/ZoneMinder/zoneminder/sessions/149f7873-ca12-424f-85d4-4bdc179d2488

Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
2026-05-03 20:21:49 +00:00
Isaac ConnorandClaude Opus 4.6 863fac4d72 docs: add zma event re-analysis utility documentation
Add dedicated documentation page for the zma binary covering synopsis,
all command-line options, operating modes (update-existing vs create-events),
save-analysis functionality, and usage examples. Add zma entry to the
components page and user guide toctree.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 09:47:26 -05:00
Isaac ConnorandClaude Opus 4.6 9f702cb315 docs: add video group setup to Debian/Ubuntu install guides refs #4642
Document the need to add www-data to the video group for local camera
access. The package postinst now does this automatically, but source
installs still require the manual step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 18:19:20 -05:00
Steve Gilvarry 823504d1d1 Add section on debug logs that we can reference when asking for them. 2026-01-02 14:04:22 +11:00
Isaac Connor 0234a43ff0 easoydocker is deprecated 2025-11-06 18:40:13 -05:00
Isaac Connor f826f606bc Need a blank line to make toctree valid. 2025-11-06 18:40:13 -05:00
Isaac Connor 9c96ba3d28 Fix references to StartTime => StartDateTime and EndTime 2025-09-05 11:45:49 -04:00
Wyn Williams e81cca5c37 Update easydocker.rst
Edited to remove info and links to easy docker, file left in place so as to not break any guides or links to it.
2025-08-06 21:39:27 +03:00
Wyn Williams 4c1df8a80e Update packpack.rst
Removed link to now depreciated easy docker images
2025-08-06 21:32:37 +03:00
Wyn Williams d407f3dbcf Update easydocker.rst
added a warning to not use these docker images in production
2025-08-06 21:31:13 +03:00
Wyn Williams 51145d3560 Update index.rst
removed easy docker reference
2025-08-06 21:28:10 +03:00
Isaac Connor 9cf68eb83d Fix typo. Fixes #3457 2025-07-14 12:03:12 -07:00
Isaac Connor f1cab94091 Add mysql install and db creation to Jammy instructions. Add a couple hints that it also applies to newer. Fixes #4185 2024-11-12 06:56:16 -05:00
Isaac Connor b236b48f1b Updates removing zma and fixing some of the perl module names 2024-10-16 11:42:55 -04:00
unbroken75 ea1fd08780 Update debian.rst 2024-09-22 16:15:27 +02:00
robertsilen 1b526e1053 add mariadb 2024-08-19 12:57:40 +03:00
Isaac Connor 9442259d8d Merge pull request #4113 from beltphed/patch-1
Update debian.rst -- fix redirect of stdout in sudo
2024-08-18 12:50:07 -04:00
beltphed aa892e69d0 Update debian.rst
Failing to install apache2 results in subsequent calls to a2enconf and a2enmod failing because they might not have been installed. (in my case, I was using a minimal Debian 12 install which doesn't install apache2)
2024-08-16 19:55:49 -07:00
beltphed f94fc05966 Update debian.rst
As written, you can't redirect sudo output as desired. Wrapping the "echo deb..." in quotes will permit a regular user to redirect stdout to /etc/apt/sources.list
2024-08-16 16:47:54 -07:00
Aktarus fbd7ad533f Update debian.rst, enable autostart of ZM at boot
added one line to enable autostart of ZM at boot
2024-08-04 15:23:38 +02:00
Isaac Connor 84e1869fb8 Add ELOC substitution to get Latitude and Longitude of event 2024-07-05 17:28:59 -04:00
Isaac Connor 481210feaf Rough in web ui api documentation. Add download event video documentation. 2024-07-05 15:37:12 -04:00
Isaac Connor 8618900339 If we are not doing an html email, then don't replace with img tags referencing the attachment. Just do the attachment. Introduce %FID% to sub with the id of the filter. 2024-01-15 16:58:54 -05:00
efranzwa 0026e3446b Add images for Viewing Monitors Doc Section 2023-12-20 06:24:37 -08:00
efranzwa bd863d026b Update Viewing Monitors Doc Section 2023-12-20 06:22:43 -08:00
Isaac Connor 112eb6b9ad Add support for EISNAP and EPISNAP for snapshot image 2023-12-19 12:27:02 -05:00
efranzwa b033134596 Add images for Defining Zones Doc Section 2023-12-09 09:49:15 -08:00
efranzwa 6298d48db0 Update Defining Zones Doc Section 2023-12-09 09:47:12 -08:00
efranzwa fec884493c Added images for Defining Monitors section 2023-11-10 12:59:38 -08:00
efranzwa bf08d6c9bc Added MQTT Tab section 2023-11-10 12:54:49 -08:00
efranzwa bea5677a31 Added Misc Tab section 2023-11-10 12:54:33 -08:00
efranzwa ac8ce700bc Added X10 Tab section 2023-11-10 12:54:06 -08:00
efranzwa ad65e34d0f Added Control Tab section 2023-11-10 12:53:48 -08:00
efranzwa bd3b73220f Added Buffers Tab section 2023-11-10 12:53:24 -08:00
efranzwa 703939f7ec Added Timestamp Tab section 2023-11-10 12:53:00 -08:00
efranzwa ca784d9722 Added ONVIF Tab section 2023-11-10 12:52:10 -08:00
efranzwa b347385b21 Added Viewing Tab section 2023-11-10 12:51:46 -08:00