日経ITproサイトの記事があんまりなので追試してみた
Android 4.0をx86パソコンで動かしてみよう
http://itpro.nikkeibp.co.jp/article/COLUMN/20120227/383202/?ST=android-dev&mkjt&P=1
読んだ限りでは、これでは、たぶん再現できない。
- Lucidのsun-java6って消えた。
- repo コマンドの取得先は変わっている。(ここは通るかも)
- sync先は普通落ちてる。sfを使うべき。
- lunchしてないので、ビルドターゲットが明確になっていない。これでも通るのかな?
- isohybridではgrub細工は余計のような(未確認)。
日経は、いつから編集者が追試しない記事を書くようになったのか...
天野さんも、ちょっと手を抜かないで確認してほしい。
それとも、編集部で「前のをベースにやってみたら出来たので、そのまま加筆修正して転用掲載します」だったのだろうか。
ちょっとあんまりなので、追試をやってみる。
わたしの環境はnattyなので、まだsun-java6はあるようだ。
Partnerからsun-javaを消すよという予告はもう出ている。
http://d.hatena.ne.jp/kinneko/20120113/p31
Important notice regarding Java packages in Partner archive
https://lists.ubuntu.com/archives/ubuntu-security-announce/2011-December/001528.html
アーカイブを見る。
http://archive.canonical.com/pool/partner/s/sun-java6/
lucid 10.04用のパッケージはまだあるな。
リアルに入らないかどうか自信がないので、virtualbox環境で記事と同じlucidを再現してみることにした。
10.04.4のisoを落とす。
ダウンロードページからだと、ukのサーバーを指定された。
遅すぎるので、KDDI研究所から直で取る。
インストールを終え、順次追試。
JDKのインストール
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" $ sudo apt-get update $ sudo apt-get install sun-java6-jdk Reading package lists... Done Building dependency tree Reading state information... Done Package sun-java6-jdk is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package sun-java6-jdk has no installation candidate
やっぱり。
10.04.4では提供が止まっている。
古いのを手で入れる。
$ wget http://archive.canonical.com/pool/partner/s/sun-java6/ia32-sun-java6-bin_6.26-2lucid1_amd64.deb $ wget http://archive.canonical.com/pool/partner/s/sun-java6/sun-java6-bin_6.26-2lucid1_amd64.deb $ wget http://archive.canonical.com/pool/partner/s/sun-java6/sun-java6-fonts_6.26-2lucid1_all.deb $ wget http://archive.canonical.com/pool/partner/s/sun-java6/sun-java6-javadb_6.26-2lucid1_all.deb $ wget http://archive.canonical.com/pool/partner/s/sun-java6/sun-java6-jdk_6.26-2lucid1_amd64.deb $ wget http://archive.canonical.com/pool/partner/s/sun-java6/sun-java6-jre_6.26-2lucid1_all.deb $ wget http://archive.canonical.com/pool/partner/s/sun-java6/sun-java6-plugin_6.26-2lucid1_amd64.deb
kinneko@kinneko-desktop:~$ sudo dpkg -i sun-java6-bin_6.26-2lucid1_amd64.deb sun-java6-jre_6.26-2lucid1_all.deb sun-java6-jdk_6.26-2lucid1_amd64.deb [sudo] password for kinneko: Selecting previously deselected package sun-java6-bin. (Reading database ... 124906 files and directories currently installed.) Unpacking sun-java6-bin (from sun-java6-bin_6.26-2lucid1_amd64.deb) ... Selecting previously deselected package sun-java6-jre. Unpacking sun-java6-jre (from sun-java6-jre_6.26-2lucid1_all.deb) ... sun-dlj-v1-1 license has already been accepted Selecting previously deselected package sun-java6-jdk. Unpacking sun-java6-jdk (from sun-java6-jdk_6.26-2lucid1_amd64.deb) ... sun-dlj-v1-1 license has already been accepted dpkg: dependency problems prevent configuration of sun-java6-bin: sun-java6-bin depends on unixodbc; however: Package unixodbc is not installed. dpkg: error processing sun-java6-bin (--install): dependency problems - leaving unconfigured dpkg: dependency problems prevent configuration of sun-java6-jre: sun-java6-jre depends on java-common (>= 0.24); however: Package java-common is not installed. sun-java6-jre depends on sun-java6-bin (>= 6.26-2lucid1) | ia32-sun-java6-bin (>= 6.26-2lucid1); however: Package sun-java6-bin is not configured yet. Package ia32-sun-java6-bin is not installed. dpkg: error processing sun-java6-jre (--install): dependency problems - leaving unconfigured dpkg: dependency problems prevent configuration of sun-java6-jdk: sun-java6-jdk depends on sun-java6-bin (>= 6.26-2lucid1); however: Package sun-java6-bin is not configured yet. dpkg: error processing sun-java6-jdk (--install): dependency problems - leaving unconfigured Processing triggers for desktop-file-utils ... Processing triggers for python-gmenu ... Rebuilding /usr/share/applications/desktop.POSIX.cache... Processing triggers for shared-mime-info ... Processing triggers for doc-base ... Processing 26 changed 1 added doc-base file(s)... Registering documents with scrollkeeper... Processing triggers for python-support ... Errors were encountered while processing: sun-java6-bin sun-java6-jre sun-java6-jdk
あら、何か足りない。
経験的には以下かな。
まぁ、パッケージ管理システムに調整をまかせる。
kinneko@kinneko-desktop:~$ sudo apt-get install -f Reading package lists... Done Building dependency tree Reading state information... Done Correcting dependencies... Done The following extra packages will be installed: java-common odbcinst odbcinst1debian1 unixodbc Suggested packages: default-jre equivs libmyodbc odbc-postgresql tdsodbc unixodbc-bin The following NEW packages will be installed: java-common odbcinst odbcinst1debian1 unixodbc 0 upgraded, 4 newly installed, 0 to remove and 24 not upgraded. 3 not fully installed or removed. Need to get 391kB of archives. After this operation, 1540kB of additional disk space will be used. Do you want to continue [Y/n]? (snip)
debian2ではなく、debian1ってのが入った。
その他、ビルドに必要なパッケージのインストール
目的は追試なので、書いてあるとおりに入れる。
こんなに書かなくても依存関係で自動処理できるものもあるような気がする。
kinneko@kinneko-desktop:~$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils python-libxml2 Reading package lists... Done Building dependency tree Reading state information... Done gnupg is already the newest version. zip is already the newest version. libc6-dev is already the newest version. Note, selecting lib32z1-dev instead of lib32z-dev The following extra packages will be installed: dpkg-dev fakeroot g++ g++-4.4 g++-4.4-multilib gcc-4.4-multilib gcc-multilib lib32asound2 lib32bz2-1.0 lib32gcc1 lib32gomp1 lib32ncurses5 lib32readline5 lib32stdc++6 lib32v4l-0 lib32z1 lib32z1-dev libc6-dev-i386 libc6-i386 libdigest-sha1-perl libdrm-dev liberror-perl libncurses5-dev libpthread-stubs0 libpthread-stubs0-dev libstdc++6-4.4-dev libxau-dev libxcb1-dev libxdmcp-dev m4 mesa-common-dev mingw32-binutils mingw32-runtime patch x11proto-input-dev x11proto-kb-dev xtrans-dev xz-utils Suggested packages: bison-doc debian-keyring debian-maintainers gcc-4.4-doc libstdc++6-4.4-dbg lib32stdc++6-4.4-dbg lib32mudflap0 git-doc git-arch git-cvs git-svn git-email git-daemon-run git-gui gitk gitweb lib32asound2-plugins libstdc++6-4.4-doc gcc-doc cpp-doc diffutils-doc python-libxml2-dbg The following NEW packages will be installed: bison build-essential curl dpkg-dev fakeroot flex g++ g++-4.4 g++-4.4-multilib g++-multilib gcc-4.4-multilib gcc-multilib git-core gperf ia32-libs lib32asound2 lib32bz2-1.0 lib32gcc1 lib32gomp1 lib32ncurses5 lib32ncurses5-dev lib32readline5 lib32readline5-dev lib32stdc++6 lib32v4l-0 lib32z1 lib32z1-dev libc6-dev-i386 libc6-i386 libdigest-sha1-perl libdrm-dev liberror-perl libgl1-mesa-dev libncurses5-dev libpthread-stubs0 libpthread-stubs0-dev libstdc++6-4.4-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev m4 mesa-common-dev mingw32 mingw32-binutils mingw32-runtime patch python-markdown tofrodos x11proto-core-dev x11proto-input-dev x11proto-kb-dev xtrans-dev xz-utils zlib1g-dev The following packages will be upgraded: libxml2-utils python-libxml2 2 upgraded, 55 newly installed, 0 to remove and 22 not upgraded. Need to get 109MB of archives. After this operation, 458MB of additional disk space will be used. Do you want to continue [Y/n]? (snip)
repoの取得
kinneko@kinneko-desktop:~$ cd $HOME kinneko@kinneko-desktop:~$ mkdir bin kinneko@kinneko-desktop:~$ curl http://android.git.kernel.org/repo >~/bin/repo % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 122 244 122 244 0 0 142 0 0:00:01 0:00:01 --:--:-- 1016 kinneko@kinneko-desktop:~$ chmod a+x ~/bin/repo
リポジトリの初期化と取得
kinneko@kinneko-desktop:~$ mkdir android-x86-4.0 kinneko@kinneko-desktop:~$ cd android-x86-4.0/ kinneko@kinneko-desktop:~/android-x86-4.0$ repo init -u http://git.android-x86.org/manifest -b ics-x86 /home/kinneko/bin/repo: line 1: syntax error near unexpected token `newline' /home/kinneko/bin/repo: line 1: `<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">'
ここで引っかかるとは思わなかった..
repoが違うからかな?
repoは、新しい配布元になって、もともとのところで配布しているものとは微妙に違うものになっている。
新しいrepoを入れる。
kinneko@kinneko-desktop:~/android-x86-4.0$ wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo --2012-03-08 13:07:42-- https://dl-ssl.google.com/dl/googlesource/git-repo/repo Resolving dl-ssl.google.com... 74.125.31.93, 74.125.31.136, 74.125.31.190, ... Connecting to dl-ssl.google.com|74.125.31.93|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 19933 (19K) [application/octet-stream] Saving to: `repo' 100%[======================================>] 19,933 56.3K/s in 0.3s 2012-03-08 13:08:24 (56.3 KB/s) - `repo' saved [19933/19933] kinneko@kinneko-desktop:~/android-x86-4.0$ chmod a+x repo kinneko@kinneko-desktop:~/android-x86-4.0$ ./repo init -u http://git.android-x86.org/manifest -b ics-x86 kinneko@kinneko-desktop:~/android-x86-4.0$ ./repo sync (snip)
通った。
これについては、android-x86.orgは落ちていることが多いので、android-x86.git.sf.netを使う方がいいと思う。
広く読まれる記事に書くならなおさらだろう。
$ ../repo init -u git://android-x86.git.sf.net/gitroot/android-x86/x86/platform/manifest.git -b ics-x86
syncについても、サーバーに負荷をかけるが、sf.netを選んだ時には、-jを指定して並列にやったほうがいい。
grubへのパッチは必要?
記事には、
続いて、USBイメージのブートローダーを設定する部分を確認します。デフォルトだと起動しないので以下のように変更します。
という部分があるが、これはisohybrid patchが採用されてから不要になった。
これが面倒だけどって開発チームに言ったら、usb_imgは開発では使ってないって言われた。
そして、isohybridを使うことになったの。
そもそも、usb_imgで作らないのに、どうして必要なのだろう?
だから追試でもここはやらないことにする。
ビルドしてみる
HoneycombとICS以降は、generic_x86がなくなって、明確にターゲットを指定してビルドするように変更になった。
普通は以下のような手順をとる。
$ source build/envsetup.sh
$ lunch eeepc
$ time make -j12 iso_img
記事では、いきなりmakeしている。
通る気がしないけど、プリセットで通る可能性もあるのでやってみる。
kinneko@kinneko-desktop:~/android-x86-4.0$ make -j`grep 'processor' /proc/cpuinfo | wc -l` iso_img ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.0.3 TARGET_PRODUCT=generic_x86 TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=x86 TARGET_ARCH_VARIANT=x86 HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=IML74K ============================================ Checking build tools versions... (snip)
なんか通ったなぁ...
でも、これ、プロジェクトと関係ないターゲットじゃないか?
これで、eeepc.isoができるはずもないし... orz
できたものは、マウスポインタなしになるかな。
あと、isoはできないだろ。
ターゲットなしで、エラーにならないのが不思議。
/tmp/ccZ9NS7o.s: Assembler messages: /tmp/ccZ9NS7o.s:182752: Fatal error: can't write out/target/product/generic_x86/obj/STATIC_LIBRARIES/libLLVMTransformUtils_intermediates/PromoteMemoryToRegister.o: No space left on device /tmp/ccZ9NS7o.s:182752: Fatal error: can't close out/target/product/generic_x86/obj/STATIC_LIBRARIES/libLLVMTransformUtils_intermediates/PromoteMemoryToRegister.o: No space left on device make: *** [out/target/product/generic_x86/obj/STATIC_LIBRARIES/libLLVMTransformUtils_intermediates/PromoteMemoryToRegister.o] Error 1 make: *** Waiting for unfinished jobs.... external/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:2912: fatal error: error writing to /tmp/ccCoxmcC.s: No space left on device compilation terminated. make: *** [out/target/product/generic_x86/obj/STATIC_LIBRARIES/libLLVMTransformUtils_intermediates/SimplifyCFG.o] Error 1 kinneko@kinneko-desktop:~/android-x86-4.0$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 15775132 14969784 4020 100% /
と、思ったら、ディスクがいっぱいになった... orz
16GBじゃ足りなかったか...
拡張してもっかいだな。
イメージの拡張に失敗したので、もう一度最初からやり直した... orz
おお?
ちゃんと、iso image作ってら、どういうことだろう。
前はビルド中にtagetがないっていうエラーで落ちてたのにな。
/bin/bash: isohybrid: command not found isohybrid not found. Install syslinux 4.0 or higher if you want to build a usb bootable iso.
ああ、lucidのsyslinuxってば、isohybrid対応じゃないや...
2:3.63+dfsg-2ubuntu3だった。4.0系が必要なのだな。
出来たddでiso書いて動くのか?
出てきたのは、こんなの。
$ ls -lh out/target/product/generic_x86/generic_x86.iso -rw-r--r-- 1 kinneko kinneko 294M Mar 8 23:11 out/target/product/generic_x86/generic_x86.iso $ file out/target/product/generic_x86/generic_x86.iso out/target/product/generic_x86/generic_x86.iso: # ISO 9660 CD-ROM filesystem data 'Android-x86 LiveCD ' (bootable)
起動してみる
できたisoイメージを仮想マシンの外にhttp転送して、virtualboxで起動してみる。
起動はしてきたけど、マウスポインタはないみたい。
おそらく、AOSPのx86ビルドになっているのじゃないだろうか。
というわけで、初期画面から一歩も先に進めない。
残念な結果。
USBに焼くのはisohybridしていないので、そもそも可能性がなく試していない。
追試の結果は予想外の部分もあったけど、動かないということについては結果は予想とおり。
普通の人には動作するビルドを再現できませんでした。
正しい手順のおさらい
isohybridの件はおいておく。
環境をセットアップするスクリプトを実行する。
$ source build/envsetup.sh including device/amd/common/vendorsetup.sh including device/asus/common/vendorsetup.sh including device/hp/tx2500/vendorsetup.sh including device/lenovo/s103t/vendorsetup.sh including device/tegatech/tegav2/vendorsetup.sh including sdk/bash_completion/adb.bash
ターゲットとして、現在選べるのは以下の8種類。
自分のマシンに近いものを選ぶか、自分でターゲット定義を書く。
それは、そんなに難しくはない。
テストには、汎用的なeeepcを選ぶのが無難。
$ lunch eeepc-eng ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.0.3 TARGET_PRODUCT=eeepc TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=x86 TARGET_ARCH_VARIANT=x86 HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=IML74K ============================================
ビルドする。
$ make -j12 iso_img ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.0.3 TARGET_PRODUCT=eeepc TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=x86 TARGET_ARCH_VARIANT=x86 HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=IML74K ============================================ (snip)