apticronのタイムアウトを防ぐ

Raspberry Pi 2は毎日apticronでパッケージリポジトリをアップデートしているのだが、結構な頻度でいくつかの反応の遅いリポジトリがタイムアウトしてcronからお怒りのメールが届く。しかも、これが出ちゃうと、このリポジトリにもしかするとアップデートされたパッケージがあるかも知れないと思って、手動でわざわざapt-get updateをやらなければいけないので精神衛生上もよろしくない。

いろいろ調べてみたら、どうも並行アクセスで行うリポジトリキャッシュのアップデートを一個ずつ順にやっていく様に変えることが出来るようだ。

実際には、aptの設定を変える。

/etc/apt/apt.conf.d/75download

Acquire::Queue-Mode “access”;

このファイル自体はRaspbianのデフォルトだと存在しないので、Rootになって作成すればよい。これで、きちんと一個ずつリポジトリからのキャッシュ取得が終わってからでないと次に行かないので同時にアクセスして反応が遅かった奴がタイムアウトする、なんてことはないだろうと期待。でも、反応の遅い奴のおかげでそれ以後が全部タイムアウトになっちゃう、とかだったら本末転倒だな。まあ、とりあえず様子見。

Raspberry Pi 2のファームウェアのバージョンアップ通知

Raspberry Pi 2のファームウェアの更新は過去にも書いた通り、rpi-updateコマンドを使って行うわけだが、rpi-updateコマンド自体は自身のエンジンは実行時にGitHubからダウンロードしてセルフアップデート、ファームウェアそのものもこれまたGitHubからダウンロードして展開という仕組み。したがって、通常のDebianのパッケージアップデートの通知ではファームウェアのアップデートがあったとしてもrpi-update自体はアップデートされないので通知されないということになる。

これは不便だ。やっぱりファームウェアのバージョンアップがあった場合にはなんらかの方法で自分に通知して欲しい。実際、これを書いている時点でもファームウェアの末尾の番号が既に2上がっていたので、慌ててrpi-updateをかけた。Raspbianのカーネルはファームウェアと同梱なので、ファームウェアを適切にアップデートしておかないとカーネルにセキュリティー上の問題がある場合は放置されることになるから、よろしくない。というわけで、自宅で動かしてるRaspberry Pi 2自身がアップデートを知って通知する方法がないのなら、大本のファームウェアのダウンロード元であるGitHubを利用してやろうじゃないか。

というわけで、github.comにアクセスしてサインアップ。GitHubは自分のような非開発者でもFreeのプランで無料でアカウントを作ることが出来る。アカウントを作ったら、GitHub上のRaspberry Piのファームウェアのリポジトリに行く。

https://github.com/raspberrypi/firmware

右上にある目のアイコンのWatchをクリックしてWatch対象にする。アカウントサインアップ時のデフォルトでWatchしたリポジトリの更新はメールで通知される様になっている。

これでファームウェアにアップデートがあった場合にはGitHubから通知がくるので、そのタイミングでrpi-updateをかけることができるはず。まあでも、開発関係のもろもろでも通知が来るとするとちょっとわずらわしいかなあ。

 

監視カメラサーバーの構築

さて、Raspberry Pi 2も常時稼働する様になったことだし、監視カメラサーバーでも構築してみよう。カメラモジュールを買うと高いので激安のLogicool C270を買う。まあ、使い道が無くなっても再利用できるしね。

さて、Logicool C270を適当なところに設置(自分が普段座る場所が画角に入ると自宅にいるだけで検知されるので、自分が映らない方向に設置)して、USBでRaspberry Pi 2に繋ぐ。

lsusb

ちゃんと繋がっていてシステムに認識されていることを確認しよう。次に監視カメラの定番ソフトウェアであるmotionをインストールする。

sudo apt-get install motion

いろいろどっちゃりインストールされる。インストールが済んだら設定ファイルを弄る。今回は単一のカメラしか使わないので、/etc/motion/motion.confを直接弄ればオッケー。複数繋ぐ場合は設定をカメラごとに別ファイルに書くらしい。

daemon off (テスト時はとりあえずoff)

width 1280 (C270だと1280×720で問題なく動く)

height 720

output_pictures off (とりあえず画像ファイルを吐かないように)

ffmpeg_output_movies off (同じく動画ファイルを吐かないように)

target_dir /mnt/storage/motion (吐き出す時は外部のUSBメモリに吐く様にする)

stream_port 8080 (デフォルトは8081だけどちょっと気持ち悪いので)

stream_localhost off (motionが外部向けのストリームサーバーとして動くように)

stream_auth_method 2 (一応、MD5でパスワード認証)

stream_authentication user:pass (認証用のユーザー名とパスワード)

webcontrol_port 0 (このポートに接続すると設定をウェブベースで弄れるんだけどいらないので無効に)

とりあえず、監視はするけど記録はしない設定にしてテストする。まずはdaemonではなく普通にプロセスとして起動してみる。

sudo motion -n

ターミナルに吐き出されるログを見ながらちゃんと画像がストリーミングされるかどうか確認する。あ、ルーターのPort Forwardingで8080番ポートをRaspberry Pi 2にリダイレクトしないと外部からは見れないので注意。なぜか、ローカル側からはiPhoneのSafariでは見れるけど、MacやPCのSafariやFirefoxでは見れなかった。ついでに吐き出すログのイベントを見てるとモーション検知が動いてるかどうかも分かる。locate_motion_mode onにすれば検知した動作のある範囲を枠で表示してくれるので、検知感度の調整はそれを見ながらやればいい。終了は^Cで。

動作が確認出来たら、motion.confのdaemon offをonにして、さらにシステム起動時にdaemonとして起動する様に/etc/default/motionを書き換える。

start_motion_daemon=yes

再起動して、ちゃんとmotionが動いて外部からアクセスできれば監視カメラ設置完了。

監視カメラとして検知した動きを記録するようにすると、自宅でカメラの前をうろうろしただけでどんどん記録されちゃうので、外部トリガーで記録する度に一定程度古くなったデータを自動削除するようにしないとあっという間に空き容量なくなっちゃうかな。まあ、旅行時とかだけなら問題ないかも。今後の課題としておこう。

 

Transcend製SDカードの再活用

最初にrpi-updateで失敗して使い物にならなかったTranscend製の32GBのmicroSD、どうにか無駄せずに済む方法はないかと思い、ブート用SDを長持ちさせるためのスクラッチディスクとして再利用することにした。いろいろなデータの保管はこのSDに行わせることによって、ブート用SDの書き込み量をできる限り節約しようという魂胆だ。

まずは、microSDカードが刺せる超小型のカードリーダーを入手、これにmicroSDカードをセットして、PCなりMacなりでMBRパーティション+FATフォーマットでフォーマットする。これは必要な時に抜いてPCでマウントしてデータを取り出せるようにである。

これをRaspberry Pi 2に刺して起動。まずは、デバイス名をチェックする。

sudo fdisk -l

これによると外部メモリはどうやら/dev/sda1にマウントされてるらしい。しかし、このデバイス名はつながってるデバイスの数によって簡単に変動するものなので、次にカードの固有名であるUUIDをチェックする。

sudo blkid /dev/sda1

/dev/sda1: UUID=”xxxx-xxxx” TYPE=”vfat”

これでUUIDとフォーマット形式が得られた。さて、どこにマウントするかだが、とりあえずは/mnt/storageというディレクトリにマウントすることにして、マウントポイントとなるディレクトリを/mntに掘っておく。

sudo mkdir /mnt/storage

最後に/etc/fstabに以下のエントリを作成して起動時にマウントされるようにする。

UUID=xxxx-xxxx   /mnt/storage   vfat   defaults   0   0

再起動したらdfコマンドでちゃんとマウントされて空き容量が認識されてるか確認しよう。