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)がすでにシステムに存在している可能性があるものをアンインストールします.依存関係を自分でインストールしようとすると,問題が発生することがあります.
  • 各 ZoneMinder rpm には,/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 版があります.今回は apache 版をインストールするので以下のコマンドを実行してください.なお,リポジトリには 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 ブラウザから ZoneMinder Web コンソールにアクセスできます.ここではいくつかの例を示します.

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をコピーしました