先日 ZoneMinder が動作している fedora(36 がでているがあえて 35 のまま)で dnf update をしたところ,Web 管理画面が接続できなくなりました.動画データは収集できているようです.おそらく,ZoneMinder と php の組合せが悪いのでしょう.この際 OS を動作実績の多い ubuntu 22.04 Server に変更してみます.
基本方針
次の方針で OS を変更作業を行います.
- OS は ubuntu 22.04 Server とする
- 標準リポジトリのみ使用する
- 同一 VM を利用する
- 旧 OS ディスクを削除し,新 OS ディスクを作成する(移行期間中は zm は停止)
- ZoneMinder の設定およびデータベースはバックアップしておき,再利用できるものは極力利用する
- OS 領域から分離した画像格納領域(詳細はこちら)はそのまま利用する.(中のデータは利用しない)
この後は,作業の進捗にあわせて記載していきます.
バックアップ
移行作業の前にバックアップを取得します.
ZoneMinder データベースのバックアップ
ZoneMinder のデータベースのバックアップを行います.ZoneMinder が動作しているサーバにログインしてスーパーユーザ権限で実行します.mysql データベースのバックアップを以下のコマンドで行います.
% sudo su -
# mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} $database | bzip2 > $filename
上記の変数($ つきの文字列)はそれぞれ zm で設定したデータベースの利用者・そのパスワード・データベース名・バックアップファイル名です.このサーバはなくなりますので,私の場合バックアップ先のファイルを NFS 上に作成しました.ローカルディスクに作成した場合は,scp などで他のサーバに退避しておきます.
ZoneMinder 設定のバックアップ
つづいて zm の定義ファイルのバックアップです.私は tar コマンドを利用しました.$filename はバックアップファイル名です.
# cd /etc
# tar cf $filename zm
データベースの時と同様にバックアップ先のファイルを NFS 上に作成しました.ローカルディスクに作成した場合は,scp などで他のサーバに退避しておきます.
Proxmox VE での操作
OS のシャットダウン
PVE で操作する前に OS をシャットダウンします.
% sudo shutdown -h now
VM のリソース変更
以下の画面は OS シャットダウン直後の VM のリソースの状態です.以下の赤枠で囲ったものが OS 用のディスクです.

ディスクの削除
削除するディスクを選択すると画面上部のメニューが変わります.

「Detach」を選択します.

本当に「Detach」していいかどうか聞いてきますので「Yes」をクリックします.

以下の画面のように「Unused Disk 0」として表示されます.

つづいて「Unused Disk 0」を選択し,画面上部の「Remove」をクリックします.

本当に「Remove」していいかどうか聞いてきますので「Yes」をクリックします.

未使用ディスク「Unused Disk 0」が削除されます.

ディスクの追加
新 OS 用にディスクの追加を行います.追加する VM を選択し,「Hardware」→「Add」→「Hard Disk」を選択します.

以下の画面が表示されますので,必要な情報を入力し「Add」をクリックします.

以下のように新規ディスクが追加されます.

インストールメディアの設定
あらかじめ ubuntu サーバのインストール用 ISO をダウンロードし PVE の /var/lib/vz/template/iso に格納しておきます.つづいて VM の CD-ROM にこの ISO イメージを割り当てます.

以下の画面が表示されますので,ISO イメージがある場所を指定して「OK」をクリックします.

以下のように CD-ROM に ISO イメージが割り当てられます.

これで OS インストールの準備が整いました.
OS のインストール
VM を選択し画面上部のコンソールをクリックします.

以下の画面が表示されますので,「Start Now」をクリックします.

つづいて CD-ROM に接続された ISO イメージからのブートが成功すると以下の画面になります.

すると,ubuntu インストーラーが起動しますのでつづけて作業を実施します.

ubuntu サーバーのインストールについては割愛します.
OS インストール後の PVE の設定
起動デバイスの設定
OS インストールが終了後いったん VM を停止します.つづいて,VM を選択し「Options」→「Boot Order」→「Edit」をクリックします.

すると Boot Order の編集画面が表示されますので,以下のように ubuntu をインストールしたデバイスを一番上に移動し,ide2(CD-ROM) のチェックをはずし「OK」をクリックします.

以下のように Boot Order が scsi0 のみになれば設定完了です.

CD-ROM デバイスの設定(ISO イメージの Detach)
CD-ROM デバイスから ubuntu の ISO イメージをでタッチしておきます.「Hardware」→「CD-DVD Drive(ide2)」→「Edit」をクリックします.

「Do not use any media」を選択して「OK」をクリックします.

以下のようになれば OK です.

OS の起動
上記の設定が完了したら画面上部の「Start」をクリックして OS を起動してください.
OS の各種設定
ubuntu の各種設定を行っていきます.fedora 系のコマンドとはかなり違います.
時刻同期設定
NTP も chrony もどちらも使用可能です.fedora にあわせて chrony をインストールします.
% sudo apt -y install chrony
定義ファイルは /etc/chrony/chrony.conf です.pool と allow を設定しました.以下のコマンドを実行すると時刻同期が始まります.
% sudo systemctl restart chrony
確認は以下のコマンドを実行します.
% chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp-b2.nict.go.jp 1 6 377 46 +5875us[+8260us] +/- 48ms
^+ ntp-k1.nict.jp 1 6 377 45 -21ms[ -21ms] +/- 18ms
^+ ntp-a3.nict.go.jp 1 6 367 44 -8261us[-8261us] +/- 34ms
^+ ntp-b3.nict.go.jp 1 6 377 45 -13ms[ -13ms] +/- 29ms
timezone の設定
システムの timezone 設定を以下のコマンドで行います.
% sudo timedatectl set-timezone Asia/Tokyo
確認します.
% timedatectl
Local time: Fri 2022-07-01 23:32:52 JST
Universal time: Fri 2022-07-01 14:32:52 UTC
RTC time: Fri 2022-07-01 14:32:52
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
パッケージの最新化
パッケージの最新化を行います.
% sudo apt update
% sudo apt list --upgradeable
% sudo apt upgrade
パッケージの最新化が完了したら OS を再起動します.
画像格納ディスクについて
画像格納ディスク上の LVM の情報は OS インストール時に自動的に認識されます.また,前 OS で作成したファイルシステム(xfs)もそのまま認識されます.
データベース(MariaDB)のインストール
標準リポジトリで ZoneMinder をインストールするとデータベースとして mysql が依存関係でインストールされます.MariaDB をインストールしたい人は先にインストールしておきましょう.
% sudo sudo apt -y install mariadb-server
/etc/mysql/mariadb.conf.d/50-server.cnf の character-set-server と collation-server がそれぞれutf8mb4,utf8mb4_general_ci になっていることを確認します.
% sudo sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
また,/etc/mysql/mariadb.conf.d/50-client.cnf の[client]セクションに default-caracter-set を設定します.
% sudo sudo vi /etc/mysql/mariadb.conf.d/50-client.cnf
[client]
default-character-set = utf8mb4
修正があった場合は MariaDB を再スタートします.
% sudo sudo systemctl restart mariadb
つづいて MariaDB の初期設定を行います.
% sudo sudo mysql_secure_installation
数個の質問がありますので適宜回答します.参考までに当サイトでは root のパスワードを入力するところ以外はすべてリターンで回答しました.
ZoneMinder のインストール
ZoneMinder をインストールします.
ZoneMinder のインストール
以下のコマンドを実行します.
% sudo apt -y install 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
データベースアカウントやパスワードは適宜設定してください.アカウントとパスワードを変更した場合は,/etc/zm/zm.conf の ZM_DB_USER および ZM_DB_PASS に値を設定します.
ZM_DB_USER=zmuser
ZM_DB_PASS=zmpass
つづいて /etc/zm/zm.conf のグループを apache のグループに変更します.
% sudo chgrp www-data /etc/zm/zm.conf
ZoneMinder の有効化
以下のコマンドを実行し ZoneMinder サービスの有効化を行います.
% sudo systemctl enable zoneminder.service
Web サーバの有効化
Apache2 のサンプル定義体を利用します.
% sudo a2enconf zoneminder
つづいて以下のコマンドを実行します.
% sudo a2enmod cgi
% sudo service apache2 reload
timezone の設定
システムの timezone と php の timezone 設定を合わせます.システムの timezone は timedatectl set-timezone コマンドを利用するか,以下のコマンドで対話型で変更できます.OS インストール後設定を行っている場合は変更不要です.
% sudo dpkg-reconfigure tzdata
php の timezone の変更は /etc/php/${php-version}/{apache2,fpm}/php.ini のいずれかに設定します.設定内容は以下のとおりです.
[Date]
date.timezone = "Asia/Tokyo"
MariaDB も timezone 設定がありますが通常システムの timezone を利用しますので ZoneMinder と同一サーバで動作するのであれば設定不要です.
データ格納ディスクの設定
今回利用している ZoneMinder の画像格納領域は,/var/cache/zoneminder/events となっていました.その上の階層にもいくつかのファイルがありますのでこれらも移行します.まず apache2 と ZoneMinder を停止します.
sudo systemctl stop zoneminder
sudo systemctl stop apache2
画像格納ディスクのマウントを行います.この作業ではマウントポイントは仮のものでいいです.その前に旧データが存在していますので不要であればファイルシステムを再作成しておくとよいでしょう. rm コマンドで旧データを削除したところかなり時間がかかりました.
sudo mount /dev/mapper/vg_zm-data01 /mnt
/var/cache/zoneminder にあるファイルを画像格納ディスクにコピーします.この作業はスーパーユーザになって作業します.
% sudo su -
# cd /var/cache/zoneminder
# tar xf - . | (cd /mnt ; tar xf -)
正規のマウントポイントを再作成します.
# cd /var/cache
# mv zoneminder zoneminder.old
# mkdir zoneminder
# chown www-data zoneminder
# chgrp www-data zoneminder
つづいて /etc/fstab に以下の行を追加します.
/dev/mapper/vg_zm-data01 /var/cache/zoneminder xfs defaults 0 1
仮マウントポイントをアンマウントした後,mount /var/cache/zoneminder コマンドを実行します.
# umount /mnt
# mount /var/cache/zoneminder
df コマンドや mount コマンドでマウントできていることを確認した後,以下のコマンドを実行します.このとき旧データが残っているとこのコマンド実行にかなりの時間がかかります.
# cd /var/cache
# chown -R www-data zoneminder
# chgrp -R www-data zoneminder
ここで一旦 OS を再起動します.再度ログインして上記の設定が反映されていることと apahce2 や ZoneMinder が起動していることを確認します.
apache2 の https 化
サーバ証明書の用意
let’s encrypt のサーバ証明書を利用します.
ssl 用定義体の設定
/etc/apache2/sites-available/default-ssl.conf を編集します.ServerAdmin とサーバ証明書関連の設定を行います.
ServerAdmin webmaster@example.com
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
mod_ssl の有効化
以下のコマンドで有効化します.
% sudo a2ensite default-ssl
% sudo a2enmod ssl
リダイレクト設定
HTTP 通信を HTTPS へリダイレクトする設定を行います./etc/apache2/sites-available/000-default.conf の <VirtualHost *:80> に以下の設定を行います.
# HTTP -> HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
mod_rewrite の有効化と web サーバの再起動を行います.
% sudo a2enmod rewrite
% sudo systemctl restart apache2
これで https 化は完了です.
ZoneMinder の設定
管理画面への接続
HTTPS 化ができていない場合は,ブラウザで http://192.0.2.235/zm/ へアクセスします.192.0.2.235 は当サイトの内部 ZoneMinder サーバのアドレスです.適宜変更してアクセスしてください.https でアクセスする場合は,サーバ証明書のホスト名あるいはドメイン名を指定します.


画面の下の「Decline」を「Accept」に変更し「APPLY」をクリックします.すると以下の画面になります.

カメラの追加
カメラを追加するために「Console」画面の「ADD」をクリックします.

以下の画面になりますので,「Name」にカメラの名前を入力して,画面右上の「ONVIF 探索アイコン」をクリックします.※カメラの名前の入力をここで行わなくてもかまいません.

次の画面になりますので,「Detected Cameras」のプルダウンから目的のカメラのものを選択します.次の例は,3 台のネットワークカメラを検出した中から選択している例です.選択し終えたら「Next」をクリックします.

すると選択したカメラのプロファイルを選ぶ画面になります.

「Detected Profiles」をクリックするとプルダウンメニューが現れますので,SecondStremeProffile の Unicast のものを選択します.つづいて「SAVE」をクリックします.

次の画面で「Name」にカメラ名を入力します.また,「Function」を Mocord にします.

なお,上記の設定は後で変更することも可能です.最後に「SAVE」をクリックします.以下は 3 台のカメラを設定した画面です.

ひととおりの確認が終わったら,/var/cache/zoneminder.old を削除してください.
これで,ubuntu 22.04 Server への ZoneMinder のインストールと初期設定は完了です.
コメント