Nexus Sのroot取得 その2 (clockworkMod Recovery導入〜root取得まで?)


保護シートを貼付してケースを付けてみた。Invisible Shieldと呼ばれているこの保護シートは平滑性が著しく悪く(斜めから見ると波打っている)透明度も悪く(モワレが出ている)、全く褒められたものでは無い。他に選択が無いために使っているがとっとと別なものに変えたくて仕方がない。一方Platinum Case方は中々いけてると思う。ただし、Nexus oneではずっとPDairのレザーケースを愛用していたので、Nexus Sでも同様のものを使う予定だ(発注済み)


前回ブートローダーのアンロックができたので、次はroot権限の取得を行う。Nexusシリーズ(といってもoneとSの2機種だけだが)のrootに関してGoogleは彼らのBlogで最近こんなことを書いている。

The Nexus S, like the Nexus One before it, is designed to allow enthusiasts to install custom operating systems. Allowing your own boot image on a pure Nexus S is as simple as running fastboot oem unlock. It should be no surprise that modifying the operating system can give you root access to your phone.
It’s not “rooting”, it’s openness - Tim Bray/ Android developers Blog

Nexus SはNexus Oneと同様、最初からエンスーなユーザーがカスタマイズしたOSをインストールできるように設計されている。自身が作成したイメージをブートするために"fastbooe oem unlock"が許可されているのだ。OSを修正できるのだから、ルート権限でアクセスできるのは当然だ。
私はこういう考え方は嫌いではない。キャリアから発売される端末は大抵がちがちにシステムが守られているが(それは当然のことだ)、中にはこのように開発者向けとしつつも一般的な用途でも使用に耐えうるものがあっても良いだろう。なんといってもそれによってAndroidというプラットホームに対して深い理解が得られる。これはかけがえの無いものだ。


さて、一口にrootの取得などと言うが、これはシステムがロックされていないNexus S上の作業としては以下の二つでしかない。

    • suをインストールして使用可能にする
    • suのリクエストを捕捉するアプリケーション"SuperUser.apk"をインストールする

これらのアプリケーション(suはコマンド)だが、以前から気になっていたので少しソースコードを読んでみた。
suは名前の通りだが、Androidの場合はsuを実行するための許可を求めるインテントをブロードキャストで投じ、許可が得られた場合にexeclでコマンドを実行している。SuperUser.apkはsuが発行したリクエスト(インテント)を受信して許可/拒否の決定をユーザに促すか、既に既定の動作を覚えている場合はそれを実行している。suはコマンドを叩くためのフロントエンド、SuperUser.apkはそれを許可/拒否、記録するためのGUIフロントエンドという位置づけだ。

当然これらは/system/binと/system/appに配置しなくてはならなが、そもそもルート権限がない状態ではインストールが出来ない訳で、ルート権限が無い状態で/system下を弄るにはなんらかのexploitを使うかROMを弄るしか無いが、前述した通りNexusシリーズはROMは改変されるもの、という前提で作られた端末なので早速xda-forum界隈でrootを取得する複数の方法が公開されている。

以下、私が採った作業手順 (基本的にhttp://forum.xda-developers.com/showthread.php?t=895545と同じだ)

※お約束だがこれらの作業を実施してNexus Sが文鎮になったとしても(特に/system下の扱い如何によっては簡単に起動しなくなる)私は一切感知しないし、質問も受け付けない。※

  • clockworkMod recoveryのインストール

通常インストールされているrecoveryツールを大幅に拡張するclockworkMod recoveryをインストールする。

 1. suとSuperUser.apkをまとめてupdateイメージに纏めたものが公開されているので、これをダウンロードして/sdcardにコピーしておく。

  >adb push su-2.3.6.1-ef-signed.zip /sdcard/

 2. recovery-clockwork-3.0.0.0-crespo.imgをダウンロードしてrecovery.imgとリネームしておく
 3. Nexus SをUSB接続して、ブートローダーを起動する

  >adb reboot bootloader

 4.ブートローダの状態でUSB接続を行い、2.で用意したリカバリイメージをフラッシュする

  >fastboot flash recovery recovery.img

 5.フラッシュしたrecoeryでブートする
 ブートローダの画面又はfastbootを使って今しがたフラッシュしたrecoveryイメージからブートする※
 ブートに成功すると以下のメニューが表示されるはずだ。
 

  • suとSuperUser.apkをインストール

 1.「clockworkMod recoveryのインストール-1.」でコピーしておいたsu-2.3.6.1-ef-signed.zipをインストールする
 このzipファイルはその中にマニフェストとスクリプトを内蔵しておりclockworkMod recoveryから直接更新することができる。
 メニューから以下の操作でインストールする。

  install zip from sdcard  -> choose zip from sdcard  -> su-2.3.6.1-ef-signed.zip -> yes

 2. リブートする
  Androidを起動してドロワーに見慣れたSuperUser.apkがインストールされており、adb shellからsuが成功するか確認する。

  >adb shell
  #
  # su

以上で上手くいくはず、なのだが実際にはうまくいかない。su-2.3.6.1-ef-signed.zipをインストールする処理自体はエラーもなくうまくいっているように見えるのだが、ブートすると全てが無かったことになっているのだ。
どうもrecovery同様に/system下に関してもなんらかの自動復旧が働いているように見える。そうでなければupdateスクリプトの問題がchmodに失敗しているか。いずれにせよsu-2.3.6.1-ef-signed.zipのインストールに失敗している以上、ルートを取得したとはいえない訳で...

今回ですんなり終わるはずだったが、次回に続く。


※一度電源を落とすか通常にリブートしてしまうと今フラッシュしたrecoveryイメージは消えてしまうので、必ずフラッシュ直後にrecoveryからブートする。理由は分からないが一種のセーフティというかイメージを壊さないための対策なのだと思う。(やっかいだが)