少し前から気になっていた Boot to Gecko(B2G)を nexus s 用にコンパイルして動かしてみましたので
その時の備忘録として記録しておきます。
まず、コンパイル環境としてiMacのOSXで直接コンパイルできるか試したのですが、うまく動かなかったのでVMware Fusionにubuntu 11.10(64ビット版)を導入し、Linux上に環境を構築しました。
ここからは、Building and Running Boot To Gecko on the Nexus SとSetting Up Boot to Gecko Build Environmentを参照しながら試行錯誤で行ったため、つまずいたところなどを記録しておきます。
1.まずは、開発環境の前提条件となるパッケージを導入すます。(git以外本当に必要かどうかは不明ですが、、、)
sudo apt-get build-dep firefox
sudo apt-get install git mercurial libasound2-dev libcurl4-openssl-dev libnotify-dev libxt-dev libiw-dev mesa-common-dev autoconf2.13
sudo apt-get install ia32-libs gcc-multilib g++-multilib bison flex gperf lib32z-dev lib32ncurses5-dev lib32ncursesw5-dev libncurses5-dev libidl-dev lib32gomp1 autoconf2.13 ccache libx11-dev lib32readline-gplv2-dev
2.Android SDKの前提条件であるJavaを導入します。
sudo apt-get install openjdk-7-jre
3.Android SDKを導入します。
http://developer.android.com/sdk/index.htmlからLinux用のandroid-sdk_r18-linux.tgzをダウンロードし、ホームディレクトリ-に展開します。
~/android-sdk-linux/toolsと~/android-sdk-linux/platform-toolsを環境変数PATHに追加します。
(android-sdk-linux/platform-toolsは次のステップで作成されますが、ついでなので先にPATHを通しておきます)
ターミナルを再起動してPATHを有効にします。
4.AndroidSDKのアップデートとplatform-toolsを導入します。
sdkのandroidコマンドを実行し、AndroidSDKToolsのrev.19とAndroidSDKPlatform-toolsにチェックを入れインストールします。
(今回は導入したSDKがrev.18だったので、アップデートにrev.19が表示されたためついでに最新版にしておきました)
5.B2Gの開発環境をダウンロードします。
git clone git://github.com/andreasgal/B2G
cd B2G
make sync
(この時にとても時間が掛かるので寝る前に実行するのがおすすめです)
6.Nexus s用のconfigを作成します。
make config-nexuss-ics
7.Nexus sがすでにICSだったので、ベースバンドの設定を追加します。
glue/gonk/device/samsung/crespo/board-info.txtにICSのブートローダーのバージョンとベースバンドの情報を追加します。
この設定がないとnexus sにB2Gを書き込むときにエラーとなります。
require version-bootloader=I9020XXJK1|I9020XXKA3|I9020XXKL1
require version-baseband=I9020XXJK8|I9020XXKB1|...|I9020UCKE1|I9020XXKI1
8.B2Gをコンパイルします。
make gonk
make
9.出来上がったB2Gをnexus s に転送します。
実は、ここからが結構はまってしまいました。
まず、USBでnexus sを接続してadbやfastbootで認識させるためには、LinuxでUSB周りの設定を行う必要があります。
エディターで次のファイルを作成します。
sudo vi /etc/udev/rules.d/51-android.rules
このファイルに記述する内容は以下の2行です。
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1",ATTR{idProduct}=="4e20", OWNER="user" ,SYMLINK+="android_adb"
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1",ATTR{idProduct}=="4e20", OWNER="user" ,SYMLINK+="android_fastboot"
パーミッションを変更してudevのサービスを再起動します。
sudo chmod a+r /etc/udev/rules.d/51-android.rules
sudo service udev restart
これでLinuxからUSB接続したnexus sに接続できたのですが、adb devices を実行してもデバイス名は??????となりnexus sを認識しませんでした。
そこで色々と調べた結果、adbもfastbootもroot権限がないとデバイスにアクセス出来ないので、これ以降はrootユーザーでコマンドを実行することにしました。
sudo su
. .bashrc
(環境変数読み込みます。)
adb kill-server
adb start-server
一般ユーザー権限で動いていたadbのサーバーを一度停止し、再度rootユーザー権限で再起動します。
ここで、nexus sをUSBでiMacに接続します。
この時、VMwareがUSBデバイスをOSXかLinuxのどちらに接続するか聞いてきますので、Linuxを選択します。
make flash-only
(nexus sのいわゆるSDカードのエリア以外は全部消えますのでバックアップを事前にとっておきます)
このコマンドを実行すると内部的にnexus sをfastbootでリブートするため、再度VMwareがUSBデバイスをどうするか聞いてきますのでもう一度Linuxを選択します。
導入が成功してもnexus sの画面にはエラーが表示されますが、これはまだgaiaと呼ばれるGUIのモジュールが導入されていないだけなので次のコマンドを実行します。
make install-gaia
導入が成功すると、nexus sの画面上にはB2Gのホーム画面が表示されます。
まだまだ出来立てのOSなので、カメラが動かないとか、SMSが送れないとか実際の使用には耐えられませんが、電源を入れてわずか10秒で起動する携帯電話なんて最近全く見かけないので実用化されるととても面白いと思います。
スケジュールを見ていると6月くらいにはβ版と呼ばれるものが出てきそうなので、その時にはもう一度試してみたいと思います。
追記.Wifiがうまくつながらない時の対応
ビルドした環境によってはWifiがうまく繋がらなくなることがありました。
その時は、B2GのディレクトリーにあるWIFI.mdというファイルの手順に従ってWifiの構成ファイルを修正することでちゃんとWifiに接続できるようになりました。
手順は以下の通りです。
構成ファイルの雛形をB2GからPCにダウンロードします。
adb pull /system/etc/wifi/wpa_supplicant.conf
エディターでファイルを開き、ファイルの最後にWifiの設定を追記します。
network={
ssid="SSIDを記述します"
psk="パスワードを記述します"
key_mgmt=WPA-PSK <ーWifiの設定に依存します。
priority=1
}
このファイルをB2Gの別の場所に戻します。
adb push wpa_supplicant.conf /data/misc/wifi/wpa_supplicant.conf
B2Gに入りパーミッションを変更しておきます。
adb shell
chmod 0600 /data/misc/wifi/wpa_supplicant.conf
chown system.wifi /data/misc/wifi/wpa_supplicant.conf
再起動します。
adb reboot
これで起動時にWifiを掴むようになります。
追記2 B2Gが更新されています。
いつのタイミングからかわかりませんが、最新版の2012-05-09 17:30:28のソースでは手順7は必要なくなっています。
glue/gonk/device/samsung/crespo/board-info.txtは使われていないようでglue/gonk-ics/device/samsung/crespo/board-info.txtを参照するようになっており、こちらのファイルにはデフォルトでICSのブートローダーの情報が書かれていました。
また、Wifiの設定もファイルを書き換えなくても単純にSettingからWi-Fiの設定をすることでちゃんと無線LANの電波をつかむようになりました。
定期的に
make sync && make config-nexuss-ics && make gonk && make
でソースを更新しコンパイルし直すようにした方が良さそうです。
ちなみにSMSも送受信できるようになっています。(^^) カメラはまだですが、、、
手っ取り早くroot化すればあとは何とでもなるのですが、恒久的なroot化はとある事情でできないため一時的なroot化で対応出来る方法を探してみたのでその備忘録として記録しておきます。
まず、ブートローダーのアンロックをしないでroot化出来る方法を探すと、
[04/Jan][ROOTING/UNROOTING] Xperia 2011 Easy Rooting Toolkit [v4.0](zergRush Exploit)
というツールが見つかりました。
そこで、ここからツール本体の DooMLoRD_v4_ROOT-zergRush-busybox-su.zip をダウンロードしました。
このzipファイルを展開すると、その中にrootを奪取するプログラムの zergRush や、su、Superuser.apk、busybox などが入っており、runme.bat がすべての作業を自動的に行なってくれるバッチファイルで、この中身を見ることで大体の手順がわかりました。
恒久的なroot化は望んでいなかったので、そこでやりたい事だけを手動で行うことにしました。
すべての作業はPCからXperiaを操作するため、adbが使える状態になっていることが前提です。
1.必要なプログラムをXperiaに転送する
コマンドプロンプトから以下のコマンドを実行します。
adb shell mkdir /data/local/tmp
root化されていない一般ユーザー権限で触れるディレクトリーは/data/localだけなのでここにワークディレクトリーを作成します。
adb push zergRush /data/local/tmp/
root奪取のコマンドzergRushをワークディレクトリーに転送します。
adb shell chmod 777 /data/local/tmp/zergRush
zergRushに実行権限を与えます。
adb push busybox /data/local/tmp/
Linuxの各種コマンドを一つにまとめたbusyboxをワークディレクトリーに転送します。
adb shell chmod 777 /data/local/tmp/busybox
busyboxに実行権限を与えます。
2.rootの奪取と/systemのリマウント
コマンドプロンプトから以下のコマンドを実行します。
adb shell /data/local/tmp/zregRush
zregRushを実行してrootを奪取します。
すると、以下のようなメッセージが表示されます。
[**] Zerg rush - Android 2.2/2.3 local root
[**] (C) 2011 Revolutionary. All rights reserved.
[**] Parts of code from Gingerbreak, (C) 2010-2011 The Android Exploid Crew.
[+] Found a GingerBread ! 0x00000118
[*] Scooting ...
[*] Sending 149 zerglings ...
[+] Zerglings found a way to enter ! 0x10
[+] Overseer found a path ! 0x000151e0
[*] Sending 149 zerglings ...
[+] Zerglings caused crash (good news): 0x2abcccc4 0x0054
[*] Researching Metabolic Boost ...
[+] Speedlings on the go ! 0x6fd193d3 0x6fd39667
[*] Popping 24 more zerglings
[*] Sending 173 zerglings ...
[+] Rush did it ! It's a GG, man !
[+] Killing ADB and restarting as root... enjoy!
rootの奪取に成功すると、adb shell を実行した際のコマンドプロンプトが $ から # に変わりrootで接続できたことがわかります。
adb shell /data/local/tmp/busybox mount -o remount,rw /system
/system/appの中のプリロードアプリを削除するために/systemをrw(リード・ライト)モードでリマウントします。
Androidにもmountコマンドはあるのですが、サブセットのためremountオプションが使えず、busyboxで提供されるmountを使います。
busyboxは1つ目の引数に実行したいコマンドを書きますので、この場合はmountコマンドが実行されます。2つ目以降の引数はmountコマンドに対する引数となります。
3.プリロードアプリの削除
/systemに対する書き込みができるようになったので、必要のないプリロードアプリをrmコマンドで削除していきます。
今回の手順で奪取したroot権限はAndroidを再起動すると使えなくなります。
そこで、手順2からやり直すことになるのですが、一度実行すると/data/local/tmpの下に、boomshとshという2つのファイルが出来上がっているので、先にこれらのファイルを削除してから実行することになります。
再脱獄してultrasn0wでSIMフリーにしようとしても、ベースバンドが05.15.04に上がってしまいSIMフリー化できません。
ベースバンドを下げるアプリのFuzzyband 4.1をCydiaから導入したのですがFuzzybandも05.15.04をサポートしておらず、困ったのですが、探せばあるもんですね。
ICE2-05.15.04.cert というファイルをFuzzybandのディレクトリーにコピーしてから起動すると、無事ベースバンドを05.13.04に下げることができました。
あとはもう一度ultrasn0wを導入することでSIMフリー化できました。
以下は備忘録として書いておきます。
1.iOS4.2.1をiPhone 3Gに新規導入する。
2.Redsnow 0.9.6rc16でiPhoneを脱獄する。
3.CydiaからFuzzyband 4.1を導入する。
4.googleで"ICE2-05.15.04.cert"というファイルを探してダウンロードしておく。
5.CydiaでOpenSSHを導入しすぐにrootのパスワードを変更しておく。 <- ここ重要
6.scpで先程のファイルを /Applications/Fuzzyband.app にコピーし、念のためパーミッションを664に変更しておく。
7.Fuzzybandを実行しDowngradeボタンを押してベースバンドを下げる。
8.Cydiaからultrasn0wを導入する。
これで無事iPhone 3GのSIMフリー化が出来ました。
How to Install Android on Your iPhone
当然の事ですが、前提条件として脱獄しているiPhoneがないと導入出来ません。
なおかつ導入出来るのはiPhone3GのiPhoneOS3.1.2以前のみで3GSやtouchにはまだ対応していません。
脱獄方法にも指定があって、Spiritで脱獄した3GもダメでRedsn0wかBlacksn0wかPwnageToolで脱獄する必要があります。
また、OpenSSHが必要となりますので、最低でも1つ前の記事をクリアした上で実行する必要があります。
まあ、ファイル転送するだけなのでSSH必須ではないですが、他の方法は調べて下さい。
基本的にはリンク先の手順にしたがっていけば良いのですが、ちょっと引っかかるところがあったので、ややこしそうなことだけ書いておきます。
基本的に自己責任ですのでわかる方のみお試し下さい。
この手順はLinuxをベースにした導入手順ですのでLinuxの動く環境が必要となります。
Wikiを読んでいくとOSXとWindows(iPhone2Gのみ)でも出来そうでしたが、ここではLinuxでのインストール方法について説明します。
元記事にはUbuntuがおすすめとあったので、最新版をダウンロードしWindows上のVMwareにインストールしました。
実際に作業をしていてつまずいたのが次の3点です。
ひとつは、iPhone上にAndroidのファイルを転送した後、手順16でiPhoneを再起動しファイルが正しく転送されているかどうかファイルサイズで確かめるようにとあったのですが、サイトに記載されているサイズと実際のサイズが異なりました。
ただ、元々Webからダウンロードした時のサイズと記事のサイズが違っていたので、記事が書かれた後にパッケージが変更されたものと考え、ここは問題なしと判断しました。
次に問題となったのは、手順18でiPhoneをリカバリーモードで再起動して接続するところでした。
ついいつもの癖でDFUモードにしてしまい手順19でloadibecを実行したときにリカバリーモードのiPhoneが見つからないと言われて悩んでしまいました。
最後に、手順21のoibcを実行するところで、libreadline5が無いということで先に進めませんでした。
作者がLinuxにはUbuntuがおすすめとあったので、まさか追加パッケージがいるとは思いませんでした。
なので、apt-get install libreadline5 を実行してパッケージをインストールして事なきを得ました。
それ以外は、手順通りに実行することで、iPhoneでAndroidの動く夢を見ることが出来ました。
一応無線LANでインターネットにアクセスしたり、電話をかけることは出来ました。
ただ、動くだけで使えるわけではありませんでした。
まず、動作が遅すぎるのと、タッチの判定が大雑把でなかなかうまく入力できませんでした。
そして、最悪なのが電池があっという間になくなっていくことでした。
iPhoneはホッカイロ状態になるので、電池にも相当悪いと重ます。
もう少し安定してくればそれなりに使えるようになるかもしれません。
今回は夢からさめておとなしくiPhoneOSで使うことにします。
夏にiPhoneの次期モデルがでたら、3GはAndroidで遊ぶかもしれませんけど。(^^)
iPhoneに侵入された???
と
常に危険にさらされているみたい
にです。
昔に比べて脱獄が簡単に出来てしまうので、脱獄に興味をもたれた方がアクセスしてくるのでしょう。
でも、この記事を読んで本当に危険性を理解出来る人ははたしでどのくらいいるのでしょうか?
最低でも、CydiaからMobileTreminalをインストールしてコマンドが叩ける位の知識がないと脱獄などしない方がいいと思います。
特に、OpenSSHをインストールする必要がある場合(自分は絶対にインストールするつもりがなくても、あるパッケージの前提条件として勝手にインストールされる可能性があります)は、細心の注意を払う必要があります。
以下に、脱獄した場合に必ずやらないといけないことを大雑把に書いておきます。
脱獄を検討している方は、OpenSSHをインストールするつもりがなくても、脱獄直後に以下の作業することをお勧めします。
1.脱獄する。
これがすべての始まりです。
何を使えば脱獄出来るのか、どうするのかは自分で調べてください。
それすら出来ないなら脱獄など考えない方がいいでしょう。
2.Cydiaを起動して、Cydia関連のパッケージを最新のものにアップデートする。
脱獄した後、パッケージのインストールは主にCydiaで行うことになります。
Cydiaを最初に起動した時にアップデートを促されますので、メッセージに従いCydiaそのものを最新の状態に
してください。
ただし、メッセージは英語です。辞書をひきながらでも理解してください。
ここで、何を書いてあるのか理解できないなら、iTunesでオリジナルのファームウェアを上書きして入獄する
ことをお勧めします。
3.パスワードを変更する。
CydiaからMobileTerminalをインストールし、コマンドでパスワードを変更します。
どのユーザーのパスワードを変更するのか?
元のパスワードは?
どんなコマンドで変更するのか?
これらは自分で調べてください。
自分で調べて理解しようとしないで脱獄するのはあまりにも危険です。
最低限googleで検索する癖を付けましょう。人に聞くのはその後です。でないとggrksと言われるだけです。
4.OpenSSHを導入する。(もしくは勝手に導入されてしまう)
今までは、手順の3と4が逆でも大丈夫でした。
iPhoneにログインしようと攻撃を仕掛けてくるものも少なかったので、OpenSSHを導入後にPCからiPhoneにsshでログイン後パスワードを変更しても問題にはなりませんでした。
しかし、最近ではウィルスに感染したiPhoneが蔓延し、パスワードを変更していないiPhoneに対してSSHでログインしようと繰り返しアクセスしてきます。
なので、脱獄直後にターミナルからパスワードを変更し、その後のOpenSSHの導入に控えることが必要なのです。
脱獄したiPhoneのセキュリティについてはパスワードを変更することが最低限の対策です。
パスワードを変更していても、辞書攻撃されるとログインされてしまう可能性は0ではありません。
ですので、これ以降はOpenSSHの設定ファイルを修正してパスワードではログイン出来なくする、rootユーザーで
直接ログイン出来なくするなどの対応が必要となります。
脱獄には危険が伴うことを十分理解した上で、
まず、気軽に脱獄しようとは考えない
OpenSSHは本当に必要な場合にしかインストールしない
どうしてもインストールするならまずは先にパスワードを変更してから導入する
SBSettingsのSSHトグルで必要のないときはSSHを停止しておく
定期的にSyslogをチェックし、攻撃されていないか、侵入された形跡はないか確認する
ホームディレクトリーの.bash_historyをチェックし、実行した覚えの無いコマンドがないか確認する
などの対策をとるようお勧めします。





