OpenWRTでUT-VPNが動く 
Tuesday, August 14, 2012, 08:08 AM - OS / Misc
Posted by Administrator
OpenWRTでUT-VPNを動かす……の一環でSDKでUT-VPNの.ipkが作成できるようなものを書いた

そのうち修正するつもりでいるけど、現時点でmakeするには……
ncurses
openssl
libreadline
libiconv-full
が、先にmakeされている必要があって、opensslは
$ sed -i 's/no-sha0//' package/openssl/Makefile
で、修正されている必要がある (参考:OpenWRTでUT-VPNを動かす)

環境が揃ったら
$ git clone git://github.com/el1n/OpenWRT-package-utvpn.git package/utvpn
$ make package/utvpn/compile V=99

事前にmake menuconfigでNetwork/VPN/utvpnにチェックが恐らく必要

検索でここに辿り着く人には大して説明も不要(というか俺が不要、OpenWRTでUT-VPNを動かす (2)OpenWRTでUT-VPNを動かすに書いてあるから)だろうからこの先は省く

ちなみにリポジトリの1で始まるパッチはOpenWRT以外でも使用できることを確認済み
OpenSSL 1.0.xのヘッダしかなくてコンパイルできないとかはこれで通るようになる
linuxなら120*は当てなくていい、当ててもいい

WZR-HP-G300NHの一時的なばいなり
utvpn_1.01-7101_ar71xx.ipk
libopenssl_0.9.8r-1_ar71xx.ipk
ar71xxのbackfire 10.03.1ならどれでも使える気がする
add comment ( 732 views )   |  permalink
OpenWRTでUT-VPNを動かす (2) 
Monday, August 13, 2012, 07:49 AM - OS / Misc
Posted by Administrator
OpenWRTでUT-VPNを動かす……ためのおもちゃを買ってOpenWRTにする

手持ちは全てスペック不足で動かせない(結局メモリ不足)ようなので@xmmsがWHR-G301Nで試すことになったが、結局別問題でうまくいかず、そのまま会話の流れで買うことになった
ちなみにWHR-G301Nは余っているらしいので、近々検体として送られてくるとか
届き次第試してみようと思う

ここによるとWZR-HP-AG300Hが最強だが、中古でも高くて真面目な値段(5000円くらい)なので「これはおもちゃの値段じゃねーよなー」とか思って他の手頃なのを探しているとWZR-HP-G300NHが2180円で売っていたのでこれにすることにした
4段階で表すと3段階目のスペックなので強い部類だ
3000円で送料無料だそうなので、ついでに500円のWLA-G54/Pと300円の謎のusb無線インターフェースと25円の謎のハブも買った

話は違うが、届いてみると値札が
WZR-HP-G300NH 2480円
WLA-G54/P 1280円
謎のusb無線インターフェース 380円
謎のハブ 480円
で、どれも一致しないという凄まじく同期の取れて無さにびっくりした
謎のハブの値上がり具合ワロタ

しかし買ってみてからだがこんな話があるようで先が思いやられる

結論から言えばDD-WRTは恐らく問題ない、公式のv24 preSP2とBrainSlayerのr17990しか試してないが
buffalo_to_ddwrt_webflash-MULTI.binがBUFFALO純正ファームからweb経由で書くやつ
wzr-hp-g300nh-dd-wrt-webupgrade-MULTI.binが一度DD-WRTにした状態から書くやつ

しかしこれ、DD-WRTにしろOpenWRTにしろ焦って書き換えてはいけない
WZR-HP-G300NHはそのままだとTFTPが使えないので、仮に問題が発生するとシリアルが必須になる

TFTPを有効にするには純正ファームでhttp://bufpy:otdpopy@192.168.11.1/cgi-bin/cgi?req=frm&frm=py-db/55debug.htmlから
ubootenv set accept_open_rt_fmt 1
と発行してブートローダの設定を書き換える必要がある
ちなみに
ubootenv set tftp_wait 10
でTFTPの受付時間を10秒にできる、シビアなTFTPじゃなくなるらしい

あとotdpopyはパスワードを設定しているとそれを後ろに付け足す必要があるらしい
初期化状態なら空欄なのでotdpopyだけ

もし先にDD-WRTか何かで書き換えてしまってこれができない場合、ここからwzrg300nh_original.binを手に入れてきて普通にDD-WRTのweb経由で突っ込んだ後に、純正ファームwzrhpg300nh-179を同じくweb経由で突っ込んだ後に初期化してやればいい
wzrhpg300nh-179を入れる必要はないかもしれないな、まあ完全純正に戻るということで

さて、OpenWRTだがWZR-HP-G300NHは2種類存在しているということがまずわかっていて、このWZR-HP-G300NHはどうもA0 A3と印字されておりAG71ナントカをつんでいる
基盤の印字を見れば早いが、どうもこのA0 A3の印字で判断できるようで、検索してみるとA0 A3は問題ないらしい
Bで始まるのもあるが要するにこれがつまるところ、Aで始まれば問題ないのか?
買ってみないと何もわからん……Bで始まるやつ誰かください

現段階ではAかBかで決まると言い切れないので、まあ純正ファームでもtelnetdを有効にできるのでdmesgでも見て判断しましょう

OpenWRT backfire 10.03.1で問題ないみたいなので普通においてあるバイナリopenwrt-ar71xx-wzr-hp-g300nh-squashfs-tftp.binをTFTPから突っ込んでみる
問題なく動く
ところでWindows 7のTFTP.EXEは何かがおかしい、XPのを持ってくるべきか

あとはUT-VPNをコンパイルする
OpenWRTでUT-VPNを動かすのそのまま、make menuconfigでTarget SystemをAtheros AR71xx/AR7240/AR913xにするだけ

何の問題もなく動く(起動しただけ)
しいて言えば自前で用意しなくてはならないlibopenssl_0.9.8r-1_ar71xx.ipkがmd5sum mismatchでコケる、これはパッケージのリストを取得する前なら通る
つまるところ/etc/opkg.confのそれを消してopkg -fで読ませれば通るということ

ここまで書いて忘れてたけど、この機器のシビアなTFTPは直結(必須)してIPを固定して通電させたら
>arp -s 192.168.11.1 **-**-**-**-**-** 192.168.11.2
を連打
直結している以上機器のインターフェースがupしてない場合当然もう片方もupしない(少なくともWindowsは、細かいことは気にしないで)ので"ARP: 無効な IP アドレス: 192.168.11.2。"が出る
これが出なくなった瞬間にTFTPで投げたら通る

おわり
add comment ( 2534 views )   |  permalink
OpenWRTでUT-VPNを動かす 
Monday, August 6, 2012, 01:37 PM - OS / Misc
Posted by Administrator
OpenWRTでUT-VPNを動かす……ための開発環境を作る

warning: ld-uClibc.so.0, needed by /.../usr/lib/libdl.so, not found (try using -rpath or -rpath-link)
とか
cannot find -lssl
collect2: ld returned 1 exit status
とか
cannot find -lgcc_s
collect2: ld returned 1 exit status
とか
Internat.c:(.text+0x205b): undefined reference to `iconv_close'
tmp/as/Ham.a(Internat.o): In function `IconvStrToWideInternal':
Internat.c:(.text+0x208e): undefined reference to `iconv_open'
Internat.c:(.text+0x20af): undefined reference to `iconv_open'
tmp/as/Ham.a(Internat.o): In function `IconvWideToStrInternal':
Internat.c:(.text+0x20de): undefined reference to `iconv_open'
Internat.c:(.text+0x20ff): undefined reference to `iconv_open'
tmp/as/Ham.a(Internat.o): In function `UnixUniToStr':
Internat.c:(.text+0x2186): undefined reference to `iconv'
tmp/as/Ham.a(Internat.o): In function `UnixStrToUni':
Internat.c:(.text+0x2477): undefined reference to `iconv'
collect2: ld returned 1 exit status
とか
undefined reference to `SHA'
とか、その他諸々でコケるのはなにか間違っている

こんなことがあるのが根本的な問題だが、本当にそうだからワロエナイ
結論から言えば配布されているバイナリを使用してはいけない
少なくともx86ならSDKを落としてきた上でToolchainを上書きすることで通るが、MIPSでは通らない
腐ってる

ここから走り書き

$ mkdir ~/OpenWRT
$ cd ~/OpenWRT

# ソースコードをもってくる
$ svn co svn://svn.openwrt.org/openwrt/tags/backfire_10.03.1
$ cd backfire_10.03.1/
$ make menuconfig
# 基本Target System(BUFFALOは殆ど"Broadcom BCM947xx/953xx [2.4]"だろう)をあわせて"Build the OpenWrt SDK"をチェック
$ make V=99

# libiconv-full以外とってくる必要がないかもしらん
$ svn export svn://svn.openwrt.org/openwrt/tags/backfire_10.03.1/package/ncurses package/ncurses
$ svn export svn://svn.openwrt.org/openwrt/tags/backfire_10.03.1/package/openssl package/openssl
$ sed -i 's/no-sha0//' package/openssl/Makefile
$ svn export svn://svn.openwrt.org/openwrt/tags/backfire_10.03.1/package/libreadline package/libreadline
$ svn export svn://svn.openwrt.org/openwrt/packages/libs/libiconv-full@29638 package/libiconv-full

$ make package/ncurses/compile V=99
$ make package/openssl/compile V=99
$ make package/libreadline/compile V=99
$ make package/libiconv-full/compile V=99

$ cd ..
$ wget -q -O - 'http://utvpn.tsukuba.ac.jp/files/utvpn/v1.01-7101-public-2010.06.27/Source%20Code%20(Win32%20and%20Unix)/utvpn-src-unix-v101-7101-public-2010.06.27.tar.gz'|tar zxvf -
$ cd utvpn-*
$ echo -e '1\n1\n'|./configure
# それっぽい環境変数
$ export CCFLAGS="-I`echo ~/OpenWRT/backfire_10.03.1/staging_dir/target-*/include`"
$ export CCFLAGS="-I`echo ~/OpenWRT/backfire_10.03.1/staging_dir/target-*/usr/include` $CCFLAGS"
$ export CCFLAGS="-I`echo ~/OpenWRT/backfire_10.03.1/staging_dir/target-*/usr/lib/libiconv-full/include` $CCFLAGS"
$ export LDFLAGS="-L`echo ~/OpenWRT/backfire_10.03.1/staging_dir/target-*/lib`"
$ export LDFLAGS="-L`echo ~/OpenWRT/backfire_10.03.1/staging_dir/target-*/usr/lib` $LDFLAGS"
$ export LDFLAGS="-L`echo ~/OpenWRT/backfire_10.03.1/staging_dir/target-*/usr/lib/libiconv-full/lib` $LDFLAGS"
$ export LDFLAGS="-liconv $LDFLAGS"
# CCFLAGSとLDFLAGSを読むように、正直これくらい書いてあってほしい
$ sed -i 's/OPTIONS_COMPILE_[[:alnum:]]*=/&$(CCFLAGS) /' Makefile
$ sed -i 's/OPTIONS_LINK_[[:alnum:]]*=/&$(LDFLAGS) /' Makefile


後で調べてみるとここの中の人がパッチをおいてくれているのでこいつを素直に使う
$ svn diff http://lab.mitty.jp/svn/lab/trunk/Dev/u ... 01-public/ -r152:153|patch -p0
具体的にはsrc/Mayaqua/Mayaqua.h:223以降の自前定義が悪さするので"#include <iconv.h>"を入れて自前定義部分を削除すれば良い
手抜きするならifdefをifndefにするとかでもいい

$ make CC=/home/a/OpenWRT/backfire_10.03.1/staging_dir/toolchain-*/usr/bin/*-openwrt-linux-gcc LD=/home/a/OpenWRT/backfire_10.03.1/staging_dir/toolchain-*/usr/bin/*-openwrt-linux-ld
で、完成

ところで上の人のwikiの方法だと依存(OpenWRTに含まれているlibssl.soだかがSHAがないよっていう)で大丈夫なのかなあ
まあ自分で入れ替えているんだろうけど

とりあえずのばいなり
同梱されているlibopenssl_0.9.8r-1_brcm-2.4.ipkを入れないと恐らくなんかコケる
ちなみにlibopenssl_0.9.8r-1_brcm-2.4.ipkはmenuconfigでLibraries/SSL/libopensslにチェックをいれればできる

必要なパッケージ
libiconv-full_1.11.1-1_brcm-2.4.ipk
libncurses_5.7-2_brcm-2.4.ipk
libpthread_0.9.30.1-43.32_brcm-2.4.ipk
libreadline_5.2-2_brcm-2.4.ipk
librt_0.9.30.1-43.32_brcm-2.4.ipk
zlib_1.2.3-5_brcm-2.4.ipk

ちなみにWBR2-G54で動かそうと試みたが、メモリ不足だかなんだかで動かなかった
バイナリは問題ないっぽい
add comment ( 2555 views )   |  permalink
BLR3-TX4をシリアルポート無しでいけるところまでやる 
Sunday, August 5, 2012, 02:30 PM - OS / Misc
Posted by Administrator
BLR3-TX4で遊ぶ
ぶろぐの内容は実際と時系列的に逆になってしまうが、ここまでの流れは……

・pfsenseでUT-VPNを動かす→想定した動作と異なる、BSDでは完全ではないっていうか色々バグってる
・linuxでは完全、OpenWRTなら簡単に動くだろう→動く
・余ってるBLR3-TX4にOpenWRTを入れれるといいなあ

BLR3-TX4はお得意の192.168.11.1もwebからもファームの更新ができない
ようわからん専用のアップデータを使う必要がある
例外はこういう基盤改造とまではいかないが、H/W的なもの
生憎こういうのはちょっと手持ちがない

この専用のアップデータはどうもここによるとバイナリが丸ごと埋め込まれているだけなので簡単に取り出せるらしい

適当に取り出してみる
$ perl -e '($b=join(undef,<STDIN>));print substr($b,index($b,"BLR3-TX4")-8)' <blr3f145.exe >BLR3F145.bin
と。凄く投げやりな方法だが問題なさげ

次は展開
ここを参考にしてコードを書いてみる

書いた……が、展開したファームを書き換えて作り直さないとならないのだが、チェックサムの計算方法がわからない
どーしたもんかな、と調べてみると……

なんと7年も前に完成品がここに転がってた、ワロタ
完成品があるならコードを書くのは馬鹿馬鹿しい限りなので、これを使わせてもらうことにする
が……64bitだとSegmentation faultで死んでしまう
またバッファサイズが不足して動かないので書き換える必要がある
$ wget http://www.geocities.jp/trstat/firmimgtool.c
$ sed -i 's/^\(\#define MAXSIZE\).*/\1 10485760/' firmimgtool.c
$ gcc -o firmimgtool firmimgtool.c


Telnetを使えるように弄る
$ gunzip wlmr_loopfiles.gz
$ mkdir image
$ sudo mount -o loop wlmr_loopfiles image
$ sudo sed -i 's/^#\(telnet\)/\1/' image/etc/inetd.conf
$ sudo umount image
$ gzip -9 wlmr_loopfiles
$ ./firmimgtool -m -k vmlinux.gz -r wlmr_loopfiles.gz -f BLR3F145.bin BLR3F145.bin.new


若干危惧していたが、やはりこのまま.exeに埋め込んでもうまく動かない
ポインタ的なものがめちゃくちゃになって不正終了する始末
自前のアップデータで転送する方法もやってみた
UDP22360へ何か送った後にTCP22360へファームをそのまま転送しているのはわかったが、結局UDP22360へ送る"何か"が毎回変動してこれがよくわからなかった

しかしよく考えてみれば.exeへ埋め込む方法が失敗するのはwlmr_loopfiles.gzが大きいため、何かポインタ的なものがおかしくなっているから
なので小さい分には特に問題にならないんじゃないかと、容量を削る策をとるがこれもうまくいかない
そこで……
$ ls -al *.EXE
-rw-r--r-- 1 a a 6234112 May 13 2004 BLR3F141b.EXE
-rw-rw-r-- 1 a a 6180864 May 11 2005 BLR3F145.EXE

1.45のファームを改造して1.41bの.exeに乗せて転送する案

$ (perl -e '($b=join(undef,<STDIN>));print substr($b,0,index($b,"BLR3-TX4")-8)';cat BLR3F145.bin.new) <BLR3F141b.EXE >BLR3F141b.EXE_mod.exe
$ ls -al BLR3F141b.EXE BLR3F141b.EXE_mod.exe
-rw-r--r-- 1 a a 6234112 May 13 2004 BLR3F141b.EXE
-rw-rw-r-- 1 a a 6187115 Aug 4 03:14 BLR3F141b.EXE_mod.exe

6234112 - 6187115なので46997付け足せば完璧
$ tail -c 46997 BLR3F141b.EXE >>BLR3F141b_mod.exe
で、最後にバイナリエディタで0x0000E1E4からの007A255Eを新しいファームのサイズに書き換える
今回の場合はAB7A5D00だった
これでアップデータがうまく動き、Telnetが使用可能なBLR3-TX4になった
以後ファームはddで/dev/fl1に書き込むだけでよい

……と調子にのってBLR3-TX4->WHR-G54->DD-WRTとwlmr_loopfiles.gzを色々弄ったら文鎮になった
シリアルがないのでここで終わり

ちなみにWHR-G54は正常に動かなかった、無線がないからかもしれないがwebconのcgiがクラッシュしている
DD-WRTはrootfsをwlmr_loopfiles.gzに乗せるだけでいけるかな、と思ったがそうでもなかった
add comment ( 1323 views )   |  permalink
Guildwars Damage Calculator 
Monday, July 2, 2012, 01:48 AM - Misc
Posted by Administrator
Guildwars Damage Calculator

Preset

Level Boss
Weapon -
Customized
Modifier None
Damage +15%
Damage +20%
% Armor penetration
Additional Damage
Critical hit

Spell
% Armor penetration

Armor Base Armor
Physical Damage Against +
Elemental Damage Against +
Insignia None AL+5 AL+10 AL+15 AL+20
(vs Physical Damage) None AL+5 AL+10 AL+15 AL+20
(vs Elemental Damage) None AL+5 AL+10 AL+15 AL+20
Shield None AL+8 AL+15 AL+16
Shield modifier None AL+5 AL+10
Weapon modifier None AL+5 AL+7

Damage - vs AL
Damage -

add comment ( 3077 views )   |  permalink

<Back | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Next> Last>>