WakeOnLanで起動させた遠隔地のサーバが正しく起動したかどうかを確認したい。
構成
①サーバ(192.168.3.11)
普段はスリープ状態。WakeOnLanで起動させる
②RaspberryPi(192.168.3.9)
サーバのすぐ隣にある。Webサービス(Apache)あり。PHPあり。
やること
③外出先のiPhoneから②のPHP経由でPINGを飛ばし、①が起動しているか確認する。
完成品
③が成功するとこんな画面になる。
ソース
一番はじめに買ったRaspberryPi(初代)の設定を変えたら、動きがおかしくなってしまった。LANの接続を変えたせいか、sshできない。
これが初代RaspberryPi。LANケーブルは挿さっているが、IPアドレスをDHCP取得できていないのか、できていても何番が振られたのか検討がつかず、接続できない状態。
やむをえないので、OSの入っている16GBのSDカードを引っこ抜いて、別にあるRaspberryPi3で認識させて、ファイル設定を直す。
ーーー
流れ
RaspberryPi(初代)→ OSのSDカードをぬく
RaspberryPi3 → そのSDカードをUSBアダプタで挿してファイル救出を試みる。
使うコマンド
$ sudo -s
# dmesg | grep dev
# lsusb
# df
# fdisk -l | grep dev
# ls /dev | grep sd
# mount
ーーー
作業
RaspberryPi3にSDカードを挿してみた。/dev/mmcblk0p2 で認識されているようなので、これを /volumes/temp に mount する
# fdisk -l | grep dev
# mount -t ext4 /dev/mmcblk0p2 /volumes/temp
これで設定を変えられた。
作業が終わったらアンマウントする。
# umount /dev/mmcblk0p2
メインサーバ fedora の電気代がそこそこ高くつくので、安い夜間電力での運用に切り替える。
流れ
朝 6:55 自動でスリープする
(pm-hibernateコマンドをサーバのcronに登録する)
夜22:55 自動起動する
(WOL=WakeOnLan/常時起動のRaspberryPiからMagicPacketを定時にcron発出して叩き起こす)。
サーバ
メインサーバ fedora はこれ。HP ProLiant Microserver N54L。
買った時は12,000円くらいだった。ものすごいコスパよい。もう1台買っておくんだった。その後に後継機種(Gen8)が出たけど、8万円とか。
※ 同じような経験した人もいるようだ。
HP ProLiant MicroServer N54L 終息に伴い代わりを検討する (きりしま屋)
課題
①スリープのときにしっかりと電源が落ちるか?(作業はディスクに書き出され、ファンが止まり、電源消費が減るのでなければ意味が無い)
②スリープ復帰(WOL)したあとに、その前からしていた処理は継続されるか?
解決
①について
pm-hibernate というコマンドでスリープできた。似たようなので pm-suspend というコマンドもあるが、これだとファンは回りっぱなしだし、スリープの意味が無い(なお、pmは「PowerManager」の意味らしい)。
②について
スリープからWOLで復帰した後、なぜかpt3を認識できず、テレビ番組の録画ができなくなってしまった。スリープの際にpt3のドライバをアンロードして、その後に読み込みしていないからっぽい。以下で解決。
$ vim /etc/pm/config.d/pt3
SUSPEND_MODULES="pt3_drv"
この記述があると、pmサービスはスリープ時に pt3_drv をアンロードし、WOL復帰時に再度読み込みをしてくれるようだ。
ーーー
気づいた点
・サーバ fedora と RaspberryPi は、BUFFALOの無線LAN中継器「WEX-G300」を経由して無線接続しているが、MagicPacketは中継器を超えてブロードキャストできた。
・まれに pm-hibernate が失敗するときがある。サーバに ssh で入って pm-hibernate を叩いた後、直後のコンソールでEnterキーを連打等してしまうと、スリープされない仕様ぽい。
・動画のエンコード(HandBrakeCLI)している最中にスリープしても、復帰したら続きからエンコードが再開した。
・一時的にサーバの samba 共有が参照できなくなるので、NASとして接続してる周辺機器への影響が大きい。RaspberryPiでは mount -a が必要になる。
今後
・iPhoneやiPadで外出先からスリープできるようにする(Apache+PHPでやるか)。
・同じく外出先からWOLでWakeUPできるようにする。
・正しくスリープしたか、WakeUPしたかを、pingで生存確認できるようにする。pingの結果をHTMLに吐いて外出先から参照する。RaspberryPiからもpingして、結果をHDMI経由でテレビに映す。
RaspberryPi(USB無線LAN子機付き)を持ち運んだ先で、自動でWiFiに接続されるようにしたい。
↓ 青く光るのが無線LAN子機
RaspberryPiの電源さえ入れれば、自宅にいるときは自宅のWiFiに、職場なら職場WiFiに、自動で繋がるようにする。
ーーー
仮に
自宅無線LAN → 192.168.3.***
職場無線LAN → 192.168.2.***
と仮定して設定する。
ーーー
まずは自宅無線LANのSSIDへの接続に使うパスワードを用意する。
SSID:JITAKU
パス:password
だとすると
# sudo -s
# wpa_passphrase JITAKU password
(wpa_passphraseコマンドを使ってpasswordを暗号化する)
psk=46808… という長い文字列が、暗号化されたパスワード。
ーーー
同じように、職場SSIDの分も用意する。
SSID:SYOKUBA
パス:password2
だとすると
# sudo -s
# wpa_passphrase SYOKUBA password2
これで、自宅と職場それぞれのSSIDと、それに対応するパスワード(psk)ができた。あとはこれをRaspberryPiの設定に埋め込めばいい。
ーーー
# vim /etc/wpa_supplicant/wpa_supplicant.conf
自宅と職場それぞれの設定を記載する。
proto
接続に使うプロトコル(接続方式)。WPA-PSK2を使うので「WPA2」とする。
key_mgmt
WPA-PSK2 で接続する場合であっても「WPA-PSK」とする(末尾に2は付けない)。
pairwise
「TKIP CCMP」としておけばOK。
group
「CCMP」としておけばOK。
#psk
行ごと消してOK(シャープでコメントアウトされている。備忘のためだけ。あるとパスワードが丸見えだから、消したほうがいいと思う)。
psk
6行目のSSIDに対応したパスワード。事前にwpa_passphraseコマンドで作っておいた文字列をコピペする。
id_str
設定を一意に識別するための文字列。複数WiFiに対応する際のキモ。このあと、/etc/network/interfaces を編集するときに使う。
ーーー
最後に、上記で作った id_str を無線LANのインターフェースに割り当てる。
# sudo -s
# vim /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.3.30
netmask 255.255.255.0
gateway 192.168.3.1
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
iface wlan_JITAKU inet static
address 192.168.3.31
netmask 255.255.255.0
gateway 192.168.3.1
iface wlan_SYOKUBA
inet static
address 192.168.2.31
netmask 255.255.255.0
gateway 192.168.2.254
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
ーーー
ここまでできたら、あとはRaspberryPiを再起動すれば、いる場所(自宅or職場)の無線LANに繋がる。
ーーー
2016/11/27追記
もっとわかりやすく結論だけまとめた。
RaspberryPi 3 でmp3を再生しっぱなしにして、テレビでラジオや音楽を流している。音量調整はテレビのリモコンでやってたけど、omxplayer からもコントロールできるらしい。
わかった部分でまとめ。
ーーー
キーボード
ー(マイナス) 音量を下げる
+(プラス) 音量を上げる
↑(矢印の上) 10秒進める
↓(矢印の下) 10秒戻る
他にもたくさん操作があるらしいけど、jklmとかのキーは効かなかった。SSH
経由で入っているからか?操作元のMacbookAirのGoogle日本語入力の問題?
原因は分からないけど、音量調整と再生位置の選択だけできれば困らないからこれで充分。
ーーー
参考
$ man omxplayer
知り合いバンド自作のCD-ROM。もらったは良いけど、うちにはコンポとかラジカセとか無い。
RaspberryPi3 + BUFFALO製のDVDドライブ で音楽ファイルにリッピングする。
準備
ドライブはこれ。BUFFALO製「DVSM-PN58U2V-BK」。
RaspberryPi3はこれ。
DVDドライブの接続
RaspberryPi3 のUSBに挿して接続。
$ dmesg | grep sr
「Attached scsi CD-ROM sr0」とあり、/dev/sr0 で認識されているのが分かる。一応 /dev/ の下も見ておく。
$ ls /dev/ | grep sr
マウント用のフォルダ cdrom を作る。
$ mkdir /volumes/cdrom
$ chmod 777 cdrom/
CD-ROMをマウントするときは、mountコマンドの-tオプション(type)として「iso9660」を指定すればよいらしい。
$ sudo mount -t iso9660 /dev/sr0 /volumes/cdrom
CD-ROMをマウントできたので、いよいよリッピングする。ここ参考に。
ffmpeg でエンコードできるらしい(ちなみにffmpegは既にインストールしてある)。
ただ、この例だとドライブ指定が「F:」となっている。Windowsでの案内みたい。今回はLinuxなので、ドライブ指定は /dev/sr0 のようにする。
ffmpeg のサイトに使い方の案内があった。
同じようにやってみる。注意点は3つ。
① -f libcdio を指定する。
② -ss で入力時間を指定しないとリッピングできない。
③ 吸い出すCD-ROMの指定は -i /dev/sr0
実行。
$ ffmpeg -f libcdio -ss 0.000001 -i /dev/sr0 out.wav
リッピング開始した。
CDのリッピング程度だと RaspberryPi3 でも結構速い。16曲のCDが30分もあれば吸い出しが終わる。
その昔、まだCPUが400Mhzですごい!とか言われていた時代は、リッピングが30分で終わる爆速!なんて雑誌に書かれていたのを思い出す。ほんとに進化の速い世界。
ーーー
リッピング終了。RaspberryPi からHDMI接続したテレビで再生してみる。
かなり音キレイ。素のwavそのままだからか。
ーーー
あとはCDをトレイから取り出すだけ。これもコマンドで。/dev/sr0 ではなく /dev/cdrom と指定するみたい(なぜ?)。
$ eject /dev/cdrom
取り出された。
いやほんと RaspberryPi 素晴らしい。何でもできる。