Android-x86をUSBに入れる際に苦労したので手順をメモしておきます
###インストール時の罠は何だったか
それはずばり、GRUBのバージョンにありました。
Android-x86のデフォルトのインストーラーではGRUB(無印)がインストールされますが、
これは実はext4のパーティションからブートすることができないのです…!
しかし、実際のインストーラーでは最初のパーティションのフォーマット画面でext4/ntfs/fat32しか選択できません。
当然ntfs/fat32はlinuxが直接読み書きできないので論外として(ntfsは試してみましたが起動すらしませんでした)、
ext4を使うとGRUBからは起動できずError 17で止まってしまいます。
それではext3で自分でフォーマットすればよいだろうということで、Ubuntuを使いフォーマットしてからインストールしてみるも、どうにもうまくいかず…
調べてみると、インストーラーがアップデートされておらず正しく動作しないといった話もちらほら見受けられました。
それではどうすればいいかと調べていたところ、下記のページにたどり着きました。
https://forum.xda-developers.com/android/general/guide-triple-boot-android-ubuntu-t3092913
これは「AndroidをUbuntuとデュアルブートするためにデフォルトのインストーラーを使わずにインストールしてみたぜ!」といった趣旨の記事です。
試しにこれを参考にしてUSBにインストールしてみたところうまくいきましたので、その手順を以下に記します。
###必要な環境
・Ubuntuが起動するPC(バージョンはなるべく新しいほうが良いと思います)
###手順
####1.Android-x86をダウンロード
以下のページからダウンロードします。
Android-x86 プロジェクト日本語トップページ - OSDN
最新版のisoイメージをダウンロードしてください。
####2.USBメモリのフォーマット
まず、USBメモリをUbuntuPCに接続します。
そうしたら端末でfdisk -l
を実行し、USBにどのデバイスidが割り当てられているかを確認します。
(例えば、HDDが1台だけの環境であれば/dev/sdbが割り当てられているはずです)
以下は、/dev/sdxに割り当てられているものとして話を進めます。
次に、USBのパーティションテーブルがGPTだといけないので、以下のコマンドで一応MBRに書き換えておきます。
$ sudo parted /dev/sdx -s mklabel msdos
そうしたら次はGpartedを使ってUSBメモリ上にext4の基本パーティションを1つ作成します。
Gpartedをインストールしたのち、root権限で起動します。
$ sudo apt-get install gparted
$ sudo gparted
あとは、gparted上でUSBメモリを選択し、ext4の基本パーティションを一つ作成します。
(既存のパーティションがもしあればそれらはすべて削除します)
これでフォーマットは完了です。
####3.Androidのシステムイメージのコピー
まずは、Android-x86のisoを7zを使って展開します。
$ 7z android-x86-6.0-r2.iso -oandroid_installation
$ cd android_installation
次に、system.sfs内のファイルを展開します。
squashfs-toolsを使いますのでそれをインストールしたのちに行います。
$ sudo apt-get install squashfs-tools
$ sudo -s
$ unsquashfs -f -d . system.sfs
$ mkdir temp
$ mount -o loop system.img temp
最後に、USBメモリをマウントし、そこにデータをコピーします。
$ mkdir /mnt/usb
$ mount /dev/sdx1 /mnt/usb
$ cp initrd.img ramdisk.img kernel /mnt/usb/
$ mkdir /mnt/usb/system
$ mkdir /mnt/usb/data
$ cp -avr temp/* /mnt/usb/system/
$ umount temp
$ exit
####4.GRUB2のインストール
まずは、メニューエントリにAndroid x86を追加します。
/etc/grub.d/40_customを管理者権限で開き、以下の記述を追加して保存します。
menuentry "Android x86 6.0" {
set root='(hd0,1)'
linux /kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 acpi_sleep=s3_bios,s3_mode SRC=/ HWACCEL=
initrd /initrd.img
}
次に、USBメモリにGRUB2をインストールし、設定ファイルを書きだします。
$ sudo grub-install --boot-directory=/mnt/usb/boot /dev/sdx
$ sudo grub-mkconfig -o /mnt/usb/boot/grub/grub.cfg
最後に、grub.cfgに書き出された不要な部分(Ubuntuの起動に関する部分)を削除します。
/mnt/usb/boot/grub/grub.cfgを管理者権限で開き、
「### END /etc/grub.d/00_header ###」の直後の行から、
「### BEGIN /etc/grub.d/40_custom ###」の直前の行までを削除し、保存します。
これでインストールは完了なので、USBメモリをアンマウントします。
$ sudo umount /mnt/usb
###補足
上記の手順ではGRUB2を入れてるので、おそらくUEFIから起動するようにすることも可能かと思われます。
###おわりに
今回のことを通して、grub,grub2の扱い方がなんとなく分かった。
OSって色々と難しいな。。。