落穂拾い

Gleanings in my life

【Gentoo】VAIO PRO 13 に Gentoo Linux をインストールする (その4)

2014年03月09日 10時02分03秒 | Linux

bootに向けて



カーネルも入り随分と gentoo も一人前になりつつある。しかし、まだの部分がある。その一つ目がネットワーク。現状、ネットワークは arch linux の設定のままで動かしている(chrootで使っているだけ)。そこで reboot したのちに、gentoo でも無線LANが使えるようになっていなければならない。
emerge -av wpa_supplicant
emerge -av openssh dhcpcd

として基本的なネットワーク設定プログラムを emerge しておく。そして、最後にブートローダー、grub2 のインストールである。最大の難所(だった)。

VAIO PRO へのLinuxのインストール方法は、arch linux のページが詳しい。しかし、少なくとも私のPCでは、この情報のままでは boot できなかった。結果論から言うと、EFI ファイル名がハードウェア的(?)に決め打ちされているため、その名前で gentoo の efi ファイルを入れねばならなかったのである。それらの手順を以下にまとめておく。

まずは grub のインストール。今では下記のコマンドで grub2 がインストールされる。
emerge -av grub

さらに efi 関連のプログラムもインストール。
emerge -av efibootmgr
emerge -av dosfstools

まず、CDからのブート状態では UEFI が有効になっていないので、SSD には適切にブートローダをインストールすることができないという問題がある。そのため、ここでは外付けの USB メモリにブートローダ(grub2)をインストールする。

そこでgrub2 がインストールできる USB メモリを用意する。ブートローダーを入れるので中身を全部消してもいい USB メモリでなければならない。ただし容量は小さくても問題ない。おそらく 32MB とかでもOK。

そして、CD とは別の usb スロットに USB メモリを刺す。dmesg で確認すると/dev/sdb に認識された。
$ parted /dev/sdb

print で現状を確認後、全てのパーティションを消去する。そして boot loader 用の設定をする。
mklabel gpt
mkpart esi fat32 0% 512m
set 1 boot on
quit

これで /dev/sdb1 に boot loader をインストールできるパーティションができた。まずは vfat をファイルシステムを構築し、
mkfs.vfat -F 32 /dev/sdb1

適当な場所にマウントする。
mkdir /mnt/tmp
mount /dev/sdb1 /mnt/tmp

そして grub2 の USBメモリへのインストール。
mkdir /mnt/tmp/grub
cp -a /usr/lib/grub/x86_64-efi/* /mnt/tmp/grub
grub2-mkconfig -o /mnt/tmp/grub/grub.cfg

unmount する。
umount /mnt/tmp

これで USB メモリから起動できるようになったはずだ。

USBメモリからboot



chroot 環境から抜け、umount し、arch linux を shutdown する。
CD/DVDドライブを外し、USBメモリだけ差した状態で VAIO PRO を電源ON。

grub のメニューが出てきたら、下記のようにコマンドを打ち込み SSD 内の gentoo を起動する。
grub> linux /vmlinuz root=/dev/sda4 init=/usr/lib/systemd/systemd
grub> boot

のろのろと無事起動できた!2分半ほどかかった。libata の問題らしい。この遅さは libata.force=noncq を加えれば解決する。

これで Gentoo 自体はインストールできていることが分かる。ブートも USBメモリを使えばできる。ただし、本体だけでのブートはまだできない。そこで SSD に grub2 を入れるべく作業する。

まず EFI パーティションを作る。ここでは EFI パーティションは /dev/sda1 であり、それのマウントポイントは /boot/efi とする(別のマウントポイントでも問題ない)。
mkdir /boot/efi
mkfs.vfat -F 32 -n efi-boot /dev/sda1
mount /dev/sda1 /boot/efi

そして EFI パーティションの中に3つのディレクトリを作成する。
mkdir /boot/efi/EFI
mkdir /boot/efi/EFI/boot
mkdir /boot/efi/grub

これで grub2 をインストールする準備ができた。/etc/default/grub を編集し、systemd を起動するようにしてから(下記のようにする)、
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"

grub2 をインストール。
grub2-mkconfig -o /boot/efi/grub2/grub.cfg
grub2-mkimage -o /boot/efi/grub2/grub.efi -O x86_64-efi ext2 fat part_msdos part_gpt normal
cp /boot/efi/grub2/grub.efi /boot/efi/EFI/boot/bootx64.efi

これで grub2 がインストールできた。

なんでもないように見えるが、実は最後の行がポイントである。

VAIO PRO 13 で起動に用いられる EFI ファイルは、EFIパーティションの中の EFI/boot/bootx64.efi という名前でなければならないのだ(大文字小文字は区別しない)。この名前のファイルがない場合、boot 時に VAIO PRO 13 が勝手にこのファイルを作成してしまう。おそらくその EFI ファイルは、私が消してしまった Windows 8 を呼び出そうとするものではないかと思われるが、とにかく、Gentoo を起動させることはできない EFI ファイルが自動で作成されてしまうのだ。そして、このファイルしか EFI ファイルとして認めてくれないのだ!

というわけで、苦労したところであるが、まとめてみると大したことはない。


1 コメント

コメント日が  古い順  |   新しい順
Unknown (orumin)
2015-11-20 00:28:04
たまたまみつけてしまったので,あつかましながら指摘をします.
$ESP/EFI/Boot/Boot${ARCH}.efi
について,これを起動するのはUEFI規格そのものの仕様です.
それとはべつに,UEFIはBootEntryという仕組みをもっており,ファームウェアそのものが複数のブートローダの場所を記憶できるようになっているのです.
そのエントリの追加/削除等はLinuxからだとefibootmgrを使えば可能です.

$ESP/EFI/Microsoft/Windows/bootmg{r,fw}.efiや
$ESP/EFI/arch/grub2.efi,$ESP/EFI/fedora/grub2.efi
のように$ESP/EFI/${vendor}/*.efiとしてローダーを配置し,BootEntryをどんどん増やしてしまうのがUEFI流.

$ESP/EFI/Boot/Boot${ARCH}.efiにはUEFI Shellのようなもしも起動失敗した時に復旧できるようなものを置いておくと,便利です
(UEFI ShellはUEFIに内蔵されるかどうかは規格ではoptionalですが,efi_shell.efiはソースとバイナリが配布されています.bcfgコマンドでBootEntryを追加/削除ができるほか,様々な機能を持つ高機能なシェルです)
返信する

コメントを投稿