PogoPlugをrsyncで同期

OpenPogoにより ipkg のインストールが可能になったので、rsyncでの同期を試みることにしました。

基本的には既存のファイルサーバ(ホスト名:marvel・・・・実体は玄箱PROです)からファイルを引っ張ってくるだけにしました。

できればファイルサーバ側からPogoPlugにファイルを置きにくる形を取りたいところですが、PogoPlugはDHCPでIPアドレスを取得するのでIPアドレス固定での設定ができません。そこで、PogoPlug側からファイルを取りにくる形をとりました。

大きな設定の流れは以下の通りです。

  • PogoPlug(OpenPogo)にはrsync,openssh,cronなどをインストール
  • インストール後、ssh-keygenでパスフレーズなしの鍵ペアを生成して、公開鍵をサーバ側に転送してPogoPlug側からパスワード無しでsshログインできるようにする
  • rsyncコマンドで必要な範囲を同期するスクリプトを作成する
  • crontabで定期的に同期するようにする

同期のためのスクリプトはPogoPlugに接続しているHDDのデバイスファイルが変化することがあるので、こんな感じでHDD上のフォルダ有無で転送する先を確認するようにしました。

これでコマンドラインからはrsyncが動作するのですが、なぜかcronからは動作しません。もう少し調整が必要なようです。

rsyncでディレクトリの同期

GWの終わりには竜巻で大きな被害が出るなど、最近は天気が荒れがちでよく雷がなったりしています。また、東日本大震災の影響の電力不足が続いていて、この夏はいつ停電になってもおかしくない気がします。停電すると常時稼働している機器が影響を受けます(当たり前ですが)。

停電対策といえばまずはUPSですが、導入するお金も置く場所もありません。そうなると、電源OFFするしかないのですが、嫁さんが先に帰ってきてPCで遊ぶ際に写真が見れないとかという話になってしまいます。それも困るので、MicroServer+FreeNASの導入で遊休状態になっている玄箱PRO上のSamba上に最低限のファイルをコピーして稼働させることを考えました。
が、コピーを手作業でやっていると面倒なので、rsyncで自動化できないか調べてみました。

実施にあたってはこちらのサイトDebianの公式サイトの記述を参考にさせていただきました。

1.考え方

玄箱PRO側でrsyncdをdaemonモードで起動して待機させます。sshモードの方が試してみる分には簡単なようですがパスワード入力が要る(自動化するには鍵ペアで認証になる?)のと速度が遅いので、daemonモードで実施します。daemonモードは暗号化がかかりませんが、自宅内ネットワークなのでよしとします。
そこに、FreeNAS側からrsyncで書込みをさせます。

2.玄箱側の設定

rsyncのインストールは初めからしてあったのか、したのか忘れました(^^;。
ただ、設定ファイルである /etc/rsyncd.conf は存在していなかったので作成します。

コピー(同期)はFreeNAS側の common というディレクトリを /home/common に同期させます。また、玄箱は非力なので、コネクションをたくさん張られてもかえって遅くなるだけなので接続数を制限します。
設定ファイルを作成したら、

で daemonモードで起動します。

3.FreeNAS側の設定

FreeNAS側は「システム」→「Rsync Tasks」→「Add Rsync Task」でタスクを作成します。

  • 「パス」にはローカル側のディレクトリを指定します。Browseでは共有単位でしか選択できないようなのですが、今回はFreeNAS側の common の下をすべて同期するわけではないので、対象ディレクトリをフルパスで指定します。
  • 「リモートホスト」には玄箱PROのIPアドレスを指定します。
  • 「Rsync mode」には「Rsync module」を指定します。
  • 「Remote Module Name」には /etc/rsyncd.conf のモジュールオプションの[]の中身、すなわち「common」を指定します。
  • 「Remote Path」には「パス」で指定した部分のうち、common以下の部分だけ指定します。
  • 「Direction」はFreeNASから玄箱PROなので、「Push」を選択します。
  • 「Minute」以下はどの周期で同期を試みるか設定します。
  • 「ユーザ」は「root」を選択します。
  • あとはデフォルトのままにしたような・・

これで「OK」を押すと設定した時間で同期動作が始まりました。

4.自動起動の設定

rsyncをinetdから起動させるための設定をします。
まず/etc/servicesファイルに 次のような rsync サービスがあることを確認します。

デーモンを inetd から起動させるために、次の行を /etc/inetd.conf に書き足します。

修正後に inetd に HUP シグナルを送り、 修正された設定ファイルを読み込ませます。

5.他に参考になりそうなもの

rsync + cron + sshのみで実現する方法(rsyncd を使わない方法)

玄箱PROにDebian Squeezeをインストール(続編)

1.Webminのインストール

Webベースの管理ツールとしてWebminをインストールする。
インストール方法は以下を参照。

http://webmin.com/deb.html

変更点は以下のとおり。

  • wgetでダウンロードするファイル名が間違っている。「webmin_1.570_all.deb」でなければならないところが、「webmin-1.570_all.deb」になっていて、コピペするとエラーになる。

2.IPアドレスの設定

実は固定IPになってない。/etc/network/interfaces を修正

3. cgroupのマウントポイントがない

/cgroup を作成

4. sambaの設定がされていない

毎度ながら、設定がよくわからないところがある。とにかく Webminで設定実施。

  • unixのユーザーをsambaユーザーに変換
  • 変換したユーザーのパスワードを設定
  • ホーム以外に共有フォルダ作成

 

玄箱PROにDebian Squeezeをインストール

MicroServer+FreeNASの導入により、ファイルサーバとしてはすっかり用済みになってしまった玄箱PROですが、玄箱PROには玄箱PROらしい活かし方をしたいと思います。

で、玄箱PROの特徴はなんといっても小型であることと、USBの口をもっていることです。そこで、このUSB経由で自作周辺機器をつないでロギングなどをさせてみたいと思います。で、USBとなると、これまではDebianのlennyで動作していましたが、やはり最新のカーネルで動作させたくなりますので、squeezeに入れ替えることにしました。

入れ替えるといっても、この用途ではこれまでのように1TBものディスクは必要ないので、余っている320GBのディスクに入れ替えました。

入れ替え作業にあたっては、

http://nice.kaze.com/kuro-box-pro.html

のサイトを参考にして、シリアルコンソールケーブルを作成しました。そのシリアルコンソールケーブルを使ってインストールを行うのですが、squeezeのインストール手順は以下のサイトを参考にさせてもらいました。

http://masezou.blogspot.com/2011/06/prodebian-601-squeeze.html

手順はほとんどそのままなので、差分だけ。

  • 途中で ssh で接続することになっているが、すべてシリアルコンソールから作業可能
  • /etc/pam.d/su を編集してパスワードなしのsuが可能になる設定をしているが、作業ミス防止のためそのままにした

気づいた残課題は以下(随時追加する)

  • Sambaの設定

玄箱debianバージョンアップ

古いノートPCにdebianを入れてUSB機器を監視しようとおもっていたのですが、そのノートPCがお亡くなりになってしまいました。2000年に購入したものですが、さすがに前半はモバイルのメインマシンとして酷使、後半はdebianで宅内サーバ、監視サーバとして酷使したので仕方がないでしょう。

で、監視サーバの代役として玄箱(無印)が余っているので、なんとかならないかと思いました。USBシリアルを使うためにはある程度カーネルバージョンが上がっていないといけないのですが、この玄箱、lennyにアップデートすると立ち上がらなかったので、Debianのバージョンはetchのままアップデートしていません。いまさらながら調べてみると、lennyはubootでなければならないようです。なので、その辺をやってつけて、アップデートをかけていくことにしました。

作業内容(後から書いたので、抜けや間違いがあるかもしれません)

1.すでにetchになっていたので、uboot化

注意深く /dev/mtdblock にファームウェアデータを流し込み

# cat u-boot-hd.flash.bin > /dev/mtdblock1

どのブロックかはカーネルによって変わる?ので、全部ダンプしてみてそれっぽいのを探した。

2.再起動せずにカーネル差し替え

ubootで起動できるカーネルをおいとかないと、立ち上がるわけがないので、先に用意しておく。

# cd /boot
# tar xvfz (置いてある場所のパス)/kernelimage-2.6.20-kuroBOX-uImage.tgz
# cd /lib/modules
# tar xvfz (置いてある場所のパス)/modules-2.6.20-kuroBOX.tgz

3.再起動

時間がかかるけど、たちあがる。
立ち上がったら再度 telnet で接続

4.lenny化実行

・/etc/apt/sources.list を修正
“etch” の部分を “lenny” に書き換え
・lenny化実行

#apt-get update
#apt-get safe-upgrade
#apt-get dist-upgrade

5.再起動

たちあがらねぇ・・・というか、立ち上がってるけどIPアドレスがわからない感じ
Linuxマシンで nmap をかけてもみつからない
nc.exe を使ってもつながらない

6.シリアルコンソール接続

最後の手段、シリアルコンソール接続とします。Webで調べるといろいろ情報は出てきますが、R76はシリアルの信号と直列に入っている保護用?の抵抗なので、115200bpsという速度を考え、適当に470オームとした。・・・が実際の接続の速度は 57600bps/8N81だった。

ubootの環境変数やsttyで速度は変えられるけど、カーネルは57600bpsでコンパイルされているようなので、実質57600bps以外の選択肢はない。

で、IPアドレスを調べてみたら、変わってない。
telnetでもつながる。なんだったんだろう?

7.squeeze化

・/etc/apt/sources.list を修正
“lenny” の部分を “squeeze” に書き換え
・squeeze化実行

#apt-get update
#apt-get safe-upgrade
#apt-get dist-upgrade

8.再起動

問題なく起動。

9.カーネルバージョンアップ

某所でsqueezeにバージョンアップしてもカーネルのバージョンは古いまま
(確かに 2.6.20 のまま)

# sudo apt-get install linux-image-2.6-powerpc

でカーネルバージョンアップとか書いてあったので試してみたが、ubootでロードするファイルとあってないのでロードされない。ubootを手動でコマンドを打ちながら起動してみたが、「linkstation用のカーネルじゃない」と蹴られる。どうしょうもない。

なので、

# cd /boot
# tar xvfz (置いてある場所のパス)/kernelimage-2.6.25.20-kuroBOX.tgz
# cd /lib/modules
# tar xvfz (置いてある場所のパス)/modules-2.6.25.20-kuroBOX.tgz

で 2.6.25.20 まではバージョンアップした。

10.電源落ちない対策

ここで、shutdownコマンドやrebootコマンドで最後の最後にフリーズする対策を見つけたので、追加。

/etc/init.d/haltのpathの行の後ろにecho -n “EEEE” > /dev/AVR00を追加

これでシャットダウン時に電源が切れるようになった・・・が、その後電源SWを押しても起動しない。結局一度プラグを抜かなきゃいけない。うーん。

<まとめ>
結局、カーネルのバージョンは 2.6.25 のまま。うーん。