PQI Air Card+Ruby1.9.3+FlickrawでFlickrにポストする
公開日:
:
最終更新日:2012/12/19
Appleいろいろ
PQI Air Cardにインストールした自力ビルドのRubyを使ってFlickrにポストできたという記録ですが、なにぶんソースからビルドなんて256倍とかRun Run Linuxを読んでた頃(=前世紀)の経験しかないブログ主の記録なので、それはないわ、とかあれば是非ともご指摘下さい。
なお、Flickrへのアップはけっこう時間がかかり、現実的なのか?!とか、iPhoneでアクセスしてiPhoneからFlickrに投げたらいいのでは?という問題は今回はおいときます。
目次 [hide]
全体の流れ
さて、Air Cardからftpするのはmyashiさんの「ひとりぶろぐ » デジカメ内部でRubyを動かす狂気!無線LAN内蔵SDカードアダプタPQI Air Cardの間違った使い方」を参考にさせていただいて実現できていましたが、Flicrに投げるにはとんすけさんの「FlucardでプログラムとかCGIとか|とんすけぶろぐ」で戴いたRubyではFlickrawをインストールできずに前に進みませんでした。
そんなわけで、Rubyを自力ビルドすることになりました。が、次から次へと依存関係といいましょうか、必須なものをビルドするはめになり2週間もかかってしまいました。
結果的には全体の流れとして、
- クロスコンパイル用に仮想環境をつくる
- Ubuntuのインストール
- CodeBenchのインストール
- zlibをビルド&インストール
- OpenSSLをビルド&インストール
- yamlをビルド&インストール
- rubyをビルド&インストール
- ntpをビルド&インストール
- できたものをAir Cardにもっていき、動作するようAir Card側の環境を整える
- Flickrawをインストール
- アップロード用のスクリプトを修正
となりました。
クロスコンパイル用に仮想環境をつくる
MacBook Air(mid 2012)上のVMwareFusion5.0.2にUbuntuをインストールしたのですが、この辺りは詳細記録がないです。
選択したのはubuntu-12.04.1-server-i386です。当初は64bit版でミニマルに構成しようとしていたのですが、どうもうまくいかず、こんなところで時間を食ってるわけにはいかない、と32bitサーバー版でてんこ盛り環境を作成。
OSX側と仮想側とファイル共有するためにVMware Toolsもインストールしています。また、当初はUbuntu出来合いのクロスコンパイル環境で取り組んでいました(後にCodeBenchに変更)
aptのログをみてみると、
- Commandline: apt-get install emacs
- Commandline: apt-get install gcc
- Commandline: apt-get install build-essential linux-headers-3.2.0-29-generic-pae
- Commandline: apt-get install g++-4.6-multilib-arm-linux-gnueabihf
- Commandline: apt-get install qemu-user-static
- Commandline: apt-get install wget libssl-dev zlib1g-dev libreadline-dev libxslt-dev libxml2-dev
- Commandline: apt-get install gawk
と記録があります。2番目、3番目はVMware Toolsのインストールに必要でした。4番目、5番目は最初に試みたクロスコンパイル用パッケージ。6番目の前あたりに、前述のCodeBenchを入れています。実際にクロスコンパイルでRubyをビルドするためにRubyが必要だったので、Rubyもソースからビルドして入れてあります(これは簡単なので省略)。
Sourcery CodeBenchのインストール
どうにもうまくいかず、クロスコンパイル環境をCodeBenchに変更。この時点で不慣れなUbuntuに来た意味がなくなってしまってるのですが、もう戻れない。とんすけさんの「FlucardでプログラムとかCGIとか|とんすけぶろぐ」の真ん中あたりを参考にCodeBenchを入手してインストール。
今後間違いなくわけがわからなくなりそうなので、インストールはホームディレクトリにしました。パスは通ってないのですが、デフォルトでパスを通すのもどうかと思ったので、毎回ログイン後 export PATH=/home/hoge/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin:$PATH としてます。
ぐぐってみたら、解凍ソースディレクトリでConfigureしないほうがいい、とあったので素直に従い、objディレクトリを作成し、ここで作業することにします。環境変数は export ARCH=arm も設定しました。
それからいまいちわかってないのですが、必要ファイルをAir Card側にも入れておかないとダメっぽいので、
~/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/arm-none-linux-gnueabi/libc/を丸ごと、Ubuntu上の/mnt/sd/libcとしてコピーしました(Air Card内と同じ位置関係を意識)。これらはmicroSD内に置くことになるのですが、microSDはFATのためシンボリックリンクなどが使えないのでcp -LRしました。ドキュメントではlibcディレクトリ以下全部は必要ないとあったのですが、まずは動作最優先で全部入りです。以下、目標物は/usr/arm-linux/以下にインストールすることにします。
zlibをビルド
objディレクトリではなく、ソース解凍ディレクトリで
CC=arm-none-linux-gnueabi-gcc \
LDSHARED=”arm-none-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1″ \
./configure –prefix=/usr/arm-linux –shared
としてMakefileを作ってから、Makefileを編集。以下、変更部分だけ。
make
make test
sudo make install
OpenSSLのインストール
かなりハマッてしまった。最新のソースでのビルドを断念して一つ前の(openssl-1.0.1c)でなんとかOK。
perlに文句言われるので、
ソースを解凍したディレクトリで
としてMakefile生成後、Makefileを手修正。
CFLAGに-Wl,-rpath=/mnt/sd/libc/lib:/mnt/sd/libc/usr/lib -Wl,–dynamic-linker=/mnt/sd/libc/lib/ld-linux.so.3を追記。
としたが、何がよくて何がダメだったのかわからないけど、とりあえず、
make
make test
sudo make install
と無事に完了。
yamlのビルド
改めてCCをexportする
configure後、MakefileのCFLAGに-Wl,-rpath=/mnt/sd/libc/lib:/mnt/sd/libc/usr/lib -Wl,–dynamic-linker=/mnt/sd/libc/lib/ld-linux.so.3を足した。
make
sudo make install
Rubyのビルド
make
make test
sudo make install
ntpのビルド
Flickrawで認証エラーが出るのがなぜだかわからなかったのですが、Air Cardは時計が設定されていないので、起動毎に1月1日になってしまうため、ntpdateで時刻を取得することにしました。ビルドは適当にやって通りました。
各生成物をmicroSDに移動
/usr/arm-linux以下をvmの共有にcp -LRしてから、OSXでmicroSDをマウントして丸ごと/mnt/sd/usr/arm-linuxにコピー。/mnt/sd/libcもコピー。ntpdateをコピー。しかし/mnt/sdにたくさんあるとAir CardにiPhoneから直接アクセスするときに重くなりますね。
PQI Air Card側の環境設定
autorun.shでのシンボリックリンクの張り替え。
ntpdateを動作させるために/mnt/sd/DCIM/122_TREK/etc/servicesを作成。内容は以下のとおり。
/mnt/sd/DCIM/122_TREK/etc/profileでパスを通す
ntpdateはアップロードスクリプトの実行直前にw2にて
Air CardからRubyでFlickrにポスト
Flickraw用にFlickr APIキー等の取得が必要です。最初に書いてますが、アップロードするのに結構時間がかかるため、実際には自前の快速ftpサーバを設けて、アップロード後、サーバー側でのんびりとFlickrにポストさせたほうがよいのかなぁ。
Flick用のトークン等の取得方法はFlickawのREADMEにあるように
Rubyの勉強がてらひとりぶろぐさんのスクリプトを改変させていただきました。
autprint.rb
Comment
ありがたいですが、とてもできそうにありません!スマホンを持ちたくない妻の写真が自動でFlickrにアップされる方法を探していましたが、年間50ドルのEye-FiクラウドとIFFT以外はまだ見つかっていません。Samsung WB350Fはできるそうですが、5万円も安くありません。
武本さんのコメントを拝見いたしまして、よい物がないか探しましたが、古いEye-Fiくらいしかございませんね。
実際のところ、Flickrはアップロード速度が遅く、SDカードからのアップロードは現実的でありません。
そのため、Eye-Fi社も自社のクラウドに変えていったのかもしれません。
PQI AirCardなどでDIY的に対応してく場合、いったん、軽快な別サーバにFTPでアップロード、そこから
自動的にFlickrにアップロードさせるのが現実的かなぁと思います。
3年近く前のエントリへのコメント&お尋ね、失礼いたします。
rubyもflickrも使わないのですが…
カーナビに音楽ファイルを送る方法として、pqui air card2を購入しました。
お書きの通り、起動の度に時刻が初期値に戻ってしまうので、ntpdateを導入したいのですが、
「ntpのビルド」と「各生成物をmicroSDに移動」の具体的方法が判らずこまっております。
お教えいただけたら幸いです。
自己レスですいません。
別の方法で解決しました!
ntpdが効くようにして、
ntpd -p ipaddress
でいけました。
お騒がせしましたm..m