*

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に投げたらいいのでは?という問題は今回はおいときます。

IMG_1666.JPG | Flickr - Photo Sharing!

全体の流れ

さて、Air Cardからftpするのはmyashiさんの「ひとりぶろぐ » デジカメ内部でRubyを動かす狂気!無線LAN内蔵SDカードアダプタPQI Air Cardの間違った使い方」を参考にさせていただいて実現できていましたが、Flicrに投げるにはとんすけさんの「FlucardでプログラムとかCGIとか|とんすけぶろぐ」で戴いたRubyではFlickrawをインストールできずに前に進みませんでした。

そんなわけで、Rubyを自力ビルドすることになりました。が、次から次へと依存関係といいましょうか、必須なものをビルドするはめになり2週間もかかってしまいました。

結果的には全体の流れとして、

  1. クロスコンパイル用に仮想環境をつくる
    1. Ubuntuのインストール
    2. CodeBenchのインストール
  2. zlibをビルド&インストール
  3. OpenSSLをビルド&インストール
  4. yamlをビルド&インストール
  5. rubyをビルド&インストール
  6. ntpをビルド&インストール
  7. できたものをAir Cardにもっていき、動作するようAir Card側の環境を整える
  8. Flickrawをインストール
  9. アップロード用のスクリプトを修正

となりました。

クロスコンパイル用に仮想環境をつくる

MacBook Air(mid 2012)上のVMwareFusion5.0.2にUbuntuをインストールしたのですが、この辺りは詳細記録がないです。

選択したのはubuntu-12.04.1-server-i386です。当初は64bit版でミニマルに構成しようとしていたのですが、どうもうまくいかず、こんなところで時間を食ってるわけにはいかない、と32bitサーバー版でてんこ盛り環境を作成。

OSX側と仮想側とファイル共有するためにVMware Toolsもインストールしています。また、当初はUbuntu出来合いのクロスコンパイル環境で取り組んでいました(後にCodeBenchに変更)

aptのログをみてみると、

  1. Commandline: apt-get install emacs
  2. Commandline: apt-get install gcc
  3. Commandline: apt-get install build-essential linux-headers-3.2.0-29-generic-pae
  4. Commandline: apt-get install g++-4.6-multilib-arm-linux-gnueabihf
  5. Commandline: apt-get install qemu-user-static
  6. Commandline: apt-get install wget libssl-dev zlib1g-dev libreadline-dev libxslt-dev libxml2-dev
  7. 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

  1. 武本Timothy より:

    ありがたいですが、とてもできそうにありません!スマホンを持ちたくない妻の写真が自動でFlickrにアップされる方法を探していましたが、年間50ドルのEye-FiクラウドとIFFT以外はまだ見つかっていません。Samsung WB350Fはできるそうですが、5万円も安くありません。

  2. masaki より:

    武本さんのコメントを拝見いたしまして、よい物がないか探しましたが、古いEye-Fiくらいしかございませんね。
    実際のところ、Flickrはアップロード速度が遅く、SDカードからのアップロードは現実的でありません。
    そのため、Eye-Fi社も自社のクラウドに変えていったのかもしれません。
    PQI AirCardなどでDIY的に対応してく場合、いったん、軽快な別サーバにFTPでアップロード、そこから
    自動的にFlickrにアップロードさせるのが現実的かなぁと思います。

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

no image
Inno Setupを利用して複数PCに同様の環境を構築する

ブラウザベースの業務の効率化のためにブックマークレットを作成したのです

no image
sacd_extractをOSXでmakeする

sacd_extractは、SACD-ISOをDSFやDIFFに展開す

サーバのPositive SSL証明書更新(2015/05版)

サーバの証明書を更新 今年もやり方を忘れていたので再録。

ドイツからMAXI-COSI PebbleとEasy Base2他を個人輸入したときの配送記録

MAXI-COSI Pebbleは国内・海外の価格差がそれほどないので

eBayのGlobal Shipping Programでの配送記録

やっぱり遅いeBayのGlobal Shipping Program

→もっと見る

    • None Found
  • Visits today: 271
PAGE TOP ↑