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
pfsenseの再構築で発生した問題まとめ 
Friday, June 29, 2012, 05:38 AM - OS / Misc, Hardware, Misc
Posted by Administrator
pfsenseのシステムに使用していたusbflashが物理的に死んで大変な事になった、のまとめ

いい機会なので搭載NICを変更したところ、特定NICがリンクアップするとM/Bがクラッシュする問題が発生
事象としては……
・リンクアップした状態から起動不可、BIOSがPOSTしない
・システム起動中にリンクアップすると数秒後にクラッシュ、PWR/RSTボタンも効かない

構成は……
CPU: AMD Athlon X2 BE-2350
M/B: ASUS M2A-VM
PCIex16: Intel PRO/1000 CT
PCI: Intel PRO/1000 GT Dual Port
PCI: Intel PRO/1000 GT Dual Port
PCIex1: Intel PRO/1000 CT

結論としてはPCIex16にIntel PRO/1000 CTを載せ、PCIex1に何かのNICを載せた状態で、両方がリンクアップする時に再現する
リンクアップする順序や、PCIに載せているNICの状態は関係ない

原因が全く特定できないので、Broadcom NetXtreme BCM5751 PCI-Eを使う事で回避した

次にpfsenseのインストールでCDからusbflashにインストールしようとするとコケる
が……これは大して検証していないので全く不明
nanobsd-vgaという組み込み用途ながらvga出力が可能なイメージが存在していたのでどうでもいい

で、以前のconfigをリストアしようとするとvarnishがバグって大変な事になる
インストールが完了しない、consoleに凄まじいエラーが出る、というかphpのソースコードがそのまま出ている
VM上でCDインストールだが、同じ事をやってみると特に問題なく動く
が……これも大して検証していない
何せ大幅に何かがバグって酷い事になっているのはconsoleの出力から予測できるし、新しくvarnish3というパッケージがあったので黙ってこっちを使った

しかしvarnish3もインストールが完了しない
そのまま動かそうと設定すると、Web Configuratorの応答もなくなる、何故?
応答がなくなる原理は不明だが、この状態に陥るとWeb ConfiguratorのRestartをかけても改善しない
システムをRebootすると一見正常な状態へ復帰する

これはvarnish3のインストールが停止した後、/usr/local/pkg/varnish.inc:157の頭に"if ("を追加し、Pkg reinstallを実行
再度同ファイルを変更(またifが欠けてsyntax errorが出る)し、/usr/local/etc/rc.d/varnish.sh:6をコメントアウトする事で、一応サービス自体は正常に動作するようになる

もしかするとWeb Configuratorの応答がなくなる問題は未解決の可能性がある
また、LB Directorsタブを開くと……
Fatal error: Cannot create references to/from string offsets nor overloaded objects in /etc/inc/xmlparse.inc on line 69
と、設定画面が開けない
これは設定画面描画用のxmlにミスがあると予測できるが、不明
単純に自分が使用しないからだが
add comment ( 1368 views )   |  permalink
TweetIrcGateway+LimeChat2でのAn invalid argument was encountered. 
Sunday, May 20, 2012, 03:26 PM - Misc
Posted by Administrator
LimeChat2でTweetIrcGatewayを利用していると不定期に出る"An invalid argument was encountered."
このエラーを放っておくとLimeChat2がクラッシュしたりして、結構困る

で、我慢ならなくなったので真面目に検証して再現方法と原因が判明したのでまとめる

まずこのエラーは該当するツイートに0x0Aが含まれていて、Redirectフィルタがマッチする時に発生する
本来であれば0x0Aが含まれるツイートはLimeChat2上で複数の発言に分割され、表示される
これ自体はLimeChat2の話ではなく、TweetIrcGatewayがそのようにしている

しかしRedirectフィルタでマッチしたツイートはその処理を何故か飛ばしてしまっており、0x0Aが含まれる形でLimeChat2が受け取ることになる
ここで"An invalid argument was encountered."が発生し、0x0A以降のツイートは表示されない

これを回避するには0x0Aを削除してしまえば問題ないので
[20] 15:15 <Root\Filter\EditRewriteContent> ReplacePattern(String) = \x20
[20] 15:15 <Root\Filter\EditRewriteContent> MatchPattern(String) = [\x00-\x1F\x7F]
[20] 15:15 <Root\Filter\EditRewriteContent> UserMatchPattern(String) =
[20] 15:15 <Root\Filter\EditRewriteContent> MessageType(String) = PRIVMSG
[20] 15:15 <Root\Filter\EditRewriteContent> IsRemoveContent(Boolean) = False
[20] 15:15 <Root\Filter\EditRewriteContent> Enabled(Boolean) = True

このようなフィルタを作成すれば良い……のだが

RewriteContentフィルタはこれまた何故かRedirectフィルタより後に適応されず、ただ追加しただけでは問題の解決にならない
面倒な話だが、Redirectフィルタより若い番号でRewriteContentフィルタを作り直す必要がある
しかも並び替えられない

こういう問題があるのでRewriteContentフィルタは先に16個くらい作ってdisabledにしておくべきかもしれない

[20] 15:19 <Root\Filter> 0: RewriteContent: MessageType=PRIVMSG MatchPattern=[\x00-\x1F\x7F] ReplacePattern=\x20
[20] 15:19 <Root\Filter> 1: RewriteContent: MessageType=PRIVMSG MatchPattern=♻\s*
[20] 15:19 <Root\Filter> 2: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 3: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 4: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 5: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 6: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 7: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 8: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 9: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 10: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 11: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 12: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 13: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 14: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 15: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 16: Drop: MatchPattern=^.{,3}$
[20] 15:19 <Root\Filter> 17: Drop: MatchPattern=([^\x21-\x7E])\1{3,}
[20] 15:19 <Root\Filter> 18: Drop: MatchPattern=#.{0,}(?=[^\x20-\x7E])
[20] 15:19 <Root\Filter> 19: Drop: MatchPattern=^(.+?) RT @[0-9A-Za-z_]{1,15}: \1
[20] 15:19 <Root\Filter> 20: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 21: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 22: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 23: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 24: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 25: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 26: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 27: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 28: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 29: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 30: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 31: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 32: Redirect:[DISABLED] MatchPattern=@el1n ChannelName=#Replies Duplicate
[20] 15:19 <Root\Filter> 33: Redirect: MatchPattern=^RT @[0-9A-Za-z_]{1,15}: ChannelName=#Retweets
[20] 15:19 <Root\Filter> 34: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 35: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 36: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 37: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 38: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 39: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 40: Drop: MatchPattern=#4ji(?![^\x20])
[20] 15:19 <Root\Filter> 41: Drop: MatchPattern=#cluster_hantei(?![^\x20])
[20] 15:19 <Root\Filter> 42: Drop: MatchPattern=#DroidNP(?![^\x20])
[20] 15:19 <Root\Filter> 43: Drop: MatchPattern=#gohantabeyo(?![^\x20])
[20] 15:19 <Root\Filter> 44: Drop: MatchPattern=#installNow(?![^\x20])
[20] 15:19 <Root\Filter> 45: Drop: MatchPattern=#itsukara(?![^\x20])
[20] 15:19 <Root\Filter> 46: Drop: MatchPattern=#(?:nico\w+|(?:im|lv|nm|nw|sm|so)[0-9]+)(?![^\x20])
[20] 15:19 <Root\Filter> 47: Drop: MatchPattern=#NowPlaying(?![^\x20])
[20] 15:19 <Root\Filter> 48: Drop: MatchPattern=#REFLECBEAT_AC(?![^\x20])
[20] 15:19 <Root\Filter> 49: Drop: MatchPattern=#swallows(?![^\x20])
[20] 15:19 <Root\Filter> 50: Drop: MatchPattern=#theinterviews(?![^\x20])
[20] 15:19 <Root\Filter> 51: Drop: MatchPattern=#tweetbatt(?![^\x20])
[20] 15:19 <Root\Filter> 52: Drop: MatchPattern=#yoruno(?![^\x20])
[20] 15:19 <Root\Filter> 53: Drop: MatchPattern=#yuruyuri(?![^\x20])
[20] 15:19 <Root\Filter> 54: Drop: MatchPattern=http://4sq.com/
[20] 15:19 <Root\Filter> 55: Drop: MatchPattern=http://blog.livedoor.jp/
[20] 15:19 <Root\Filter> 56: Drop: MatchPattern=http://moi.st/
[20] 15:19 <Root\Filter> 57: Drop: MatchPattern=http://shindanmaker.com/
[20] 15:19 <Root\Filter> 58: Drop: MatchPattern=http://t.intel-c.jp/
[20] 15:19 <Root\Filter> 59: Drop: MatchPattern=^まいんちゃんと$
[20] 15:19 <Root\Filter> 60: Drop: MatchPattern=(?:(?:ほむ|ぺろ){2,}|阻止 RT @[0-9A-Za-z_]{1,15}:|^(.)(?!\1)(.)(\1\2)+$)
[20] 15:19 <Root\Filter> 61: Drop: MatchPattern=(?:お(か|つ|は|や)|ほか)あり
[20] 15:19 <Root\Filter> 62: Drop: MatchPattern=^The .+? Daily is out!
[20] 15:19 <Root\Filter> 63: Drop: MatchPattern=【[^\x20]{0,}(?=RT|リツイート|速報|緊急|拡散|希望|推奨|募集|急募|定期)[^\x20]{0,}】
[20] 15:19 <Root\Filter> 64: Drop: MatchPattern=おだか

add comment ( 2358 views )   |  permalink

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