2011年8月29日月曜日

ODROID-7のTerminal Emulatorでsuしよう

久々のODROID-7ネタ。まだこんなことやってたんですよ。

ODROID-7に限らずAndroidのソースコードがあればこそ出来ることがあります。

さて本題。
ODROID-7には「Dev Tools」というアプリがプリインストールされており、その中でTerminal Emulatorが起動できます。Linuxのシェルでコマンドを入力することができるわけです。
しかし、このターミナルはユーザ権限しか与えられておらず殆ど何にも役に立ちません。

そこで、suコマンドでrootユーザに変わろうと思いきや
$ su
su: uid 10004 not allowed to su
と拒否されてしまいます。

これはなぜかというと、Androidソースツリーに入っているsuコマンドの方でユーザIDをチェックして弾いているためです。
ソースコードで言うと、android/system/extras/su/su.c の62行目あたりにその記述があります。
この部分をコメントアウトしてやればいいわけですね。

てな感じで。

ソースを修正したらAndroidのフルビルドをかけてもいいですが、既に一回ビルド済みであるならばsuのみ再ビルドをかけることもできます。(なおODROID-7のビルド環境構築~フルビルド方法についてはこちらを参照。)
$ cd android
(Androidのソースツリーのトップディレクトリに移動しまして)
$ . build/envsetup.sh
(mmといった部分ビルドのコマンドが利用可能になります)
$ cd system/extras/su/
$ TARGET_PRODUCT=odroid7 mm
これで out/target/product/odroid7/system/xbin/su
が再ビルドされます。

ビルドが完了したら、専用USBにてadb経由でODROID-7に送り込んでやります。(なお、adbでの接続方法についてはこちらを参照。)
$ cd ../../../
(再びAndroidのソースツリーのトップディレクトリに移動しまして)
$ adb push out/target/product/odroid7/system/xbin/su /system/xbin/
(直接置き換えてしまいます。※その前に、元のものを別名でバックアップを取っておいてもよいでしょう。)
$ adb shell
(仕上げはadb shellにてroot実行権限をつけてやります)
# chmod 6755 /system/xbin/su
以上で作業完了。

セキュリティ上問題ありですが、実験用途としてはより便利に使えるようになるかも。
まあ、adb shellは普通にroot権限でフルアクセスできることは知っての通りですが。

ではまた。

2011年8月18日木曜日

Ubuntu 10.04 にJDK5をインストールしたいとき

Ubuntu 10.04ではインストール後そのままの設定ではJDK6もインストールできませんが、JDK5をインストールするには更に一手間必要なのよん。というお話です。

まずは良く知られていた方法から(今年の4月あたりはこれで出来ていたんですがねえ)
Synaptic パッケージマネージャにリポジトリを追加するやり方です。

GUIのパッケージマネージャから設定するならば、デスクトップのメニューバーの「システム」→「システム管理」→「Synaptic パッケージ・マネージャ」を起動し、
Synaptic パッケージ・マネージャのメニューから「設定」→「リポジトリ」を開き、
「他のソフトウェア」のタブにて、「追加」をクリックし、下記を入力
deb http://us.archive.ubuntu.com/ubuntu jaunty-updates multiverse
これを保存して「再読込」を実行すれば、"sun-java5-jdk"パッケージがリストに上がってくるはずでした。

ついでにCUIでやるならば、
$ sudo add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu jaunty-updates multiverse"
$ sudo apt-get update
※と、パッケージリストを再取得したいのですが、現在のところ
W: http://us.archive.ubuntu.com/ubuntu/dists/jaunty-updates/multiverse/binary-i386/Packages.gz の取得に失敗しました 404 Not Found
というようにパッケージリストが取得できず失敗してしまいます。
これではapt-getで"sun-java5-jdk"をインストールすることはできませんね。

ではどうすりゃいいかというと、OracleのHPから取ってきて手動でインストールすればいいんです。
いまのところはこちらになりますが、
Google検索で『Java archive』と検索(※日本語検索はOFF)すれば、真っ先に引っかかってきます。
(Oracleのトップページからこのページに行く方法はわからず。。。)

サイトにたどり着いたら「Java SE 5」というリンクをクリックし、現在の最新版である「Java SE Development Kit 5.0u22」をクリックです。
「Accept Licence Agreement」をチェックして、環境にあったファイルを落としましょう。
Ubuntuの場合は「rpm」の付いていない「jdk-1_5_0_22-linux-i586.bin」を選べばよいでしょう。環境によっては「amd64」の付いている方になるかと思います。

ダウンロードしたらコマンドラインにて
$ chmod a+x jdk-1_5_0_22-linux-i586.bin
$ sudo ./jdk-1_5_0_22-linux-i586.bin
(スペースキー連打でライセンス条項を読み飛ばし)
yes
でインストール開始です。
(※なお、Enterキー連打でライセンス条項を読み飛ばそうとすると勢いあまって"no"を実行してしまうことがあるので注意)

実際のところはインストールではなく、その場に"jdk1.5.0_22"というディレクトリで展開されるわけですが。
このままでは如何ともしがたいというわけで、
$ sudo mv jdk1.5.0_22 /usr/local/
などとお好みで適当なディレクトリに配置しておき。
ホームディレクトリの「.bashrc」ファイルでパスを通しておきます
$ gedit ~/.bashrc
一番後ろに下記一行を追記して上書き保存
PATH =$PATH:/usr/local/jdk1.5.0_22/bin
$ source ~/.bashrc
$ java -version
java version "1.5.0_22"
等と出てくればOK。

おまけで、ヒントを一つ。
この状態でeclipseを手動で入れたならば、eclipseのインストールディレクトリ下に/usr/local/jdk1.5.0_22/jreへのシンボリックリンクをjreとして作っておくと良いです。
eclipseのインストールディレクトリにて
$ ln -s /usr/local/jdk1.5.0_22/jre jre
みたいな感じで。

適当ですが以上です。