NEC Life Touch NOTE に Debian GNU/Linux を導入

NECのAndroid端末「Life Touch NOTE」にDebian GNU/Linux をインストールした時の覚え書きです。

root 権限の奪還

ホストマシンにAndroid SDKのインストールしたら、USBでホストとLTNをつないで、以下の手順でroot権限を取り返します。

まず、SuperOneClickのZIPをダウンロードし、適当な場所に解凍しておきます。配布物はWindows向けのアーカイブですが、気にせず解凍します。unzip後のディレクトリに移った後、

adb push Exploits/psneuter /data/local/tmp
adb push Dependencies/busybox /data/local/tmp
adb push Root/su-v1 /data/local/tmp
adb push Root/su-v2 /data/local/tmp

と、必要そうなファイルをLTNの/data/local/tmpに転送します。次に、LTNに接続し、転送したものに実行権限を与えてからpsneuterを実行します。

adb shell
(adb) cd /data/local/tmp
(adb) chmod 755 *
(adb) ./psneuter

上手くいけば勝手に切断されるので、接続しなおします。接続後、プロンプトが「#」になりスーパーユーザになっていることを確認してください。

adb shell

次にデフォルトのPATHが設定されている位置に busybox をインストールします。

(adb) set</p>

<h1>/system/xbin がパスに登録されているが、このディレクトリは存在しない。</h1>

<h1>カスタムコマンドを設置するにはもってこい。</h1>

<p>(adb) df</p>

<h1>/system は /dev/block/mmcblk3p6 らしい。</h1>

<p>(adb) mount -o remount,rw /dev/block/mmcblk3p6 /system
(adb) mkdir /system/xbin
(adb) chmod 755 /system/xbin
(adb) cd /system/xbin</p>

<h1>cp コマンドがなかったので、busybox のアプレットで busybox をコピーする</h1>

<p>(adb) /data/local/busybox cp /data/local/busybox .</p>

<h1>リンクを展開</h1>

<p>(adb) ./busybox --install .

ConnectBot で localhost 接続して、busybox が使える状態になっているか確認します。

$ which wget
/system/xbin/wget
$ dc
1 2 + p
3
$ vi

よし、いい具合。これでroot権限が使え、かつ自由に作業する為の足がかりが整いました。

2. Debian GNU/Linux の導入

59414d41さんのハックの賜物であるLTN用Debian(Lenny)配布ページに従ってインストールします。ページを見ると詳しい事が書いてありますが、ここでは要点だけかいつまんで書いておきます。

まず、ホストマシンにSDカードを差して、起動用SDカードを作成します。ホストマシン上で次のコマンドを実行しました。

mkdir backup
cp -r /mnt/sdcard/* backup/
su # ←ここからroot権限
mkfs.ext3 /dev/mmcblk0p1
mount -t ext3 -o rw /mnt/sdcard /dev/mmcblk0p1
cd /mnt/sdcard
wget http://205.196.121.246/q4mgjdew5pag/0rnq7nc7lc1d0uq/ltna-debian-010.tar.gz
tar xfpz ltna-debian-010.tar.gz

この時、カレントディレクトリである/mnt/sdcardには次のようなファイルが詰まっています。

busybox … 作業用 busybox。
ltna-debian-010 tar gz … 落としてきたアーカイブ。解凍したのでもう不要。
ltna-debian-rootfs cpio gz … SD カードに展開する予定のルート・ファイルシステム。
recovery2 img … init を書き換えた改造リカバリ領域データ。
setup_recovery sh … リカバリ領域のバックアップと上書きをするスクリプト。
setup_rootfs sh … 必要ファイルをコピーし、ルート・ファイルシステムを展開するスクリプト。
sh … 作業用シェル。

アンマウントしてホストのrootを抜けます。

cd
umount /mnt/sdcard
exit

SD カードをホストマシンから LTN に差し替え、USB デバッグ接続します。SDカードを/sdcardにマウントして中を見てみると、準備したファイル群が見えると思います。それらを実行します。

(ホストから)$ adb shell</p>

<h1>root権限</h1>

<p>mount -t ext3 /dev/block/mmcblk2p1 /sdcard
cd /sdcard
./setup_rootfs.sh ..... ルートファイルシステムを SD カード内に展開。
 extract...
 copy wpa_supplicant.conf
 copy /system/lib/BCM4329B1.hcd
 copy bcm4329 files...
 copy /system/lib/hw/wlan/usibcm4329-RC218-nvram.txt
 debian rootfs ready.
 adb# ./setup_recovery.sh ... リカバリ領域のバックアップと改造データでの上書き。
 Backup recovery...
 New recovery ready.
cp recovery_org.img /data/local/tmp .... オリジナルのリカバリ領域を移しておく。
cd /
umount /sdcard
exit

LTNで起動中の Android を普通に終了します。電源ボタンから「電源を切る」でOKです。
完全に電源が切れたことを確認し、HOMEボタンを押しながら電源を投入します。これにより、リカバリモードで起動します。NECのロゴが消えるまで、HOMEボタンを押しておけば確実です。

 Login: root
 Password: (root)
passwd
 ifup eth0
 ping www.yahoo.co.jp .. 外とつながってるか調べる。
 apt-get update ........ うちでは失敗したので、リポジトリを修正する。
 vi /etc/apt/source.list
  - deb http://ftp.ja.debian.org/debian lenny main non-free contrib
  + deb http://ftp2.ja.debian.org/debian lenny main non-free contrib
 apt-get update ........ 今度はうまくいった。
 apt-get install aptitude
 aptitude install bluez-utils ntp ssh vim
 aptitude install x-window-system ttf-mona ttf-kochi-gothic ttf-kochi-mincho
 aptitude install xserver-xorg-input-evtouch rxvt-unicode ratpoison gdm
 cp /opt/ltna/xorg.conf /etc/X11/
 echo 'inet:x:3003:user' >> /etc/group

ここまで来て、startxとしたいところを我慢して、念の為再起動すると、Android が立ち上がりました。しまった!と思って、ホストマシンと繋ぎ直し、setup_recovery.sh を実行しなおしました。電源を一度切り、HOMEボタンを押しながら電源投入すると、Linux の起動メッセージが流れた後、嬉しい事に GDM がお出迎えしてくれました。

その後、

aptitude install locales && dpkg-reconfigure locales

で日本語化を行いました。

2.1. SD カードの入れ替え

2.2. バッテリー残量を得るスクリプト

モバイル WiFi + Debian on LTN 環境で、バッテリー残量が取れないと不便だった。インストールしてみた acpi では上手く取れなかったので、簡単なスクリプトを書いてみました。もっと上手い方法があるかもしれませんが、これで十分かな。

</p>

<h1>!/bin/sh</h1>

<p>dev=&quot;/sys/devices/nvec/nvec_battery/power_supply/battery&quot;
[ ! -e $device ] &amp;&amp; exit 1</p>

<p>stat=$(cat $dev/status)</p>

<p>emp=$(cat $dev/charge_empty)
ful=$(cat $dev/charge_full)
now=$(cat $dev/charge_now)</p>

<p>par=$(expr $now &#42; 100 / $(expr $ful - $emp))
[ $par -gt 100 ] &amp;&amp; par=100</p>

<p>echo $par% $stat

実行すると、残量のパーセンテージと電源の状態(充電中か、など)が表示されます。

投稿者:

dyama

佐世保のシステムエンジニアです。詳しいプロフィールやこのブログについてはこちらをご覧ください。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください