UEFI な Gentoo をインストール
UEFIブートできるGentooのインストールは何度か試してみたが、毎回何故かEFI Shellが出てきてしまう。
今日やっと成功したので、メモがてらに書いておこう。
ファイルシステムの構築
パーティション構成はこのようにした。
ディスクタイプはGPT。
/dev/sda1 /boot/efi vfat noauto,noatime 1 2 /dev/sda2 / ext4 noatime 0 1 /dev/sda3 none swap sw 0 0
/boot/efi下にEFI起動ファイルが置かれて、/boot下にカーネルが置かれる?この辺りは私自身、知識が曖昧でよくわかってない。
各パーティションにファイルシステムを作成してマウント。
# mkfs.vfat -F 32 /dev/sda1 # mkfs.ext4 /dev/sda3 # mkswap /dev/sda2 # mount /dev/sda1 /mnt/gentoo # mkdir -p /mnt/gentoo/boot/efi
stage3アーカイブを適当なサイトからダウンロードして、解凍する。
私の地域ではiij.ad.jpが速いようだ。
# cd /mnt/gentoo # wget ftp://ftp.iij.ad.jp/pub/linux/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20150326.tar.bz2 # tar xvjpf stage3-amd64-20150326.tar.bz2
make.confを編集して、DNS情報をコピーしておく。
# cp -L /etc/resolv.conf /mnt/gentoo/etc
chroot
ファイルシステムの構築が終わったら、chrootしてその環境に入る。
その前に、procやsysなどをマウントする。
# mount -t proc proc /mnt/gentoo/proc # mount --rbind sys /mnt/gentoo/sys # mount --rbind dev /mnt/gentoo/dev # chroot /mnt/gentoo /bin/bash # source /etc/profile
カーネルの設定
カーネルソースをインストールしてmenuconfig。
# emerge -av gentoo-sources # cd /usr/src/linux # make menuconfig
systemdも一緒に導入したいのでまとめてその辺りの設定も有効にしておく
Gentoo Linux --->
Support for init systems, system and service managers --->
[*] OpenRC, runit and other script based systems and managers
[*] systemd
General Setup --->
-*- Control Group support --->
--- Control Group support
[ ] Example debug cgroup subsystem
[*] Freezer cgroup subsystem
[*] Device controller for cgroups
[*] Cpuset support
[*] Include legacy /proc/<pid>/cpuset file
[*] Simple CPU accounting cgroup subsystem
[*] Resource counters
[*] Memory Resource Controller for Control Groups
[*] Memory Resource Controller Swap Extension
[*] Memory Resource Controller Swap Extension enabled by default
[*] Memory Resource Controller for Kernel Memory accounting
[ ] HugeTLB Resource Controller for Control Groups
[*] Enable perf_event per-cpu per-container group (cgroup) monitoring
[*] Group CPU scheduler --->
[*] Block IO contoroller
[ ] Enable Block IO controller debugging
-*- Namespaces support --->
--- Namespaces support
[*] UTS namespace
[*] IPC namespace
[*] User namepace
[*] PID Namespaces
-*- Network namespace
-*- Enable the block layer --->
--- Enable the block layer
Partition Types --->
:
[*] EFI GUID partition support
Processor type and features --->
[*] EFI runtime service support
[*] EFI stub support
[ ] EFI mixed-mode support
:
[*] Built-in kernel command line
(init=/usr/lib/systemd/systemd root=PARTUUID=ルートパーティションのUUID もしくは/dev/sdaX)
Device Drivers --->
Generic Driver Options --->
[*] Support for uevent helper
() path to uevent helperEFI mixed modeはCPUが64ビットに対応しているにも関わらずUEFIが32ビット専用になっているようなマシンでも、64ビット環境が利用できるようにするためのものらしい。
そして、カーネルをコンパイルしてインストール…の前に
/etc/kernel/postinst.d/efi
このスクリプトを /etc/kernel/postinst.d/ に置いておけば、カーネルのmake install時に成果物をEFIブート用に適切に配置してくれるようだ。ありがたや。
GRUB2
作業も後半あとちょっと。
grubをインストールする前にmake.confに書き加えるものがある。
GRUB_PLATFORMS="efi-64"
32ビットマシンの人はefi-32だと思う。
書き加えてgrubをインストール
# emerge -av sys-boot/grub:2
GRUBの設定ファイルの書き出しとブートローダのインストール
# grub2-mkconfig -o /boot/grub/grub.cfg # grub2-install --target="x86_64-efi" /dev/sda
実は、最初設定ファイルを書き出さなくても起動した。
もちろんルートファイルシステムが読み込めなくてカーネルパニックになった。
しかし、ルートファイルシステムを指定した設定ファイルを書き出しても結局カーネルパニックを起こしたので、今回はカーネルに直接埋め込んでいる。
修正が入ると、カーネルを再コンパイルしなければならないので結構面倒くさいがまあ仕方ない。
ここまでやれば、UEFIでGentooが起動できるようになると思う。
このまま環境を整備して次はデスクトップ環境を入れてみようと思う。
systemdに関する詳しいインストール方法や、今回ちょこちょこ省いている作業は下記のサイトを参考にしてください。