W poprzedniej części rozbudowałem terminal o dodatkowy dysk HDD, zainstalowałem system operacyjny i przy okazji prawie go ucegliłem z powodu nierozważnej zabawy z efivars. Po uratowaniu terminala i wstępnym ustawieniu Debiana pora na dalszą część konfiguracji.
 |
| Oto obecny stan pacjenta |
UWAGA - standardowe ostrzeżenie:
Wszelkie prace wykonujesz na własną odpowiedzialność. Nie odpowiadam za utratę danych, uszkodzenia sprzętu i zdrowia.
Dalsza konfiguracja Debiana
Po przemyśleniu tematu i zapoznaniu się z dokumentacją ZoneMindera wydaje mi się, że lepszą opcją będzie nieobciążanie systemu środowiskiem graficznym. Oprogramowaniem NVR zarządza się z poziomu przeglądarki internetowej, co w połączeniu z jakimś VLAN pozwoliłoby na zdalne zarządzanie. A ponieważ mam miniPCIe w terminalu, dołożyłem po prostu kartę WiFi. Może uda się wykorzystać ją jako Access Pointa.
Usuwanie LXDE
Zaloguj się w terminalu [Ctrl]+[Alt]+[F2]. Do wykonania tego zadania najprościej użyć programu tasksel, który jest wykorzystywany podczas instalacji, i w okienku, które się w konsoli pojawi odznaczyć wszystko co związane z GUI, czyli Podstawowe składniki środowiska graficznego Debiana oraz Środowisko LXDE. Po wybraniu [OK] zostaną odinstalowane pakiety związane z GUI. Oczywiście trzeba było po prostu go nie instalować od razu, to teraz nie miałbym problemu.
Po tej akcji zepsuło mi się połączenie z Internetem na kablu. W każdy razie chcę zmienić zarządzanie siecią na systemd-networkd. Pierwsze co robimy to zmieniamy nazwę /etc/network/interfaces na /etc/network/interfaces.save. Następnie włączamy systemd-networkd poleceniem systemctl enable systemd-networkd.
Teraz tworzę plik konfiguracyjny /etc/systemd/network/enp4s0.network o treści (DHCP z IPv4)
[Match]
Name=enp4s0
[Network]
DHCP=ipv4
Gdzie enp4s0 to nazwa interfejsu sieciowego. Jeśli masz statyczne IP to plik powinien wyglądać tak:
[Match]
Name=enp4s0
[Network]
#Twój adres IP oraz maska
Address=10.1.10.9/24
#brama domyślna
Gateway=10.1.10.1
#serwer DNS
DNS=10.1.10.1
Następnie wywołaj systemctl restart systemd-networkd. Potem sprawdź poprawność wywołaniem networkctl. Powinieneś otrzymać wynik podobny do tego:
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp4s0 ether routable configured
3 wlan0 wlan off unmanaged
Instaluję kartę WiFi i sprawdzam czy działa na niej Internet
Po podłączeniu instaluję potrzebne pakiety i włączam demona iwd:
sudo apt install iwd rfkill
sudo systemctl enable iwd
sudo systemctl start iwd
Następnie dla pewności odblokowuję kartę przez rfkill i sprawdzam, czy to się powiodło:
$ sudo rfkill unblock all
$ sudo rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: noNastępnie sprawdzam jak nazywa się interfejs WiFi przez ip a:
$ ip a
(...)
wlan0: <NO-CARRIER,BORADCAST,MULTICAST,UP> ....
Tworzę ustawienia networkd dla wlan0 - czyli /etc/systemd/network/wlan0.network, również DHCP. Później wykorzystam to do ustawienia AP.
Plik jest identyczny jak dla Ethernet, jedyna zmiana to Name=wlan0. Teraz można podłączyć się do WiFi przez iwd. Uruchamiamy iwctl i w ten sposób skanujemy sieci WiFi i łączymy się:
[iwd]# device list
Devices
---------------------------------------------------------------------------
Name Address Powered Adapter Mode
---------------------------------------------------------------------------
wlan0 <adres_mac> on phy0 station
#uruchamiamy skanowanie
[iwd]# station wlan0 scan
#nic się nie pojawi. Teraz pobieramy listę dostępnych SSID
[iwd]# station wlan0 get-networks
# pojawi się lista sieci.
[iwd]# station wlan0 connect <SSID>
#jeśli potrzebne jest hasło, tu pojawi się monit o jego wprowadzenie
[iwd]# exit
Po wywołaniu systemctl restart systemd-networkd ten interfejs również powinien być w stanie routable/configured. Można odpiąć kabel ethernet.
Instaluję serwer DHCP i konfiguruję lokalny LAN
Nadszedł czas na przeróbkę na serwer. Na razie będzie to tylko LAN ze switchem, ale bez dostępu do Internetu z tej sieci, czyli jeszcze nie robimy AP. Najpierw instaluję pakiet isc-dhcp-server. Jego konfiguracja może się nie powieść po instalacji. Podłączam od razu terminal do switcha.
Chcę skonfigurować go tak, aby przez interfejs ethernet udostępniać adresy dla sieci lokalnej o adresacji 192.168.100.0/24.
Potem celem konfiguracji trzeba stworzyć plik /etc/default/isc-dhcp-server o odpowiedniej treści:
#interfejs sieciowy na którym ma nasłuchiwać serwer DHCP.
INTERFACES="enp4s0"
To nie wystarczy - trzeba jeszcze ustawić podsieć w której mają być przydzielane adresy IP. Do tego służy plik /etc/dhcp/dhcpd.conf. Upewniam się, że znajdują się w nim takie linie (dodając lub edytując istniejące)
#lokalna domena
option domain-name "nvr.local";
#serwer DNS. Tutaj google'owy. Użyj czego chcesz.
option domain-name-servers 8.8.8.8, 8.8.4.4
#deklaracja podsieci
subnet 192.168.100.0 netmask 255.255.255.0 {
# zakres przydzielanych adresów IP
range 192.168.100.100 192.168.100.200;
#czas dzierżawy - tu doba
deafault-lease-time 86400;
#brama domyślna, czyli ten terminal
option routers 192.168.100.1;
#maska podsieci, broadcast i domena lokalna
option domain-name "nvr.local";
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.100.255;
}
Teraz jeszcze trzeba ustawić nasz enp4s0 w networkd na statyczny adres IP tożsamy z bramą domyślną. Wykorzystaj poprzednio opisany sposób na statyczne IP. Nie podawaj bramy domyślnej.
Dalej, ażeby klienci mogli się komunikować przez nasz terminal, trzeba jeszcze ustawić reguły iptables.
Poźniej będzie można to wykorzystać do routingu przez modem USB. Przede wszystkim odkomentowałem w pliku /etc/sysctl.conf linię net.ipv4.ip_forward=1. Teraz instaluję iptables oraz konfiguruję przekazywanie pakietów, ale wyłącznie przez interfejs ethernet:
sudo apt install iptables-persistent
# dodajemy reguły iptables
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -i wlan0 -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -i wlan0 -p tcp -m tcp --dport 80 -j ACCEPT
sudo -A INPUT -i enp4s0 -j ACCEPT
sudo sh -c '/sbin/iptables-save > /etc/iptables/rules.v4'
Po wszystkim jestem bardzo leniwy i po prostu restartuję terminal.
Dodam, że konfiguracja dalsza będzie przeprowadzana z drugiego komputera w sieci, do której podłączone jest wlan0. Jeśli twój terminal nie ma WiFi, pomiń konfigurację sieci lokalnej i iptables do czasu aż zainstalujesz pozostałe oprogramowanie - potrzebujesz dostępu do Internetu. Potem komputer, z którego będziesz konfigurował ZoneMindera przez http podłącz po prostu do utworzonej sieci LAN.
Konfiguruję ZoneMindera
Tytułem uznania autorstwa oraz dla osób anglojęzycznych podaję link do poradnika po angielsku:
ZoneMinder Wiki - Debian. Poniżej ekstrakt w języku polskim wraz z uzupełnieniami.
Instalacja sudo
Debian domyślnie może nie mieć skonfigurowanego sudo, tak jak Ubuntu. Wszelkie operacje można wykonać korzystając z konta root, ale w ww. poradniku nie jest to zalecane. Dlatego zainstalujemy sudo i dodamy swojego użytkownika do grupy sudo. W moim przypadku użytkownik to nvr.
Sudo instaluje się za pomocą polecenia (jako root):
a następnie trzeba dodać użytkownika do grupy przez
Gdzie nvr to nazwa użytkownika na terminalu. Po tym wyloguj się i zaloguj ponownie.
U mnie sudo było już zainstalowane, więc musiałem wykonać tylko drugie polecenie.
Dalsze operacje wykonuje się jako zwykły użytkownik.
Pamiętaj o prawidłowej strefie czasowej
Upewnij się, że Twój system ma prawidłowo ustawioną strefę czasową (dla Polski: Europe/Warsaw):
sudo timedatectl set-timezone Europe/Warsaw
Stack serwerowy LAMP oraz ZoneMinder
Do działania ZoneMinder wymaga serwera HTTP Apache2, PHP oraz bazy danych MySQL/MariaDB. Dodatkowo potrzebne będzie GnuPG. Instaluję je poleceniem
sudo apt install apache2 mariadb-server php libapache2-mod-php php-mysql lsb-release gnupg2
Następnie trzeba dodać repozytorium APT ZoneMindera i zaimportować klucz GPG, którym podpisane są pakiety, odświeżyć APTa i zainstalować pakiet.
echo "deb https://zmrepo.zoneminder.com/debian/release-1.36 "`lsb_release -c -s`"/" | sudo tee /etc/apt/sources.list.d/zoneminder.list
wget -O - https://zmrepo.zoneminder.com/debian/archive-keyring.gpg | sudo apt-key add -
sudo apt-get update && sudo apt install zoneminder=1.36.11-bullseye1
Po wszystkim uruchamiam usługę ZoneMindera, i restartuję apache:
sudo systemctl enable zoneminder.service
sudo systemctl start zoneminder
sudo a2enconf zoneminder
sudo a2enmod rewrite headers expires
sudo systemctl restart apache2.service
Jeśli wszystko się powiodło, aplikacja powinna być dostępna pod http://adres-ip-terminala/zm
Konfigurujemy aplikację do monitoringu
Wchodzę na podany wyżej adres z przeglądarki na terminalu. Wita mnie komunikat o przetwarzaniu danych i prywatności:
Akceptuję i od razu ustawiam opcje przechowywania danych: wybieram Options i Storage. Wpisuję nazwę Local HDD, i wpisuję ścieżkę do specjalnie przygotowanej partycji /media/recordings. Resztę opcji pozostawiam bez zmian.
Dodatkowo w konsoli należy wykonać sudo chown -R www-data:www-data /media/recordings aby ZoneMinder mógł tam w ogóle zapisywać swoje dane. Dlaczego www-data? Bo to jest użytkownik procesu apache :)
Ustawianie kamery
Model mojej kamery to DVS-MP203ET-IRW. Może też działać bezprzewodowo, ale ja uważam połączenie kablowe za pewniejsze.
Podłączam kamerę na ten moment do sieci lokalnej (router). Domyślnie sama powinna pobrać adres IP.
W moim przypadku jest to 192.168.0.194.
Chcę zalogować się do admin panelu wpisując po http://adres-ip-kamery w przeglądarkę i co? Domyślne hasło nie działa. Trzeba było zresetować kamerę do fabrycznych ustawień przez przytrzymanie fizycznego przycisku reset przez 7 sekund. Po tej operacji udało się wejść do ustawień.
Od razu wyłączam funkcję P2P, czyli wysyłanie danych do ichniej chmury. Nie chcę tego. Upewniam się, że jest włączony ONVIF. Wyłączam także nagrywanie dźwięku. Polecam także zmienić hasło. Panel tej kamery jest bardzo biedny i wygląda tak:
 |
Prosta strona bez zbędnych wodotrysków. Autor motherf**kingwebsite.com by się ucieszył |
Aby w tym modelu sprawdzić, czy obraz jest poprawnie streamowany, można użyć VLC Media Player i otworzyć strumień sieciowy pod adresem
rtsp://user:password@adres-ip-kamery/11Warto także ustawić prawidłowy czas systemowy kamery.
Po tym wszystkim kamerę przepinam do switcha celem dalszej konfiguracji po stronie terminala.
Adres IP, jaki został przydzielony przez serwer DHCP można sprawdzić w /var/log/syslog - szukaj DHCPOFFER, np: DHCPOFFER on 192.168.100.100 to <adres mac> (host) via enp4s0. W tym wypadku moja kamerka otrzymała adres jak powyżej. Dodatkowo trzeba zapewnić, że adres będzie taki na zawsze. W tym celu w pliku konfiguracyjnym serwera dhcp dodajemy:
host ipcam1 {
hardware ethernet <adres-mac-kamery>;
fixed-address <ip-jakie-chcesz>;
}Po tym zresetuj serwer DHCP przez sudo systemctl restart isc-dhcp-server.
Dodawanie kamery do ZoneMinder'a
Klikam Console, a potem Add. Pojawia się jakieś okno dodawania monitora. W ZoneMinder Monitor to właśnie jakieś źródło moniotorowania :) Podaję nazwę Camera 1, Source Type FFmpeg, i teraz najważniejsza opcja czyli Function. Na ten moment wybieram jedynie Record, co oznacza jedynie zapisywanie wideo na dysk. Jak ktoś chce można też przeprowadzać analizę ruchu i wysyłać alerty - ale o tym innym razem.
 |
| Ustawienia kamery |
W sekcji Source należy ustawić dane dostępowe do strumienia wideo. W tym wypadku należy użyć adresu takiego samego jak do testowania przez VLC, czyli adresu z RTSP. Wybieram też odpowiednią rozdzielczość.
 |
Ustawienia źródła wideo
|
W sekcji
Storage należy wybrać z listy 'Local HDD', które było ustawione wcześniej. Dzięki temu dane będą się zapisywać na wcześniej przygotowanym HDD.
Jeśli wszystko zostało dobrze ustawione, to na liście kamer powinna się ona pokazać i być w stanie Recording (odświeżenie strony może być wymagane).
 |
| To znak, że działa! |
Po kliknięciu na miniaturkę otrzymasz podgląd na żywo:
 |
| Losowy obraz bałaganu zarejestrowany przez kamerkę |
No i mamy to!
Przeglądanie nagrań
Wystarczy kliknąć liczbę w kolumnie Events. Wyświetli się lista nagrań, z pokazanymi czasami początku i końca rejestracji.
Lista nagrań
Po wybraniu nagrania pokaże się odtwarzać, na którym można obejrzeć zarejestrowane nagranie:
I co dalej?
To koniec części II. W następnej, ostatniej części omówię przyłączenie terminala do sieci komórkowej, utworzeniu Access Pointa i routingu z sieci lokalnej, a także dostęp zdalny. Jak już robi się monitoring, to chce się mieć dostęp z dowolnego miejsca celem podglądu na żywo.
Do następnego razu!
Komentarze
Prześlij komentarz