Home > Technology

nunnun's weblog

Xperia Acro SO-02C用のtun.ko

ついでに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をコンパイルする

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に入れれば動くはずです。 

用意するもの

手順

  1. ダウンロードしたファイルを展開する
    ホームディレクトリに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
  2. デバイス(HTC EVO WiMAX)からカーネルコンフィグを抜きます
    デバイスがPCに接続された状態で、config.gzを抽出し、展開します。
    $ adb pull /proc/config.gz .
    $ gunzip config.gz
    $ mv config .config
    別のマシンから抜いてくる場合は、config.gzを抜いてそれを作業ディレクトリに転送し、展開します。
  3. Configを書き換える
    デフォルトではコンパイルしないことになっているTUNモジュールをコンパイルするために、展開した.configを書き換えます。vimなりemacsで開いて
    # CONFIG_TUN is not set
    という行を探します。探したらその行の下に、
    CONFIG_TUN=m
    という行を追加し、保存します。保存後、.configファイルをカーネルを展開した supersonic_GB_MR フォルダにコピーします。
    $ cp .config supersonic_GB_MR
  4. Makefileを変更する
    コンパイルして生成されるカーネルモジュールとデバイスで動いているカーネルのバージョンを合わせるために、Makefileを変更します。
    まず、 デバイスを接続したマシン上で、
    $ adb shell uname -a
    Linux localhost 2.6.35.10-g04a0907 #1 PREEMPT Tue Aug 30 13:49:12 CST 2011 armv7l GNU/Linux
    を実行します。実行するとカーネルのバージョンがわかります。この場合2.6.35.10-g04a0907がバージョンです。
    その後、Makefileを変更します。カーネルを展開した  supersonic_GB_MR フォルダにMakefileがあるのでそれをvimなりemacsなりで開いて、
    EXTRAVERSION =
    という行を探して、先ほどのバージョンのマイナーバージョン以下(つまり2.6.35以下)を追加します。この場合、EXTRAVERSIONの行は、
    EXTRAVERSION = .10-g04a0907
    となります。
  5. コンパイルする!
    準備が終わったので、早速コンパイルしてみる。カーネルを展開したディレクトリに移動して、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/
    環境変数を設定したら、makeする。
    $ make modules
    なんかエラーが出た場合は何かが足りない。aptitudeとかyumで探してぶち込む。無事コンパイルが終わると、drivers/net/ ディレクトリに tun.ko というカーネルモジュールが生成されているはず。fileすると、
    $ file drivers/net/tun.ko
    drivers/net/tun.ko: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped
    こんな感じに出るはず。
  6. デバイスに転送する
    コンパイルしたカーネルモジュールをデバイスに転送して、/system/lib/modules に配置します。
    デバイスをつないだマシンから、以下のように操作します。
    $ 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"
    いずれもエラーが出ずに処理が終われば正常です。エラーが出る場合はroot権限がとれていてsuがインストールされているか確認してください。

以上。最初NDKを最新のもので試したのだけど、付いてきたクロスコンパイラがarm-linux-androideabi-4.4.3で、これだと

# insmod tun.ko
insmod: init_module 'tun.ko' failed (Exec format error)

と言われてしまってモジュールを読み込めなかった。なんかARMのGCC 4.0特有の問題みたい。

フランス・スペインの携帯電話事情

土曜日から仕事でフランス・スペインに行くので、現地で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]

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をインストールします。

ここまで終えたら、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でユーザの距離を測るツールを作った

最近プログラミングしたい気分真っ盛りなので、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の結果はそれなりに精度高め。だけどちょっとあれ?っていう結果もあるからまぁ同じくらいかなと個人的には勝手に納得してる。

あとデザインとか全くできない・・・。(やる気もない説)

«Prev || 1 | 2 | 3 |...| 10 | 11 | 12 || Next»

Home > Technology

Search
Feeds
Google Latitude
Tag Cloud
IPv6 Meter

Page Top