Sunday, February 18, 2018, 00:43 - OS / Misc
Posted by ELIN
Buffaloのゴミ(WZR-HP-AG300H)にDD-WRTを入れるだけ……
なのに1日かかりました

1. DD-WRT最新版(34929)はopkgもipkgもない
したがって、SoftEther VPNの.ipkをインストールできない、困った困った
しかし実は.ipkは単なる.tar.gzでしかないのでバラして/jffs以下へ自分で置けばよい
wget -O - http://.../softethervpn_4.19-9605_ar71xx.ipk|tar zxO ./data.tar.gz|tar zxvf - -C /jffs

2. -sh: vpnserver: not found
原因不明
「パス通ってないだけじゃねえの?」とか思うかもしれないが、そういう初歩的な問題ではない
厄介な問題だったが、結論はバイナリの作りの問題のよう
例えば古いDD-WRT(23xxxとか……)はOpenWRTでいうところの12.09用にmakeしたものが正常に動作するが、14.07以降のバイナリでnot foundと言われる
逆に新しいDDWRT(30xxx以降とか……)は17.01でなければダメのよう
このDD-WRTがいくつのときどうとかの閾値はまったくわからんし、実験したくもない

なので17.01でSoftEther VPNをmakeし直す

ちなみに28598/30826/34311/34760を試したが、これらは17.01のバイナリが必要な模様
但しbrcm47xxのWZR-D1100Hについては30826で17.01のバイナリではないもので実際に動いているので、ちょっと試験のエビデンスが怪しい

3. こんぱいるえらー
/root/sdb1/LEDE/build_dir/host/cmake-3.10.1/Source/cmGlobalNinjaGenerator.cxx: In member function 'void cmGlobalNinjaGenerator::AppendTargetDependsClosure(const cmGeneratorTarget*, cmNinjaOuts&, bool)':
/root/sdb1/LEDE/build_dir/host/cmake-3.10.1/Source/cmGlobalNinjaGenerator.cxx:1077:40: error: 'class std::map<const cmGeneratorTarget*, std::set<std::basic_string<char> > >' has no member named 'emplace_hint'

はい、これはgccが古いからですね
筆者の環境はOpenWRT用にSoftEther VPNの.ipkを作っていたときから進んでいません
数年前にメインリポジトリにマージされてからほったらかしてたのでgccは4.7.2
これを通すには4.8.xが必要になる(らしい)

コンパイル方法はhttps://github.com/el1n/OpenWRT-package-softetherを参考に
feed.confのpackages(1行目のやつ)にはSoftEther VPNが含まれているのでコメントアウト
2 comments ( 1470 views )
Tuesday, January 14, 2014, 17:51 - OS / Misc
Posted by ELIN
実はOpenWRTでSoftEther VPNを動かすを書いている途中に4.03.9411がリリースされてしまい、その時点で再検証を行ってはいたのだが、その内容が不穏なので別のエントリに分割することになった

さて、9411は9408のように普通にmakeできない
その原因として9408はhamcore.se2をバイナリのまま提供していたが、9411以降はこれのソースが同梱され
1. hamcorebuilderのmake
2. hamcorebuilderでhamcore.se2の作成
3. 本体のmake
という手順になった
しかしこれはhamcorebuilderもOpenWRT用にmakeされてしまい、当然2の時点でザコることになる

この問題を回避すべく色々と思案したが、結局力技で通すことにした
つまり
1. x86でmake
2. hamcore.se2の作成
3. 再度OpenWRT用のmake
とmake make clean makeというあってはいけないようなMakefileになってしまった (参照)

いつの日かhamcore.se2が爆発しそうで怖い

softethervpnserver_4.03-9411_ar71xx.ipk
softethervpnclient_4.03-9411_ar71xx.ipk
softethervpnbridge_4.03-9411_ar71xx.ipk
softethervpncmd_4.03-9411_ar71xx.ipk
1 comment ( 1216 views )
Wednesday, January 8, 2014, 10:15 - OS / Misc
Posted by ELIN
先日SoftEther VPNのソースコードがようやく公開されたので早速やる

まずOpenWRTのSDK環境を用意する
OSはLinuxなら何でも良さそうだが、こういう用途は(私の中で)Debianと相場が決まっているので、DebianのVMを用意するところから始める
……が、インストールすら面倒なのでDebianベースのTurnKey Coreを使うことにした

最初に最低限度必要になるものをインストール
# apt-get install -y subversion make gcc g++ libncurses5-dev libghc-zlib-dev gawk bzip2 patch

次にSDKだが、以前横着した結果、どうでもいい地雷を踏んでしまったので、今回は最初からsvnを使う
# svn co svn://svn.openwrt.org/openwrt/tags/attitude_adjustment_12.09
# cd attitude_adjustment_12.09

このままではiconv-fullが含まれていないので
# svn export svn://svn.openwrt.org/openwrt/packages/libs/libiconv-full@29638 package/libiconv-full

さて、SoftEther VPNをmakeするときに起きる問題はUT-VPNのときと同様の問題で、大まかに
1. SoftEther VPNのmakefileがCCFLAGS/LDFLAGSを渡さない
2. Mayaqua.hのiconvに関わる部分がザコってる
3. libopensslのコンパイルオプションにno-sha0が付いている
の3点
1と2に関してはパッチで対応し、3は手動で書き換える必要がある

先に3の問題を修正する
# sed -i 's/no-sha0//' package/openssl/Makefile
次にSoftEther VPNの用意だが、UT-VPNのときと同様にSDKでパッケージできるmakefileを書いたので、特別な理由がなければそれを使えばよい
# git clone https://github.com/el1n/OpenWRT-package-softether.git package/softethervpn

そしてSDKの設定
ちなみにrootで実行しようとすると警告が出て走らない
一見FORCE=1で動きそうだが、defconfig/menuconfigは通っても後述するmakeは通らないので一般ユーザへsuする必要がある
chownも忘れずに
$ make defconfig
$ make menuconfig

設定画面でTarget Systemを必要なら変更し、Network/VPN以下のSoftEther VPNで必要なものにチェックを入れる

最後にmakeする
今回はあくまでSoftEther VPNのパッケージ化なので、OpenWRTのイメージをもmakeする必要はない
従って
$ make prepare
$ make package/softethervpn/compile V=99

と、する
それにしても時間は(本当に)相当かかる

正常に終了すれば
# find bin
bin
bin/ar71xx
bin/ar71xx/packages
bin/ar71xx/packages/terminfo_5.7-5_ar71xx.ipk
bin/ar71xx/packages/libgcc_4.6-linaro-1_ar71xx.ipk
bin/ar71xx/packages/zlib_1.2.7-1_ar71xx.ipk
bin/ar71xx/packages/libncurses_5.7-5_ar71xx.ipk
bin/ar71xx/packages/libreadline_5.2-2_ar71xx.ipk
bin/ar71xx/packages/librt_0.9.33.2-1_ar71xx.ipk
bin/ar71xx/packages/softethervpnbridge_4.03-9408_ar71xx.ipk
bin/ar71xx/packages/softethervpnserver_4.03-9408_ar71xx.ipk
bin/ar71xx/packages/libpthread_0.9.33.2-1_ar71xx.ipk
bin/ar71xx/packages/softethervpnclient_4.03-9408_ar71xx.ipk
bin/ar71xx/packages/libopenssl_1.0.1e-1_ar71xx.ipk
bin/ar71xx/packages/libc_0.9.33.2-1_ar71xx.ipk
bin/ar71xx/packages/libiconv-full_1.11.1-1_ar71xx.ipk
bin/ar71xx/packages/softethervpncmd_4.03-9408_ar71xx.ipk

このように.ipkが生成される

できたのがこちら
softethervpnserver_4.03-9408_ar71xx.ipk
softethervpnclient_4.03-9408_ar71xx.ipk
softethervpnbridge_4.03-9408_ar71xx.ipk
softethervpncmd_4.03-9408_ar71xx.ipk
libopenssl_1.0.1e-1_ar71xx.ipk
OpenWRT 12.09 ar71xx用

あとはOpenWRTへのインストールを残すのみだが、まず必要となるパッケージ
zlib
libpthread
librt
libreadline
libncurses
libiconv-full
をインストールする

そして先程makeしたlibopensslのパッケージをインストールするのだが、これがmd5sum mismatchで弾かれてしまう
これを回避するためにはシェルで
# rm /var/opkg-lists/attitude_adjustment
と、パッケージリストを一度削除し、インストールする必要がある

その後にSoftEther VPNをインストールして完了
1 comment ( 11779 views )

| 1 |