項目
/1)緒言/ 2)動作環境/3)参考網献/4)足りないものがあるようだ/5)libxml2のクロスコンパイル/6)リンク張りまくり/7)libxml2のクロスコンパイル/8)cadaverコンパイル完了/9)リナザウでcadaver起動!/10)結言/
今回はリナザウに関する大特集からケツをまくって逃げたわたしであるが、何もそのかわりにというわけではない。日頃からリナザウとPCとのデータ転送についてはまあ、悩んでいた。それを今回の演習を機に、解決しようというのだ。
最初は添付のユーティリティを使っていた。ザウルスショットとかである。Linuxマシンとザウルス間のデータ転送を、Windowsの仲介に頼るという、多くのLinux愛用者様方にフクロにされそうな屈辱的行為を行っていた。
そのあと落ち着いてNFSファイル共有に取り組んだ。だがそれにはターミナルからrootになってマウントコマンドをかまさなければならないし、忘れずにアンマウントもしておかないとめんどくさいことになる。
だいいち、そのときに応じてあっちの母艦こっちの母艦と渡り歩くような生活にはいずれは破綻が来る。つまり、オリジナルはどの母艦にあったかしらあーもう立ち上がってないじゃんええッ別のOSになってる消しちゃったかしらわたしああ〜とか、言うことになるだろう。やはり、他のマシンと同じように、我が家のファイルストレージ総元締めであるWindowsサーバの、WebDAV共有フォルダに、アクセスしたい。
今回紹介されていたコマンドラインベースのWebDAVクライアントcadaverが良さそうである。これをリナザウ用にクロスコンパイルして導入できないか?そう、XFree86クロスコンパイルで得た知識の応用だ!ていうかXFree86のよおな超デカブツにくらべればへのようなものであると期待される!
というわけで挑戦することにした。
PCでのクロスコンパイル環境は、XFree86のときと同様・・・では全然ない。
すなわち、当時の母艦に使ったDell Optiplexは、今回の報告の(1)に示したのに子2号の一大スペックアップとのトレードで、夫の仕事のバックアップマシン用に引き渡したのである。条件的には猿蟹合戦におけるそれではないかなどということは、考えないことにしている。かくしてLinuxは家庭内最速マシンのに子2号に挿すモービルラック式のHDDにインストールすることとなり、もうRed
Hat Linux 9を使うことにした。全て入れ直して、クロスコンパイル環境も再構築である。
今回のクロスコンパイルに際しては、またも小松氏の同じページ「Computer Diary(Japanese)--パソコン日記--」に思い切りお世話になった。後述のzlibのクロスコンパイルなどは、ほとんどまるっと方法が啓示されていたのでもーたすかるたすかる。重ねて本ページでも深い敬意と感謝を表す次第である。
さて、ディレクトリ/home/noniko/source で、ソースファイルcadaver-0.21.0.tar.gzを展開する。
クロスコンパイルはどーすればいいか。 まず、こうやれれば一番いいらしい。ちなみに/opt/Embedix/tools/arm-linux/bin および
/opt/Embedix/tools/bin にパスを通しておくことは必要である。
$cd cadaver-0.21.0
$./configure --prefix=/home/noniko/source/cadaver --host=arm-linux
で、makeする。出力を見ると確かに/opt/Embedix/tools/arm-linux/bin/gccが呼ばれているようだ。だが、-lxmlというものが呼ばれたところで止まった。-lxmlが見つからない、という。
調べてみるとこれはlibxml2というもののライブラリらしい。赤帽自身にはあるのか。あった。/usr/local/libxml2.so.なにがしのようなものが揃っている。一方/opt/Embedix/tools/arm-linux/lib の中にはそういったものは見あたらない。と、いうことはコイツもクロスコンパイルしなければならないということだ。
ウェブで調べて、 http://xmlsoft.org/downloads.html というところへ行って libxml2-2.5.0.tar.gz というものをゲットした。やはり、/home/noniko/sourceディレクトリ上で解凍し、これも
$cd libxml-2.5.0
$./configure --prefix=/home/noniko/source/xml --host=arm-linux
とやってみた。そのあと、make、make install と行った。
なんだか問題なく行ったらしい。少なくともエラーメッセージは出なかった。ほんとけ〜?と思う。
さてじゃあこれをどうやって参照させようか。えーと。と考えて行ったことは、実はかなり骨折り損のくたびれもーけだったかも知れない。
クロスコンパイルでできたのは、/home/noniko/source/xmlというディレクトリだ。
その中身はbin, lib, include, shareとある。
このうち、環境設定で/home/noniko/source/xml/libをLD_LIBRARY_PATHに加えておけばよかっただけなのかも知れない。
だが、気になるのは、わたしが今いる環境はクロスコンパイル環境である。
環境変数の$LD_LIBRARY_PATHは本体の/usr/bin/gccで参照すべきライブラリパスなのではないのかどうなのか?ハードウェアの次にシステム管理に弱いわたしには、そのへんがイマイチはっきりしないのだ。おまけにbinディレクトリなんかもある。いったいどういう仕組みでこれは動くのかよくわかってないから、コンパイルにどこまでのファイルが参照されているのかもわからない。
うーん。まあ。よし、ダサいかも知れないが、確実(と思われる)方法でやってみよう。
ということで、/home/noniko/source/xml/lib の配下の全てのファイル及びディレクトリについて、/opt/Embedix/tools/arm-linux/lib にシンボリックリンクを貼った。つまり、
ln -s /home/noniko/source/xml/lib/pkgconfig /opt/Embedix/tools/arm-linux/lib/pkgconfig
ln -s /home/noniko/source/xml/lib/python2.2 /opt/Embedix/tools/arm-linux/lib/python2.2
ln -s /home/noniko/source/xml/lib/libxml2.a /opt/Embedix/tools/arm-linux/lib/libxml2.a
............................
とやったわけである。他のbin, include, shareディレクトリ下のものについても同様。
ln -s /home/noniko/source/xml/bin/xml2-config /opt/Embedix/tools/arm-linux/bin/xml2-config
............................
ホントに必要なのかどおーかは、わからない。さすがにman類まではやらなかったけど。
こうして、もう一度cadaverのほうをコンパイルしてみる。すると、今度は-zが足りないという。
zlibもクロスコンパイルというわけだ。
http://www.gzip.org/zlib/ にでかけて、zlib-1.
1.4 tar.gzをもらってくる。
こいつを解凍するが、今回は./configureのオプションに、--host というのがないので、
$cd zlib-1.1.4.tar.gz
$./configure --prefix=/home/noniko/source/zlib --shared
とやった。そうしてできたMakeFileの修正。
CC=gcc を
CC=/opt/Embedix/tools/arm-linux/bin/gcc
LDSHARED=gcc -shared -Wl,-soname,libz.so.1を
LDSHARED=/opt/Embedix/tools/arm-linux/bin/gcc -shared -Wl,-soname,libz.so.1
とやって、make。問題なく行ったようだ。
ただ、make install のときに、/home/noniko/souce/zlib/libをつくれません。ファイルもディレクトリもありません。と言われた。まあ作っておいてあげればいいだけの話である。
/home/noniko/souce/zlib/lib と
/home/noniko/souce/zlib/include を作ってやったら、make installは文句なく終了した。
同様に、コンパイル生成物の各ファイルについて、/opt/Embedix/tools/arm-linux配下にリンクを貼る。
さて三たびcadaverのクロスコンパイルだぞ。今度はmakeのエラーは出ない。make installも行ったようだ。成功しましたというメッセージはないが、メッセージがあっても信用できない場合があるので(まだ言ってる)、とにかく行ってみるしかない。
Linuxマシンnoni2の/home/shareディレクトリをNFS共有に設定してあるので、コンパイル生成物をそこにコピー。リナザウ上にマウントしてさらにリナザウ本体/home/zaurus上に持ってくる。
どの生成物か?結局全部持って行った。つまり、cadaver、xml、zlibのディレクトリを全部だ。当然といえば当然なのかも知れないが、cadaver実行時にはコンパイル時同様、両ライブラリが要求される。でも今度はシステムの環境が実行環境なので、ライブラリパスを通しておけばよかった。
ライブラリパスを通す。それはつまり、/home/zaurus/.bashrc というファイルを作る(ないので)。そして、
#.bashrc
PATH=$PATH:/home/zaurus/cadaver/bin
export PATH
LD_LIBRARY_PATH=$LD_LIBARAY_PATH:/home/zaurus/xml/lib:/home/zaurus/zlib/lib
export LD_LIBRARY_PATH
みたいに書いておくのサ。なおここではcadaverに必要なパスだけ書いてあります。
で、ターミナルから
cadaver
結果はこんな感じです。出張中の夫に見られたら「なんでこんなみすぼらしい画像出すんだヨ!」と叱られそうだ。

以上、WebDAVクライアントcadaverを、Linux上でのクロスコンパイルにより Zaurus SL-C760に導入し、これをWebDAVサーバにアクセスせしめることができた。
いや、自分でも信じられないほどうまく行った。そして今回は非常に実際に必要な機能だっただけにうれしい。PCとのデータのやりとりがラクになりそうだ。