Sunday, March 23, 2014, 01:44 - Misc
Posted by ELIN
802.11b
------------------------------------------------------------
Client connecting to 192.168.100.1, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.100.3 port 49763 connected with 192.168.100.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-30.2 sec 19.5 MBytes 5.42 Mbits/sec

802.11g
------------------------------------------------------------
Client connecting to 192.168.100.1, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.100.3 port 49846 connected with 192.168.100.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-30.1 sec 79.8 MBytes 22.2 Mbits/sec

802.11ng 20MHz
------------------------------------------------------------
Client connecting to 192.168.100.1, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.100.3 port 49932 connected with 192.168.100.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-30.0 sec 270 MBytes 75.3 Mbits/sec

802.11ng 40MHz
------------------------------------------------------------
Client connecting to 192.168.100.1, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.100.3 port 52416 connected with 192.168.100.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-30.0 sec 329 MBytes 92.0 Mbits/sec

802.11a
------------------------------------------------------------
Client connecting to 192.168.100.1, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.100.3 port 52564 connected with 192.168.100.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-30.1 sec 81.6 MBytes 22.8 Mbits/sec

802.11na 20MHz
------------------------------------------------------------
Client connecting to 192.168.100.1, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.100.3 port 52738 connected with 192.168.100.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-30.1 sec 222 MBytes 61.9 Mbits/sec

802.11na 40MHz
------------------------------------------------------------
Client connecting to 192.168.100.1, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.100.3 port 52857 connected with 192.168.100.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-30.0 sec 375 MBytes 105 Mbits/sec
add comment ( 3287 views )
Saturday, March 22, 2014, 04:18 - Hardware
Posted by ELIN
大昔に買ってそのまま何にも使用していなかったMicrosoftのLifeCam VX-1000というWebcamがあるのだが、思うところがあり動かしてみることにした

しかしこれはキワモノでも何でもない至って普通のデバイスなので、Windowsなマシンに挿そうものなら勝手にドライバをインストールし、何もしないまま普通に動いてしまう
当然このようなことは誰も望んでいないので、OpenWrtのWZR-HP-AG300Hに挿すことにする

さて、最初は正しいドライバを探すところから始まる
OpenWrtのリポジトリにはkmod-video-gspca-*なものが揃ってはいるが、PCIないしPCIeスロットに挿すような見ればわかるデバイスと異なり、USBデバイスは見ただけではドライバを判別するのが困難なのでこれを調べる必要がある
http://cateee.net/lkddb/web-lkddb/USB_GSPCA.htmlによると、VX-1000はkmod-video-gspca-sonixjであるらしいのでこれをインストール

次に動作確認としてOpenWrt上でWebcamからデータを取り出してみる
これはmjpg-streamerをインストールし
# mjpg_streamer -i "input_uvc.so -f 10 -d /dev/video0 -n" -o "output_http.so -w /www/webcam"
こう

ちなみに動かない場合は適当にパラメータを弄ると動いたりする
パラメータの詳細はここ

これでhttp://192.168.1.1とするとWebcamの映像を確認することができる

さて、対して苦労もせず動いてしまったので、次はUSB over IPを試してみる
これはどういうことかと言うと、WZR-HP-AG300Hに接続されたVX-1000をVM上のWindows XPから制御してみようというわけ

まずOpenWrtでusbip-serverをインストールし
# usbip list -l
Local USB devices
=================
- busid 2-1 (045e:00f7)
2-1:1.0 -> sonixj
2-1:1.1 -> unknown
2-1:1.2 -> unknown

# usbip bind -b 2-1
bind device on busid 2-1: complete
# usbipd -D

もしサーバサイドのログが必要なら
# usbipd -d

Windows側ではhttp://usbip.sourceforge.net/からusbip_windows_v0.2.0.0_signed.zipを入手する
そしてコントロールパネルのハードウェアの追加から落としてきたドライバを指定してデバイスを作成する

>usbip -l 192.168.1.1
とするとbindしたデバイスが見えるはずなのだが
- 192.168.1.1
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip.c: 216 (query_exported_devices) recv op_common
usbip err: usbip.c: 288 (show_exported_devices) query

このような感じで見えない

サーバサイドでは
usbip: debug: usbip_network.c:149:[usbip_net_recv_op_common] version mismatch: 262 273
usbipd: debug: usbipd.c:230:[recv_pdu] could not receive opcode: 0

と出力され、バージョン不一致であることがわかる

usbip.exeのバイナリを書き換えてバージョンを誤魔化してみたりもしたが、パケットに載せるコマンド番号そのものが異なっているらしく動作しなかった
誰かわかってるやつがなんとかしてくれてないかなー、と探してみるとhttp://www.raspberrypi.org/forum/viewtopic.php?f=28&t=8858&start=25にそれっぽいバイナリを発見

結果
>usbip -l 192.168.1.1
usbip for windows ($Id$)

- 192.168.1.1
2-1: unknown vendor : unknown product (045e:00f7)
: /sys/devices/platform/ohci-platform/usb2/2-1
: (Defined at Interface level) (00/00/00)
: 0 - unknown class / unknown subclass / unknown protocol (ff/ff/ff)
: 1 - unknown class / unknown subclass / unknown protocol (01/01/00)
: 2 - unknown class / unknown subclass / unknown protocol (01/02/00)

と、出力を得る

そして接続
>usbip -a 192.168.1.1 2-1
これでデバイスマネージャにもVX-1000が見えて接続されていることがわかる

しかし何らかのデータは飛んできてはいるものの、Webcamの動作までは至っていない
真っ黒だったり、バグったjpegのようだったり、映像を正常に受け取ることができない状態だ

usbipではない別のプロダクトとしてhttps://www.virtualhere.com/もあるが、同じように動作しない
ただMicrosoft純正のアプリケーションでのみ正常に映った

恐らくだがWebcamが若干悪い気がしないでもないので、別のWebcamを入手したときに試してみることにする
ちなみにマウスなどは普通に動いてる
add comment ( 5567 views )
Wednesday, January 15, 2014, 18:13 - OS / Unix, *BSD, Solaris
Posted by ELIN
どうもDD-WRTでの需要も一定数ありそうなので、テスト環境が闇に葬られないうちに試すことにした

検証したFirmwareはr23320

DD-WRTはOpenWRTとは異なり、パッケージ管理システムは名残のようなものがあるものの、事実上存在しないと言える
従ってOpenWRTのように1パッケージとして組み込むことは不可能で、面倒な若干の手間が発生するし、綺麗に収まらない

そうなるとDD-WRTのバイナリを作成してしまうのが最もスマートだが、ここではまず力技でもなんでも動作させることを優先する

まずWebコンソールからAdministration/ManagementのJFFS2 Supportを有効にする
これはDD-WRTのシステムに書き換え可能な領域を確保するために必要で、/dev/mtdblock/3が/jffs以下に割り当てられ、ここへ書き込んだデータは再起動しても失われなくなる
これが無効だと何もできない

次にOpenWRTのリポジトリから必要になるパッケージを持ってきてインストール
# cd /tmp
# wget http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/libc_0.9.33.2-1_ar71xx.ipk
# wget http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/zlib_1.2.7-1_ar71xx.ipk
# wget http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/libpthread_0.9.33.2-1_ar71xx.ipk
# wget http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/librt_0.9.33.2-1_ar71xx.ipk
# wget http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/libreadline_5.2-2_ar71xx.ipk
# wget http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/libncurses_5.7-5_ar71xx.ipk
# wget http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/libiconv-full_1.11.1-1_ar71xx.ipk
# ipkg install *.ipk;rm *.ipk

エラーが出るものの、何の問題もない
これらは/jffs以下に保存され、DD-WRTのシステムとは干渉しない

最後にOpenWRT用にmakeしたバイナリのインストール
# wget http://b.mikomoe.jp/download/1389215611/attach/libopenssl_1.0.1e-1_ar71xx.ipk
# wget http://b.mikomoe.jp/download/1389215570/attach/softethervpnserver_4.03-9408_ar71xx.ipk
# ipkg install *.ipk;rm *.ipk


またこの時点までの違う方法としてopkgを使用する方法もある
# cd /tmp
# wget http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/opkg_618-3_ar71xx.ipk
# ipkg install *.ipk

もしかしたらこの時点で後述するlibcが必要になる状況が発生するかもしれない
(参考:http://arouter.blogspot.jp/2011/07/software-installation-on-dd-wrt.html)

opkg.confを環境にあわせて変更し
# sed -i 's/ \(\(\/[[:alnum:]-]*\)\+\)$/ \/jffs\1/' /jffs/etc/opkg.conf
実行に必要になるディレクトリの作成
# mkdir -p /jffs//var/lock/

以降のインストールはlibc依存で引っかかるが、libcはなぜかPackages.gzに含まれていないため、手動でインストールする必要がある
# opkg -f /jffs/etc/opkg.conf install http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/libc_0.9.33.2-1_ar71xx.ipk

あとはOpenWRTでシェルから作業する場合と同一
# opkg -f /jffs/etc/opkg.conf update
# opkg -f /jffs/etc/opkg.conf install zlib libpthread librt libreadline libncurses libiconv-full
# rm /jffs/var/opkg-lists/*
# opkg -f /jffs/etc/opkg.conf install http://b.mikomoe.jp/download/1389215570/attach/softethervpnserver_4.03-9408_ar71xx.ipk
# opkg -f /jffs/etc/opkg.conf install http://b.mikomoe.jp/download/1389215611/attach/libopenssl_1.0.1e-1_ar71xx.ipk


そしてLD_LIBRARY_PATHを与えて実行する
LD_LIBRARY_PATHを与えない場合、/usr/lib/libssl.so.1.0.0を読みに行ってしまい、これはOpenWRTと同様にno-sha0でmakeされているため動かない
# env LD_LIBRARY_PATH=/jffs/lib:/jffs/usr/lib vpnserver start
これで正常に動作する(ように見える)

しかし動作はするものの、このままだと起動時毎回シェルからコマンドを発行しなければならないので、自動で実行できるよう設定する必要がある

WebコンソールのAdministration/Commandで
env LD_LIBRARY_PATH=/jffs/lib:/jffs/usr/lib vpnserver start
としてSave Startup
env LD_LIBRARY_PATH=/jffs/lib:/jffs/usr/lib vpnserver stop
としてSave Shutdown

これで起動時に自動的に実行され、煩わしくなくなる
1 comment ( 2326 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 ( 971 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 ( 11466 views )

<<First <Back | 1 | 2 | 3 | 4 | Next> Last>>