FedoraでWebカメラ(ZoneMinderの設定)

Linux

Fedoraで利用でき,かつ録画可能なwebカメラおよびソフトウェアについて説明します.今回は,カメラとしてSV3C SV-B01W-1080P-HXとTP-Link tapo C210,NVRとしてZoneMinderを利用します.

Webカメラの規格

Webカメラを扱ううえで知っておいたほうがいいと思われる規格について説明します.

UVC規格について

UVCはUSB Video Classの略で,ビデオカメラやWEBカメラといった主にUSBカメラの通信方法に関する規格です.ビデオの転送で利用するフォーマット(H.264,MPEG-2,非圧縮ビデオなど)やカメラの制御方法などが定義されています.また,OSがUVCに対応していればドライバなしで利用することが可能です.

ONVIF規格について

ONVIFとはOpen Network Video Interface Forumの略で,ネットワークカメラのインターフェースの互換性に関する国際標準規格です.

防犯カメラ用HDR

Webカメラなどの映像を録画するための機器として,防犯カメラ専用のハードディスクレコーダが販売されています.防犯カメラを含めたシステムに組み込まれる高級品から,単体で動作するHDR,最近では格安中国製 防犯カメラ用HDR BNC8/BNC1のようなベアボーンキットのような製品まで存在します.一般のビデオレコーダの映像系の入力を多数そなえたものをイメージするといいかと思います.

NVR

NVRとはNetwork Video Recorderの略で,ネットワークカメラの映像を録画する機器のことです.HDRとの大きな違いは,カメラとの通信をネットワークを介して行うという点です.映像の入出力に特化したNASというイメージです.NVRには専用のハードも販売されていますが,フリーソフトで構築することも可能です.有名どころでは以下のものがあげられます.

  • iSpy(windows)
  • ZoneMinder
  • Shinobi
  • motionEyeOS
  • Motion
  • MotionEye

今回はZoneMinderを利用します.

カメラの候補

ONVIF対応のネットワークカメラであることとLinuxで動作するNVRソフトに対応していることを条件に探してみます.Google Nest Camはものはよさげなのですが,独自仕様みたいなので候補から外します.調べてみるとSV3CというメーカとTP-Link社の以下のものが私のニーズに合っているようです.すべて5,000円以内で購入可能です(2022/4現在).

  • SV3C SV-B01W-1080P-HX
  • TP-LINK tapo C100
  • TP-LINK tapo C210

なお,TP-Linkの2製品は,メーカーが正式にONVIF対応を謳っているわけではありません.これらの製品をONVIF規格で利用する方はメーカーサポートはありませんのでその点にご留意ください.当然当サイトも動作保証できません.

購入したカメラ

SV3C SV-B01W-1080P-HXを購入しました.(2022/4/30)

5/2には到着.今回はじめてコンビニ受け取りを行いました.受け取り時間を気にしなくていいので便利です.

5/3 実家に取り付けを行い,SV3C社製カメラ専用アプリのHiP2P Clientで基本的な動作確認を行うとともに,iSpyでONVIFカメラとしての動作確認を行いました.

5/4 TP-Link Tapo C210×2(一台はAmazonから一台はヨドバシポイント)を購入しました.

ZoneMinderのfedoraへのインストール

ZoneMinder公式のダウンロードページのfedoraの項目を見ると,fedoraへのインストール方法のページへ誘導されます.このドキュメントに沿ってインストールしていきます.なお,RHELやclone OS(CentOSなど)のインストール方法も同じページで解説されています.

fedoraへのインストールする場合の注意点

上記のページに注意点が列挙されています.

  • ZoneMinderは、ZoneMinder専用の環境にインストールしてください.ZoneMinderは一部のアプリケーションとの組合せでは正常に機能しません.アスタリスクはそのような例の1つです.
  • ZoneMinderをインストールする前に,システムがクリーンであることが必要です.例えば以前ZoneMinderをソースからインストールしたことがある環境は,システムはクリーンとはみなされません.最初に,すべてのZoneMinder関連ファイルを手動で検索して削除する必要があります.「makeuninstall」を発行すると役立ちますが,これは正しく行われません.この手順を無視すると,なんらかの問題が発生する可能性があります.
  • Debian / Ubuntuディストリビューションとは異なり、事前にLAMPスタックをインストールする必要はなく,むしろお勧めしません.(注 apache, mysql , phpのインストールは不要)
  • 他のサードパーティのリポジトリを無効にし、ZoneMinderのサードパーティの依存関係(特にffmpegとvlc)がすでにシステムに存在している可能性があるものをアンインストールします.依存関係を自分でインストールしようとすると,問題が発生することがあります.
  • 各ZoneMinderrpmには,/usr/share/docの下にREADMEファイルが含まれています.ZoneMinderをインストールまたはアップグレードするたびに,このREADMEファイルのすべての手順を正確に実行する必要があります.そうしないと,システムが機能することが保証されません.

RPMfusionリポジトリのインストール

ZoneMinderリリースはRPMFusionリポジトリにて提供されています.最初にRPMfusionリポジトリをインストールします.以下のシェルスクリプトを実行してください.

#!/bin/sh
dnf -y install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

このリポジトリはインストール時に有効化されています.

ZoneMinderのインストール

ZoneMinderにはapache版とnginx版があります.今回はapahce版をインストールするので以下のコマンドを実行してください.なお,リポジトリにはzoneminderというパッケージがありますが,これをインストールするとzoneminder-httpd(とzoneminder-common)がインストールされます.

# dnf -y install zoneminder-httpd

nginx版をインストールする場合は以下のコマンドを実行してください.

# dnf -y install zoneminder-nginx

先ほど説明した注意点では/usr/share/doc/READMEを読むように書かれていましたが,インストールの途中で/usr/share/doc/zoneminder-common/READMEを読むように指示がありますのでこれに従います.(この中にはインストール後の設定手順が記載されています)

VERY IMPORTANT: Before starting ZoneMinder, you must read the README file
to finish the installation or upgrade!

The README file is located here: /usr/share/doc/zoneminder-common/README

READMEには設定に必要な5ステップの手順が記してあります.(READMEには1,2,3,4,6があり,5が欠番となっています)

STEP 1. リリースノートの確認

以下のページでリリースノートを確認してください.

https://github.com/ZoneMinder/zoneminder/releases

STEP 2. Apache設定ファイルの編集

このZoneMinderパッケージは,Apache設定ファイルを手動でシンボリックリンクする必要があります.新規インストールであればステップ6を,アップグレードであれば詳細手順を記したREADME(README.nginxもしくはREADME.httpd)のステップ3を参照してください.

STEP 3. ZoneMinderパッケージ

ZoneMinderはWebサーバによって以下の4つのサブパッケージに分けられています.

  • zoneminder – zoneminder-common と zoneminder-httpd をインストールするメタパッケージになっています.下位互換のために用意してあります.
  • zoneminder-common – Webサーバの種類に依存しない共通のファイルです.
  • zoneminder-httpd – WebサーバがApacheの場合に必要なファイルです.
  • zoneminder-nginx – WebサーバがNginxの場合に必要なファイルです.

STEP 4. ZoneMinderのWebコンソールからのタイムゾーンの設定

ZoneMinderのタイムゾーンの設定をWebコンソールから行います.設定の詳細は次の手順(STEP 6.)で説明する適切なREADMEを参照してください.(注 README.{httpd,nginx}のどちらかを参照します)

STEP 6. Webサーバの種類による設定手順

選択したWebサーバーに対応する次のREADMEに進みます.

  • Apacheを選択した場合: README.httpd
  • Nginxを選択した場合: README.nginx

結局,ここまでやってきたことは,RPMfusionリポジトリのインストールとZoneMinderのインストールのみでした.次節から,ZoneMinderの設定について説明していきます.

ZoneMinderの設定(新規インストールの場合)

つづいて,Apache版における設定の説明を行います.新規インストールの場合は10STEP,updateの場合は6STEPの手順を実行する必要があります./usr/share/doc/zoneminder-common/README.httpdに従って,ZoneMinderを設定します.EL7の利用者は,以下の説明中の”dnf”を”yum”に読みかえてください.

STEP 1. MariaDBのインストール・設定

データベースをZoneMinderと同じサーバで運用する場合は,MariaDBのインストールおよび設定を行います.

MariaDBのインストール

dnfコマンドでmariadbをインストールします.

# dnf -y install mariadb mariadb-server mariadb-devel
MariaDB charsetの設定

ZoneMinderの利用には関係ありませんが,MariaDBで日本語が正しく扱えるようにcharsetの設定を行います./etc/my.cnf.d/charset.cnfを以下のように編集してください.

# cat  /etc/my.cnf.d/charset.cnf
[mysqld]
character-set-server = utf8mb4

[client]
default-character-set = utf8mb4
MariaDBの起動設定

以下のコマンドを実行してmariadbがOSの起動時に起動するよう設定します.

# systemctl enable mariadb
# systemctl start  mariadb
MariaDB管理者パスワードの設定

以下のコマンドを実行してmariadb管理者のパスワードを設定します.以下のコマンド中”Abcd1234″という文字列がパスワードになります.

# mysqladmin -u root password Abcd1234 

STEP 2. データベースの作成

ZoneMinder用のデータベースを作成し,ZoneMinderが使用するデータベースアカウントを構成するために以下のコマンドを実行します.

# mysql -u root -p < /usr/share/zoneminder/db/zm_create.sql
# mysql -u root -p -e "CREATE USER 'zmuser'@'localhost' IDENTIFIED BY 'zmpass';"
# mysql -u root -p -e "GRANT ALL PRIVILEGES ON zm.* TO 'zmuser'@localhost;"
# mysqladmin -u root -p reload

上記のzmuserはデータベースzmの管理者でzmpassはそのパスワードです.実際の環境にあわせて上記のコマンドを実行してください.

STEP 3. ZoneMinderデータベースの利用者情報設定

zoneminderデータベースの管理者IDとパスワードをそれぞれzmuser,zmpass以外に設定した場合は,/etc/zm/conf.dの下に構成ファイルを作成し,そこに管理者のIDとパスワードを設定する必要があります.
たとえば,ファイル/etc/zm/conf.d/zm-db-user.confを作成し,それにZM_DB_USERに管理者のIDを,ZM_DB_PASSにパスワードを設定します.

ZM_DB_USER = {username of the sql account you want to use}
ZM_DB_PASS = {password of the sql account you want to use}

修正が終わったらファイルのアクセス権を以下のように設定します.

# chown root:apache *.conf
# chmod 640 *.conf

STEP 4. /etc/php.iniへのtimezone設定

/etc/php.iniでタイムゾーンを手動で設定することは非推奨です.代わりに,ZoneMinderのWebコンソールで設定する方法を推奨します.以下のSTEP 10. を完了した後,これを実行してください.
なお,これが完了するまで,タイムゾーンに関するエラーがZoneMinderログに表示されます.

STEP 5. SELinuxの停止

SELinuxを無効にするか,permissiveモードにする必要があります.
これはオプションではありません!

SELinuxの機能をすぐに無効にするには,コマンドラインから次のコマンドを発行します.

# setenforce 0

SELinuxを永続的に無効にするには,/etc/selinux/configを編集し,SELINUX行を「enforcing」から「disabled」に変更します.この変更は,再起動後に有効になります.

STEP 6. Webサーバの設定

このパッケージは,デフォルトでHTTPSプロトコルを使用して,システムのデフォルトの自己署名証明書を使用してWebポータルにアクセスします.HTTPを使用するリクエストは,HTTPSに自動リダイレクトされます.
Webサーバーの設定は以下のファイルに格納されていますので,内容を確認してください.

/etc/zm/www/zoneminder.httpd.conf

他のサーバ証明書を利用している場合は,このファイルを編集する必要があります.この方法については,README.httpsを参照してください.わからない場合は,一旦デフォルトで続行します.

# ln -sf /etc/zm/www/zoneminder.httpd.conf /etc/httpd/conf.d/
# dnf -y install mod_ssl

修正が必要であれば,この後実行してください.

STEP 7. Webサーバの起動

以下のコマンドを実行して,Webサーバを起動します.

# systemctl enable httpd
# systemctl start httpd

STEP 8. ZoneMinderの起動

以下のコマンドを実行して,ZoneMinderを起動します.

# systemctl enable zoneminder
# systemctl start zoneminder

STEP 9. firewallの設定(オプション)

すべてのRedhatディストリビューションは,ファイアウォールが有効になっている状態で出荷されます.つまり,ファイアウォールに変更が加えられるまで,リモートマシンからZoneMinder Webコンソールにアクセスすることはできません.

以下は,ZoneMinder Webコンソールへのリモートアクセスを許可し,ZoneMinderのONVIF検出を機能させるための最小限のコマンドのセットです.次のコマンドは,リストされたポートまたはサービスにアクセスできるリモートマシンに制限を課しません.

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --permanent --zone=public --add-port=3702/udp
# firewall-cmd --reload

セキュリティ要件とシステムの使用方法によっては,ファイアウォールに追加の変更が必要になる場合があります.これらのコマンドが十分であることを確認してください.

STEP 10. ZoneMinder Webコンソールへのアクセス

これで,適切なURLを使用してWebブラウザからZoneMinderWebコンソールにアクセスできます.ここではいくつかの例を示します.

http://localhost/zm
http://{machine name}/zm
http://{ip address}/zm

ZoneMinderのWebサーバのHTTPS通信について

デフォルトでは,ZoneMinderは,mod_sslパッケージがシステムにインストールされたときに作成された証明書を使用します.証明書は自己署名されているため,Webポータルに初めてアクセスしたときにブラウザから警告が表示されます.これは正常な動作です.ただしこれは,すべての人にとって最善の方法ではありません. ZoneMinderは,これまで行ってきた設定でHTTPS上で問題なく動作します.
ただし,これにかわる設定がいくつか考えられます.

正式なサーバ証明書を利用する方法

例えばcertbotを使用して,letsencryptから完全に署名された証明書をインストールします.詳細については、certbotサイトを参照してください.この無料サービスは非常に簡単に設定できます.

https://certbot.eff.org/all-instructions/

上記の設定ができたら,サーバ証明書に記載されているサーバ名でアクセスできるようにしてください(例えば,DNSの設定を行うなど).そうしないと,サーバ証明書のエラーが出続けるでしょう.

自己認証局サーバ証明書を利用する方法

自己認証局を作成し独自のサーバ証明書を作成することができます.CentOS wikiには,これを行う方法を説明するガイドがあります.

https://wiki.centos.org/HowTos/Https

さらに,google検索で「centos 証明書」で、この自己認証局サーバ証明書の作成に関する多くの記事が見つかるでしょう.(注 この方法は推奨しません)

HTTPで通信する方法

Apacheを使用する場合、/etc/zm/www/zoneminder.apache.confにあるSSLRequireSSLディレクティブをコメントアウトするだけで,HTTPSを完全にオフにできます.この場合HTTPからHTTPSへのRewriteルールもコメントアウトする必要があります.(これは非推奨とします)

ZoneMinderのアップグレード

STEP 1.

conf.dフォルダーのサポートがZoneMinderに追加されました.以前はzm.confに変更を加えていましたが,conf.dフォルダーの下に作成される(1つ以上の)設定ファイルへ移行してください.conf.dフォルダーの下に設定ファイルを作成すると,それらは削除されない限り有効となります.詳細については,/etc/zm/conf.d/READMEを参照してください.

Upgrades
========

1. Conf.d folder support has been added to ZoneMinder. Any custom
   changes previously made to zm.conf must now be made in one or more custom
   config files, created under the conf.d folder. Do this now. See
   /etc/zm/conf.d/README for details. Once you recreate any custom config changes
   under the conf.d folder, they will remain in place indefinitely.

2. Verify permissions of the zmuser account.

   Over time, the database account permissions required for normal operation
   have increased. Verify the zmuser database account has been granted all
   permission to the ZoneMinder database:

     mysql -uroot -p -e "show grants for zmuser@localhost;"

   See step 2 of the Installation section to add missing permissions.

3. Verify the ZoneMinder Apache configuration file in the folder
   /etc/zm/www. You will have a file called "zoneminder.httpd.conf" and there
   may also be one or more files with "rpmnew" extenstion. If the rpmnew file
   exists, inspect it and merge anything new in that file with zoneminder.conf.
   Verify the SSL Requirements meet your needs. Read README.https if necessary.

   The contents of this file must be merged into your Apache configuration.
   See step 6 of the installation section if you have not already done this
   during a previous upgrade.

   IMPORTANT: Failure to complete this step properly will result in a mostly
   empty or significantly corrupted web console post-upgrade.

4. Upgrade the database before starting ZoneMinder.

   Most upgrades can be performed by executing the following command:

     sudo zmupdate.pl

   Recent versions of ZoneMinder don't require any parameters added to the
   zmupdate command. However, if ZoneMinder complains, you may need to call
   zmupdate in the following manner:

   sudo zmupdate.pl --user=root --pass= --version=

5. Now restart the web server then start zoneminder:

        sudo systemctl restart httpd
        sudo systemctl start zoneminder

6. Manually setting the timezone in /etc/php.ini is deprecated.

   Instead, navigate to Options -> System from the ZoneMinder web console.
   Do this now.

   Note that timezone errors will appear in the ZoneMinder log until this
   has been completed.

chromeでmontageが動作しない場合の対処方法

You can just uncheck the box Options->images->OPT_CAMBOZOLA

コメント

タイトルとURLをコピーしました