お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-12-04 22:13:44

umihan
メンバ
登録日: 2010-05-17

ubuntu 10.10 (64bit) を macbook pro にインストール、EFI boot に成功

ubuntu 10.10 (64bit) をmacbook pro (late 2008、macbookpro5,1、64bit EFI)の pci express card (32gb ssd、外付けhdd扱い)にインストールしてみました。内蔵hdd (500gb) に既にいくつかパーティションを切っていて、
/dev/sda1 EFI
/dev/sda2 MacOSX 10.6.5
/dev/sda3 hfs+ データ領域
/dev/sda4 Windows 7
となってます。このため、pci express の sdd (/dev/sdb) にubuntuをインストール (/dev/sdb3)しても、option 起動や rEFIt を利用しても、うまく起動できませんでした。
rEFIt は http://refit.sourceforge.net/ からダウンロードできます。

pci express sdd のパーティション
/dev/sdb1 EFI
/dev/sdb2 hfs+ (rEFIt をインストール)
/dev/sdb3 ubuntu10.10
/dev/sdb4 swap
rEFIt を立ち上げると、ubuntuも見えない状態です。しかし、内蔵hddを1パーティションのみにして、MacOSXだけをインストールした状態なら、rEFIt (/dev/sdb2 にインストール)で /dev/sdb3 の ubuntu を立ち上げることが出来ます。それで、EFI boot に挑戦してみました。

http://grub.enbug.org/TestingOnMacbook に従いました。

grub1.99 beta0 のコンパイル
sudo apt-get install bzr autoconf flex autogen bison
bzr branch --revision -1 http://bzr.savannah.gnu.org/r/grub/trunk/grub
cd grub
./autogen.sh
./configure --with-platform=efi --target=x86_64 --program-prefix=""
make
おしまいの方のdocsのところでエラーが出たので、該当箇所はコメントアウトしてコンパイルを完了させました。
コンパイル完了後、
./grub-mkimage -d . -o grub.efi part_gpt hfsplus fat ext2 normal sh chain boot configfile linux

/dev/sdb はGUID でパーティションしてます(OSX のディスクユーティリティを利用)ので、/dev/sdb1 は EFI パーティションになってます。このパーティションをubuntu にマウントします。
sudo mkdir /mnt/EFIDISK
sudo mount /dev/sdb1 /mnt/EFIDISK
sudo mkdir -p /mnt/EFIDISK/EFI/BOOT

上記 grub のコンパイルディレクトリに戻り、コンパイルしたものをEFIパーティションにコピー。
Apple bootloader を使うために、grub.efi は BOOTX64.EFI という名前にする。
cd ~/grub/grub-core
sudo cp grub.efi /mnt/EFIDISK/EFI/BOOT/BOOTX64.EFI
sudo cp *.mod *.lst /mnt/EFIDISK/EFI/BOOT
sudo touch /mnt/EFIDISK/EFI/BOOT/grub.cfg

grub.cfg の中身です。
*******ここから
set debug=video
insmod efi_gop

menuentry "ubuntu 10.10 (with bios dump)" {
     search --set -f /vmlinuz
     loadbios /boot/vbios.bin /boot/init10.bin
     linux /vmlinuz root=/dev/sdb3 video=efifb
     initrd /initrd.img
}


menuentry "ubuntu 10.10 (without bios dump)" {
     search --set -f /vmlinuz
     fakebios
     linux /vmlinuz root=/dev/sdb3 video=efifb
     initrd /initrd.img
}
*******ここまで

この中にある、vbios.bin、init10.bin は
sudo dd if=/dev/mem of=/boot/vbios.bin bs=65536 skip=12 count=1
sudo dd if=/dev/mem of=/boot/init10.bin bs=4 skip=16 count=1
として作ります。

これでoption 起動すると、ubuntu が立ち上がりますが、Xは立ち上がりません。コンソールに落ちます。
そこで、/etc/X11/xorg.conf の

Section "Device"
     Identifier      "Default Video Device"
     Driver          "nvidia"
     BusID           "PCI:3:0:0"
EndSection

のように変更します(BusID の行を追加)。
これでXも立ち上がるようになりました。

このようにして、EFI boot させることができるようになり、最初のパーティションがたくさんある内蔵hddに変えても、option 起動でubuntuを立ち上げることが出来るようになりました。grub.cfg の menuentry は2つありますが、どちらでも立ち上がります。

オフライン

 

#2 2010-12-07 09:39:36

umihan
メンバ
登録日: 2010-05-17

Re: ubuntu 10.10 (64bit) を macbook pro にインストール、EFI boot に成功

ここに書いたgrub.cfgでは、rEFIt を削除してしまうと起動しなくなりました。また、ときどきシステムのルートを見つけられなくてBusyBoxに落ちるということも起こります。そこで、UUIDを使うことにしました。


menuentry "ubuntu (with bios dump) uuid" {
    insmod part_gpt
    insmod ext2
    search --set --fs-uuid <uuid>
    loadbios /boot/vbios.bin /boot/init10.bin
    linux /vmlinuz root=UUID=<uuid> ro video=efifb
    initrd /initrd.img
}

としておくと、uuidで起動するようになり、rEFIt を削除しても、起動に失敗することも減少しました。
uuid は ubuntu の blkid で調べます。

この過程で分かったのですが、/dev/sdb1 に置いた grub2 (grub.efi、名前はBOOTX64.EFI) で起動すると、このディスク(/dev/sdb3)は、(hd0,3) になります。また、ネット上には、menuentry で search --fs-uuid --set <uuid> としているものも多いのですが、こう書くとエラーになって起動しませんでした。上記のように、--fs-uuid の直後に<uuid>を書いておかないとエラーになりました。
これは、仕様の変更?、それともバグ?

オフライン

 

#3 2010-12-11 23:55:32

umihan
メンバ
登録日: 2010-05-17

Re: ubuntu 10.10 (64bit) を macbook pro にインストール、EFI boot に成功

ubuntu のパッケージのgrub-efi-amd64 を試してみました。version は1.98です。
apt-get install grub-efi-amd64
しかし、探してもどこにもgrub.efiは見あたらない。それで、
grub-mkimage -O x86_64-efi -o grub.efi part_gpt hfsplus fat ext2 normal chain boot configfile linux
として作った。できた grub.efi を hfsplus のところにコピー。
sudo mkdir -p /media/refit/efi/grub
/media/refit は /dev/sdb2 でhfsplus になってます(macosx 拡張、ジャーナルオフ。ジャーナルオフにしておかないとubuntuから書き込めない)
sudo cp grub.efi /media/refit/efi/grub
cd /usr/lib/grub/x86_64-efi
sudo cp *.mod *.lst /media/refit/efi/grub
grub.cfg もここにコピーしておく。

MacOSX にして、ターミナルで、
sudo bless --folder=/Volumes/refit --file=/Volumes/refit/efi/grub/grub.efi --setBoot

これでオプションキーを押しながら起動すると、EFI Boot が2つ見えるようになりました(一つは、従来のgrub 1.99 のもの)。しかし、ubuntu からダウンロードした grub 1.98 ではinitrd が見つからないと出て起動しませんでした。
同じ方法で、今までの grub 1.99 に置き変える(もちろんモジュールなども全部1.99のもの)と、うまく起動しました。
ubuntu 謹製の grub 1.98 では、うまく起動しないようです。

オフライン

 

Board footer

Powered by FluxBB