« ☆ ぬ~ ☆さんのapptoutをWindows8.1(64bit)で使う | トップページ | シリアルケーブルでHP200LXとRaspberry Piを接続 »

2014/06/21

日記(時記メモ)やスケジュール同期を、LXのSDをRaspberry Piにさして自動実行する

Raspberry Piはちっこくて可愛いコンピュータです。自宅サーバー用途や子供用パソコン組み立てを念頭に調達したものの、自分で色々設定するのが面白く、現在はHP200LXの持ち歩き母艦として設定しています。
Raspilx01

HP200LXからmicroSDを抜いて、Raspberry Piにさして、ラズベリーパイの電源を入れれば、なにもタッチしなくても、自動で時記メモを同期し、Googleカレンダーに追加登録されている予定をHP200LXのAppointmentsにマージしてくれます。
Raspberry Piのインターネット接続は、有線LANもしくは無線LANで行います。自宅やホテルの有線LANか、Android携帯電話のテザリングでOKなように設定済みです。

こうして、重いPCやタブレットいらずで、HP200LXとインターネット上のデータのやり取りをしています。時記メモのテキストは、もちろんPCやAndroid携帯電話とも同期されるようになっています。LXでテキストを打って、それをどこでも使える、Googleカレンダーに予定を登録したら、LXのAppointmentsで見られる、という環境がRaspberry Piというわずか45gの名刺サイズコンピュータで実現しています。
Raspilx09


大まかな実現手順としては、
Raspberry Piの入手、初期設定
Bittorrent SyncをRaspberry Piにインストール
Raspberry Piに必須ツールをインストール
apptoutのRaspberry Piでのビルド
同期用のスクリプトをRaspberry Piに設定
VPS(ワンコイン税別467円)契約し初期設定、Bittorrent Syncのインストール(自宅PCのみで行う場合は不要)
動作確認
といった感じです。LXを実用で使うために、無駄に色々やっている感じで楽しいです。


まず、Raspberry Piの入手です。日本だと、アールエスコンポーネンツ2012年4月16日から扱っています。当初は入手性が悪く、そもそもの目的である教育用用途が先だろうと手を出さなかったのですけれど、今では在庫も安定し、Amazonでも普通に安くPrime対象で売っているので、お遊びに一つと調達しました。注文して翌日に届きました。

Raspberry PiのストレージはSDカードです。手持ちの余りSDカードを見ると、8GBのよさげなのが一枚見つかったので、それを使います。OSは英国ラズベリーパイ財団の公式サイトからダウンロードします。
Raspberry PiにUSBキーボードをさしてHDMIケーブルでテレビにつなげて使うなら、NOOBSを入れてOSを選んでセットアップすればいいのでしょうけれど、うちのテレビはピタゴラスイッチや0655やふしぎだいすきやモリゾーキッコロなどの録画番組閲覧用になっています。他に液晶ディスプレイは嫁さんのMac mini専用のものしかありません。それにこのところVPSのLinuxサーバーの設定をやっていたので、ごく自然にLANケーブルだけつないでディスプレイもキーボードもつなげていない状態で初期設定を行います。これも簡単にできます。

Raspbian(Debian Wheezy)が色々設定するとき楽そうなので選びます。imgファイルの入ったzipをダウンロードするのですけれど、Firefoxだとうまくかず、Chromeでダウンロードし直しました。zipファイルが普通に解凍できたらダウンロード成功です。出てきたimgファイルを、WindowsならWin32DiskImagerでSDカードに書き込みます。LinuxやMac OS Xならdd一発です。他にも方法は色々あるようです。
SDカードをRaspberry Piに差し込んで、電源用のmicroUSBケーブルをさせばOSは自動的に起動します。

あとはLinuxサーバーの初期設定とやることは大きく変わりなさそうです。有線LANケーブルをRaspberry Piにさせば、DHCPでIPが自動設定されます。自宅のルーターのWeb管理画面から割り当てられたIPを見て、sshでRaspberry Piにつなげます。ぼくはcygwinですけっれど、puttyとか他のターミナルソフトでもお好みのsshクライアントで、標準のport 22でつながります。初期ユーザーはpi、初期パスワードはraspberryです。

sshでつなげると、raspi-configを実行するように促されますので、素直に、
raspi-config
します。
テキストメニューから、expand_rootfsとchange_passとchange_localeとchange-timezoneを実行します。piユーザーのパスワードは必ず変更します。標準のままで裸の状態でインターネット接続してルーターのポートを開ければ、ボットにされてしまうでしょう。

まずは、
$ sudo apt-get update
でアップデートします。
$ adduser
でユーザーを新規に作成します。piユーザーは削除するわけですが、その前に、新規ユーザーで一通り動くか動作確認します。そういえば、startxしてないなと、初めてごそごそテレビにつなげます。あれ、X上がらない。
piユーザーを削除する前に、ググッてみると、Raspberry Pi 初期セキュリティ設定など - 屋根裏Linuxがヒットします。屋根裏Linuxさんのページを見て、新規ユーザーを設定します。なるほど、これならpiを消してもいいな。うーん勉強になるなあ。

ところで、Raspberry piの初期設定でググると、日本語ページが多数ヒットします。どれもわかりやすいです。実に情報豊富です。先達が沢山いるって楽だなあ。無線LANの設定などは、ググれば良いでしょう。

さて、今回はHP200LXのデータの同期です。

Armなので、Dropbox公式Linux用クライアントで同期というわけにいかず、Dropbox-Uploaderを使うかと思っていましたけれど、せっかくなので、「データはあなた自身のもの。安全で、制限のないファイル同期。クラウドは必要ありません。」のBitTorrent Syncを試すことにします。

安全かどうかはよくわかりませんけれど、面白そうで、Arm用BitTorrent Sync バイナリも配布しているからです。

日本語のインストール手順ページもありますし、ユーザーガイドのPDFもあります。BitTorrent Sync バイナリをダウンロードして解凍し、実行するだけというお手軽さです。設定はWeb画面でできます。楽なものです。

WindowsやMac OS XやAndroidやiOSのBitTorrent Syncも用意されていて、それぞれ簡単に設定できます。同期対象フォルダをピアごとにいくらでも追加していけます。
ノードごとに、好きに同期フォルダを追加できます。Raspberry Piには時記メモとAPPT.ADBとスクリプトの入ったフォルダだけ同期フォルダに追加します。

Dropboxより便利かも。容量制限ないし、でかいフォルダも小さいフォルダもいくつでも同期設定追加して、ノードごとにどれを同期するか選べるわけだし。Dropbox以外で問題だった、Syncがなかなか始まらなかったり完了してなかったりして面倒なことになるようなことも、Bitttorrent Syncではありません。DropboxとBittorrent Syncだと甲乙つけがたいな。
根本的に、クラウトサービスのDropboxとP2PのBittorrent Syncは異なります。クライアント/サーバーをインターネット上で便利にしたクラウドサービスは、データはクラウト上のサーバーストレージに実体があります。Dropbxの場合、この実体のコピーが各クライアントに配信されます。peer to peerのBittorrent Syncはクラウドはありません。データはBitttorrent Syncをインストールしたノードの同期フォルダに実体があります。
つまり、全部のノードの電源がオフのとき、1台だけ電源入れても、同期することができないわけです。逆に、電源を全部切るかBitttorrent Syncを全部アンインストールすれば、クラウトに自分のデータが残っていたりしないわけです。

Dropboxは便利です。同じように、いつでもBittorrent Syncで同期できるようにするために、ワンコインVPS上にもBittorrent Syncを入れてみます。x64のバイナリを入れるだけで、普通に使えます。VPSでもダウンロードして解凍、実行するだけですけれど、iptablesでパケットを通してやります。

大喜びで色々Bittorrent Syncを試していて一つ失敗したのは、Blackberry Q5にAndoridアプリのBitttorrent Syncを入れて同期できるじゃん!と遊んでいたら、同期ファイルの一つがなぜか同期先で巨大同期途中ファイルに化けてしまいました。Blackberry上でのAndroidアプリ稼働は100%ではないことを忘れていたための失敗です。Blackberryでは通常同期は停止しておきます。

Raspberry Piでのbittorrent Syncインストールは、
$ wget http://download-lb.utorrent.com/endpoint/btsync/os/linux-arm/track/stable
$ tar zxvf stable
です。
設定は、
$ mkdir .sync
$ vi sync.conf
実行は、
$ /btsync
です。そのままサービスが上がった状態になります。
で終了させたいときは、
$ killall btsync
です。
標準では、http://(Raspberry PiのIP):8888/
で設定ができます。sync.confに書かなくても、このWeb設定画面から同期フォルダの追加が行えます。

Bittorrent Syncが動いていれば、Raspberry Piへのファイル転送も実に簡単になります。同期用のスクリプトをノートPCで書いて、同期フォルダに入れれば、すぐにRaspberry Pi内の同期フォルダに反映されます。こりゃ便利だぜ。


Bittorrent Syncまでできれば、あとはLXのSDを自動で読み込む設定をすればいいのです。

必要なツールをインストールするのも、Debianならでは、apt-getで簡単に入れられます。
$ sudo apt-get install nkf
$ sudo apt-get install wget
$ sudo apt-get install usbmount

ああ、なんて楽なんだ。debian最高。

時記の転送なら、あとコピーするスクリプトを書くだけですけれど、Appointの同期もする場合はapptoutをコンパイルします。
手順は前回のエントリの通りです。
$ wget http://www005.upp.so-net.ne.jp/khayashi/apptout-0.86b.tar.gz
$ tar zxvf apptout-0.86b.tar.gz
$ cd apptout-0.86b
$ make
で、apptoutの実行ファイルが生成されます。

Raspilx11


HP200LXのmicorSDをRapberry PiのUSBにアダプタに入れてさしたら、自動でコピーするという動作は、usbmountの設定で行います。
適当に、cpするスクリプトを書いて、放り込みます。


#!/bin/sh
sleep 5
cat /media/usb0/MEMO.TXT >/home/kobako/hw/LX/MEMO.TXT
nkf -w80 -Lu /media/usb0/MEMO.TXT >MEMO.TXT
perl /home/kobako/hw/LX/add0h_lf.pl MEMO.TXT >newmemo.txt
nkf -w80 -Lu /home/kobako/hw/MEMO.TXT >>newmemo.txt
sort -r newmemo.txt >MEMO.TXT
uniq MEMO.TXT >newmemo.txt
nkf -s -Lu newmemo.txt >MEMO.TXT
cat MEMO.TXT >/home/kobako/hw/MEMO.TXT
sync
sudo -u kobako /home/kobako/btsync
sudo -u kobako /home/kobako/hw/appt/g2lx.sh

こんな感じで、lxpi2bits.shを書きます。kobakoが新規で作ったRaspberry Piのユーザー、/home/kobako/hwはBittorrent Syncの同期フォルダです。
USBメモリは、
/media/usb0
に自動マウントされます。utf-8の環境で動かすためにnkfを使いましたが、基本catしてsortしてuniqするだけです。

$ chmod +x ~/hw/LX/lxpi2bits.sh
$ sudo cp ~/hw/LX/lxpi2bits.sh /etc/usbmount/mount.d/10_autocopy

Raspberry Piは持ち歩いて使うときだけ電源を入れてネットワーク接続する運用なので、このスクリプトの中でbtsyncを起動しています。init.dに入れてもいいでしょう。init.d用スクリプトはjack.minardi.org Replace Dropbox with BitTorrent Sync and a Raspberry PiSet-up a Raspberry Pi with dynamic IP and Bittorrent Syncにあります。

Raspilx13

g2lx.shはapptoutで予定をLXのApptBookに追加するスクリプトです。


#!/bin/bash
if [ -e /media/usb0/_DAT/APPT.ADB ]; then
# APPT.ADBのあるSDがUSBにささったら
cat /media/usb0/_DAT/APPT.ADB >/home/kobako/hw/appt/APPT.ADB
cd /home/kobako/hw/appt
rm *.ics
rm *.ICS
rm *.csv
rm *.CSV
wget http://www.google.com/calendar/ical/(カレンダーのダウンロードリンク)/basic.ics
# LXのAppointmentsとGoogle Calendarのシンクロ
# appointmensのデータをCSVへ
YYMM=`date '+%y%m'`
./apptout -a -g$YYMM01 -x/home/kobako/hw/appt/APPT.ADB >appt.csv
./apptout -e -g$YYMM01 -x/home/kobako/hw/appt/APPT.ADB >>appt.csv
nkf -W -w80 -Lu basic.ics >ggl.ics
nkf -S -w80 -Lu appt.csv >apptu.csv
perl /home/kobako/hw/appt/ics2csv_lf.pl ggl.ics >ggl.csv
# シンクロ GoogleCalendar to LX
perl g2lx_lf.pl ggl.csv apptu.csv addapptu.csv addevtu.csv
nkf -W -s -Lu addapptu.csv >addappt.csv
nkf -W -s -Lu addevtu.csv >addevt.csv
# 新adb生成
./apptout -xAPPT.ADB -iaddappt.csv -oupappt.adb -a
./apptout -xupappt.adb -iaddevt.csv -onewappt.adb -e
rm upappt.adb
cat newappt.adb >APPT.ADB
# sudo cat newappt.adb >/media/usb0/_DAT/APPT.ADB
sudo cat newappt.adb >/media/usb0/nAPPT.ADB
#
# シンクロ LX to GoogleCalendar
perl g2lx_lf.pl appt.csv ggl.csv addggl.csv addgevt.csv
perl lx2gcal_lf.pl addggl.csv >qaddggl.ics
perl lx2gcal_lf.pl addgevt.csv >qaddgevt.ics
nkf -wS qaddggl.ics >addggl.ics
nkf -wS qaddgevt.ics >addgevt.ics
sudo cat addggl.ics >/media/usb0/addggl.ics
rm newappt.adb
sync
else
echo "/media/usb0/_DAT/APPT.ADB not found."
fi

みたいな感じで、大昔のエントリのバッチファイルをシェルスクリプトにしただけです。

USBメモリに書き込めるようにするには、
$ sudo vi /etc/usbmount/usbmount.conf
で、
FS_MOUNTOPTIONS="-fstype=vfat,iocharset=utf8,codepage=932,uid=500,gid=500,dmask=0000,fmask=0111"
とかそんなんでしょうか。

これで、同期PCやMacの電源を入れっぱなしにしておけば完了です。
Raspilx02

でも、ここはやはりVPSを立てて、同期用に設定します。

VPSはDTi Serversman VPSなら500円以下です。性能も十分で、問題ありません。
VPSは契約して、OSは適当にCentos6.5あたりにして、useraddしてsshの設定をして、yum updateしてIptablesでガチガチに固めて、クラックされないように準備してから、Bittorrent Syncを入れて動かします。
…詳細は省略します。さくらVPSの設定や自宅サーバーの設定などでわかりやすい記事が色々すでにありますから、ググるのがいいでしょう。
Raspilx08

こんな風にして、Raspberry Piを持ち歩いて、LXの母艦にできています。重さ45gの母艦です。有線LANがある場所では有線LANをさせばいいし、Android携帯電話のテザリングをONにしたら、自動でつながるように設定してあります。HP200LXからSDを抜いてRaspberry PiのUSBにアダプタでさせば、数十秒後には同期が終わっているというわけです。
日記は以前のエントリ通り、VPS上でcronで一日一回自動ではてダラでアップロードされます。
LXでプチプチ書いておき、宿に入ったらRaspberry Piで自動同期。あとはサーバーがcronで自動でやってくれます。なお、Bllackberryからメールしておいたメモも、サーバー上で取り込んで自動でマージしておいてくれるようにしています。
Raspilx15

こうして、PCやタブレットを使わなくても、HP200LXを実用に使って、インターネット上のサービスと同期も問題なく取れています。簡単で楽に楽しく運用できます。無駄に色々設定している気もしますけれど、それもまた面白い、楽しみなわけです。

|

« ☆ ぬ~ ☆さんのapptoutをWindows8.1(64bit)で使う | トップページ | シリアルケーブルでHP200LXとRaspberry Piを接続 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/69188/59849954

この記事へのトラックバック一覧です: 日記(時記メモ)やスケジュール同期を、LXのSDをRaspberry Piにさして自動実行する:

« ☆ ぬ~ ☆さんのapptoutをWindows8.1(64bit)で使う | トップページ | シリアルケーブルでHP200LXとRaspberry Piを接続 »