• カテゴリー別アーカイブ zoneminder
  • ZoneMinder1.35.14で起動エラーが出る場合の対処

    ZoneMinderの最新版に更新したところ、ZoneMinderが起動しなくなりました。たいていの場合ZoneMinderアップデート後の起動エラーはDBが原因なので、手作業でDBをアップデートしようとしたところ、以下のエラーが発生しました。

    /usr/share/zoneminder/db$ sudo mysql zm < zm_update-1.35.14.sql
    This update may make changes that require SUPER privileges. If you see an error message saying:
    
    ERROR 1419 (HY000) at line 298: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_functio
    This update may make changes that require SUPER privileges. If you see an error message saying:\n\nERROR 1419 (HY000) at line 298: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)\n\nYou will have to either run this update as root manually using something like (on ubuntu/debian)\n\nsudo mysql --defaults-file=/etc/mysql/debian.cnf zm < /usr/share/zoneminder/db/zm_update-1.35.14.sql\n\nOR\n\nsudo mysql --defaults-file=/etc/mysql/debian.cnf "set global log_bin_trust_function_creators=1;"\nsudo zmupdate.pl\n
    

    とのこと。とりあえず、log_bin_trust_function_creatorsを有効にしたのち、zmupdate.plを叩くことに。

    mysql>  SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | log_bin_trust_function_creators | OFF   |
    +---------------------------------+-------+
    1 row in set (0.01 sec)
    
    mysql>
    mysql> set global log_bin_trust_function_creators=1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>
    mysql>  SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | log_bin_trust_function_creators | ON    |
    +---------------------------------+-------+
    1 row in set (0.00 sec)
    
    exit;

    で、シェルで以下を実行

    sudo /usr/bin/zmupdate.pl
    sudo systemctl restart zoneminder.service
    

    上記までで動きました。MySQLのlog_bin_trust_function_creatorsの設定は、MySQLの再起動で元に戻ってしまったので、他の対策も必要かもしれません。(追ってアップデートします)


  • 監視カメラシステム全体の電気代削減について

    ZoneMinderを通常運用しだすと、録画システムと言う位置づけの為、24h365d(24時間365日)での稼働が求められるため、安定性と電気代、騒音が気になるところです。消費電力を下げることは、冷却システムの簡易化、引いては騒音、電気代の削減につながります。

    また、契約している電力会社を適切に見直すことで、電気代そのものを安くすることもできます。本投稿では、電気代削減に焦点をあて、私のノウハウを公開いたします。

    消費電力そのものを下げるためのハードウェア選定

    CPU

    CPUを用いてffmpegによるリアルタイムエンコードをするか否かによって選択肢が分かれます。カメラ側でH.264エンコードをサポートしており、ZoneMinderサーバでは、「オプション>Storage」の設定で、「H264 Camera Passthrough」を選択するのであれば、ffmpegによるエンコードがされない為、CPUは低消費電力のCPUを選択して問題ありません。

    ZoneMinderでCPU負荷を抑える為、H264のカメラ画像をそのまま保存する設定

    反対に、USBカメラ等を用いており、ffmpegでエンコードしながら保存する場合には、多少高いCPUを購入するといいと思います。

    HDD

    保存したい期間×カメラ台数で容量を見積もります。お勧めは8千円以下で購入できる2.5inch HDDです。私は消費電力が2w以下となるSeagateのST2000LM015をよく使います。Western Digital Purpleも何度も納品したことがありますが、「3~5年程度でカメラのLEDが壊れたので、あわせて交換してほしい」と言われ交換してしまうため、まだWestern Digital Purpleの故障でHDD交換したことはありません。消費電力が5.3wの6TB(WD60PURZ)辺りが良いと思います。

    電力会社の見直し

    防犯カメラを24h365d(24時間365日)で10台も設置すると、月の電気代が1000円~2000円上がることもざらではありません。そこで、安い電気会社を選択することをお勧めします。ご参考までに我が家の電気代の明細は以下の通りです。

    我が家の電気代

    ポイントは、電力量2段料金と、電力量3段料金とが非常に安い点です。東電の従量電灯B・Cの電気代は下表のとおりです。~120whは通常の照明と冷蔵庫だけで使い切ってしまう為、システム全体の消費電力を下げる対策と「安い電力会社」の選択を併用したいところです。

    項目電力量東電の電気代目安我が家
    電力量1段料金~120wh19円88銭19円69銭
    電力量2段料金121~300wh26円48銭23円70銭
    電力量3段料金300wh~30円57銭23円99銭

    携帯電話の電話代と同じで、格安SIM化すれば月の電話代を1万円から2000円に下げられるのと同様、電気代も契約次第で大幅に削減できるため、見直してみてもいいと思います。

    ご参考ページ


  • ZoneMinderで日本語表示時設定している環境でapt update後に文字化けする対策

    日本語化対応を行った環境下で、apt updateを行った場合、ZoneMinder画面が文字化けすることがあります。

    原因

    以下ファイルで、UTF-8を指定するべきところをShift_JIS指定しているためです。

    /usr/share/zoneminder/www/lang/ja_jp.php

    対策

    以下コマンドを実行してください。

    sudo sed -i 's/Shift_JIS/UTF-8/g' /usr/share/zoneminder/www/lang/ja_jp.php

    本件、apt updateしてZoneMinderが更新されるたびに発生する為、apt update後に実施するようにしてもいいかもしれません。


  • apt update時の 「Access denied for user ‘debian-sys-maint’@’localhost’ (using password: YES)」エラー対策

    ZoneMinderインストール後に、apt updateした場合に、下記エラーが出力されてupdateがエラー終了する問題への対応策です。

    エラー内容

    Setting up zoneminder (1.35.10~20201016.44-focal) ...
    detected systemd
    Detected db service is mysql.service
    Checking for db
    mysqladmin: connect to server at 'localhost' failed
    error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
    Creating zm db
    ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)
    Error creating db.
    dpkg: error processing package zoneminder (--configure):
     installed zoneminder package post-installation script subprocess returned error exit status 1
    Errors were encountered while processing:
     zoneminder
    Log ended: 2020-10-17  12:06:38
    

    原因

    エラーメッセージの通り、debian-sys-maintユーザーでDBの更新をしようとした際に、ログインエラーが発生した為です。

    対策

    debian-sys-maintユーザーでDBログイン出来るように、MySQLにログインし、パスワードを設定してやります。

    # MySQLでdebian-sys-maintユーザーに設定するパスワードを確認
    sudo cat /etc/mysql/debian.cnf  | grep password
    password = 5klCD94cmdDac9a8
    password = 5klCD94cmdDac9a8
    
    # debian-sys-maintユーザーを上記で確認したパスワードを付与して作成
    sudo mysql
    CREATE USER 'debian-sys-maint' IDENTIFIED BY '5klCD94cmdDac9a8';
    GRANT ALL PRIVILEGES on *.* TO `debian-sys-maint` IDENTIFIED BY '5klCD94cmdDac9a8' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    quit

    ※上記パスワード「5klCD94cmdDac9a8」は、公開用に適当な文字列にしてあります。適宜、/etc/apt/debian.cnfで確認した結果で読み替えてください。


  • zoneminderへUSBウェブカメラを登録する方法

    余っているUSB接続のウェブカメラや、PC内臓のカメラをzoneminderに登録する際の手順です。

    もし、新規購入する検討をしている場合には、USB接続のカメラの場合は、サーバ自身からUSBケーブルが届く範囲にしか設置できない為、監視カメラ、見守りカメラ用途であれば、ネットワーク接続のONVIF対応ネットワークカメラを購入することをお勧めします。

    zoneminderを実行するユーザーをvideoグループに所属させる

    当サイトのセットアップ手順を見てインストールする場合には、そちらで実施済みかと思いますが、まだ、以下のグループ割り当てをしていない場合には実行してください。

    usermod -a -G video www-data

    USBカメラの解像度や、ビデオフォーマット情報を確認する

    zoneminderへローカルカメラを登録する際には、USBカメラの解像度やビデオフォーマットを登録する必要があります。カタログ等から確認することが出来ないものもありますので、linux上のコマンドから確認します。以下、実行したコマンドとその出力例を載せておきます。

    # v4l-utilsをインストールする
    apt install v4l-utils
    
    # サーバに接続されているUSBカメラをリスト表示する
    v4l2-ctl --list-devices
    
    > UCAM-C0220F: UCAM-C0220F (usb-0000:38:00.3-4):
    >        /dev/video0
    >        /dev/video1
    >        /dev/media0
    
    # 対象デバイスの情報を全部出力
    v4l2-ctl -d /dev/video0 --all
    > UCAM-C0220F: UCAM-C0220F (usb-0000:38:00.3-4):
    >         /dev/video0
    >         /dev/video1
    >         /dev/media0
    > 
    > 
    > Driver Info:
    >         Driver name      : uvcvideo
    >         Card type        : UCAM-C0220F: UCAM-C0220F
    >         Bus info         : usb-0000:38:00.3-4
    >         Driver version   : 5.4.55
    >         Capabilities     : 0x84a00001
    >                 Video Capture
    >                 Metadata Capture
    >                 Streaming
    >                 Extended Pix Format
    >                 Device Capabilities
    >         Device Caps      : 0x04200001
    >                 Video Capture
    >                 Streaming
    >                 Extended Pix Format
    > Media Driver Info:
    >         Driver name      : uvcvideo
    >         Model            : UCAM-C0220F: UCAM-C0220F
    >         Serial           :
    >         Bus info         : usb-0000:38:00.3-4
    >         Media version    : 5.4.55
    >         Hardware revision: 0x00000002 (2)
    >         Driver version   : 5.4.55
    > Interface Info:
    >         ID               : 0x03000002
    >         Type             : V4L Video
    > Entity Info:
    >         ID               : 0x00000001 (1)
    >         Name             : UCAM-C0220F: UCAM-C0220F
    >         Function         : V4L2 I/O
    >         Flags         : default
    >         Pad 0x01000007   : 0: Sink
    >           Link 0x02000010: from remote pad 0x100000a of entity 'Extension 4': Data, Enabled, Immutable
    > Priority: 2
    > Video input : 0 (Camera 1: ok)
    > Format Video Capture:
    >         Width/Height      : 640/480
    >         Pixel Format      : 'YUYV' (YUYV 4:2:2)
    >         Field             : None
    >         Bytes per Line    : 1280
    >         Size Image        : 614400
    >         Colorspace        : sRGB
    >         Transfer Function : Default (maps to sRGB)
    >         YCbCr/HSV Encoding: Default (maps to ITU-R 601)
    >         Quantization      : Default (maps to Limited Range)
    >         Flags             :
    > Crop Capability Video Capture:
    >         Bounds      : Left 0, Top 0, Width 640, Height 480
    >         Default     : Left 0, Top 0, Width 640, Height 480
    >         Pixel Aspect: 1/1
    > Selection Video Capture: crop_default, Left 0, Top 0, Width 640, Height 480, Flags:
    > Selection Video Capture: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags:
    > Streaming Parameters Video Capture:
    >         Capabilities     : timeperframe
    >         Frames per second: 30.000 (30/1)
    >         Read buffers     : 0
    >                      brightness 0x00980900 (int)    : min=-127 max=127 step=1 default=0 value=0
    >                        contrast 0x00980901 (int)    : min=0 max=127 step=1 default=64 value=64
    >                      saturation 0x00980902 (int)    : min=0 max=255 step=1 default=64 value=64
    >                             hue 0x00980903 (int)    : min=-16000 max=16000 step=1 default=0 value=0
    >  white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
    >                           gamma 0x00980910 (int)    : min=16 max=500 step=1 default=100 value=100
    >            power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
    >                                 0: Disabled
    >                                 1: 50 Hz
    >                                 2: 60 Hz
    >       white_balance_temperature 0x0098091a (int)    : min=2800 max=6500 step=1 default=5200 value=5200 flags=inactive
    >                       sharpness 0x0098091b (int)    : min=0 max=31 step=1 default=4 value=4
    >                   exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3
    >                                 1: Manual Mode
    >                                 3: Aperture Priority Mode
    >               exposure_absolute 0x009a0902 (int)    : min=1 max=5000 step=1 default=625 value=625 flags=inactive
    
    
    
    

    上記コマンドの実行結果から、大事なのは「Pixel Format」と、「Width/Height」の値なのでメモって下さい。

    v4l2-ctl -d /dev/video0 –all | grep Pixel
    Pixel Format : ‘YUYV’ (YUYV 4:2:2)
    Pixel Aspect: 1/1
    v4l2-ctl -d /dev/video0 –all | grep Width\/Height
    Width/Height : 640/480

    zoneminderへの登録

    コンソールから、以下の通りUSBウェブカメラを追加します。

    コンソールから追加を選択

    名前は任意。ソースタイプは「ローカル」、機能は「Mcord」、有効化はチェックを入れる。
    ソースタブでは、Linux上で確認した以下項目を入力する
    デバイスパス以下コマンドの結果から、対象デバイスを記載。たいていの場合には、/dev/video0
    v4l2-ctl –list-devices
    キャプチャメソッドVideo For Linux version2
    デバイスチャネル0
    デバイスフォーマットPAL
    キャプチャパレット以下コマンドで確認
    v4l2-ctl -d /dev/video0 –all | grep Pixel
    Multi BufferingUse Config Value
    Captures Per Frame
    ターゲット色空間32ビットカラー
    キャプチャ解像度(pixels)以下コマンドの結果から確認
    v4l2-ctl -d /dev/video0 –all | grep Width\/Height

    Storage Areaに、任意の物を。JPEGの保存はDisabled、動画書き出しにどうがX264 Encodeを指定。

    画像バッファサイズに50を指定して、保存を押下

    以上で、USB接続カメラをzoneminderへ登録することが可能です。途中で動画書き出しにX264エンコードを指定していることからもわかるように、USBカメラ自身はX264エンコードをしてくれず、zoneminderサーバのCPUでエンコードすることになります。

    USBウェブカメラは延長できても5メートル程度なので、1つのサーバにUSBウェブカメラを沢山つけるような用途はないと思いますが、複数個つける場合には、CPUの性能見合いでつけるようにしてください。


  • zoneminderへONVIF対応ネットワークカメラを登録する方法

    zoneminderにONVIF対応のネットワークカメラを登録する方法です。「ONVIF対応のネットワークカメラ」と書きましたが結局のところは数千円で購入可能なスマートカメラです。

    USB接続のWebCamについては、別途登録方法を紹介します。

    追加を押下
    画面右上の電波のマーク(ONVIF設定)を押下
    「検出されたカメラ」をプルダウンから選択し、カメラ側に設定したユーザー名、パスワードを入力して次へ。
    対象のカメラがサポートする解像度やONVIFバージョン等が一覧表示されるので、好きな解像度を選んで「保存」を押下

    上記までで、zoneminderが自動検出したONVIFカメラの情報が、カメラ登録画面に反映されます。この時点ではまだ「zoneminderが機器情報から読み取った情報を登録画面に入れてくれた」だけの状態です。

    以下の一般設定~Miscまでの各画面で必要項目を入れて保存して登録完了となります。(左側のリンクを押してページ移動しても、入力値は保たれます)

    名前に適当な名前を入れてください。英語表記をお勧めします。また、ソースタイプには「Ffmpeg」、機能には「Mcord」を入力してください。また、その下の「有効化」チェックボックスはONにしてください。
    ONVIF検索結果から、「ソースパス」、「Method」が入力されているはずです。各々設定内容を確認してください。なお、MethodはUDPが好ましいですが、エラーが出る場合にはTCP等、他のプロトコルを選択して試してみてください。

    DecoderHWAccelNameと、DecoderHWAccelDeviceは、GPUエンコードの指定です。GPUエンコードをサポートしたハードウェアかつ、ffmpegがGPUエンコードをサポートした状態でコンパイルされているときは、指定可能です。

    「Storage Area」は、オプション画面から設定可能な「Storage Area」を選択します。デフォルトのままでも構いませんが、可能であれば、zoneminder用にのパーティションを選択してください(windowsで言うところの「データはDドライブに置く」みたいな感じです)。
    タイムスタンプは、お好みで編集してください。特に設定する必要はありません。
    「バッファ」の「画面バッファサイズ」は「60」あたりを入れておくといいです。あまり小さい値を設定すると、ログにワーニングが出て、「最低でもこのサイズにしてください」的なログが出ます。その場合には、指摘されたサイズ以上のバッファサイズを指定します。
    コントロールは、カメラをリモートからコントロール可能であれば設定します。(首振りとかを制御するようです。対応したカメラを持っていないので未検証ですが・・・・)
    最後に、「Misc」の値を確認して「保存」を押下して完了です。

    登録完了すると、以下画面のように、対象カメラからの録画が開始されます。ソース列にあるIPアドレスをクリックすることで、先ほどまで設定したカメラの設定画面を表示可能です。設定値を見直したい場合には、そちらから設定しなおしてください。

    他に、機能列で「Mcord」となっている箇所は、以下の何れかに変更することが可能です。

    用途に合わせて適宜選択してください。私の場合には「Mcord」での運用が多いです。

    Function意味
    Noneモニターは現在無効になっています。ストリームを表示したり、イベントを生成したりすることはできません。何も記録されません。
    Monitorモニターはライブストリーミングでのみ使用できます。画像分析は行われないため、アラームやイベントは生成されず、何も記録されません。
    ModectMOtion DEteCTtionの略。キャプチャされたすべての画像が分析され、モーションが検出された録画ビデオでイベントが生成されます。
    Recordモニターは継続的に記録されます。固定長のイベントは、従来のタイムラプスビデオレコーダーと同様に、モーションに関係なく生成されます。このモードでは、動きの検出は行われません。
    Mocordモニターは継続的に記録され、それらのイベント内でモーションが強調表示されます。
    NodecNo DEteCTtioの略。外部トリガーで使用するように設計された特別なモードです。 Nodectではモーション検出は行われませんが、外部トリガーで必要な場合はイベントが記録されます。

    以上でONVIF対応カメラの登録は完了です。


  • zoneminderの日本語化パッチ

    zoneminderをインストールしたところ、「LANG_DEFAULT」に「ja_jp」を選択しても殆どの項目が英語表記のままで、「専門用語も多く、設定が難しい」状態となりましたので、各種日本語化を図りました。その成果物は以下ファイルとなります。

    利用においては自己責任にて利用をお願いいたします。他サイトでの紹介などを検討している場合には、コメント欄からご連絡いただければ特に問題ありません。

    なお、現状は自身で作った設定で、実運用しながら設定をアップデートしている最中となります。ある程度固まったら本家サイトへのフィードバックもしたいと思います。

    なお、ファイルへの直リンクではなく、当ページへのリンクとしてください。(手順中でwgetで取得する場合には、近くに参考サイトとして記載頂ければ問題ありません。)

    日本語化した画面

    ダウンロード

    ja_jp.php.zip

    • 2020/09/22・・・新規作成

    説明

    メニューやボタンを日本語化します。

    使い方

    以下のように、ja_jp.phpファイルを差し替えてください。

    sudo cp /usr/share/zoneminder/www/lang/ja_jp.php /usr/share/zoneminder/www/lang/ja_jp.php.bak
    cd /tmp
    wget https://zoneminder.senritu.net/wp-content/downloads/ja_jp.php.zip
    unzip ja_jp.php.zip
    sudo mv ja_jp.php /usr/share/zoneminder/www/lang/ja_jp.php
    sudo chown root:root /usr/share/zoneminder/www/lang/ja_jp.php
    
    # 文字コードをUTF-8に変更してください。
    sudo sed -i 's/Shift_JIS/UTF-8/g' /usr/share/zoneminder/www/lang/ja_jp.php

    update_db_to_japanease.sql.zip

    • 2020/09/22・・・新規作成

    説明

    Configの説明文を日本語化します。こちらは正式な使い方ではないので、動作保証は致しません。・・・・しかし、私の環境では動いています。

    使い方

    以下のように、SQL文を実行してください。

    cd /tmp
    wget https://zoneminder.senritu.net/wp-content/downloads/update_db_to_japanease.sql.zip
    unzip update_db_to_japanease.sql.zip
    sudo mysql zm < update_db_to_japanease.sql

    改善依頼について

    現状、日本語化に向けて、文言の調整をしています。もし間違いや改善要望があれば、コメント欄からお願い致します。


  • zoneminderのインストール

    以下の構成を前提にインストール作業を行います。ここでは、Linux初心者も対象としているため、Ubuntuのインストールから解説します。

    • Ubuntu20.04
    • Apache
    • MySQL
    • zoneminder 1.35.6~1.35.9

    Ubuntu20.04のインストール

    zoneminderをインストールする先のOSとして、人気のあるLinuxディストリビューションの1つであるUbuntu20.04(Server)をインストールします。Windowsとは違って無料のOSとなります。

    追って、設定中で日本語化する為、ここでは「English」を選択します。
    場合によっては、上記画面が出る事があります。単純にインストールしようとしているよりも新しいパッケージがある旨の注意となります。どちらでもいい為、「Continue without updating」を選択しています。
    キーボードのレイアウトに「Japanese」を選択します。
    IPアドレスを設定します。説明の都合上、ここではDHCPで自動取得したIPが表示されていることを確認します。サーバの場合は、固定IPが好まれることもある為、ここで固定IPを指定しても問題ありません。(インストール後に固定IPに設定しなおすことも可能です)
    proxyは無しのままとします。
    Mirror addressはデフォルトのままにします。
    ここでは、LVMをそのまま使うことにして、次へ行っています。ストレージ情報を個々に設定したい場合には、「Custom storage Layout」を選択します。
    必要に応じて、パーティションを設定します。/mnt/camera等のパーティションに1TB以上のディスクを割り当てられるとより良いです。
    HDDに設定値を書き込み、インストールする為データが消える旨の警告です。新規のHDDや、データ消去して問題ないHDDを使っていると思いますので、「Continue」を押下します。
    ユーザー名とそのパスワード、サーバ名を入力します。ここではユーザー名はzm、サーバー名はmyserverとしています。お好きな名前で設定してください。
    後でメンテナンスしやすいようにSSHをインストールしておきます。
    他のパッケージについては特にインストールしません。
    インストール中は、上記のような画面となりますので、インストール完了するまで待ちます。
    インストール完了したら「Reboot」が選べるようになるので、押下して再起動します。

    zoneminderのインストール

    ubuntu20.04のインストールが完了したら、zoneminderをインストールします。

    ログインプロンプトに、先ほどインストールした際に指定したユーザー名を入力し、「Enter」を押下します。続いてパスワードを入力して「Enter」を押下します。
    ip addr コマンドを打つと、上記画面のように、inetに続いてサーバのIPアドレスが表示されます。IPアドレスが解ったら、手元のWindowsクライアントなどから、Putty等を利用してSSH接続してください。(もちろん、このままサーバ上のコンソールで作業しても問題ありませんが、SSH接続しての作業の場合、コマンドのコピペがしやすいので、その方が良いかと思います。)

    SSHログインした後、以下の通り、必要なソフトウェアのインストールを行っていきます。

    # パッケージの最新化
    sudo apt update ; sudo apt upgrade
    sudo reboot
    
    # 再起動完了後に必要パッケージを追加インストール
    sudo apt update && sudo apt install -y \
        apt-transport-https curl wget gnupg ca-certificates
    
    # zoneminderのリポジトリを追加
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.org
    echo "deb https://zmrepo.zoneminder.com/debian/master focal/" | sudo tee -a /etc/apt/sources.list
    wget -O - https://zmrepo.zoneminder.com/debian/archive-keyring.gpg | sudo apt-key add -
    
    # 必要なパッケージをまとめてインストール 
    sudo apt update && sudo apt upgrade && sudo apt install -y \
        sudo git build-essential cmake gdb ccache devscripts debhelper \
        cdbs fakeroot lintian equivs rpm alien dh-systemd \
        libdistro-info-perl apache2-dev bzip2 dh-linktree docutils-common \
        ffmpeg fontconfig fontconfig-config fonts-dejavu-core gir1.2-polkit-1.0 \
        libapr1 libapr1-dev libaprutil1 libaprutil1-dev libasound2 libasound2-data \
        libass9 libasyncns0 libavc1394-0 libavcodec-dev libavcodec58 libavdevice-dev \
        libavdevice58 libavfilter-dev libavfilter7 libavformat-dev libavformat58 \
        libswresample-dev libswresample3 libavutil-dev libavutil56 \
        libb-hooks-op-check-perl libbluray2 libbs2b0 libbz2-1.0 libbz2-dev libcaca0 \
        libcairo2 libcdio-cdda2 libcdio-paranoia2 libcdio18 libchromaprint1 \
        libclass-mix-perl libcrypt-eksblowfish-perl libcrypt-rijndael-perl \
        libcrystalhd3 libcurl3-gnutls libcurl4-gnutls-dev libdata-entropy-perl \
        libdata-float-perl libdata-uuid-perl libdate-manip-perl libdatrie1 \
        libdbd-mysql-perl libdbi-perl libdc1394-22 libdevel-callchecker-perl \
        libdrm-amdgpu1 libdrm-common libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 \
        libdrm2 libdynaloader-functions-perl libedit2 libexpat1 \
        libexpat1-dev libfftw3-double3 libflac8 libflite1 libfontconfig1 \
        libfreetype6 libfribidi0 libgcrypt20-dev libgdk-pixbuf2.0-0 \
        libgdk-pixbuf2.0-common libgl1 libgl1-mesa-dri libglapi-mesa libglib2.0-0 \
        libglib2.0-bin libglib2.0-data libglib2.0-dev libglib2.0-dev-bin libglvnd0 \
        libglx-mesa0 libglx0 libgme0 libgmp-dev libgmpxx4ldbl libgnutls-dane0 \
        libgnutls-openssl27 libgnutls28-dev libgnutls30 libgnutlsxx28 \
        libgpg-error-dev libgraphite2-3 libgsm1 libharfbuzz0b libhttp-lite-perl \
        libidn11 libidn2-0-dev libidn2-dev libiec61883-0 libjack-jackd2-0 libjbig0 \
        libjpeg-turbo8 libjpeg-turbo8-dev libjs-jquery \
        libjs-mootools libjs-sphinxdoc libjs-underscore libldap-2.4-2 libldap-common  \
        libldap2-dev libllvm7 libmp3lame0 libmp4v2-2 libmp4v2-dev libmpg123-0 \
        libmysofa1 libmariadb-dev-compat libmariadb3 libnorm1 libnuma1 libogg0 \
        libopenal-data libopenal1 libopenjp2-7 libopenmpt0 libopus0 libp11-kit-dev \
        libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libparams-classify-perl \
        libpciaccess0 libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 \
        libpgm-5.2-0 libphp-serialization-perl libpixman-1-0 libpng16-16 \
        libpolkit-agent-1-0 libpolkit-gobject-1-0 libpolkit-gobject-1-dev \
        libpostproc-dev libpostproc55 libpulse0 libpython2-stdlib \
        libraw1394-11 librsvg2-2 \
        librubberband2 libsamplerate0 libsctp-dev libsctp1 libsdl2-2.0-0 libsensors5 \
        libshine3 libslang2 libsnappy1v5 libsndfile1 libsndio7.0 libsodium23 \
        libsoxr0 libspeex1 libssh-gcrypt-4 libssl-dev libssl1.1 \
        libswscale-dev libswscale5 libsys-mmap-perl libtasn1-6-dev \
        libthai-data libthai0 libtheora0 libtiff5 libtwolame0 libunbound8 \
        libusb-1.0-0 libuuid1 libv4l-0 libv4l-dev libv4l2rds0 libv4lconvert0 \
        libva-drm2 libva-x11-2 libva2 libvdpau1 libvlc-dev libvlc5 libvlccore9 \
        libvorbis0a libvorbisenc2 libvorbisfile3 libvpx6 libwavpack1 \
        libwayland-client0 libwayland-cursor0 libwayland-egl1 libwebp6 libwebpmux3 \
        libwrap0 libx11-6 libx11-data libx11-xcb1 libx264-155 libx264-dev \
        libx265-179 libxau6 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 \
        libxcb-render0 libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxcb1 \
        libxcursor1 libxdamage1 libxdmcp6 libxext6 libxfixes3 libxi6 libxinerama1 \
        libxkbcommon0 libxrandr2 libxrender1 libxshmfence1 libxss1 libxv1 \
        libxvidcore4 libxxf86vm1 libzmq5 libzvbi-common libzvbi0 mysql-common \
        net-tools nettle-dev pkg-config python python-alabaster python-babel \
        python-babel-localedata python-certifi python-chardet python-docutils \
        python-idna python-imagesize python-jinja2 python-markupsafe \
        python-pkg-resources python-pygments python-roman python-six \
        sphinx-doc python3-sphinx python-typing python-tz \
        python3-distutils python3-lib2to3 sgml-base zlib1g-dev \
        shared-mime-info sphinx-common tzdata uuid-dev x11-common xkb-data xml-core \
        bzip2 libbz2-1.0 libcurl3-gnutls libexpat1 libglib2.0-0 libglib2.0-data \
        libgnutls30 libldap-2.4-2 libpcre3 libssl1.1 shared-mime-info
    
    # zoneminderをインストールするうえで必要になるサーバソフトウェア関係をインストール
    sudo apt install mysql-server mysql-client apache2 php php-mysql \
        libapache2-mod-php php-mbstring build-essential \
        libmysqlclient-dev libssl-dev libnumber-bytes-human-perl \
        language-pack-ja-base language-pack-ja ibus-mozc
    
    # mysqlの文字コードがuft8mb4になっていることを確認
    # 注意:uft8mb4ではないと、日本語が使えない
    sudo mysql
    mysql> show variables like "char%";
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8mb4                    |
    | character_set_connection | utf8mb4                    |
    | character_set_database   | utf8mb4                    |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8mb4                    |
    | character_set_server     | utf8mb4                    |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)
    
    > exit
    
    # zoneminderをインストールしてDBを作成する。
    sudo apt install zoneminder
    sudo mysql -uroot < /usr/share/zoneminder/db/zm_create.sql
    
    # ZoneMinderのDBへ権限設定
    sudo mysql
    CREATE USER 'zoneminder'@'localhost' IDENTIFIED BY '98jZX*()j32jiodsfadfdcsa)(D3';
    GRANT ALL ON zm.* TO 'zoneminder'@'localhost';
    flush privileges;
    exit;
    
    # ZoneMinderのconfファイルを編集。
    # ZM_DB_PASSは適当なパスワードを指定していますので、適宜変更してください。
    sudo cp /etc/zm/zm.conf /etc/zm/zm.conf.org
    sudo sed -i "s/^[# ]*ZM_DB_PASS *=.*/ZM_DB_PASS=98jZX*()j32jiodsfadfdcsa)(D3/g" /etc/zm/zm.conf
    sudo sed -i "s/^[# ]*ZM_DB_USER *=.*/ZM_DB_USER=zoneminder/g" /etc/zm/zm.conf
    sudo diff /etc/zm/zm.conf /etc/zm/zm.conf.org
    
    # ZoneMinderの日本語対応
    sudo cp /etc/php/7.4/cli/php.ini /etc/php/7.4/cli/php.ini.bak
    sudo sed -i 's/;date.timezone =/date.timezone = "Asia\/Tokyo"/g' /etc/php/7.4/cli/php.ini
    sudo diff /etc/php/7.4/cli/php.ini /etc/php/7.4/cli/php.ini.bak
    
    # Shift_JISのままだと文字化けする為、UTF-8へ変更
    sudo sed -i 's/Shift_JIS/UTF-8/g' /usr/share/zoneminder/www/lang/ja_jp.php
    
    
    # 当サイト上に格納されている日本語ランゲージセットをダウンロードして差し替えます。
    sudo cp /usr/share/zoneminder/www/lang/ja_jp.php /usr/share/zoneminder/www/lang/ja_jp.php.bak
    cd /tmp
    wget https://zoneminder.senritu.net/wp-content/downloads/ja_jp.php.zip
    unzip ja_jp.php.zip
    sudo mv ja_jp.php /usr/share/zoneminder/www/lang/ja_jp.php
    sudo chown root:root /usr/share/zoneminder/www/lang/ja_jp.php
    
    # Apacheの設定
    sudo a2enmod cgi
    sudo a2enmod rewrite
    sudo a2enconf zoneminder
    sudo systemctl restart apache2.service
    
    # 関係サービスの起動と登録
    sudo systemctl enable zoneminder
    sudo systemctl start zoneminder
    
    # USB WebCamを使う場合があるときのみ実行してください。
    sudo usermod -a -G video www-data
    
    
    
    
    

    zoneminderインストール完了後の初期設定

    zoneminderのインストールが完了した後は、ブラウザでzoneminderサーバにアクセスして設定を行っていきます。

    接続先URLは以下の通りで、【zoneminderインストール先サーバのIP】には、SSH接続した際のサーバのIPアドレスを入れてください。

    http://【zoneminderインストール先サーバのIP】/zm

    画面下の「Accept」を選択して「APPLY」を押下

    上記画面がエンドレスループしてしまう場合は「こちら」を参考に直してください。

    ログイン直後は、以下のようにコンコール画面が表示されます。監視カメラを登録するごとに、そのカメラのサマリ情報が表示されるようになりますが、まだインストール直後で未登録の為、以下のようにこざっぱりした画面となっています。

    「Options」を選ぶと、「Systems」の中が表示されます。その中にあるLANG_DEFAULTを「ja_jp」にします。

    上記の設定までを実施したことで、下記画面のように、メニュー回りが日本語化されます。しかし、設定項目の説明等がまだ英語のままなので、そちらも日本語化することにします。

    設定項目の説明を日本語化する

    こちらで紹介している日本語化用のSQLを実行することで、設定項目が日本語化できます。

    cd /tmp
    wget https://zoneminder.senritu.net/wp-content/downloads/update_db_to_japanease.sql.zip
    unzip update_db_to_japanease.sql.zip
    sudo mysql zm < update_db_to_japanease.sql

    ログイン認証の有効化

    オプション⇒システムから、以下赤枠を設定して、一番右下の保存を押下します。

    OPT_USE_AUTHログイン認証の有効化
    AUTH_TYPEzoneminderのビルトインを使うか、リモート認証を使うか選択できます。builtinを選択します。
    AUTH_RELAYhashedを選択します
    AUTH_HASH_SECRET認証を強固にするために文字列を指定します。
    AUTH_HASH_IPS認証元のIPが固定の場合は有効にしても問題ありませんが、VPN経由でアクセスする要件やDHCPを使っている環境では無効にしてください。
    AUTH_HASH_LOGINS有効にします

    ログイン設定を有効にすると、ログイン画面になります。初期ユーザー名と初期パスワードは「admin/admin」です。

    ログイン後、adminユーザーのパスワードを変更します。

    オプション⇒利用者⇒adminを押下

    新しいパスワードと、言語を「ja_jp」にして保存します。

    コンソール画面の機能説明

    zoneminderのコンソール画面の主な機能説明は以下の通りです。

    No項目説明
    コンソールカメラの概要やイベント情報等、サマリ的な画面となります。
    オプションzoneminderの設定画面
    ログログ一覧画面
    グループ
    フィルター特定の条件が満たされたときにアクションを実行するメカニズムを指定可能。例えば、特定のイベントが発生した際にメール送信する等はここで指定できます。
    サイクル表示構成された各モニターのライブビューをサイクル表示します。
    大型店舗でお客様向けに防犯カメラ映像を見せる用途等に使われることのある機能です。
    カメラ映像リアルタイムのカメラ映像を確認できます。
    録画映像録画した映像を表示します。過去のある時点を確認する際などに利用します。
    監査イベントレポートパワーユーザー向け機能。イベントのギャップの記録とmp4ファイルの記録に関する問題を探すのに利用できます。
    ログインユーザー現在ログインしているユーザー
    機能カメラ映像を記録する方法を定義する。詳細は下表「カメラ映像を記録する方法」参照。
    ソースカメラのタイプ(IPカメラ、USBカメラ)を示す。緑色は問題なし。赤色はカメラに問題がある事を示します。
    イベント情報zoneminderの主機能の一つです。イベントの記録結果を、時間、日、週、月に記録された数を表示します。
    ゾーンカメラのイベント検知エリアを指定できます。デフォルトだとカメラ全体を検知エリアとしています。
    しかし、カメラの中に常時動きのある物体があった場合、常に検知イベントがあがってしまいます。そのような状態を回避するために、検知対象のエリア(ゾーン)を設定可能です。設定時はゾーン列の下の数字のリンクをクリックします。
    Function意味
    Noneモニターは現在無効になっています。ストリームを表示したり、イベントを生成したりすることはできません。何も記録されません。
    Monitorモニターはライブストリーミングでのみ使用できます。画像分析は行われないため、アラームやイベントは生成されず、何も記録されません。
    ModectMOtion DEteCTtionの略。キャプチャされたすべての画像が分析され、モーションが検出された録画ビデオでイベントが生成されます。
    Recordモニターは継続的に記録されます。固定長のイベントは、従来のタイムラプスビデオレコーダーと同様に、モーションに関係なく生成されます。このモードでは、動きの検出は行われません。
    Mocordモニターは継続的に記録され、それらのイベント内でモーションが強調表示されます。
    NodecNo DEteCTtioの略。外部トリガーで使用するように設計された特別なモードです。 Nodectではモーション検出は行われませんが、外部トリガーで必要な場合はイベントが記録されます。
    カメラ映像を記録する方法

    設定完了後にすること

    ZoneMinderリポジトリのコメントアウト

    /etc/apt/sources.list.orgに追加したリポジトリは、頻繁に更新が行われています。それ自体は非常にありがたいのですが、日本語化した場所が都度、元に戻ってしまい、DBの更新も手動で行わないとエラーでZoneMinderが起動しないこともあります。
    ですので、以下行をコメントアウトしてください。
    
    sudo vi /etc/apt/sources.list.org
    #deb https://zmrepo.zoneminder.com/debian/master focal/ <<コメントアウト

    最初のころ、上記を気にせず運用しており、ZoneMinderが起動しなくなったり、文字化けするたびに修正しておりました。お勧めは、メジャーバージョンアップ時にのみコメントアウトを戻してアップグレードする運用です。

    上記まででzoneminderのインストールから初期設定が完了しました。しかし、まだカメラを登録していないので、カメラ画像が一切映っておらずつまらないと思います。

    ですので、次にカメラを登録してください。