2017年11月3日金曜日

FON2405Eのフラッシュメモリを交換→成功→LEDE・Openwrt導入

約1年ほど前にFON2405Eのフラッシュメモリを交換して失敗した。
http://continue-to-challenge.blogspot.jp/2016/11/fon2405e_28.html
またまた魔が差して、 他の基板からMX25L6405D (8192 Kbytes)を引っぺがして交換してみた。
もともと乗っていたのがMX25L8006Eだから上位品?。
すんなりU-Bootでのファーム書き換えはできた。

せっかくなので、OpenwrtからスピンオフしたというLEDEを導入してみることにした。


手順0 フラッシュ交換メモ

忘れそうなので・・・。
0.u-boot他を旧フラッシュからバックアップ
cat /dev/mtdblock0 > /tmp/mtdblock0.img  <Uboot>
cat /dev/mtdblock1 > /tmp/mtdblock1.img  <Config>
cat /dev/mtdblock2 > /tmp/mtdblock2.img  <RF>
3と4はu-bootから書き込むからここではバックアップしない
 mtdblock0-2.imgはPCに退避させておく

1.u-bootの起動メニューで「2」入力しコンソール?に入る
2.通電状態でフラッシュ交換する(ハイリスク!)
3.ファーム書き換えを実行
  KernelとRootFSが書き換えられ、その後linuxのブートに入る
4.新フラッシュにu-boot他を書き込む
cp /tmp/mtdblock0.img /dev/mtdblock0
cp /tmp/mtdblock1.img /dev/mtdblock1
cp /tmp/mtdblock2.img /dev/mtdblock2
今思えばu-bootさえ書き込めれば、あとはLEDE書き込むから
別にやらなくても良かった。

手順1 LEDEのカーネルソース入手

基本的には以下の手順だけど
https://lede-project.org/docs/guide-developer/the-source-code
https://lede-project.org/docs/guide-developer/use-buildsystem

具体的な手順は次のような感じ。簡単だね。
git clone https://git.lede-project.org/source.git
./scripts/feeds update -a
./scripts/feeds install -a 

手順2 FON2405E用にカスタマイズ・Device Tree Source (dts)を作成

オリジナルのFON2405Eとは違うのでFON2405EKAI(改)とした。
変更点をpatchにしてみた。 
完成するまでは紆余曲折あって大変だったけど。 改めてみると変更点って大したこと無いね。
(実は9月末くらいから悩みながらやっていた)

手順3 カーネルイメージ作成

適宜、設定を行う
make menuconfig
make kernel_menuconfig
そして
make -j4 V=99

lede-ramips-rt305x-fon2405ekai-initramfs-kernel.bin
lede-ramips-rt305x-fon2405ekai-squashfs-sysupgrade.bin
が作成される

手順4 ファームアップ

まずは、u-bootからファームアップを行う
 lede-ramips-rt305x-fon2405ekai-initramfs-kernel.bin
を使う。
これで起動すると・・・。
[    4.689131] m25p80 spi0.0: mx25l6405d (8192 Kbytes)
[    4.699191] 3 ofpart partitions found on MTD device spi0.0
[    4.710330] Creating 3 MTD partitions on "spi0.0":
[    4.720086] 0x000000000000-0x000000010000 : "u-boot"
[    4.733996] 0x000000010000-0x000000020000 : "devconf"
[    4.749129] 0x000000020000-0x0000007d0000 : "firmware"
と、rootfsがない状態になる。
設定変更しても反映されない悲しい状態。
どうやらsysupgradeにて再度ファームアップが必要みたい(たぶん)。
sysupgrade -v /tmp/lede-ramips-rt305x-fon2405ekai-squashfs-sysupgrade.bin
このあと起動すると
[    0.614392] m25p80 spi0.0: mx25l6405d (8192 Kbytes)
[    0.624447] 3 ofpart partitions found on MTD device spi0.0
[    0.635587] Creating 3 MTD partitions on "spi0.0":
[    0.645343] 0x000000000000-0x000000010000 : "u-boot"
[    0.659229] 0x000000010000-0x000000020000 : "devconf"
[    0.674223] 0x000000020000-0x0000007d0000 : "firmware"
[    1.385424] 2 uimage-fw partitions found on MTD device firmware
[    1.397553] 0x000000020000-0x000000147454 : "kernel"
[    1.411314] 0x000000147454-0x0000007d0000 : "rootfs"
[    1.426108] mtd: device 4 (rootfs) set to be root filesystem
[    1.439008] 1 squashfs-split partitions found on MTD device rootfs
[    1.451676] 0x000000331000-0x0000007d0000 : "rootfs_data"
となった。やったー。
Luciも開けた!

諦めずにやってよかったー。
//SST26VF032bもどうにかしないと
<参考>
https://wiki.openwrt.org/doc/devel/add.new.platform
https://wiki.openwrt.org/doc/devel/add.new.device
https://wiki.openwrt.org/doc/howto/build
https://wiki.openwrt.org/doc/techref/flash.layout
https://lede-project.org/docs/user-guide/extroot_configuration
http://rainbowdevil.jp/?p=1247

http://www.srchack.org/article.php?story=20150829103857687

2017年9月5日火曜日

ZoneMinderの検知画像と動画をSlackに投稿する

ZoneMinderでは動体検出時等にメール通知する機能があるみたい。
それをなんとか使えないかと思ったけど、面倒くさいと思ってしまった。

すごく邪道な方法で検出時の画像と動画をSlackに投稿する方法を考えた。
それは、zmの吐き出すログをイベントトリガーとするもの。

ついでに検出時に音を鳴らすようにした。

1.インストール
  sudo apt-get install ffmpeg

2.ZoneMinderの画像保存先を漁るスクリプト
  /usr/local/bin/Victrola4ZM.sh
  sudo chown syslog Victrola4ZM.sh
  これは、NanoPIの/etc/rsyslog.conf内の"$FileOwner syslog"のため
  /usr/local/Gillie/Post2slack.js
  これはSlackAPIのトークンが含まれるためowner(=syslog)以外参照させないchmod 700
 
3.ZoneMinderのログを漁るスクリプト
  /etc/rsyslog.d/Victrola4ZM.conf
  sudo systemctl restart rsyslog
4.音を鳴らすために
  usermod -aG audio syslog

5.実行結果



2017年8月20日日曜日

NanoPi NEOを監視カメラに(ZoneMinder+nginxで動体検出)

先日入手した「NanoPi NEO」で監視カメラ(動体検出)を構築してみた。

動体検出としてはmotion一番有名だと思っているが、
今回は外部トリガー(例えば、焦電センサーとかSlackからの要求とか)に対応したく
ZoneMinderを使用してみた。

・motion
 導入事例が多い、外部トリガーには対応していない?
・ ZoneMinder (github)
 導入事例がmotionに比べて少ない、設定項目が多く、プログラム自体も巨大?
 外部トリガーが出来るっぽい

ただし、ZoneMinderはwebサーバーにapacheが必要みたい。
なんとなく軽量にしてみたく、nginxを使用するように変更。

1.インストール
  sudo apt-get install zoneminder
  sudo apt-get install nginx-extras fcgiwrap php7.0-fpm
  sudo apt-get install mariadb-server

2.セットアップ
  (1) nginx
   /etc/nginx/sites-available/default の変更
    ・cgi-binとfastcgi_paramsのところ
  アクセス権付与し、再起動
  chown www-data:www-data /etc/zm/zm.conf
  systemctl restart nginx

 (2)mariadb
  ※ユーザー・パスワードは適宜変更、 /etc/zm/zm.confと合わせる
  create user 'zmuser'@'localhost' identified by 'zmpass';
  grant all on zm .* to zmuser;
  create database zm;
  mysql -u zmuser -p zm < /usr/share/zoneminder/db/zm_create.sql

 (3)php
  /etc/php/7.0/fpm/php.ini の変更
  「date.timezone = "Asia/Tokyo"」
  再起動
  /etc/init.d/php7.0-fpm restart

 (4)カメラへのアクセス権付与
  usermod -aG video www-data
  ※要再起動
  
 (5)その他
  /etc/sysctl.confを変更
  kernel.shmall = 268435456
  kernel.shmmax = 268435456
  sysctl -p
  ※本当に必要かわからない。 Orz
  8/30 追記
  ここに設定方法があった。
  使用しているNanoPi NEOは256MBだから半分の128MBにした
  
  kernel.shmall = 32768
  kernel.shmmax = 134217728


   ipcs -l 実行結果は以下の通り

------ Messages Limits --------
max queues system wide = 989
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 131072 = 128MB
max total shared memory (kbytes) = 131072 = 128MB
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767

 (6)webページにアクセス
  http://[NanoPiNeoのIPアドレス]/zoneminder/index.php

  設定 > Paths > PATH_ZMSを変更
  /zoneminder/cgi-bin/nph-zms

3.映像確認
こんな感じ




手順まとめると大したことなかったけど、
もろもろ1週間位かかっているOrz

最後に自動起動するようにしておく
systemctl enable zoneminder
systemctl start zoneminder

あと、ディスク容量が逼迫した場合に古い記録から消す設定
How can I stop ZoneMinder filling up my disk?
http://zoneminder.readthedocs.io/en/latest/faq.html

次は検知時の映像をslackに投稿するぞー!

参考
 ・https://chiralsoftware.com/idea/nginx-ubuntu-and-zoneminder