ミラー環境でマスター外して起動したらGRUBはちゃんとブートしてくれるかテスト
昨日の段階では、まだ不安なとこがあったので、継続テスト。
これの続き。
http://d.hatena.ne.jp/kinneko/20110526/p36
http://d.hatena.ne.jp/kinneko/20110526/p37
GRUB2で両方のストレージに同じ設定で書き込みをした。
理屈ではどちらのドライブだけになっても、ちゃんと起動できるようになったのだけど、実際にそうなってしまったときに起動してこないとイヤなのでテスト。
一旦落として、右のドライブを外して起動。
ちゃんと起動してきた。
mdはこんなステイトに。
root@redmine:~# cat /proc/mdstat Personalities : [raid1] md1 : active (auto-read-only) raid1 sda5[1] 5998528 blocks [2/1] [_U] md0 : active raid1 sda1[1] 482384832 blocks [2/1] [_U] unused devices: <none>
当然ながら、右ドライブが起動時からは存在しないので、ドライブ名のマップはくりあがって、sdaになっている。
root@redmine:~# ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}'
sda 3:0:0:0
デバイス名のマッピングがIFで固定できないのは、台数が増えるとやっかいな問題。
UUIDで呼ぶようにしておいたほうがいいのか。
ドライブを挿入する。
[ 648.765078] ata3: exception Emask 0x10 SAct 0x0 SErr 0x4050000 action 0xe frozen [ 648.765194] ata3: irq_stat 0x00400040, connection status changed [ 648.765278] ata3: SError: { PHYRdyChg CommWake DevExch } [ 648.765365] ata3: hard resetting link [ 658.780021] ata3: softreset failed (device not ready) [ 658.780107] ata3: hard resetting link [ 660.060022] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 660.080665] ata3.00: ATA-8: SAMSUNG HA500LJ, CW300-11, max UDMA7 [ 660.080672] ata3.00: 976773168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 660.082803] ata3.00: configured for UDMA/133 [ 660.082817] ata3: EH complete [ 660.083003] scsi 2:0:0:0: Direct-Access ATA SAMSUNG HA500LJ CW30 PQ: 0 ANSI: 5 [ 660.083744] sd 2:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB) [ 660.083903] sd 2:0:0:0: [sdb] Write Protect is off [ 660.083911] sd 2:0:0:0: [sdb] Mode Sense: 00 3a 00 00 [ 660.083979] sd 2:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 660.084399] sdb: sdb1 sdb2 < sdb5 > [ 660.121426] sd 2:0:0:0: [sdb] Attached SCSI disk
root@redmine:~# ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}' sdb 2:0:0:0 sda 3:0:0:0
RAIDを再構成しておく。
root@redmine:~# mdadm --manage --add /dev/md1 /dev/sdb5 mdadm: re-added /dev/sdb5 root@redmine:~# mdadm --manage --add /dev/md0 /dev/sdb1 mdadm: re-added /dev/sdb1
再起動するとマッピングが入れ替わっているのが確認できる。
root@redmine:~# ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}' sdb 2:0:0:0 sda 3:0:0:0
root@redmine:~# ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}' sda 2:0:0:0 sdb 3:0:0:0
IF名とデバイス名を一致させる(解決法なし)
2ドライブのミラー構成では、実用上はまったく問題がないのだけど、昨日のように抜くドライブを間違えるようなドジはふみたくない。
そこで、IF名とデバイス名は固定しておきたい。
たしか、kernelのboot=オプションで指定する方法があったような。
Kernel Boot Command-Line Parameter Reference
http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch09.pdf
ここには見当たらない。2006年だと古すぎか。
http://www.kernel.org/doc/Documentation/kernel-parameters.txt
libata.force=あたり?
違うなぁ...
起動時にIF名とデバイス名を一意にすることできるのって、特殊なataドライバだけだったかな...
探しても一般的な方法を見つけられない。
by-idで管理すると、場所ではなく、個体のドライブになるし。
/dev/disk/by-id/scsi-SATA_SAMSUNG_HA500LJS0ZBJ1FPC05095
/dev/disk/by-id/scsi-SATA_SAMSUNG_HA500LJS0ZBJ1FPC21565
by-pathで管理したらいいのかな?
/dev/disk/by-path/pci-0000:00:1f.2-scsi-2:0:0:0
/dev/disk/by-path/pci-0000:00:1f.2-scsi-3:0:0:0
これでmdとか認識できるのだろうか。
ミラー環境でマスターの先頭潰して起動したらGRUBはちゃんとブートしてくれるかテスト
さて、最初のインターフェイスにドライブがない場合は、ドライブマッピングが変わってうまく起動できることはわかった。
ドライブがあるのに、そこから起動できない場合はどうなるのだろうか。
これ、昨日間違ってやっちゃったことと同じだけどね(^^;。
あの時は、sdbだった。
sdaではどうか?
まずはバックアップ。
root@redmine:~# dd if=/dev/sda of=mdr_sda.img bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 9.3881e-05 s, 5.5 MB/s root@redmine:~# dd if=/dev/sdb of=mdr_sdb.img bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 7.9434e-05 s, 6.4 MB/s
実行。
root@redmine:~# dd if=/dev/zero of=/dev/sda bs=512 count=1
再起動。
root@redmine:~# shutdown -r now
おお、ちゃんと上がってきた。
ドライブマッピングも正常。
root@redmine:~# ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}' sda 2:0:0:0 sdb 3:0:0:0
root@redmine:~# cat /proc/mdstat Personalities : [raid1] md1 : active (auto-read-only) raid1 sdb5[1] 5998528 blocks [2/1] [_U] md0 : active raid1 sdb1[1] 482384832 blocks [2/1] [_U] unused devices: <none>
MBRを書き戻す。
root@redmine:~# dd if=mdr_sda.img of=/dev/sda bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.00347861 s, 147 kB/s
書き戻しを確認。
root@redmine:~# fdisk -l /dev/sda Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0000f5f2 Device Boot Start End Blocks Id System /dev/sda1 1 60055 482384896 fd Linux raid autodetect /dev/sda2 60055 60802 5998593 5 Extended /dev/sda5 60055 60802 5998592 fd Linux raid autodetect
パーティションを再認識させるのに、ドライブを抜き差しする。
root@redmine:~# echo 1 > /sys/class/scsi_device/2\:0\:0\:0/device/delete
[ 296.897402] sd 2:0:0:0: [sda] Synchronizing SCSI cache [ 296.897916] sd 2:0:0:0: [sda] Stopping disk [ 297.323307] ata3.00: disabled
ドライブを抜く。
[ 345.260316] ata3: exception Emask 0x10 SAct 0x0 SErr 0x4010000 action 0xe frozen [ 345.260432] ata3: irq_stat 0x00400040, connection status changed [ 345.260514] ata3: SError: { PHYRdyChg DevExch } [ 345.260600] ata3: hard resetting link [ 345.984026] ata3: SATA link down (SStatus 0 SControl 300) [ 345.984038] ata3: EH complete
ドライブを入れる。
[ 377.949502] ata3: exception Emask 0x10 SAct 0x0 SErr 0x4050002 action 0xe frozen [ 377.949618] ata3: irq_stat 0x00400040, connection status changed [ 377.949701] ata3: SError: { RecovComm PHYRdyChg CommWake DevExch } [ 377.949792] ata3: hard resetting link [ 387.968025] ata3: softreset failed (device not ready) [ 387.968111] ata3: hard resetting link [ 389.192041] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 389.212699] ata3.00: ATA-8: SAMSUNG HA500LJ, CW300-11, max UDMA7 [ 389.212706] ata3.00: 976773168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 389.214844] ata3.00: configured for UDMA/133 [ 389.214858] ata3: EH complete [ 389.215058] scsi 2:0:0:0: Direct-Access ATA SAMSUNG HA500LJ CW30 PQ: 0 ANSI: 5 [ 389.215508] sd 2:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB) [ 389.215668] sd 2:0:0:0: [sda] Write Protect is off [ 389.215675] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 389.215743] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 389.216160] sda: sda1 sda2 < sda5 > [ 389.250219] sd 2:0:0:0: [sda] Attached SCSI disk
なんか一発目は認識に失敗したみたいだけど、リセット入って認識した。
RAIDを再構築する。
root@redmine:~# mdadm --manage --add /dev/md1 /dev/sda5 mdadm: re-added /dev/sda5 root@redmine:~# mdadm --manage --add /dev/md0 /dev/sda1 mdadm: re-added /dev/sda1
とりあえず、リビルド中だが、正常に戻った。
root@redmine:~# cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sda5[0] sdb5[1] 5998528 blocks [2/2] [UU] md0 : active raid1 sda1[2] sdb1[1] 482384832 blocks [2/1] [_U] [>....................] recovery = 0.3% (1705728/482384832) finish=103.3min speed=77533K/sec unused devices: <none>
udevmonitorって便利そうね。
kernelのnetlinkを通じたudevへのイベントをモニタできる。
ueventの再実行はこうしてやる。
# echo > /sys/class/input/mice/uevent
DebianとWindowsの異種環境間でSphinxのドキュメントをGitで管理する。
http://d.hatena.ne.jp/mkouhei/20110521/1305905297
なるほど、めんどくさい(^^;。
今朝、「ドキュメント管理にSphinx使おうかと思いますが、どうでしょう?」と聞かれたのだけど、このへんわかっているのかな?
squeezeにてGingerbreadビルド環境を作成してビルドするの手順
lenny-froyo(ARM)のはこれ。
http://d.hatena.ne.jp/kinneko/20101229/p1
Ubuntu 10.10-froyo(x86)のはこれ。
http://d.hatena.ne.jp/kinneko/20110416/p13
んで、今回は、squeeze-Gingerbreadで。
Debianを使うのは、Ubuntuでやると、X11など余計な物が入りすぎて、メモリの負荷が高くなるから。
ただでさえメモリを要求するAndroidのビルドには、メモリは少しでも空いているほうがいい。
6.0.1a-amd64-netinstでミニマムでインストール(taskselで何も選択しない)。
そう、Gingerbreadは、64bitでしかビルドできなくなったのです。
32bitマシンしかない人は捨てられました...
dorpbearを入れてsshでヘッドレス制御。
152パッケージ。
python
root@build86:~# dpkg -l | grep python root@build86:~#
pythonが入っていない。
へぇ、なくなったんだねぇ。
root@build86:~# apt-get install python
追加パッケージは以下。
libmagic1 amd64 5.04-5 [234 kB] file amd64 5.04-5 [49.7 kB] mime-support all 3.48-1 [34.2 kB] python2.6-minimal amd64 2.6.6-8+b1 [1520 kB] python2.6 amd64 2.6.6-8+b1 [2455 kB] python-minimal all 2.6.6-3+squeeze6 [33.8 kB] python all 2.6.6-3+squeeze6 [168 kB]
Git
root@build86:~# apt-get install git-core
追加パッケージは以下。
openssh-blacklist all 0.4.1 [2125 kB] openssh-blacklist-extra all 0.4.1 [2127 kB] less amd64 436-1 [127 kB] libdb4.7 amd64 4.7.25-9 [662 kB] libbsd0 amd64 0.2.0-1 [41.9 kB] libedit2 amd64 2.11-20080614-2 [71.0 kB] libgpg-error0 amd64 1.6-1 [43.9 kB] libgcrypt11 amd64 1.4.5-2 [282 kB] libtasn1-3 amd64 2.7-1 [63.1 kB] libgnutls26 amd64 2.8.6-1 [559 kB] libkeyutils1 amd64 1.4-1 [6942 B] libkrb5support0 amd64 1.8.3+dfsg-4 [45.7 kB] libk5crypto3 amd64 1.8.3+dfsg-4 [106 kB] libkrb5-3 amd64 1.8.3+dfsg-4 [375 kB] libgssapi-krb5-2 amd64 1.8.3+dfsg-4 [130 kB] libidn11 amd64 1.15-2 [158 kB] libsasl2-2 amd64 2.1.23.dfsg1-7 [115 kB] libldap-2.4-2 amd64 2.4.23-7 [211 kB] openssh-client amd64 1:5.5p1-6 [934 kB] patch amd64 2.6-2 [120 kB] perl-modules all 5.10.1-17 [3482 kB] perl amd64 5.10.1-17 [4461 kB] openssl amd64 0.9.8o-4squeeze1 [1059 kB] ca-certificates all 20090814+nmu2 [153 kB] libcurl3-gnutls amd64 7.21.0-1 [266 kB] liberror-perl all 0.17-1 [23.6 kB] git amd64 1:1.7.2.5-1 [5273 kB] git-core all 1:1.7.2.5-1 [1326 B] libsasl2-modules amd64 2.1.23.dfsg1-7 [155 kB] libxau6 amd64 1:1.0.6-1 [16.8 kB] libxdmcp6 amd64 1:1.0.3-2 [19.3 kB] libxcb1 amd64 1.6-1 [44.3 kB] libx11-data all 2:1.3.3-4 [190 kB] libx11-6 amd64 2:1.3.3-4 [846 kB] libxext6 amd64 2:1.1.2-1 [45.3 kB] libxmuu1 amd64 2:1.0.5-2 [15.6 kB] rsync amd64 3.0.7-2 [359 kB] xauth amd64 1:1.0.4-1 [33.6 kB]
一般的なビルド環境に必要なパッケージ
root@build86:~# apt-get install flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl valgrind unzip zlib1g-dev
追加パッケージは以下。
The following NEW packages will be installed: binutils bison build-essential bzip2 cpp cpp-4.4 curl dbus defoma dpkg-dev esound-common fakeroot flex fontconfig fontconfig-config g++ g++-4.4 gcc gcc-4.4 gdb gdbserver gperf hicolor-icon-theme libaa1 libaa1-dev libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libartsc0 libartsc0-dev libasound2 libasound2-dev libasyncns0 libatk1.0-0 libatk1.0-data libaudio-dev libaudio2 libaudiofile-dev libaudiofile0 libavahi-client-dev libavahi-client3 libavahi-common-data libavahi-common-dev libavahi-common3 libc-dev-bin libc6-dbg libc6-dev libcaca-dev libcaca0 libcairo2 libcap2 libcups2 libcurl3 libdatrie1 libdbus-1-3 libdbus-1-dev libdirectfb-1.2-9 libdirectfb-dev libdirectfb-extra libdpkg-perl libdrm-intel1 libdrm-radeon1 libdrm2 libesd0 libesd0-dev libflac8 libfont-freetype-perl libfontconfig1 libfontenc1 libfreetype6-dev libgl1-mesa-dev libgl1-mesa-dri libgl1-mesa-glx libglib2.0-0 libglib2.0-data libglib2.0-dev libglu1-mesa libglu1-mesa-dev libgmp3c2 libgomp1 libgpm2 libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libice-dev libice6 libjasper1 libjpeg62 libjpeg62-dev libmpfr4 libncurses5-dev libogg0 libpango1.0-0 libpango1.0-common libpcre3 libpixman-1-0 libpng12-0 libpng12-dev libpthread-stubs0 libpthread-stubs0-dev libpulse-browse0 libpulse-dev libpulse-mainloop-glib0 libpulse0 libpython2.6 libsdl1.2-dev libsdl1.2debian libsdl1.2debian-alsa libslang2-dev libsm-dev libsm6 libsndfile1 libssh2-1 libstdc++6-4.4-dev libsvga1 libsvga1-dev libsysfs-dev libsysfs2 libthai-data libthai0 libtiff4 libtimedate-perl libts-0.0-0 libvorbis0a libvorbisenc2 libwrap0 libwxbase2.6-0 libwxbase2.6-dev libwxgtk2.6-0 libwxgtk2.6-dev libx11-dev libx86-1 libxau-dev libxcb-render-util0 libxcb-render0 libxcb1-dev libxcomposite1 libxcursor1 libxdamage1 libxdmcp-dev libxext-dev libxfixes3 libxfont1 libxft2 libxi6 libxinerama1 libxml2 libxrandr2 libxrender1 libxt-dev libxt6 libxtst6 libxxf86vm1 linux-libc-dev m4 make manpages-dev mesa-common-dev pkg-config sgml-base shared-mime-info tcpd tsconf ttf-dejavu-core unzip valgrind wx2.6-headers x-ttcidfont-conf x11-common x11proto-core-dev x11proto-input-dev x11proto-kb-dev x11proto-xext-dev xfonts-encodings xfonts-utils xml-core xtrans-dev zip zlib1g-dev 0 upgraded, 179 newly installed, 0 to remove and 0 not upgraded. Need to get 156 MB of archives. After this operation, 457 MB of additional disk space will be used.
32bit環境でしかビルドできないツールのための互換ライブラリ追加
root@build86:~# apt-get install gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs lib32readline5-dev lib32z1-dev
libc6-i386 amd64 2.11.2-10 [3805 kB] lib32bz2-1.0 amd64 1.0.5-6 [39.4 kB] lib32asound2 amd64 1.0.23-2.1 [327 kB] lib32gcc1 amd64 1:4.4.5-8 [55.2 kB] lib32ncurses5 amd64 5.7+20100313-5 [345 kB] lib32stdc++6 amd64 4.4.5-8 [347 kB] libv4l-0 amd64 0.8.0-1 [105 kB] lib32v4l-0 amd64 0.8.0-1 [75.7 kB] lib32z1 amd64 1:1.2.3.4.dfsg-3 [76.1 kB] ia32-libs amd64 20110310 [34.2 MB] lib32readline5 amd64 5.2-7 [130 kB] libc6-dev-i386 amd64 2.11.2-10 [1524 kB] lib32ncurses5-dev amd64 5.7+20100313-5 [397 kB] lib32readline5-dev amd64 5.2-7 [121 kB] lib32gomp1 amd64 4.4.5-8 [24.7 kB] gcc-4.4-multilib amd64 4.4.5-8 [2331 kB] g++-4.4-multilib amd64 4.4.5-8 [1008 kB] g++-multilib amd64 4:4.4.5-1 [826 B] gcc-multilib amd64 4:4.4.5-1 [820 B] lib32z1-dev amd64 1:1.2.3.4.dfsg-3 [75.7 kB]
JDK
最近はOpenJDKでもビルドが通るようになったと聞くので、確認を含めてそちらを使うことに。
前に試した時には、Froyoはビルドできなかったけど、そっちは修正されたのかな?要確認。
root@build86:~# apt-get install openjdk-6-jdk
java-common all 0.40 [64.3 kB] ca-certificates-java all 20100412 [101 kB] openjdk-6-jre-lib all 6b18-1.8.7-2~squeeze1 [5909 kB] tzdata-java all 2011d-0squeeze1 [153 kB] liblcms1 amd64 1.18.dfsg-1.2+b3 [112 kB] libnspr4-0d amd64 4.8.6-1 [139 kB] libgif4 amd64 4.1.6-9 [41.7 kB] libaccess-bridge-java-jni amd64 1.26.2-5 [27.7 kB] libaccess-bridge-java all 1.26.2-5 [429 kB] ttf-dejavu-extra all 2.31-1 [3199 kB] libnss3-1d amd64 3.12.8-1+squeeze1 [1110 kB] openjdk-6-jre-headless amd64 6b18-1.8.7-2~squeeze1 [25.5 MB] openjdk-6-jre amd64 6b18-1.8.7-2~squeeze1 [270 kB] openjdk-6-jdk amd64 6b18-1.8.7-2~squeeze1 [10.9 MB] icedtea-6-jre-cacao amd64 6b18-1.8.7-2~squeeze1 [376 kB]
repoの取得
root@build86:~# mkdir ~/bin root@build86:~# curl http://android.git.kernel.org/repo > ~/bin/repo % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 17451 100 17451 0 0 7211 0 0:00:02 0:00:02 --:--:-- 22961 root@build86:~# chmod a+x ~/bin/repo
わたしは、repoにはpathは通さない主義(^^;。
必要な方は、お好みでどうぞ。
リポジトリを既存のものからコピー
既存のものがない場合は次の項目へ。
大量ダウンロードを避けるため、既存のリポジトリから内容をコピーする。
詳細はこのへんにある。
http://d.hatena.ne.jp/kinneko/20110420/p6
http://d.hatena.ne.jp/kinneko/20110420/p7
http://d.hatena.ne.jp/kinneko/20110420/p8
以前に落としたfroyoのものがあったので、今回はそれをコピーして使う。
root@build86:~# mkdir -p gb-x86/.repo root@build86:~# cp -a froyo-x86/.repo/projects gb-x86/.repo/
リポジトリの初期化
root@build86:~# cd gb-x86/ root@build86:~/gb-x86# ~/bin/repo init -u git://git.android-x86.org/manifest.git -b gingerbread-x86 gpg: keyring `/root/.repoconfig/gnupg/secring.gpg' created gpg: keyring `/root/.repoconfig/gnupg/pubring.gpg' created gpg: /root/.repoconfig/gnupg/trustdb.gpg: trustdb created gpg: key 920F5C65: public key "Repo Maintainer <repo@android.kernel.org>" imported gpg: Total number processed: 1 gpg: imported: 1 Getting repo ... from git://android.git.kernel.org/tools/repo.git remote: Counting objects: 1293, done. remote: Compressing objects: 100% (563/563), done. remote: Total 1293 (delta 832), reused 1137 (delta 707) Receiving objects: 100% (1293/1293), 354.54 KiB | 116 KiB/s, done. Resolving deltas: 100% (832/832), done. From git://android.git.kernel.org/tools/repo * [new branch] maint -> origin/maint * [new branch] master -> origin/master * [new branch] stable -> origin/stable * [new tag] v1.7.4.3 -> v1.7.4.3 From git://android.git.kernel.org/tools/repo * [new tag] v1.0 -> v1.0 * [new tag] v1.0.1 -> v1.0.1 * [new tag] v1.0.2 -> v1.0.2 * [new tag] v1.0.3 -> v1.0.3 * [new tag] v1.0.4 -> v1.0.4 * [new tag] v1.0.5 -> v1.0.5 * [new tag] v1.0.6 -> v1.0.6 * [new tag] v1.0.7 -> v1.0.7 * [new tag] v1.0.8 -> v1.0.8 * [new tag] v1.0.9 -> v1.0.9 * [new tag] v1.1 -> v1.1 * [new tag] v1.2 -> v1.2 * [new tag] v1.3 -> v1.3 * [new tag] v1.3.1 -> v1.3.1 * [new tag] v1.3.2 -> v1.3.2 * [new tag] v1.4 -> v1.4 * [new tag] v1.4.1 -> v1.4.1 * [new tag] v1.4.2 -> v1.4.2 * [new tag] v1.4.3 -> v1.4.3 * [new tag] v1.4.4 -> v1.4.4 * [new tag] v1.5 -> v1.5 * [new tag] v1.5.1 -> v1.5.1 * [new tag] v1.6 -> v1.6 * [new tag] v1.6.1 -> v1.6.1 * [new tag] v1.6.10 -> v1.6.10 * [new tag] v1.6.10.1 -> v1.6.10.1 * [new tag] v1.6.10.2 -> v1.6.10.2 * [new tag] v1.6.2 -> v1.6.2 * [new tag] v1.6.3 -> v1.6.3 * [new tag] v1.6.4 -> v1.6.4 * [new tag] v1.6.5 -> v1.6.5 * [new tag] v1.6.6 -> v1.6.6 * [new tag] v1.6.7 -> v1.6.7 * [new tag] v1.6.7.1 -> v1.6.7.1 * [new tag] v1.6.7.2 -> v1.6.7.2 * [new tag] v1.6.7.3 -> v1.6.7.3 * [new tag] v1.6.7.4 -> v1.6.7.4 * [new tag] v1.6.7.5 -> v1.6.7.5 * [new tag] v1.6.8 -> v1.6.8 * [new tag] v1.6.8.1 -> v1.6.8.1 * [new tag] v1.6.8.10 -> v1.6.8.10 * [new tag] v1.6.8.11 -> v1.6.8.11 * [new tag] v1.6.8.2 -> v1.6.8.2 * [new tag] v1.6.8.3 -> v1.6.8.3 * [new tag] v1.6.8.4 -> v1.6.8.4 * [new tag] v1.6.8.5 -> v1.6.8.5 * [new tag] v1.6.8.6 -> v1.6.8.6 * [new tag] v1.6.8.7 -> v1.6.8.7 * [new tag] v1.6.8.8 -> v1.6.8.8 * [new tag] v1.6.8.9 -> v1.6.8.9 * [new tag] v1.6.9 -> v1.6.9 * [new tag] v1.6.9.1 -> v1.6.9.1 * [new tag] v1.6.9.2 -> v1.6.9.2 * [new tag] v1.6.9.3 -> v1.6.9.3 * [new tag] v1.6.9.4 -> v1.6.9.4 * [new tag] v1.6.9.5 -> v1.6.9.5 * [new tag] v1.6.9.6 -> v1.6.9.6 * [new tag] v1.6.9.7 -> v1.6.9.7 * [new tag] v1.6.9.8 -> v1.6.9.8 * [new tag] v1.7 -> v1.7 * [new tag] v1.7.1 -> v1.7.1 * [new tag] v1.7.2 -> v1.7.2 * [new tag] v1.7.3 -> v1.7.3 * [new tag] v1.7.3.1 -> v1.7.3.1 * [new tag] v1.7.4 -> v1.7.4 * [new tag] v1.7.4.1 -> v1.7.4.1 * [new tag] v1.7.4.2 -> v1.7.4.2 Getting manifest ... from git://git.android-x86.org/manifest.git remote: Counting objects: 549, done. remote: Compressing objects: 100% (282/282), done. remote: Total 549 (delta 211), reused 353 (delta 128) Receiving objects: 100% (549/549), 134.38 KiB | 103 KiB/s, done. Resolving deltas: 100% (211/211), done. From git://git.android-x86.org/manifest * [new branch] android-x86-1.6 -> origin/android-x86-1.6 * [new branch] android-x86-2.2 -> origin/android-x86-2.2 * [new branch] android-x86-v0.9 -> origin/android-x86-v0.9 * [new branch] donut-x86 -> origin/donut-x86 * [new branch] eclair-x86 -> origin/eclair-x86 * [new branch] froyo-x86 -> origin/froyo-x86 * [new branch] gingerbread-x86 -> origin/gingerbread-x86 * [new branch] master -> origin/master * [new branch] mirror -> origin/mirror Your Name [root]: kinneko Your Email [root@build86.(none)]: kinneko@gmail.com Your identity is: kinneko <kinneko@gmail.com> is this correct [y/n]? y Testing colorized output (for 'repo diff', 'repo status'): black red green yellow blue magenta cyan white bold dim ul reverse Enable color display in this user account (y/n)? y repo initialized in /root/gb-x86
x86でない本家リポジトリを使いたい場合は、以下のようにする。
# ~/bin/repo init -u git://android.git.kernel.org/platform/manifest.git -b [落としたいリポジトリ]
リポジトリの取得
結構な時間がかかります。
8スレッド同時進行で行った。
ゼロから落とす場合は、ネットの環境や先方のサーバー負荷を考えてどうぞ。
root@build86:~/gb-x86# ~/bin/repo sync -j8 remote: Counting objects: 17, done. remote: Compressing objects: 100% (9/9), done. remote: Total 9 (delta 7), reused 0 (delta 0) remote: Counting objects: 44, done. remote: Compressing objects: 100% (12/12), done. Unpacking objects: 100% (9/9), done. From git://git.android-x86.org/device/asus/eeepc 3139a8a..99453e7 froyo-x86 -> x86/froyo-x86 fd25666..c9ef0a7 gingerbread-x86 -> x86/gingerbread-x86 Fetching projects: 0% (1/164) remote: Total 26 (delta 13), reused 25 (delta 12) remote: Counting objects: 193, done. remote: Compressing objects: 100% (47/47), done. Unpacking objects: 100% (26/26), done. From git://git.android-x86.org/platform/bootable/newinstaller 549c505..48ede35 froyo-x86 -> x86/froyo-x86 (略)
これがでたら終わり。
Syncing work tree: 100% (164/164), done.
ビルドテスト
Gingerbreadでは、targetで使えるものは、まだ"build/target/board/generic_x86"しかないので、これをビルドする。
RAM 4Gなので、同時並列実行は4スレッドに。
root@build86:~/gb-x86# time make usb_img -j4 TARGET_PRODUCT=generic_x86 2>&1 | tee make.log ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=2.3.4 TARGET_PRODUCT=generic_x86 TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= 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=GRJ22 ============================================ Checking build tools versions...
今回は、x86のリポジトリを使ったので、kernelもいっしょにビルドされる。
ARM環境の場合は、kernelは別に用意する必要がある。
ビルドオプションなどの指定はご自由に。
最近のブームは、このへん?
http://d.hatena.ne.jp/kinneko/20110429/p13
http://d.hatena.ne.jp/kinneko/20110508/p20
できあがり。
I/diskutils( 4188): Writing RAW image 'out/target/product/generic_x86/usb_tmp.img' to 'out/target/product/generic_x86/generic_x86_usb.img' (offset=1048576) I/diskutils( 4188): Wrote 204275712 bytes to out/target/product/generic_x86/generic_x86_usb.img @ 1048576 Updated usb_boot length to be 199488KB Copying images to specified partition offsets File edit complete. Wrote 1 images. real 54m24.995s user 101m30.245s sys 6m1.739s
root@build86:~/gb-x86# ls -lh out/target/product/generic_x86/generic_x86_usb.img -rw-r--r-- 1 root root 196M May 27 18:14 out/target/product/generic_x86/generic_x86_usb.img
USBメモリに書き込み。
root@build86:~/gb-x86# dd if=out/target/product/generic_x86/generic_x86_usb.img of=/dev/sdg 401024+0 records in 401024+0 records out 205324288 bytes (205 MB) copied, 61.9352 s, 3.3 MB/s
できたARMのROMイメージの焼きこみとか、インストールイメージの作成とかは、環境によって違うのだから、自分で調べてね〜。
x86の場合はisoやusb用のイメージが生成されるから、楽ではあるよね。