Home > Technology
nunnun's weblog
Xperia Acro SO-02C用のtun.ko
- 2011-11-13 (Sun)
- Technology
ついでにXperia Acro用のtun.koもコンパイルしてみた。
Android 2.3.4 [2.6.32.9-pref] 向けです。
IS11Sもたぶんいけるはず
コンパイル方法は
AndroidのKernel Moduleをコンパイルする
をみてください。
コンパイル済みファイルはこちら
http://nunnun.jp/acro/tun.ko-acro-4.0.1.C.1.9.zip
AndroidのKernel Moduleをコンパイルする
- 2011-11-13 (Sun)
- Technology
SoftBankの回線をただ解約するのはもったいないので、WiMaxが付いてて各方面で絶賛投げ売り中のauのHTC EVOたんを入手したよ!(若干ネタが古い感はするーする!)
さてRootも無事取って、Cisco AnyConnect (VPNクライアント)をインストールして接続しようとしたら、"tun.ko"がないからむりぽって言われたので、tun.koをカーネルソースからコンパイルしてみることにした。
もともとOpenVPN用のモジュールなので、インストールするとOpenVPNも使えるようになるはずです。(もちろんカーネルモジュールだけじゃ動かないので他のファイルも必要です!)
最初OSXでやろうとしたんだけど、なんか面倒っぽかったのでLinux上でやってます。僕はたまたま手元にCentOSがあったのでCentOSでやったけど、きっとDebianとかでも動くはずです。
コンパイル済みのtun.koも準備しました。
http://nunnun.jp/evo/tun.ko-2.6.35.10-g04a0907.zip
/system/lib/modulesに入れれば動くはずです。
用意するもの
- カーネルソース
HTCのサイトから入手できます。http://htcdev.com/devcenter/downloads
EVOは "HTC EVO 4G – GB MR – 2.6.35" です - Android SDK
Googleから入手します。http://developer.android.com/sdk/index.html - Android NDK
こちらもGoogleから入手します。http://developer.android.com/sdk/ndk/index.html
ただ、arm-eabi-4.4.0のクロスコンパイラが必要なので、最新版ではなくandroid-ndk-r5cを使用します。
リンク: http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2
手順
- ダウンロードしたファイルを展開する
ホームディレクトリにandroidというフォルダを作ってそこに展開することにします。(別に場所はどこでも平気です)
$ mkdir android $ cd android $ wget http://dl.google.com/android/android-sdk_r15-linux.tgz $ wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2 $ wget http://dl4.htc.com/RomCode/Source_and_Binaries/supersonic-2.6.35-gb-MR.tar.gz $ tar zxvf android-sdk_r15-linux.tgz $ tar xvf android-ndk-r5c-linux-x86.tar.bz2 $ tar zxvf supersonic-2.6.35-gb-MR.tar.gz
- デバイス(HTC EVO WiMAX)からカーネルコンフィグを抜きます
デバイスがPCに接続された状態で、config.gzを抽出し、展開します。
別のマシンから抜いてくる場合は、config.gzを抜いてそれを作業ディレクトリに転送し、展開します。$ adb pull /proc/config.gz . $ gunzip config.gz $ mv config .config
- Configを書き換える
デフォルトではコンパイルしないことになっているTUNモジュールをコンパイルするために、展開した.configを書き換えます。vimなりemacsで開いて# CONFIG_TUN is not set
という行を探します。探したらその行の下に、
CONFIG_TUN=m
という行を追加し、保存します。保存後、.configファイルをカーネルを展開した supersonic_GB_MR フォルダにコピーします。
$ cp .config supersonic_GB_MR
- Makefileを変更する
コンパイルして生成されるカーネルモジュールとデバイスで動いているカーネルのバージョンを合わせるために、Makefileを変更します。
まず、 デバイスを接続したマシン上で、を実行します。実行するとカーネルのバージョンがわかります。この場合2.6.35.10-g04a0907がバージョンです。$ adb shell uname -a Linux localhost 2.6.35.10-g04a0907 #1 PREEMPT Tue Aug 30 13:49:12 CST 2011 armv7l GNU/Linux
その後、Makefileを変更します。カーネルを展開した supersonic_GB_MR フォルダにMakefileがあるのでそれをvimなりemacsなりで開いて、
EXTRAVERSION =
という行を探して、先ほどのバージョンのマイナーバージョン以下(つまり2.6.35以下)を追加します。この場合、EXTRAVERSIONの行は、
EXTRAVERSION = .10-g04a0907
となります。 - コンパイルする!
準備が終わったので、早速コンパイルしてみる。カーネルを展開したディレクトリに移動して、makeする。
ただ、環境変数をちゃんと設定しないと動かない。こんな感じ
環境変数を設定したら、makeする。$ export ARCH=arm $ export CROSS_COMPILE=arm-eabi- $ export PATH=$PATH:~/android/android-ndk-r5c/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/
なんかエラーが出た場合は何かが足りない。aptitudeとかyumで探してぶち込む。無事コンパイルが終わると、drivers/net/ ディレクトリに tun.ko というカーネルモジュールが生成されているはず。fileすると、$ make modules
こんな感じに出るはず。$ file drivers/net/tun.ko drivers/net/tun.ko: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped
- デバイスに転送する
コンパイルしたカーネルモジュールをデバイスに転送して、/system/lib/modules に配置します。
デバイスをつないだマシンから、以下のように操作します。いずれもエラーが出ずに処理が終われば正常です。エラーが出る場合はroot権限がとれていてsuがインストールされているか確認してください。$ adb push tun.ko /sdcard/tun.ko $ adb shell su -c "mount -o rw,remount /system /system" $ adb shell su -c "cp /sdcard/tun.ko /system/lib/modules" $ adb shell su -c "insmod /system/lib/modules/tun.ko" $ adb shell su -c "mount -o ro,remount /system /system"
以上。最初NDKを最新のもので試したのだけど、付いてきたクロスコンパイラがarm-linux-androideabi-4.4.3で、これだと
# insmod tun.ko
insmod: init_module 'tun.ko' failed (Exec format error)
と言われてしまってモジュールを読み込めなかった。なんかARMのGCC 4.0特有の問題みたい。
フランス・スペインの携帯電話事情
- 2011-05-12 (Thu)
- Technology
土曜日から仕事でフランス・スペインに行くので、現地でiPhoneとかを使いたいのでどのキャリアのプリペイドSIMが使えそうか調べてみたので、忘れないようにメモ。
基本的な方針として、
- 電話はおそらく発信しないので、ドコモのSIMでローミングを使用する。
- データはローミングでは死ぬほど高いので、プリペイドを現地で調達する。
- おそらくiPad向けにプリペイドを提供しているはずなので、それを探す。
スペイン
スペインはいくつかキャリアあるのだけど、前にいったときに使ったことがあるMovistarで調べてみた。
iPadは取り扱っているが、どうやらプリペイドプランは提供していないみたい。
Movistar - iPad
仕方がないので普通のプリペイドプランをあさってみる。
http://www.tarifas.movistar.es/particulares/voz/tarjetamas#contratar
通話: 22.8 cent euro / min
データ: 1.5 Euro / 10MB
これだとちょっと高い。10MBとか一瞬で使っちゃうし。というわけでプリペイドに使えるプランを探してみる。
あったあった。
Bono Mensual Internet en el Móvil Prepago
これだと20MB/month 6 Euro。まぁこれも一瞬だよね。
ほかにはないかと探してみる。
Bono Internet Trimestral
これは1GB/3months 59 Euro ちょっと高いけど、まぁ足りる。
今回は1週間ぐらいいるから、実際どうなんだろう。
フランス
フランスもいくつかキャリアあるけど、SFRかOrange。SFRはiPhone 3G向けならプリペイドデータプランがあるが、それ以外はないのでOrangeを調べてみる。
mobicarteっていうのがプリペイドの意味。
ここに書いてあった。
http://paygsimwithdata.wikia.com/wiki/France
OrangeのWebサイトからわかる情報は
200MB / 6 Euro
http://mobile.orange.fr/content/ge/high/v2_offre_boutique/options/options.html
ただ、SIMつかって操作すればUnlimitedがつかえると、上のページには書いてあったので調査してみる。
まぁいずれの国にしても今回行くところが結構地方なので、まずSIMカードを調達するのが大変かも。
かえってきたらまたレビュー書きます。
Google Authenticatorで2段階認証を行う [Debian]
- 2011-03-01 (Tue)
- Technology
Google AuthenticatorとはよくVPNつなぐときとかに使うRSAトークンをiPhoneやAndroid, BlackBerryで実装してしまおうというプロジェクト。
[Untitled by UUMickey, on Flickr under licensed Creative Commons Attribution, Noncommercial, Share Alike]
↑こんなやつ。
もともとは、Googleの2段階認証の為に実装されたものなのだけど、Unixでユーザ認証に使うPamモジュールも公開されているのでコンパイルすれば使える。そこで、Debian Squeezeにインストールしました。
ちなみに元々のGoogleで2段階認証を使ってみたのですが、2段階認証に対応しているサービス・クライアントが少なくApplication Passwordを乱発することになり結果的に非常に使い勝手が悪くなってしまったので、結局パスワード認証に戻しました。
だいたいの手順は、
PamModuleInstructions - google-authenticator
http://code.google.com/p/google-authenticator/wiki/PamModuleInstructions
こちらに書いてありますが、自分でもセットアップした方法忘れそうなのでメモ。
Google Authenticatorを取得する
ソースから取得するしかないみたいなので、
http://code.google.com/p/google-authenticator/source/checkout
ここからソースを取得します。
$ hg clone https://google-authenticator.googlecode.com/hg/ google-authenticator
ソースを取得したら、makeします。libpamなどのパッケージが必要な場合があるのでそうしたらaptでインストールします。
$ cd google-authenticator/libpam/ ~/src/google-authenticator/libpam$ make
正しく make されていたら make install します。
PAMの設定をする
Debian SqueezeはPAMは pam-auth-update というコマンドを使ってPAMをアップデートするので、pam-configs 用のファイルを準備します。
"O Nuno": Use Google Authenticator to login to a Linux PC
http://nunoassimassim.blogspot.com/2011/01/use-google-authenticator-to-login-to.html
ここから、google-enough と google-all を取得して /usr/share/pam-configs/ に置きます。
おいたら pam-auth-update を実行して google-all か google-enough にチェックを入れます。(enoughはpam的にはsufficientなので、あんまり意味ないので個人的にはallにしています。)
注意: google-all を選択して、ここでログアウトするとログインできなくなります。(SSHでPubkey認証とかなら平気ですがパスワード認証とかだと死にます)
SSHのチャレンジレスポンス認証をオンにする
これをオンにしないとSSHでは使えません。 /etc/ssh/sshd_config に
ChallengeResponseAuthentication yes
を記述します
Google Authenticatorをセットアップする
ドングルとなるデバイスにGoogle Authenticatorをインストールします。
- iOS
http://itunes.apple.com/jp/app/google-authenticator/id388497605?mt=8 - BlackBerry
http://m.google.com/authenticator - Android
マーケットで探してください:)
ここまで終えたら、Google Authenticatorを使用したいアカウントで
$ google-authenticator
と実行します。実行すると、
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/administrator@aquila%3Fsecret%3DKHTY47WLAJDGMUXT Your new secret key is: KHTY47WLAJDGMUXT Your verification code is 472653 Your emergency scratch codes are: 18356824 29003846 55379944 61293021 32637075 Do you want me to update your "~/.google_authenticator" file (y/n)
こんな感じで出てきますので、URLをブラウザに貼り付けるなりsecret keyを端末に入れるなりします。
入力が完了したら、こんな画面になります。
ログインを試してみる
鍵なしのクライアントからログインを試みる(もしくはsudoとかでもいいです)と、
hiro@aquila:~$ sudo su -l root Verification code: [sudo] password for hiro:
こんな感じで2段階認証を求められます。
ちゃんちゃん。NFSでホームディレクトリを共有してたりすると1回設定すれば他のマシンでも同じトークンを使用できるので便利です。
Twitterでユーザの距離を測るツールを作った
- 2011-02-20 (Sun)
- Technology
最近プログラミングしたい気分真っ盛りなので、Twitterでフォローしている・されているユーザの距離を測るツールを作りました。

User Distance
http://distance.hirotaka.org/
過去2ヶ月程度にやりとりしたTweetを解析して、ユーザとフォローしている・されているユーザの距離を測定します。距離なのだけど、数字が大きい方が関係性が高いです。(数学苦手でうまくモデル化できてません。Follow, Mentionとかの数を集計して、重みをつけたスコアを対数取っているだけの適当モデルです・・。どなたか数学得意な人お知恵を貸していただけると助かります)
裏でクローリングしているので、使い始めだと直近数時間のTweetしか解析できないので、精度が悪いかもしれません。クロールされるのを待ってください・・。
実は似たような事をするAPIが有料であるのだけど、クエリー制限とかあったので作ってしまえと作ってしまいました。
Twitter Strong Links - Infochimps API
http://api.infochimps.com/describe/soc/net/tw/strong_links
ちなみにInfochimpsの結果はそれなりに精度高め。だけどちょっとあれ?っていう結果もあるからまぁ同じくらいかなと個人的には勝手に納得してる。
あとデザインとか全くできない・・・。(やる気もない説)
Home > Technology
