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からは動作しません。もう少し調整が必要なようです。

PogoPlugにOpenPogoをインストール

pogoplugfsはインストールしたものの、やはり転送速度と手間はかかります。

そこで、無人で既存のサーバから転送するため、rsyncの導入を試みることにしました。

そのための手段として、OpenPogoをインストールしました。

インストールに当たっては、こちらのサイト
http://ameblo.jp/uassist-ceo/entry-10853801756.html
を参考にさせていただきました。

以下に手順を残しておきます。(基本的には上記の参照サイトと同じです。異なる箇所は色文字にしておきます)

  1. my.pogoplug.com の 設定 > セキュリティー設定 にすすみ、「このPogoplug対応機器のSSHへのアクセスを有効にする」にチェックを入れる。
    「パスワードを変更」ボタンを押し、パスワードを設定する。
  2. USB接続しているHDDを my.pogoplug.com 画面で取り外す。
  3. USB接続しているHDDをPogoplug本体から取り外す。
  4. Pogoplug本体にUSBメモリを接続する。
  5. USBメモリを my.pogoplug.com 画面で取り外す。
  6. nmapでPogoplugのIPアドレスを調べて、sshで接続する。
    ユーザ名:root
    パスワード:設定したパスワード
  7. USBメモリをフォーマットするためのツールをダウンロード
    # cd /tmp
    # wget http://plugapps.com/os/pogoplug/mke2fs
    # chmod 755 mke2fs
    # killall hbwd
  8. fdiskコマンドでUSBメモリにsda1パーティションを作成
  9. USBメモリをフォーマット。
    # ./mke2fs /dev/sda1
  10. USBメモリをPogoplug本体から取り外す。
  11. 本体を再起動。
    # /sbin/reboot
  12. Pogoplug本体にUSBメモリを接続する。
  13. dfコマンドでUSBメモリのマウント先ディレクトリを確認
    /tmp/.cemnt/sda1みたいなデバイスファイルが /tmp/.cemnt/mnt_sda1にマウントされています。
  14. USBメモリマウント先ディレクトリに移動
    # cd /tmp/.cemnt/mnt_sda1
  15. OpenPogoをブラウザからダウンロード
  16. ダウンロードした「opt.tar.gz」ファイルを SCP で、USBメモリにアップロード。
    SCPの場合フォルダは上記フォルダ /tmp/.cemnt/mnt_sda1
  17. 「opt.tar.gz」を解凍
    # tar xvzf opt.tar.gz
  18. Pogoplugのファイルシステムをりマウントし書き込み可能に
    # mount -o rw,remount /
  19. optディレクトリのリボリックリンクを設定
    # ln -s /tmp/mnt_opt/.opt /opt
  20. システム起動スクリプトを修正
    # cp /etc/init.d/rcS /etc/init.d/rcS.original
    # vi /etc/init.d/rcS
    ※最後尾に追記
    /etc/init.d/mount_opt
    /opt/etc/init
  21. パス設定を修正するため、/etc/profileを作成
    #!/bin/bash
    export PATH=/opt/bin:/opt/sbin:/usr/bin:/usr/sbin:/bin:/sbin
  22. マウント用スクリプトを必要に応じて修正(自分の場合はsleep30の追加のみ)
    # cp /tmp/.cemnt/mnt_sda/.opt/mount_opt /etc/init.d/
    # chmod 755 /etc/init.d/mount_opt
    # vi /etc/init.d/mount_opt

    sleep 30
    [ ! -d /tmp/mnt_opt ] && mkdir /tmp/mnt_opt || umount /tmp/mnt_opt
    mount -t ext2 -o rw,nosuid,nodev,exec,noatime,sync /dev/sda1 /tmp/mnt_opt
    if [ ! -d /tmp/mnt_opt/.opt ]
    then
    {
    umount /tmp/mnt_opt
    mount -t ext2 -o rw,nosuid,nodev,exec,noatime,sync /dev/sdb1 /tmp/mnt_opt
    if [ ! -d /tmp/mnt_opt/.opt ]
    then
    {
    umount /tmp/mnt_opt

  23. 本体を再起動。
    # /sbin/reboot
  24. Pogoplugのファイルシステムをりマウントし書き込み可能に
    # mount -o rw,remount /
  25. ipkgのリポジトリを修正
    # vi /opt/etc/ipkg/armel-feed.conf
    src cross http://openpogo.com/repo

    #src cross http://openpogo.com/repo
    src cross http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable
  26. このままではBusyBox版のwgetでそのまま動かないので、
    http://hyokonia.tumblr.com/post/10973041787/openpogo-ipkg
    を参考にしてラッパースクリプトを作成する。
    # cd /usr/bin/
    # mount -o rw,remount /
    # mv -i wget wget.busybox
    ラッパースクリプト作成
    # vi wget.sh
    #!/bin/sh
    arg=echo $* | sed -e 's/--passive-ftp//g'
    /bin/busybox wget $arg
    シンボリックリンクを使ってラッピング
    # chmod 755 wget.sh
    # ln -s wget.sh wget
    # mount -o ro,remount /
  27. ipkgを最新に更新
    # ipkg update
    # ipkg list
    で、インストール可能ソフトを表示
  28. OpenPogoのインストール完了
  29. rsyncのインストール
    # ipkg install rsync

 

PogoPlugにLinuxからアクセスする

しばらく前にPogoPlugProを導入しました。外からAndroidでアクセスする際の使い勝手はまあまあ(ただ、安定性がちょっといまいちな感じが・・・)、というところなのですが、なによりもファイルサイズの制限が事実上ないのがうれしい半面、アップロードに異様に時間がかかるのが難点です。

そこで、PogoPlugを普段使っているLinuxMintからアクセスできるようにしてみることにしました。pogoplug.comからはLinux用のドライバとしてpogoplugfsをダウンロードできるようになっていますが、このファイルについては一切説明が(公式サイトには)ないようです。で、ググってみますと、いくつかやり方がでてきます。その中でどうやら正しそうな方法(自分がうまくいっている方法)を記載しておきます。

1.まず準備

以下の内容にて環境を整備して、さらにマウントする場所を準備します。

2.設定ファイルの準備

コマンドラインオプションにも記述できるようですが、パスワード丸見えになってしまうので、設定ファイルを準備します。~/pogoplugfs.confというファイル名で以下の内容のファイルを準備します。=の前後にスペースなどは不要です。作成したら、「chmod 400 ファイル名」で自分にしか見えないようにしておきます。ここで記載しているアカウントとは、my.pogoplug.com にアクセスする際のアカウントです。

3.マウント処理

以下のコマンドで実際にマウントします。

これでLinuxからアクセスができるようになりました。やってみると、PogoPlugとPogoCloudの両方にアクセスができるようです。

 

ちょっと気になる現象です

以下の3枚の図は防災科学研究所のHi-net自動処理震源マップから切り出したものです。

6/19の午前1:00頃に東日本の震央分布図を画像保存したものから千葉県の部分を切り出しています。

左から過去24時間、過去7日間、過去30日間です。すなわち、2枚目から1枚目を引くと過去24時間~7日間、3枚目から2枚目を引くと過去7日間~30日間になると概ね考えていいのではないかと思います。

手書きで赤線で囲んだ部分に着目すると、この1カ月で震源域が房総半島(鴨川か館山辺り)に直線的に近づいていっている(移動している)ように見えます。

あまり細かいことを気にしてもしかたありませんが、気になります。しばらくウォッチしたいと思います。

TimeLapse動画で空を撮ってみました

ちょっと前に作ったTimeLapse用タイマーを使ってTimeLapse動画で空を撮ってみました。

撮影に使用したカメラはSP-560UZで、場所は自宅ベランダから。撮影したJPG画像をAviDemuxで合成しています。合成の際にCROPをかけて空以外のもの(建物など)は切り落としています。(避雷針が残っちゃってますが、気にならないのでよしとしましょう)

1回目

マニュアルフォーカス、撮影条件(シャッタースピード、絞り)もマニュアルです。

撮影中は放置してあったのですが、ご覧の通り途中から曇り出して空が暗くなったために真っ暗な画像になってしまいました。

2回目

撮影条件がマニュアルだと空の明るさに追従できなくなるので、絞り優先に変更して続きを撮影してみました。もう夕方なのでかなり暗かったです。

既に空一面曇りなのでナニですが、途中で空がどんどん暗くなるのに、カメラがシャッタースピードを自分で調整して明るさに追従してくれています。

お手軽に撮影する分にはこちらの方が良さそうです。

EPM570T100C5Nを動かしてみた

MAX7000Aはどうしようもないので、ITプラザへ行ってオプティマイズのMAX2 CPLDボードを買ってきました。

さくさくっと組み立てます。QFPがハンダ付け済みなので楽ちんです。

今回はブレッドボードとの組み合わせで使うので、ピンソケットを部品面に載せて、ブレッドボード上に置きます。

スイッチの入力に応じてLEDがチカチカするところまで行きました。

しかしながら、やはりCPLDは同期回路を動かしてなんぼです。

3.3Vで動くオシレータがなかったので、余っていたPIC12F675をコンフィギュレーションビットで「内部オシレータ・CLKOUTイネーブル」に設定して1MHzクロックを出力させるようにして接続し、CPLDのクロック入力としてLEDをチカチカさせました。

参考になるかわかりませんが、ソースを置いておきます。BLINKLED.vhd.zip
(端子の指定は別途行ってください)
F/Fのリセットもやってない(そもそもリセット信号を入れてない)とか、スイッチの入力を直接カウンタのイネーブルにつないでる(本来ならF/Fを2回通して同期化すべき)とかありますが、動作確認レベルなので端折っています。

USB Blasterもどきを作ってみた(2)

次に、環境を整えます。

CPLD基板はブレッドボードで扱えるよう、ピンソケットを部品面側に載せることにして、半田面側にはパスコンと電源の配線をしました。

しかしこの基板、せっかく両面なんだから電源とGNDくらい配線しておいてくれても良さそうなもんなんですけど・・・。

これをブレッドボード上に取り付けて、製作したUSB BLASTERもどきと接続します。ついでに、CPLDでLEDチカチカをさせるために、LEDとSWを配線しておきます。

これでQUARTUSIIのプログラマーを起動してJTAGチェーンを認識させると・・・

無事に認識しました。(キャプチャはもっと後のものです)

で、LEDチカチカのためのVHDLコードを書いて、合成すると無事に合成できました・・・・が、書き込みでエラーになります。よくみると、EPM7256Aではなく、7256AEとしてコンパイルされています。

・・・・で、調べてみたら、MAX7000AEシリーズはサポートされているのですが、MAX7000AはQUARTUSIIではサポートされていないとのこと・・・。がっくりです。

まあ、それでもUSB BLASTERもどきの動作が確認できたのでよしとします。

<おまけ>

最近、またデジカメを入手してしまいました。こんどはIXY 210Fです。PC DEPOで中古で4980円だったのを拾ってきました。

コンパクトなくせに、しっかり写ります。

もともとはCHDKを入れて、簡単な三脚とコンパクトデジカメだけでTimeLapse撮影ができるようにして、「いつでもどこでもTimeLapse撮影」とか言いたかったんですが、CHDKはうまく入らないし・・・・で、こういう用途用に重宝しはじめてしまいました。

USB Blasterもどきを作ってみた(1)

いずれカメレオンUSB FX2を使うとしてもEZUSB-FX2のGPIFの使い方は調べなければならないのですが、調べて実験することを考えるといきなりカメレオンUSB FX2を使うよりも、EZ-USB FX2となんらかのCPLDの方が便利そうです。

ジャンク箱を漁っていたら、昔のデザインウェーブマガジン誌についていたMAX7256ATCが載った基板がでてきました。

これを使う前提で考えることにしました。

そうなるとライターが必要なのですが、さすがにパラレルポートのあるPCはもうほとんどありませんし、使い勝手もよくありません。Webで調べてみるとPIC18F14K50を使ってUSB Blaster互換のものを作っている方がいらっしゃいまして、手持ちの部品でできそうだったので、早速組み立ててみました。

ファームウェアを書き込むと、USB Blasterとして認識しました。

<おまけ>

USB Blasterのコンフィグレーション端子の表はよく使いそうなのでユーザーガイドから抜き出しておくことにしました。

EZ-USB FX2LPをLinuxで動かしてみる(2)

引き続き EZ-USB FX2LP です。

こんどは、IN方向のベンチマークを行う bench_inを試してみました。(単に記載されている通りにやっただけです)

1.Examplesを試してみる

usb-fx2-io-examples-0.4.tar.gzをダウンロードしてきて、展開します。

slave FIFOを動作させるため、以下の通り結線します。

  • PA2/SLOE, PA5/FIFOADR1, RDY0/SLRDを3.3Vへ
  • PA4/FIFOADR0, RDY1/SLWRをGNDへ

接続するとこんな感じです。

接続したらPCに接続して、「make run」でテストが実行されます。

ということで、16Mバイトの転送が513msで実行され、31.194Mb/secの速度が出ていたことがわかります。

ちなみに環境は、

  • CPU : Celeron G530
  • Mother : ASRock H61M-ITX (Intel H61 Chipset)
  • Memory : 8GB
  • OS : LinuxMint11 64bit

です。EZUSB-FX2とマザーの前面USBポートの間にUSB2.0のHUBが入っています。

2.FX2Pipeを試してみる

前回インストールしておいた、FX2pipeも試してみました。FX2pipeではEZUSB側のF/Wを指定しなければならないのですが、これに今回のbench_inのF/Wを使ってみます。

さっきと同じディレクトリで、「fx2pipe -fw=bench_in.ihx -i -0」として動作させて、適当なところで CTRL-cで中止させます。

ということで、1100秒間で45069058048バイト=45Gバイトの転送を行って、平均はほぼ40MB/sということになりました。

<追伸>fwにbench_inを指定しなくても動作は一緒でした。あとはGPIFの使い方を調べないといけないですね。

 

EZ-USB FX2LPをLinuxで動かしてみる

またまた突然ですが、仕事絡みで高速に大量のデータをお手軽にPCに引き取る必要が出てきました。

この手の話は

  • ロジックアナライザでステートモードでキャプチャして、テキストでPCに取り込んで、テキスト処理でデータを抽出する
  • 適当な高速パラレルI/Oボードで受ける

というあたりが手軽な定番だったりするわけですが、今回はその後素人さんにも使わせないといけなくなるようです。しかも金もないときたもんです。

そこで適当な方法ででっち上げようと思うと、手軽そうなのは、

  • FT245R(これはFSですが・・・)やFT2232H、FT232HのHiSpeedのUSBデバイスで受ける
  • EZ-USB FX2LP などのHiSpeedのUSBデバイスで受ける

ということになります。
本当は手軽さから前者にしたかったのですが、FT2232HやFT232HがつながるCPLDボードがあいにく手元にありませんので、今回はカメレオンUSB FX2をターゲットにすることにしました。

・・・・っと、その前に、EZ-USB FX2LPを動かしてみよう、というわけです。

で、CycFX2Progを参考にEZ-USB FX2LPを動かしてみます。(基本的に書いてあることを踏襲しているだけです)

1.必要なもの

  • CycFX2Progのソース
    作者さんのサイトからダウンロードできるようです。 ちなみにライセンスはGPLとのことなので、これをベースにしたらソース提供してやらにゃいけませんが、きっとそんなことは気にしない人たちでしょう。(提供しない、といってるんではなくて、GPLってなんぞや、って人たちだろうな・・・と)
  • libusb
    すでにインストール済みのようでした
  • SDCC
    インストールされていなかったようなので、パッケージマネージャからインストールします。
    ・・・と思ったら、CycFX2Progとは直接関係ないようです。・・・が、サンプルをコンパイルするのには必要です。

 2.コンパイル

CycFX2Progは適当なフォルダに展開してMake一発みたいです。
後のことを考えると、cycfx2progはパスが通っているところに置くのが良さそうです。そうすると、EZ-USB FX2LP側のアプリケーションのMakefileが「make run」で実行(テスト)までもっていけるようです。 自分はホームディレクトリに bin フォルダを掘って、そこに .bashrc でPATHを通しました。

3.ホストシステムの準備

/etc/udev/rules.d/z70_usbfx2.rules というファイル名で以下の内容のファイルを作ります。

次に、ユーザの設定で、自分のアカウントが「plugdev」というグループに属しているかを確認します。

その後、udevを再起動します。

さらに、EZ-USB FX2LPを取り付け直して、認識させ直します。

4.USBの折り返しテスト

こちらに記載の折り返しテストを実施してみます。

単純にソースファイル(usb-fx2-local-examples-0.5.tar.gz)をダウンロードして展開すると、

  • hello_world_ram
  • hello_world_usb
  • convert_string

という3つのテストプログラムのフォルダができます。各フォルダの中で、「make run」するとテストが完了します。

5.その他メモ

ただひたすらデータ転送するのであれば、CY7C68013A(すなわちFX2LPが必要ですが、FX2Pipeというプログラムも公開されています。ひょっとしたら、これを使うとFX2LP側のプログラムは不要になるような気がします。とりあえずインストールは、

でできました。

#こんな簡単にLinuxでEZ-USB FX2LPを動かすノウハウを公開している作者さんに感謝です。