小米WiFiルーター青春版は小型ながらsoftetherまで動かすことが出来ました。ただ動いただけではなく、メモリーの使用状況やCPUの稼働率を見ると何とか実用的に稼働できそうです。そこで欲張ってパケットリピーターstoneも動かしてみることにしました。
参考webサイト:
stone version 2.3e stoneの公式ページです。
La Fonera 上で stone を走らせてみる 開発者の方の記事です。
OpenWrt – Cross Compile OpenWrt公式WiKiのCross Compileのための設定です。
[ Cross Compileのための設定 ]
SDKの導入が終わっていることを前提とします。詳しくは「小米ルーター青春版 + OpenWrtにSoftether VPNを導入する」をご覧ください。
OpenWrtの公式ガイドにあるようにstaging dirのtoolchainにパスを通し、環境変数STAGING_DIRを設定します。わたしの場合は以下のような設定を ./.bash_profile に入れました。
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-5.3.0_musl-1.1.15/bin
export PATH
STAGING_DIR=$HOME/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-5.3.0_musl-1.1.15
export STAGING_DIR
openwrt以下の部分はTarget Systemによって変わります。
[ stoneのビルド ]
stoneの公式ページよりソースコード一式をダウンロードし展開します。
$ wget http://www.gcd.org/sengoku/stone/stone-2.3e.tar.gz
$ tar xvf stone-2.3e.tar.gz
$ cd stone-2.3d-2.3.2.7/
Makefileを少々変更しなければなりません。以下、変更部分のみです。
fon:
$(MAKE) CC="mipsel-openwrt-linux-gcc" FLAGS="-O -Wall -DPTHREAD -DUNIX_DAEMON -DPRCTL -D_GNU_SOURCE $(FLAGS)" LIBS="-lpthread $(LIBS)" stone
mipsel-openwrt-linux-strip stone
fon-pop:
$(MAKE) CC="mipsel-openwrt-linux-gcc" TARGET=fon pop_stone
fon-ssl:
$(MAKE) CC="mipsel-openwrt-linux-gcc" SSL_LIBS="-lssl -lcrypto" TARGET=fon ssl_stone
fon用の設定を流用しました。
– “-D_GNU_SOURCE”を追加。これは通常のLinux用にmakeするときも必要かもです。
– CC=の部分を”mips-linux-uclibc-gcc”から”mipsel-openwrt-linux-gcc”に書き換える。
– mips-linux-uclibc-stripをmipsel-openwrt-linux-stripに書き換える。
以上でmake fonは通るようになりました。ところがmake fon-sslを実行するとopenssl/crypto.hが無いと言って怒られます。
確かにSTAGING_DIR以下を探しても見つかりません。というか$STAGING_DIR/usr/以下にはinludeとlibがありますが空っぽです。探してみると~/openwrt/staging_dir/target-mipsel_24kec+dsp_musl-1.1.15/usrには全てのファイルが揃っているようです。正しい解決方法は分かりませんが、とりあえずスタティック・リンクを貼ってみました。
$ cd ~/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-5.3.0_musl-1.1.15
$ mv usr usr.xx
$ ln -s ~/openwrt/staging_dir/target-mipsel_24kec+dsp_musl-1.1.15/usr ./usr
再びstoneに戻ってmake fon-sslでstoneが出来上がりです。
$ cd ~/stone-2.3d-2.3.2.7/
$ make fon-ssl
[ 導入 ]
単純に/usr/bin/にstoneをおきました。使い方については、ここでは詳しくは書きません。
/etc/init.d/にスクリプトを置けばLuCIからコントロール可能と思います。わたしの場合は常に起動しますので単純に/etc/rc.localから起動することにしました。
no comment untill now