NexusOneにUbuntuを

事の始まり

  • 私ごとです
    • 私はUbuntuを常時もちあるきたい。
    • しかし、PCを持ち歩けない。
    • 一方でケータイならばOKである。
    • Ubuntuさんにはスマートフォン御用達のARMでも動くバージョンがある
    • じゃあいれて持ち歩けばいいんじゃなかろうか。

流れ※文鎮になっても恨みっこなしTake your own risk、自己責任でよろしく!

  1. Andoridケータイを買う。
    1. まあハッカー御用達のハイスペックでグローバルでメモリもCPUもいいものほどよい。
    2. 国産やSIMロック品は要注意と思ってる。
    3. なので中古もいっぱいなNexusOneを入手。
    4. 基本SIM?なにそれ美味しいの?で運用。
  2. root権限を奪取する。
    1. ここが肝。
    2. Linuxはrootという神の権限を入手すると何でもできる。
  3. busyboxさんをインストールする
    1. busyboxさんまじbusybox
    2. Linuxでおなじみのコマンドいっぱいコンパクトに入っている神ツールbusyboxさんを入手してインストールする。
  4. ARM版Ubuntuさんを入手
    1. imgファイルで入手できる。
    2. これを起動可能な様に設定する。

rootゲットだぜ!

  1. 方法は2種類ある
    1. BootLoaderをアンロックして無制限にいつでもrootになれるようにする。これやっちゃうとマジなんでもできるらしい。
    2. アンロックはせずにちょっとRootを取ってそこからいつでもrootを取れるようにする。
      1. 今回はこれ
      2. 参考:http://forum.xda-developers.com/showthread.php?t=959672
      3. ちなみにNexus One 2.2.1 FRG83D が対象バージョンです。はい。
  2. 2の方法
用意するもの:※Ubuntu10.10前提です
  1. JDK(うちはOpenJDKです。)
    1. SDKを動かすのに必要。
  2. AndoridSDK r08ぐらい
    1. なんか最新のr10だとダウンロード直後はadbコマンドが入ってない。自分で
    2. ./android update sdk
    3. なんてやると入る。platform-toolsにいらっしゃいます。
  3. SuperOneClick
    1. Windows用の脱獄ツールだがUbuntuでも起動だけはする。
    2. http://forum.xda-developers.com/showthread.php?t=803682
      1. 上で入手可能:これは後ほど必要なツールを含むので
    3. apt-get install mono
    4. sudo mono SuperOneClick.exe
    5. これが起動してないとadbの古いバージョンではつながらない。
    6. このツール自身v1.7では先へ行けない。
  4. UbuntuのARM向けイメージ+Andoridで動くものを取得
    1. http://www.filefactory.com/file/b512d23/n/ubuntu.zip
      1. ここからダウンロード、設定と起動スクリプトも含まれている。バージョンは9.10
      2. 他にもHTC HD2向けのUbuntu10.10のイメージも適用可能で存在するようだが入手できなかった。
      3. 11.04が出てから2ヶ月ぐらい耳をすましていれば11.04版が入手できるかも。
  5. busyboxさん入手
    1. http://benno.id.au/blog/2007/11/14/android-busybox
    2. ここで入手できる。
実際の作業
  1. 参考サイト(英語):
    1. http://nexusonehacks.net/nexus-one-hacks/how-to-install-ubuntu-on-your-nexus-oneandroid/
      1. で、このWindows向けの作業がアホみたいに間違いだらけなのでそのままでは動かない。
      2. スクリーンショットのエラーの嵐。これ初心者への愛なのかもしれません。
  2. まずはrootを取得
    1. SDカードを抜いたNexusOneをUSBでつなぐ
      1. 設定→アプリケーション→開発→USBデバッグ
      2. これでデバッグモードでマシンにつながる。
    2. ターミナルでSuperOneClick.exeのあるディレクトリに移動後
      1. sudo mono SuperOneClick.exe
      2. 起動したら一応Rootボタンをクリックする。試みても、多分3分まってもダメなら多分ダメ。まあそのまま放置して次へ
    1. SuperOneClickと一緒に入ってるpsneuterをadbのディレクトリにコピーする。
      1. suはsuperuserというアプリでもはいるが、ここのを使用した。http://forum.xda-developers.com/showthread.php?t=959672
      2. して以下のコマンドを流す。/data配下は自由に実行権権を一般ユーザが付けられる。

./adb push psneuter /data/local/tmp/psneuter
./adb push busybox /data/local/tmp/busybox
./adb push su /data/local/tmp/su
./adb shell chmod 755 /data/local/tmp/psneuter
./adb shell chmod 755 /data/local/tmp/busybox
./adb shell chmod 755 /data/local/tmp/su
./adb shell

      1. これで$だとまだ一般ユーザ以下確認

$ cd /data/local/tmp
$ ls
busybox
su
psneuter

      1. psneuterで一時的にrootユーザを奪取。再起動すると失われる。

$ ./psneuter
property service neutered.
killing adbd. (should restart in a second or two)

      1. 接続が切れるので再度adbで接続。#になっていれば成功

./adb shell

      1. #と表示されてもrootになっていない可能性があるので以下の表示になっていれば本当に成功

# id
uid=0(root) gid=0(root)

      1. で、最後次回もおんなじことをするのはあれなのでシステム領域を書込み可能にしてsuコマンドとbusyboxをインストールする。

# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
# cd /data/local/tmp
# ./busybox cp busybox /system/bin
# chmod 4755 /system/bin/busybox
# ./busybox --install -s /system/bin
# cp su /system/bin
# chmod 4755 /system/bin/su
# exit

      1. 再度、接続してsuコマンドが動くか確認して終了(#なだけではrootになっていないので注意)

# su
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
# exit
# exit

      1. 次にアンドロイドマーケットでSuperuserというアプリを探してきてインストールする。これはroot権限を要求されるたびに許可をするためのアプリ。なのでadbでつないでsuコマンドでrootになる時もこのアプリで要求を許可する必要がある。が、以降psnuterは動かさなくてよくなる。調子が悪ければアプリをアンインストールしてはじめからやり直し。
  1. Ubuntuのインストール
    1. USBデバッグモードはやめて、SDカードをNexusOneにつけてフォーマット,USBストレージモードでPCにつなぐ。
      1. 4GBはあればいい
      2. 参考:http://nexusonehacks.net/nexus-one-hacks/how-to-install-ubuntu-on-your-nexus-oneandroid/
    2. ubuntu.zipをsdcard直下、ubuntuという名前で解凍する。
      1. /sdcard/ubuntuで見えればOK
    3. 再度USBデバッグモードにて接続(SuperOneClickわすれず起動、画面でrootを許可すること。)

./adb shell
# su
# cd /sdcard/ubuntu
# sh ./ubuntu.sh

    1. これでインストールは終わるが、参考サイトのものはbusyboxのインストールが終わってないものなので、もし失敗する場合はbusyboxのインストールをきちんとして再チャレンジ。もしくはubuntu.shの中身を見て自力で一行づつ実行してもOK
    2. で、起動方法

bootubuntu

      1. busyboxのインストールさえきちんとしておけばchrootされてUbuntuユーザランドが起動する。
ubuntuの設定

まあここから先はUbuntuの中のおはなし。
一度、Andoroidごと再起動しないとネットワークは認識されないので注意。

  1. vncserverとsshサーバをつなげるようにしておく。
    1. GUI環境としてはlxde。CPUやメモリを勘案すると別にgnomeでもいけそう。Netwalkerよりスペックいいし。

apt-get update
apt-get install tightvncserver ssh vim lxde

    1. 一回vncserverを起動してパスワードを設定しておく。
      1. vimはとてもデータ量が多いが、nanoでは正常に作動しなかったのでvimがおすすめ。
      2. vim /root/.vnc/xstartup

# export USER=root
# vncserver :1
# vncserver -kill :1
# vim /root/.vnc/xstartup

      1. でvncserverの設定は以下の様にする。

#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid grey
icewm &
lxsession

    1. で、rootでログインする時点でvncserverが立ち上がっていると嬉しいので/root/.bashrcという起動スクリプトファイルに以下を先頭に追記

# vim /root/.bashrc

      1. わかんない人はもちろんviの使い方をググッてください。-geometry 1024×800は解像度指定なので自分の好みで調整。NexusOneは800x480

export USER=root
cd /
rm -r -f tmp
mkdir tmp
cd /
vncserver -geometry 1024×800

      1. これをAndorid側のVNCアプリで操作することができるようになる。アドレスはroot@127.0.0.1:5901です。
      2. 問題はsuするたびにvncserverが起動するのでちょくちょく消す必要がある。
  1. で、このubuntuの状態は?
    1. imgファイルがすでに2GBしかないです。すぐいっぱいになります。
    2. 妙にいっぱいソフトが入ってます。Firefoxもすでに入ってます。
    3. iBUSもはいっていますが生まく立ち上がりません。うーむ。日本語環境は要検討。
    4. SWAPがないです。多分メモリオーバーした瞬間にOSが落ちます。

以上でおしまい。