気の向くままに辿るIT/ICT/IoT
ハードウェア

Raspberry Pi OS/Debian bullseyeにZoneMinderをインストール

ホーム前へ次へ
Raspberry Piって?

Raspberry Pi OS/Debian bullseyeにZoneMinderをインストール

Raspberry Pi OS/Debian bullseyeにZoneMinderをインストール

2022/02/17

 以前、BusterにZoneMinderをインストールした時と打って変わってbullseyeからDebianリポジトリに入ったことでインストールと設定が超簡単になった!...はずが、DB設定が抜け落ちているというオチで、ひと手間増えた話。

 その内、Debianの中の人が直して(追加設定して)くれるとは思いますが。

経緯

 Chromecast対応Miracast非対応AndroidスマホでAnyCastできたのですが、え?もしや、できないの...かも?と思い、届く前に代替策含め、いろいろ試す中でHDMIケーブル接続のRaspberry Pi 2BとTVで動画視聴したりしてサーバのラズパイ2BサブパソコンRaspberry Pi 3 B+のラズパイを入れ替えてみたり、Raspberry Pi 400を買ってサブパソコン(いや?メイン)の座をRaspberry Pi 400に譲ってみたりしていました。

 そんな中、2Bの予備でもよかったのですが、ラズパイ3B+が余り、超高速・爆速で使わずにいられないRaspberry Pi Imagerなどで何度もイメージを焼き直したりした関係でZoneminderもなくなり、Busterからbullseyeにアップグレードしてだいぶ経って改めてZoneminderをインストールすることになった次第。

 そこで以前も参照したEasy Way: Debianを見るとEasy Way: Debian bullseyeがあることに気づいてみるとリポジトリに追加されたらしく、インストールと設定の手順が減ってがシンプルになってるじゃないですか!

 大喜びしてやってみると...、アクセスできないじゃん...どこがコングラチュレーション(祝・おめでとう!)だよ...。

 ということで調べたら、原因が判明し、無事、使用できるまでに漕ぎ着たのでページを改め、アップ。

bullseyeにZoneMinderをインストールできたのにできない!?

USERNAME@raspberrypi:~ $ sudo apt update && apt upgrade -y
USERNAME@raspberrypi:~ $ sudo apt install -y mariadb-server zoneminder
USERNAME@raspberrypi:~ $ sudo chgrp -c www-data /etc/zm/zm.conf
USERNAME@raspberrypi:~ $ (sudo mysql_secure_installation) # <= 必要に応じて
USERNAME@raspberrypi:~ $

 少なくともラズパイImagerで事前設定もしつつ、64bitカーネルを入れたら、sudoは入っており、ログインユーザーでも使える状態だったので書いていませんが、そうでない場合は、sudoが使えるように要設定。

 たったこれだけ!(後述の原因を正せば、ほんとにこれだけで済むはずなんですが。)

 と思ったら、同一ネットワーク上のクライアントとなるブラウザからx.local/zmとしてもIPアドレス/zmとしてもアクセスできない...。

 systemctl status zoneminderしてみたら、Activeになってない...。

 systemctl start zoneminderしてみたら、[errstr:Access denied for user 'zmuser'@'localhost']エラーで開始できない...。

原因調査と解決策

 結論から言うと冒頭述べた通り、MariaDB(MySQL)周りの設定が抜け落ちていたことが原因でした。

 bullseyeについては、修正が入るまでは、DebianでもRaspbianでも、ここでの対処が必要となります。

 で、これって/etc/zm/zm.confのユーザー名やパスワードでデフォルトのzmデータベースにアクセスできてないってことだよね...。

 というわけでデータベースの存在を確認してみると、そもそもzmというDBがない...!(あるのはmysqlというDBだけ。)

 パスワード設定が漏れているのかとrootでzmuserにzmpassを設定しようとしたら、できない...!

 そりゃそうだ、そもそもzmuserなんていない...!

 そりゃ、systemdサービスファイルも落ちるわけだ...。

 っていうか、追加しようにもzm DBに含まれるテーブル類も構造もさっぱりわからん...どないせーちゅーねん!

USERNAME@raspberrypi:~ $ mysql -u root -p
mysql >  source /usr/share/zoneminder/db/zm_create.sql;
...
MariaDB >  grant all on zm.* to 'zmuser'@localhost identified by 'zmpass';
MariaDB >  show databases;
...
MariaDB >  use zm;
...
MariaDB [zm]>  show tables;
...
MariaDB >  exit or quit or [Ctrl]+[d]
USERNAME@raspberrypi:~ $

 と思いつつ、気を取り直して検索、MySQL by zoneminderに行き着き、万事解決。

 zoneminderをインストールした時点で存在するはずのzmデータベース作成用SQLファイル/usr/share/zoneminder/db/zm_create.sqlを実行、zmuser/zmpass(/etc/zm/zm.confでデフォルトのユーザー/パスワード)に対して全ての権限を与えてあげればOK。

 SQLファイルの読ませ方は、sh/bashと同様の方法ほか、いくつかあるようでしたが、自身は、MariaDB/MySQLにログインしてから、sourceコマンドを使いました。

 そこでSQLファイルを読みこませてみるとプロンプトが[MariaDB]に。

 最初から、mysql -u rootじゃなくてmariadb -u rootにすれば、最初からプロンプトは[MariaDB]でしたね。

 MySQLでもMariaDBでもrootの初期パスワードはカラとのことなので-pは添えずに、mysql -u root/mariadb -u root([2022/02/22] 前回これでいけた気がしたのですが、気のせいだったのか2度めは、mysql -u root -p/mariadb -u root -pでPasswordは未入力+Enterでログインし、先のコマンドを実行します。

 rootパスワードがカラというのはなんなのでMySQL/MariaDB内で[set password for root@localhost='new_password';]か、または、[ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';]を実行するか、shellから[sudo mariadb-secure-installation]を実行して設定しておくのがよいでしょう。

USERNAME@raspberrypi:~ $ sudo systemctl start zoneminder
USERNAME@raspberrypi:~ $
or
USERNAME@raspberrypi:~ $ sudo systemctl restart zoneminder
USERNAME@raspberrypi:~ $

 そこでsystemdサービスファイルを開始してみると今度は、エラーなく、プロンプトが返ってくるはずです。

USERNAME@raspberrypi:~ $ sudo systemctl enable zoneminder

 うまくいったのでシステム起動時にzoneminderも起動するようにしておきます。

Raspberry_Pi OS bullseye上のZoneMinderの初期画面

 こうなったらしめたもの、zoneminderをインストールしたデバイス(今回はラズパイ)上のブラウザでlocalhost/zmや127.0.0.1/zm、同一ネットワーク内のデバイスからx.local/zm、対象デバイスのIPアドレス/zmとします。

 初回は、Privacy画面が表示され、「... イメージデータは収集しないし、売ったりとか悪用はしないけど製品向上の為にデータ送ってもよい?」的なことを含め、内容確認の上、[DECLINE](辞退)か[ACCEPT](許諾)を選択し、[APPLY](適用)をクリック。

 すると、どちらを選んでも利用可能となり、初期画面に遷移します。

 右上を見るとバージョンは、1.36.xじゃなく、v1.34.23になってますね。

 もちろん、愛用ブラウザは、Firefox。

 ただ、ZoneMinderにカメラを登録・映像表示するにあたり、更に追加設定が必要です。

2022/02/22 15〜16時時点 新たな不具合発生中!

 中の人も慌てて試行錯誤しているのか、現時点では、mariadb -u root/mariadb -u root -p/mysql -u root/mysql -u root -pにおいてsudoをつけないと(もしくはsuしてからでないと)ログインできない状況になっています。

 sudoをつけずに実行すると前者は、コマンド実行直後に、後者は、Passwordプロンプトが出て(初期パスワードはカラとのことなので)カラでEnterした時に[ERROR 1698 (28000): Access denied for user 'root'@'localhost']のようなエラーが。

 これによるかと思いますが、systemctl reload apache2やsystemctl restart apache2をした後であっても、systemctl start zoneminderで起動に成功してもブラウザでアクセスエラー、sudo a2enconf zoneminder、sudo a2enmod rewrite後にapache2、zoneminderを再起動するとブラウザからアクセスしても画面が真っ白になります。

 使えなかったUSBメモリを別で使っていたSSDに交換、改めてZoneMinderをインストールしていて遭遇。

Apacheのインストール成功かなんらかのメンテナンス中に表示されるというページ

 真っ白なのですが、/var/www/htmlには、このindex.htmlファイルがあり、ローカルに落として見てみると、apacheのインストールに成功したか、何らかのメンテナンス中に表示されることがあると書いてあります。

 実際のところ、zoneminderのインストールに伴いapacheもインストールされているので単にその成功により表示されるもので、その後のindex.htmlの差し替えがなされていないのか、実は、そこにこのファイルがあったとしてもphpで差し替えられるものなのか、メンテナンス中なのかについては、わかりませんが...。

USERNAME@raspberrypi:~ $ sudo apt update && apt upgrade -y
USERNAME@raspberrypi:~ $ sudo apt install -y mariadb-server zoneminder
USERNAME@raspberrypi:~ $ sudo chgrp -c www-data /etc/zm/zm.conf
USERNAME@raspberrypi:~ $ sudo mariadb -u root -p
MariaDB >  source /usr/share/zoneminder/db/zm_create.sql;
MariaDB >  grant all on zm.* to 'zmuser'@localhost identified by 'zmpass';
MariaDB >  show databases;
MariaDB >  use zm;
MariaDB [zm]>  show tables;
MariaDB >  exit or quit or [Ctrl]+[d]
USERNAME@raspberrypi:~ $ sudo systemctl start zoneminder
USERNAME@raspberrypi:~ $ sudo systemctl status zoneminder
USERNAME@raspberrypi:~ $

 改めてアンインストールし、まっさらにしてやり直してみると...。

 やはり、DBアクセス時にsudoが必要で...

 systemctl start zoneminderに成功直後、他端末のブラウザでx.local/zmを見るとエラーもなく、ただただ、真っ白...。

USERNAME@raspberrypi:~ $ sudo usermod -a -G video www-data
USERNAME@raspberrypi:~ $ sudo a2enconf zoneminder
USERNAME@raspberrypi:~ $ sudo a2enmod rewrite
USERNAME@raspberrypi:~ $ sudo a2enmod cgi
USERNAME@raspberrypi:~ $ sudo systemctl reload apache2
USERNAME@raspberrypi:~ $ sudo systemctl start zoneminder
USERNAME@raspberrypi:~ $ sudo systemctl status zoneminder
USERNAME@raspberrypi:~ $

 Busterの時には必要だった、これらの手順を踏んでみても...ブラウザでアクセスすると一面、真っ白...。

 念の為、ブラウザを全て終了して改めて起動しても同じ...。

 尚、ブラウザを閉じた時にキャッシュ全消去に設定してあります。

USERNAME@raspberrypi:~ $ sudo mysql_secure_installation
USERNAME@raspberrypi:~ $

 ちなみにmysql_secure_installationしてみると以前は、設定したパスワードでログインできたmysql|MariaDBも、設定したパスワードでも、カラでもログインできなくなっています...。

 となると、今、これやってしまうと、mariadb-server再インストールでもしないとログインできない...ですよね?

 ぬー、相性なのか、GUIはグダグダではあったけどbullseyeにzoneminderをインストール・運用できていたUSBメモリからSSDにクローンするか...、直るまで待つか...。

 とりあえず、まっさらにしとくべく...、apt purge、purge後に表示されるsudo mysqladmin --defaults-file=/etc/mysql/debian.cnf -f drop zmを実行、/var/cache/zoneminderも削除、apt autoremove...。

[2022/03/23]
USERNAME@raspberrypi:~ $ sudo usermod -a -G video www-data
USERNAME@raspberrypi:~ $ sudo systemctl enable zoneminder.service
USERNAME@raspberrypi:~ $ sudo a2enconf zoneminder
USERNAME@raspberrypi:~ $ sudo a2enmod rewrite
USERNAME@raspberrypi:~ $ sudo a2enmod cgi
USERNAME@raspberrypi:~ $ sudo vi /etc/php/7.*/apache2/php.ini
...
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Tokyo
...
:wq
USERNAME@raspberrypi:~ $ sudo systemctl reload apache2
USERNAME@raspberrypi:~ $ sudo systemctl start zoneminder
USERNAME@raspberrypi:~ $

 少なくとも今日の朝時点、bullseyeにZoneMinderをインストール、管理画面を表示、Webカメラを登録、機能させることができるようになりました。

 相変わらず、データベースzmがないので前述のようにmariadbにログインして作成。

 その際、先立ってmysql_secure_installationでrootパスワードを設定してもmariadb -u root -pにsudoは必要。

 しかもmysql_secure_installationでrootパスワードを設定してあってもsudo mariadb -u root -pログイン時には、カラのパスワードでもいけてしまう...。

 前回はそれでもダメだったものの、今日は、Busterで必要だった、これらの設定、再起動することで無事、zoneminderが機能するようになりました。

 ちなみに管理画面の項目(zoneminderの機能)が増えている気がします。

 が、どうもZoneMinderを起動しておくと短時間でラズパイが落ちるので、まだ、使えない...と思いきや、これは、ZoneMinderに起因するものではなさそう...。

USERNAME@raspberrypi:~ $ sudo systemctl enable zoneminder.service
USERNAME@raspberrypi:~ $

 というわけで、まだ、やっていなければ、次回以降、ラズパイ起動時にzoneminderも自動起動するようにsudo systemctl enable zoneminder。

 なお、今回は、当初書いた後述のGPU割り当ては増やした方が余裕が生まれるので良いとは思うものの、64のまま、/dev/video0へのchmodもしなくともいけました。

USERNAME@raspberrypi:~ $ sudo systemctl stop zoneminder.service
USERNAME@raspberrypi:~ $ sudo systemctl disable zoneminder.service
USERNAME@raspberrypi:~ $

 と思いましたが、やはり、ZoneMinderを起動しておくと短時間でラズパイが落ちる模様なのでZoneMinderを停止。

[2022/07/13]
USERNAME@raspberrypi:~ $ sudo systemctl start zoneminder.service
USERNAME@raspberrypi:~ $

 そろそろ解消してるかな...と、久々にZoneMinderを起動...。

 当初のUSBカメラに続き、IP|ネットワークカメラとして技適取得済みOV2640カメラ付きESP32-WROVER-DEVをとりあえず2つ登録、[General]で[Ffmpeg]、[Source]で[Source Path]に[IP_ADDRESS_OR_mDNS:81/stream]してみたら、いけました。

 安定してる!ラズパイも落ちない!

USERNAME@raspberrypi:~ $ sudo systemctl enable zoneminder.service
USERNAME@raspberrypi:~ $

 というわけで、自動起動するようにsudo systemctl enable zoneminder。

 当初、zonminderの起動に失敗するなーと思ったら、apache2がコケてて[make_sock: could not bind to address 0.0.0.0:80]なんてエラーが、何かと思って[sudo netstat -lnp | grep '0.0.0.0:80']したら、なぜかnginxが起動してた...からnginxをsystemctl stop/disable...したら、apache2もzoneminderも無事起動しましたとさ。

 めでたし、めでたし。

 と思ったら、1時間くらい?したら、ラズパイ落ちた...。

 もしかして3B+には過酷過ぎるのか...?

 今、ラズパイ超品薄だし、気が向いたら400で試してみようかな...。

ZoneMinderにカメラを登録・映像表示

 これからやるのでなんですが、カメラの登録や映像の表示については、Raspberry PiでZoneMinderインストールとカメラ映像表示と同様なはずです。

Raspberry_Pi OS bullseye上のZoneMinderでストリーミング

 というわけでUSBカメラを登録してみようと思ったら、これまた、ちょっとハマりました。

 結果、映像表示できるまでにやった必要だったかな?と思うことベスト3を発表!?

  1. sudo raspi-configでGPU割り当てが64だったので256に、念の為、/boot/config.txtにもgpu=256を追記、それぞれラズパイを再起動(後者を先にやれば一度で済むけど)
  2. sudo usermod -aG www-data video後ログアウト・再ログインもした一方、確認が前後したのか、ZoneMinder画面上部のメニュー[log]をクリックしてみると/dev/video0などにアクセスできていなかった為、半ば強引にsudo chmod a+rw /dev/video0
    (細かいこと言えば、uはrwあったからgo+rw)
  3. sudo systemctl restart zoneminder

 2=>1の順なら再起動すれば、3は不要ですかね。

 できたからいいかなとも思いつつ、これって最初の2つは何れも対処が重複してると思うし、気が向いたら、実際、どれとどれが必要なのか精査してみようかと。

ホーム前へ次へ