[HOWTO] ZoneMinder / instalacja / podstawowa konfiguracja

Awatar użytkownika
kobrawerde
Gibki Gibbon
Gibki Gibbon
Posty: 2025
Rejestracja: 10 wrz 2006, 16:00
Płeć: Mężczyzna
Wersja Ubuntu: 22.04
Środowisko graficzne: Cinnamon
Architektura: x86_64
Kontakt:

[HOWTO] ZoneMinder / instalacja / podstawowa konfiguracja

Post autor: kobrawerde »

W tym poradniku spróbuje opisać instalację i podstawową konfigurację programu ZoneMinder v1.32.3 w sposób zrozumiały dla przeciętnego użytkownika... jeśli w ogóle to możliwe w przypadku ZM :razz: . Czyli w skrócie programu do monitoringu pod Linux-a. Aplikacja może korzystać ze standardowych kamer : IP, USB, Firewire itd. Ponieważ sam program to prawdziwy kombajn który w samej konfiguracji nie należy do zbyt prostych ...skupię się na podstawowej instalacji i konfiguracji.
Całość sprawdzałem na dwóch systemach : Linux Mint 19 - Tara (Mate) 64bit ( oparty na Ubuntu Bionic 18.04 LTS Kernel: 4.15.0-54-generic x86_64 ) / Armbian Linux ( oparty na Ubuntu Bionic 4.14.133-odroidxu4 / architektura ARM ) / kamerka USB / ID 1bcf:2286 Sunplus Innovation Technology Inc.
Do instalacji korzystam ze skryptu który bardzo ułatwił instalację i konfigurację w systemie programu Zoneminder... a nie jest to proste gdyż w/w do poprawnego działania korzysta zależnie od np. systemu z konfiguracji kilku programów : LAMP (Apache, MySQL and PHP) / Apache2, Mariadb, PHP / NGNIX, Mariadb, PHP.
więcej: https://wiki.zoneminder.com/Ubuntu_Serv ... e_easy_way
Ja zastosowałem z powodzeniem w mojej wspomnianej podwójnej konfiguracji sprzętowej skrypt:

Kod: Zaznacz cały

#!/bin/sh
clear
read -p "This script installs Apache2, Mariadb Server, PHP and Zoneminder 1.32.x on Ubuntu 18.04 ...
Press Enter to continue or Ctrl + c to quit" nothing
clear
read -p "You must be logged in as root using sudo su ...
Press Enter to continue or Ctrl + c to quit" nothing
apt install -y apache2 php mariadb-server php-mysql libapache2-mod-php7.2
clear
read -p "Next secure MySQL server by entering requested information. Press enter to continue" nothing
mysql_secure_installation
clear
read -p "Next we will add the PPA repository, install and configure the system to run Zoneminder. 
Press enter to continue" nothing
apt install -y software-properties-common
clear
add-apt-repository ppa:iconnor/zoneminder-1.32
apt update
clear
awk '$0="date.timezone = "$0' /etc/timezone >> /etc/php/7.2/apache2/php.ini
clear
apt install -y zoneminder
systemctl enable zoneminder
service zoneminder start
adduser www-data video
adduser www-data mail
a2enconf zoneminder
a2enmod rewrite
chown -R www-data:www-data /usr/share/zoneminder/
service apache2 reload
clear
read -p "Install complete.Press enter to continue" nothing
clear
Zapisujemy nasz skrypt jako np. start.sh i nadajemy w terminalu prawa wykonywalności

Kod: Zaznacz cały

sudo chmod +x /ścieżka_do_skryptu/start.sh
uruchamiamy instalację jako admin / root :

Kod: Zaznacz cały

sudo su
/bin/sh /ścieżka_do_skryptu/start.sh
Podczas prawie automatycznej konfiguracji i instalacji wspomnianych programów + dodania repo prog. Zoneminder będzie parę pytań z jednym najważniejszym czyli podaniem poprawnego hasła do naszego systemu ( root ) ( uwaga bez poprawnego hasła root-a program mimo niby poprawnej instalacji nie będzie działał prawidłowo !!! ) .... na pozostałe odpowiadamy indywidualnie np. hasło do bazy danych / dostęp dla anonimowego usera itd.
Po instalacji jeśli wszystko pójdzie OK możemy się zalogować do programu Zoneminder z przeglądarki internetowej np.:
http://localhost/zm/
http://IP_naszego_komputera/zm/ .......( IP sieci LAN lub jeśli posiadamy IP zew. do połączenia spoza sieci LAN )
http://nasza_domena_jeśli_taką_posiadamy/zm/ .......( dla połączenia spoza sieci LAN )

Obrazek
Wynika z tego iż Zoneminder nawiązuje połączenie na porcie 80. Czasami nie jest to dobrym rozwiązaniem i jeśli chcemy zmienić w/w na inny dokonujemy to w nowej wersji apache2 w pliku:

Kod: Zaznacz cały

sudo nano /etc/apache2/ports.conf
z np.

Kod: Zaznacz cały

Listen 80 
na np : Listen 47155 lub dodając takowy wpis poniżej innych.... i restart apache2 !

Kod: Zaznacz cały

sudo service apache2 restart
Logowanie to teraz: http://IP_naszego_komputera:47155/zm/ ( żeby dostać się do ZM spoza sieci LAN przekierowujemy (forwarding) port:47155 na routerze na adres ip ZM )
Bardzo przydatne a czasem wręcz konieczne jest korzystanie w całej konfiguracji z wpisów które ułatwiają zidentyfikowanie jakiś błędów i niepoprawnych działań programów związanych z Zoneminder -em np:

Kod: Zaznacz cały

sudo service apache2 status
apache2ctl configtest
.... info Syntax OK oznacza że jest OK :razz: ....w samym programie ZM pomocne jest śledzenie logów z niepoprawnymi wpisami zakładka Logi / Log lub na żywo w terminalu :

Kod: Zaznacz cały

tail -f /var/log/syslog
Na samym początku użytkowania programu ZM lepiej korzystać jednak z języka angielskiego bo konfiguracja w/w może być dezorientująca zwłaszcza pewne opcje / filtry itd. Język zmieniamy w : Options/System/LANG_DEFAULT : en_us / pl_pl
Na początku oczywiście musimy dodać naszą kamerkę u mnie jest to model USB czyli tzw. w prog. ZM Typ Źródła lokalne / local Device Path standard jak przy kamerkach USB : /dev/video0 (no chyba że mamy jak w laptopie dwie kamerki to może być /dev/video1.
Klikamy na ADD ( dodaj nowy monitor ) i wpisujemy odpowiednie dane dla swojego modelu kamerki ( czasami metodą prób i błędów ) szukając odpowiednich danych w necie / forum / wiki : Zoneminder-a itp
Mój model na szczęście pracuje na prawie takich samych ustawieniach jak popularna: Logitech C270 ale ma trochę lepszą rozdzielczość i FPS
Logitech HD C270 / PU`Aimetis PUAN-3656
Obrazek
Na początek możemy także zmienić standardową nazwę użytkownika admin i wprowadzić hasło do ZM zaznaczając opcję aby było konieczne przy logowaniu.Wybieramy kolejno:
Options / Users / ...klikamy na admin* w menu zmieniamy login / hasło i zatwierdzamy.
Options / System / OPT_USE_AUTH / zaznaczamy : Authenticate user logins to ZoneMinder ... i zatwierdzamy na samym dole save.
Restart ZM i logowanie z nowym hasłem

Kod: Zaznacz cały

sudo service zoneminder restart
Obrazek
Zoneminder standardowo jeśli zaznaczyliśmy klikając (w moim przypadku) w opcjach : source : /dev/video0(0) / storage / Save JPEGs : Frames only i Video Writer : X264 Encode podczas wykrycia ruchu zapisuje pliki .jpeg i .avi w ścieżce :

Kod: Zaznacz cały

/var/cache/zoneminder/events
Co jest uwidocznione w : Options / Storage jako : default ...jednak zmiana lub dodanie innego miejsca zapisu zwłaszcza jakiegoś zewnętrznego dysku HDD gdy w systemie mamy zbyt mało miejsca nie jest tak proste i nie zadziała z menu ZM choćby przez opcję : add new storage lub zmianę default.
Ale można to zrobić dwuetapowo mając w linux-ie podpięty i z mapowany dysk w jakieś lokalizacji np.

Kod: Zaznacz cały

/media/hdd

Klikamy w ZM : Storage / default ...zmieniamy standardowy path : /var/cache/zoneminder/events na : /media/hdd/zoneminder/events i zapisujemy. Tworzymy brakujące foldery.

Kod: Zaznacz cały

mkdir -p /media/hdd/zoneminder/events
mkdir -p /media/hdd/zoneminder/images
Nadajemy odpowiednie uprawnienia zapisu ( ZM / serwer www / w systemie linux jest identyfikowany jako: www-data )

Kod: Zaznacz cały

sudo chown -R www-data:www-data /media/hdd/zoneminder/events
sudo chown -R www-data:www-data /media/hdd/zoneminder/images

Kod: Zaznacz cały

sudo chmod 777 /media/hdd/zoneminder/events
sudo chmod 777 /media/hdd/zoneminder/images

Edytujemy plik 01-system-paths.conf i zmieniamy standardowe ścieżki zapisów prog. ZM na własne.

Kod: Zaznacz cały

cd /etc/zm/conf.d
sudo nano 01-system-paths.conf 
wpisy :
ZM_DIR_EVENTS=/var/cache/zoneminder/events
ZM_DIR_IMAGES=/var/cache/zoneminder/images
zmieniamy na:
ZM_DIR_EVENTS=/media/hdd/zoneminder/events
ZM_DIR_IMAGES=/media/hdd/zoneminder/images
zapisujemy w nano ctrl+x ...t...enter
możemy także usunąć stare ścieżki:

Kod: Zaznacz cały

sudo rm -r /var/cache/zoneminder/events
sudo rm -r /var/cache/zoneminder/images
Po tych podstawowych ustawieniach możemy kliknąć na nazwę naszej kamery w ZM ( u mnie ) Monitor-1 żeby zobaczyć podgląd z w/w:
Obrazek
Jedną z ważniejszych opcji jest też możliwość / umiejętność ustawienia zdefiniowania nowej lub zmiany strefy monitoringu i czułości na ruch / motion. Czasem nie jest konieczne zapisywanie wszystkich ruchów ( motion ) z kamery. Robimy to wchodząc w opcje; Console Zones / Strefy ( u mnie 1 ) i zmieniamy na pasującą nam zone / strefę :
Obrazek
Najważniejszymi ustawieniami w programie ZoneMinder są jednak tzw. filtry które definiują pewne zdarzenia które ma wykonać ZM. Niestety nie są to ustawienia intuicyjne i dość trudno przeciętnemu użytkownikowi cokolwiek w nich ustawić :razz:
Standardowo mamy już dwa zdefiniowane filtry na starcie które informują nas o ilości miejsca wolnego na : Storage czyli zdefiniowanym miejscu do zapisu i jeśli zajętość przekroczy 95% czyszczą / usuwają wszystkie zapisane pliki przez ZM !!!
Dodamy teraz opcję wysyłania e-maila podczas wykrycia ruchu przez naszą kamerkę oraz dołączenia do w/w jako załącznik wybranego przez ZM zdjęcia. WIKI zoneminder - email -ssmtp
Instalujemy ssmtp

Kod: Zaznacz cały

sudo apt-get update
sudo apt-get install ssmtp
sudo apt-get install mailutils
Konfigurujemy program ssmtp czyli ustawienia w pliku: ssmtp.conf

Kod: Zaznacz cały

sudo nano /etc/ssmtp/ssmtp.conf
Mimo licznych prób serwis gmail według tego howto nie zadziałał ( wprowadzono jakieś nowe obostrzenia ) ... nie będę więc "kopał się z koniem" i skorzystam z : Linux.pl
moje ustawienia / wpisy są to podstawowe dane adres email / hasło / hostname w systemie / port itd oczywiście oznaczone kolorem wpisujemy własne :mrgreen:
root=XXXXX@linux.pl
mailhub=mail.linux.pl:587
hostname=XXXXX
RewriteDomain=linux.pl
UseSTARTTLS=YES
UseTLS=YES
AuthUser=XXXXX@linux.pl
AuthPass=nasze_hasło_do_email
DEBUG=yes
hostname można odczytać w pliku : /etc/hostname :razz:
Edytujemy jeszcze plik revaliases

Kod: Zaznacz cały

sudo nano /etc/ssmtp/revaliases
i wpisujemy konfig z adresem email:
root:XXXXX@linux.pl:mail.linux.pl:587
www-data:XXXXX@linux.pl:mail.linux.pl:587
Żeby program ZM poprawnie wysyłał e-mail musi ta opcja działać także z terminala. Sprawdzamy więc wysyłkę pod jakiś adres user@gmail.com to tylko przykład:

Kod: Zaznacz cały

echo "Hello, World" | mail -s "My email check" user@gmail.com
Jeśli wszystko OK to trzeba jeszcze zaznaczyć odpowiednie opcje i wpisać dane do menu ZM : Options/Email
zaznaczamy : OPT_EMAIL / OPT_MESSAGE / NEW_MAIL_MODULES / SSMTP_MAIL
EMAIL_ADDRESS - wpisujemy adres e-mail na który będzie przychodzić powiadomienie z ZM + zdjęcie jpeg
EMAIL_BODY - dodajemy tu wpis który powiadomi i wyśle zdjęcie w załączniku :
Here are the first and the the highest score image in the alarm: %EI1% %EIM%
MESSAGE_ADDRESS - podobnie jak w opcji : EMAIL_ADDRESS
EMAIL_HOST - wpisujemy : localhost
FROM_EMAIL - np wpis: zoneminder@nasz_adres_email
URL - np wpis zawierający naszą domenę / zewnętrzny adres IP jeśli mamy : http://domena:47155/zm/
SSMTP_PATH - ścieżkę do ssmtp zależnie od systemu przeważnie: /usr/sbin/ssmtp
Zatwierdzamy wszystkie zmiany klikając save na samym dole ! :mrgreen:
Tworzymy teraz nowy filtr o nazwie np. motion-email wybieramy opcje: /Cause /matches/Motion ... sort by : Id/Desc/limit to first: 10
zaznaczamy : Email details of all matches i Run filter in background
Jak wspomniałem tworzenie filtrów w ZM nie jest proste i intuicyjne więc najlepiej szukać pomocy na forum ZoneMinder-a i ogólnie ludzi bardziej obeznanych w działaniu tego programu. Może screenshot będzie pomocny:
Obrazek
Program ZM jest jednak uparty i mimo poprawnych działań według HOWTO wysyłanie e-mail nie działało poprawnie dopiero zrestartowania ZM załatwiło sprawę:

Kod: Zaznacz cały

sudo service zoneminder restart
Jak widać u mnie działa:
Obrazek
Teraz brakuje nam jeszcze tylko opcji wysłania / magazynowania ( na bieżąco ) danych utworzonych przez ZM czyli plików : .jpeg .avi na zupełnie inny nośnik danych niż lokalne nośniki jak HDD / SSD.... np. serwer FTP. ZM na szczęście potrafi to zrobić a dodatkowo skompresować i podzielić pliki na 10MB części które są akceptowane przez darmowe serwery FTP.
W przeciwieństwie do np takich programów jak wput który umożliwia wysyłkę plików na FTP ale w sposób ciągły ...i przeważnie darmowe serwery blokują wysyłkę powyżej ustalonego limitu traktując to jako spam :razz:
Przechodzimy w menu ZM /Options/Upload ....zaznaczamy: OPT_UPLOAD i uzupełniamy pola wyboru naszego FTP:
UPLOAD_HOST - nazwa serwera / lub jego IP
UPLOAD_PORT - port ( przeważnie 21)
UPLOAD_USER - nazwa użytkownika
UPLOAD_PASS - hasło
UPLOAD_LOC_DIR - lokalna ścieżka zapisu ZM (Storage): /media/hdd/zoneminder/events
UPLOAD_REM_DIR - nazwa folderu na serwerze np: kamera ...musimy takowy utworzyć :razz:
na koniec dajemy jak zwykle na samym dole save / zapisz
Jeszcze tylko w filtrze który utworzyliśmy dla wysyłki e-mail-a zaznaczamy dodatkową opcję ! : Upload all matches możemy także zmienić teraz nazwę filtra na np. motion - email - ftp klikamy na save / zapisz ... i restart ZM !

Kod: Zaznacz cały

sudo service zoneminder restart
Jak widać na załączonym screen-ie działa OK
Obrazek
Konfiguracja strefy czasowej ...dokonujemy tego w pliku php.ini ( niestety w rożnych systemach i wersjach apache jest on w innych ścieżkach ) przeważnie howto dotyczy : /etc/php5/apache2/php.ini u mnie jest :

Kod: Zaznacz cały

sudo nano /etc/php/7.2/apache2/php.ini
odnajdujemy wpis :
; date.timezone i zmieniamy na : date.timezone = Europe/Warsaw
Ponieważ program ZM w połączeniu z Apache2, Mariadb, PHP jest dość trudny w konfiguracji to można by tak opisywać jego możliwości i ustawienia w nieskończoność :lol: ..... przydała by się jeszcze opcja powiadomień SMS co oczywiście jest jak najbardziej możliwe ale muszę jeszcze to dopracować / zgłębić bo przychodzą mi w/w przy każdym wykrytym ruchu.... a to oznacza setki sms-ów :razz: .....
Mam nadzieję że to dość obrazowe howto będzie komuś przydatne przy instalacji / konfiguracji i zrozumieniu działania programu ZoneMinder
pozdro!
ODPOWIEDZ

Wróć do „Software-Multimedia”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 11 gości