La Fonera (FON ソーシャル ルータ) のファーム ウェアのソース コードは、 Fon blog に書かれているように、 http://download.fon.com/firmware/fonera/latest/fonera.tar.bz2 から取得できる。 これを展開して make を実行すると、 「OpenWrt Configuration」ダイアログが表示される。 現行の La Fonera のファーム ウェアと同じものをビルドするだけなら Configuration の変更は不要。そのまま save して exit すればビルドが行なわれる。
stone を make するには、
libpthread と libopenssl が必要なので、
以下のように設定する。
まず、
Base system --->
を選択して、以下のように libpthread を make するように指定する:
<*> libpthread.......................................... POSIX threa
続いて、
Libraries --->
を選択して、以下のように libopenssl も make するように指定しておく:
<M> libopenssl..................................... Open source SSL < > openssl-util.............................. OpenSSL command lin <M> zlib................. Library implementing the deflate compressi
「Do you wish to save your new OpenWrt configuration?」 と聞かれるので「Yes」と答える。 するとクロスコンパイル環境とファームウェアのビルドがどんどん進む。
*** End of OpenWrt configuration. *** Execute 'make' to build the OpenWrt or try 'make help'. make[2] toolchain/install make[3] -C toolchain install make[4] -C toolchain/sed prepare make[4] -C toolchain/sed compile make[4] -C toolchain/sed install make[4] -C toolchain/kernel-headers prepare make[4] -C toolchain/kernel-headers compile make[4] -C toolchain/kernel-headers install make[4] -C toolchain/sstrip prepare make[4] -C toolchain/sstrip compile make[4] -C toolchain/sstrip install make[4] -C toolchain/uClibc prepare make[4] -C toolchain/binutils prepare make[4] -C toolchain/binutils compile make[4] -C toolchain/binutils install make[4] -C toolchain/gcc prepare make[4] -C toolchain/gcc compile make[4] -C toolchain/uClibc compile make[4] -C toolchain/uClibc install make[4] -C toolchain/gcc install make[4] -C toolchain/ipkg-utils prepare make[4] -C toolchain/ipkg-utils compile make[4] -C toolchain/ipkg-utils install make[4] -C toolchain/libnotimpl prepare make[4] -C toolchain/libnotimpl compile make[4] -C toolchain/libnotimpl install make[4] -C toolchain/lzma prepare make[4] -C toolchain/lzma compile make[4] -C toolchain/lzma install make[4] -C toolchain/squashfs prepare make[4] -C toolchain/squashfs compile make[4] -C toolchain/squashfs install make[4] -C toolchain/jffs2 prepare make[4] -C toolchain/jffs2 compile make[4] -C toolchain/jffs2 install
「install」と表示されているが、 これは「./staging_dir_mips」ディレクトリへのインストール。 「./staging_dir_mips」にクロスコンパイル環境がインストールされた後に、 これを使ってカーネルやライブラリ等のコンパイルが進む。
make[2] target/compile make[3] -C target compile make[4] -C target/utils prepare make[4] -C target/utils compile make[4] -C target/utils install make[4] -C target/linux prepare make[5] -C target/linux/ar531x-2.4 prepare make[4] -C target/linux compile make[5] -C target/linux/ar531x-2.4 compile make[6] -C target/linux/ar531x-2.4 modules make[6] -C target/linux/ar531x-2.4 packages make[4] -C target/image/ar531x compile make[2] package/compile make[3] -C package compile make[4] -C package compile-targets make[5] -C package/base-files compile make[5] -C package/bridge compile make[5] -C package/busybox compile make[5] -C package/chillispot compile make[5] -C package/dnsmasq compile make[5] -C package/dropbear compile make[5] -C package/foncheckrsa compile make[5] -C package/haserl compile make[5] -C package/madwifi compile make[5] -C package/hostapd compile make[5] -C package/iptables compile make[5] -C package/mini_fo compile make[5] -C package/mtd compile make[5] -C package/libpcap compile make[5] -C package/linux-atm compile make[5] -C package/ppp compile make[5] -C package/pptp compile make[5] -C package/iproute2 compile make[5] -C package/qos compile make[5] -C package/webif compile make[5] -C package/wireless-tools compile make[5] -C package/zlib compile make[5] -C package/openssl compile
「OpenWrt Configuration」ダイアログで指定しなかった パッケージまで表示されるが、 これは単に make がそのパッケージのディレクトリの Makefile を実行しただけで、 コンパイルなどは何も行なわずに抜けている。
make[2] package/install make[3] -C package install make[4] -C package install-targets make[5] -C package/base-files install make[5] -C package/bridge install make[5] -C package/busybox install make[5] -C package/chillispot install make[5] -C package/dnsmasq install make[5] -C package/dropbear install make[5] -C package/foncheckrsa install make[5] -C package/haserl install make[5] -C package/hostapd install make[5] -C package/iptables install make[5] -C package/madwifi install make[5] -C package/mini_fo install make[5] -C package/mtd install make[5] -C package/ppp install make[5] -C package/pptp install make[5] -C package/qos install make[5] -C package/iproute2 install make[5] -C package/webif install make[5] -C package/wireless-tools install make[2] target/install make[3] -C target install make[4] -C target/image/ar531x clean make[5] -C target/image/generic/lzma-loader clean make[4] -C target/utils prepare make[4] -C target/utils compile make[4] -C target/utils install make[4] -C target/linux prepare make[5] -C target/linux/ar531x-2.4 prepare make[4] -C target/linux compile make[5] -C target/linux/ar531x-2.4 compile make[4] -C target/linux install make[5] -C target/linux/ar531x-2.4 install make[4] -C target/image/ar531x compile make[4] -C target/image/ar531x install make[5] -C target/image/generic/lzma-loader clean compile
以上で、クロスコンパイル環境とファームウェアのビルドが全て完了。 所要時間は 30分ほど (私の Celeron D 345 マシンの場合)。
ビルドしたクロスコンパイル環境は、 「staging_dir_mips/bin」に PATH を通すだけで使用できる。
stone を make してみる。 まずは CVS レポジトリから最新版を checkout する:
senri % cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/stone login Logging in to :pserver:anonymous@cvs.sourceforge.jp:2401/cvsroot/stone CVS password: senri % cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/stone co stone cvs checkout: Updating stone U stone/GPL.txt U stone/Makefile U stone/README.en.txt U stone/README.txt U stone/cryptoapi.c U stone/dist U stone/global.h U stone/logmsg.mc U stone/md5.h U stone/md5c.c U stone/stone.1 U stone/stone.1.ja U stone/stone.c U stone/stone.cnf U stone/stone.sh U stone/stone.spec
次に make する:
senri % cd stone senri % make fon-ssl make CC="mips-linux-uclibc-gcc" SSL_LIBS="-lssl -lcrypto" TARGET=fon ssl_stone make[1]: Entering directory `stone' make FLAGS="-DUSE_POP -DUSE_SSL " LIBS=" -lssl -lcrypto" fon make[2]: Entering directory `stone' make CC="mips-linux-uclibc-gcc" FLAGS="-Wall -DPTHREAD -DUNIX_DAEMON -DPRCTL -DUSE_POP -DUSE_SSL " LIBS="-lpthread -lssl -lcrypto" stone make[3]: Entering directory `stone' mips-linux-uclibc-gcc -Wall -DPTHREAD -DUNIX_DAEMON -DPRCTL -DUSE_POP -DUSE_SSL -o stone stone.c -lpthread -lssl -lcrypto make[3]: Leaving directory `stone' mips-linux-uclibc-strip stone make[2]: Leaving directory `stone' make[1]: Leaving directory `stone'
なお、CVS から checkout した最新版でなくても、 例えば stone 2.3c において
senri:/usr/src/stone-2.3c % mips-linux-uclibc-gcc -Wall -DPTHREAD -DUNIX_DAEMON -DPRCTL -DUSE_POP -DUSE_SSL -o stone stone.c -lpthread -lssl -lcrypto
などとコンパイルすることにより La Fonera 版 stone を make することができる。 つまり特に変更することなく make できるわけで、 いかに La Fonera がフツーの Linux マシンであるかが分かる。
make した stone および、 libpthread, libopenssl を La Fonera へコピーすれば (libopenssl は SSL 版 stone の場合のみ必要)、 La Fonera 上で stone を実行することができる。
root@OpenWrt:~# stone Jan 4 00:18:08.478674 1024 start (2.3c) [14946] Jan 4 00:18:08.488958 1024 stone 2.3c https://www.gcd.org/sengoku/stone/ Jan 4 00:18:08.570372 1024 Copyright(C)2007 by Hiroaki Sengoku <sengoku@gcd.org> Jan 4 00:18:08.579479 1024 using OpenSSL 0.9.8d 28 Sep 2006 http://www.openssl.org/ Usage: stone <opt>... <stone> [-- <stone>]... opt: -h opt ; help for <opt> more -h stone ; help for <stone> -h ssl ; help for <SSL>, see -q/-z opt
素朴な質問:
La Fonera の電源入れるとstoneを自動的に実行させるには、どうすればよろしいでしょうか?
Comment by lili — 2007年4月29日 @ 08:39