2013-04-07
AndroidをGentoo Linux上でビルドする方法、あるいは不審なバイナリをあまり使わずにNexusのrootになる手順
言いわけ:Webに転がっているいくつかのroot権限を取得する手順で用いているバイナリはオープンソースだったりもしますが、覗いてもよくわからなかったしどうせ自前ビルドするからとあまり深く追いませんでした。単にroot権限を取りたいだけならば他所をあたったほうがいいかもしれません。
Googleの推奨している環境はUbuntuで、手順もapt*を使ったものしかないが、gentooも理解すれば楽。
https://source.android.com/source/initializing.html
とりあえずGentooの場合特有なのは
- Ubuntuでの前提パッケージ名から該当するものを適当に探してemergeする
- android-sdk-update-managerをemergeする
- sun-jdkを選んでおく
- ANDROID_JAVA_HOME環境変数を作る
の四点くらいで、残りは普通の手順のようだった。
以下もうちょっと詳しく。
関連パッケージを入れる
上記URLにapt-getの場合のパッケージ名が羅列されているが、それっぽいのを適当にemergeするとなんとかなると思う。build-essensialは多分ubuntu特有のもので、Ubuntuで{lib}hoge-devのようにバイナリと分けられているパッケージはGentooではたいていhogeで一緒に入ったりすることを念頭に入れつつeixなりemerge -[sS]なりで探す。Androidのバージョンによっていろいろ変わるだろうし、自分もまっさらな環境から入れたわけではないので本当ならば何を追加すればいいのかわからないので逐一ebuildを挙げたりはしない。
# emerge -av android-sdk-update-manager # usermod -a -G android YOUR_LOGIN_USER
ログイン中のユーザだと即時グループが変わったりしないので、再ログインしてandroidグループに入る
$ id (androidグループに入ってるかの確認) $ android
出てくるGUI画面のToolsあたりにadbが入ってると思うので適当にチェックボックス入れて難しい文面をあなたの顧問弁護士に見せて相談してAcceptすると後は自動でやってくれる。
実機を繋げられるようにする。
実機の方でUSB debugを有効にしておく。Jellybeansあたりから(?) Settings->About phonesのBuild numberを7回タップしたりして開発者向けオプションを出さなければならない。このとき間違えて近くの別項目を数回タップすると……ちょっとニッコリできるかもしれない。
/etc/udev/rules.d/51-android.rules に https://source.android.com/source/initializing.html のConfiguring USB Accessを参考にして項目を追加する。Googleがドキュメントを更新する前にデバイスを手に入れてしまった場合、実機をとりあえず繋いでみてdmesgあたりでidVendorを確認してそれを用いるとなんとかなる。
$ adb devices
でなんか繋がってるらしい事を確認できたら、adbとかfastbootでいろいろできるようになってるはずだ。
$ adb reboot bootloader
でブートローダがなんか画面に出てる状態にして、
$ fastboot oem unlock
で端末に出てる説明をよく読んで操作すればブートローダがアンロックされ、個人情報保護のためデータが全消去された後、自分でビルドした何か(あるいは道端で拾ってきた怪しげなバイナリ)をブートさせる事ができる状態になる。
ソースをダウンロードする。
これにはebuildは用意されてない。私も用意する気はない。しかたがないので
https://source.android.com/source/downloading.html
を見てその通り進めていく。repo内部で用いているgitの.gitは.repo/repo下にあるのでgitでの名前とかを変えたい場合はそこで操作する事。ソースのそこかしこに最終更新日から腐臭の漂うドキュメントもちらほら梱包されているが、まだまだたまには参考にはできる。
残念なことにソースのないドライバ類をダウンロードしないといけない。 https://developers.google.com/android/nexus/drivers から自分のデバイスに対応するものをダウンロード、ソースツリーのてっぺんで解凍してできたスクリプトを実行し、表示されたライセンスを懇意にしている弁護士に見せて問題がなければ"I ACCEPT"と入力してvendor/以下にバイナリをもらう。
ダウンロードが終わったらみんな大好きコンパイルの時間
https://source.android.com/source/building.html にある通り、lunchで設定を整えてmakeするだけ。*1
Gentooで行う場合少しだけ注意点がある。
自分は試していないがsun以外のjdkだとコンパイルに問題があるとか言う人もいるので
$ eselect java-vm list
でsunのものを使うようになってるか確認しておくといいかもしれない。
lunchがANDROID_JAVA_HOMEという環境変数を用いるがデフォルトではそんなものないので
$ ANDROID_JAVA_HOME=$JAVA_HOME lunch
するなりANDROID_JAVA_HOMEの設定を.*shrcに書いておくなりする。
デバイス毎のlunchのオプションは https://source.android.com/source/building-devices.html でわかるということになっているが、ここでもGoogleのドキュメント更新が遅い場合オプション無しで
$ lunch
するとよくあるもの一覧が対話的に選べるのでドキュメントには反映されてない端末がちゃんとmanifestにはあるかどうかの確認には良いだろう。-userdebugまでならそのまま対話的に選べるが、"full_デバイス名-eng"は自分でオプションとして渡さなければならない。rootが欲しいだけならば-userで、設定ファイルのro.secureを1に手で編集すれば良い。
out/target/product/デバイス名/にboot.imgとかができている。-engを選んでいれば
$ fastboot boot boot.img $ adb shell
でrootになれてるのを確認できるだろう。-userdebugならばadb rootでrootになれる事を確認できそうだ。動作を確認した後、
$ fastboot flash boot boot.img
で焼く事ができる。
外に持ち出すデバイスならば
$ fastboot oem lock
する事が望ましい。アンロックしたまま落としたデバイスを誰かに拾われて、その人が自前のイメージでbootすれば端末の中身は全て見る事ができるからだ。
(おまけ)カーネルも自前コンパイル
さて、上記の方法でビルドするとカーネルはgoogleさんの奴のままだから、カーネルもhttps://source.android.com/source/building-kernels.html にあるようにデバイスに適切なツリーをcloneして適切なコミットをcheckoutする。checkoutしないとclone直後のmasterは空だったりするから混乱しないように。
toolchain内のgcc*2のパスは上記リンクのbuilding-kernelsのドキュメントが古いから prebuilts/gcc/linux-x86/x86/i686-linux-android-*/bin/ に置きかえたり、今後どうなるかわからないがとにかく自分で探さないといけない。(多分普通の人はこれ。自分のコンピュータのアーキテクチャによる。)バージョンの違いでビルドできたりできなかったり、いろいろあるから試行錯誤しないといけない。正直私もよくわからない。
(おまけ)自前カーネルを組み入れる
できたカーネルをboot.imgに組み入れる方法なんだけど、実はここからちゃんとした手順を知らない。だから書かない。カーネル動かしたい人はsplit_bootimgで検索したりしていろいろ頑張ってほしい。ちゃんとした方法が本当はあるのかもしれないので、わかったら追記する。
追記 20130424
device/<vendor>/<name>/kernelに移した後、make cleanしてからmakeしたら自前カーネル組み入れられてるみたいでした。うっかり。
多分device/<vendor>/<name>/kernelからbuildのどこかにkernelを移してからmkbootimgされてから${OUT}のどこかに移していたのでしょう。make clean忘れずに。
2012-12-19
mikutterのvendorのライセンスについて
ライセンスって面倒くさいよね。単にGPLで配布していいのかどうかは正直この早見表 http://www.gnu.org/licenses/license-list.html くらいで判断してるよ。実際
@kudzu_naoki: Gentooのmikutter、結局vendor以下を全てインストールする荒っぽい方法で動かしてるけどtyped-arrayとかちゃんとgemのebuild作るとしたらライセンスどうしたらいいんだろう
の日*1は早見表だけでできそうか否か判断したからね。
だけどmikutterアドベントカレンダーで不安になってる人がいたから、自分のアドベントカレンダーの順番の時にoverlayを公開するにあたって調べた部分、vendorの中身について書いとくね。
- ライセンス
- vendorの中身でそれが適用されてるもの
を列挙して、直後に解説を書いておくよ。
これはみんな知ってるライセンスだよね。コピーレフトもないしどんな糞ライセンスで再配布しようとしまいとかまわないよ。
- Artistic-2.0
- memoize
なんかPerl出身のライセンスとして名前だけ聞いた事ある程度の人も多いんじゃないかな。僕もそうだったよ。http://dev.perl.org/licenses/ で明記されてる通り、GPLv1以降かArtisticでの再配布が認められてるよ。GPLv1以降ってなんか珍しいよね。
面倒そうな表記だね。実際一度面倒だったんだよ。昔むかし単にRubyライセンスと言うと
I have obtained a copy of the Ruby license and studied it. It has some of the ambiguity problems of the Perl Artistic License, from which it was derived. Because of them, I can't say it is a free software license. Some small clarifications and small changes in the Perl Artistic License make it a free software license and compatible with the GPL--with little change in the meaning. Would you please consider replacing the Ruby license with that license? http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/30001 より引用
なんてstallman直々にあいまいな点があるよ、って言われてしまう内容だったんだって。だからmatzさんをはじめとするRubyコミッタ達がいろいろ頑張ってはなしあって二度のライセンス修正を経て、RubyKaigi2010でBSDLとのデュアルライセンスになってるんだってさ。http://bugs.ruby-lang.org/projects/ruby/wiki/DevelopersMeeting20100827 だから2010年8月27日以降Rubyが配布するのと同じライセンスってのはRubyライセンスとBSDLのデュアルライセンスを指すんだ。というわけでBSDLの方を採用して、GPLv2以降で再配布できるよね。
さて、そんなわけでvendorの中身自体はREADMEで適用除外しておのおののライセンスで再配布、残りのソースと全体としてのmikutterはGPLv3で配布できる*はず*なんだ。一応おおまかに確認したうえで自前のoverlayに入れてるんで、ライセンスに問題があるかも……みたいなFUDじゃなくてきちっと○○というのが△△ライセンスに違反しています、って指摘欲しいな。公式と無関係の僕も不安になっちゃうからね。
20121224 追記
d_akiさんに教えていただいた。debianへの収録に際しての考察。こっちはskin類についてもあって参考になる。
http://vdr.jp/d/20121221.html#p01
僕はmikutterのコミッタでもなんでもない、ただの一利用者だから、公式見解と異なるかもしれないし間違ってる点もいっぱいあるかもしれないので、なんでもご指摘歓迎です。よろしくお願いします。
2012-12-18
fav2toshi_aアドベントカレンダー18日目?
このエントリは、 #fav2toshi_a Advent Calendar : ATNDの18?日目として書かれてしまったものです。
前の日は@arc680さんの#fav2toshi_a Advent Calendar 17日目 - へたれ日記です。
次の日は……ピンチヒッター誰なの?
//_ [][]// ,,-―''':::::::::::::::ヽヾヽ':::::/、 誰 を こ
// \\ // /::::::::::::::::::::::::::::::i l | l i:::::::ミ だ 作 の
 ̄  ̄  ̄/ /:::::::::,,,-‐,/i/`''' ̄ ̄ ̄ `i::;| あ っ か
―`―--^--、__ /:::::::::=ソ / ヽ、 / ,,|/ っ た れ
/f ),fヽ,-、 ノ | 三 i <ニ`-, ノ /、-ニニ' 」') !! の ん
i'/ /^~i f-iノ |三 彡 t ̄ 。` ソ ハ_゙'、 ̄。,フ | ) は だ
,,, l'ノ j ノ::i⌒ヽ;;|  ̄ ̄ / _ヽ、 ̄ ゙i ) |
` '' - / ノ::| ヽミ `_,(_ i\_ `i ヽ、 ∧ ∧ ∧ ∧
/// |:::| ( ミ / __ニ'__`i | Y Y Y Y Y
,-" ,|:::ヽ ミ /-───―-`l | // |
| // l::::::::l\ ||||||||||||||||||||||/ | // |
/ ____.|:::::::| 、 `ー-―――┴ / __,,..-'|
/゙ー、,-―'''XXXX `''l::,/| ー- 、__ ̄_,,-"、_,-''XXXXX |
/XX/ XXXXXXXXXX| | _, /ノXXXXXXXXXX|
こんな気分でしたが、#としぁがわるい*1ほいほいと参加登録した方が悪い。
ふぁぼ系プラグインなんて入れた事のない初心者なので、1つ1つ、丁寧に1週間分のtweetを読んで見たところ、「としぁさんらしいなぁ、mikutterの作者なんだなぁ」と感じられ*2、結局1週間の発言ほとんどにfav付けちゃいました。めんご。
きいたか!今俺に爆撃してる奴!俺はオワコンだからすぐにやめろ!!!
↑のような事言いつつも
清き1favを
だなんて催促しちゃったりもしていて、
ふぁぼられ手当くれ
1fav=1円のレートで金貰えたら普通に暮らせるレベルでやられてる
ふぁぼ魔のみなさんお墓はこっちです!
こうなるんだよなぁ。
みく!みく!!(錯乱

