Installing Gentoo linux with UEFI boot
年末に Funtoo でアップデートに失敗して、依存関係を何だかよくわからないちぐはぐな状態にしてしまったので、一旦環境を捨てて Gentoo を試してみることにした。 その頃ちょうど Funtoo で GNOME の入れ直しが難しい 状態になっていて、どうせ入れ直すなら Gentoo の方が楽そうという理由から。 そのときの記録を (断片的だけどだいたい順番に) 残しておく。 足りない分はだいたい Gentoo Linux AMD64 ハンドブック と同じ。
$ # パーティションの作成
$ parted
(parted) mklabel gpt
(parted) mkpart primary fat32 0% 512m
(parted) set 1 boot on
(parted) mkpart primary linux-swap 512m 1024m
(parted) mkpart pimrary ext4 1024m -1s
$ # ファイルシステムの作成
$ mkfs.vfat -F 32 /dev/sda1
$ mkswap /dev/sda2
$ swapon /dev/sda2
$ mkfs.ext4 /dev/sda3
$ # ファイルシステムのマウント、chroot
$ mount /dev/sda3 /mnt/gentoo
$ mkdir -p /mnt/gentoo/boot/efi
$ mount /dev/sda1 /mnt/gentoo/boot/efi
$ cd /mnt/gentoo
$ # (stage3 と portage を落としてきて展開)
$ mount -t proc none proc
$ mount --rbind /dev dev
$ cp /etc/resolv.conf /mnt/gentoo/etc/
$ chroot /mnt/gentoo /bin/bash
$ env-update
$ source /etc/profile
$ export PS1="(chroot) $PS1"
$ # タイムゾーンの設定
$ # (BIOS の設定に応じて /etc/conf.d/hwclock で clock="local" にする必要があるかも。うまいことやって)
$ cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ # make.conf の設定とか
$ nano -w /etc/portage/make.conf
$ mirrorselect -i -o >> /mnt/gentoo/etc/make.conf
$ emerge --sync
$ # /usr/src/linux の symlink を常に最新にしてくれるように、カーネルに symlink フラグを設定
$ echo 'sys-kernel/gentoo-sources symlink' >> /etc/portage/package.use
$ # システムの profile を変更 (default/linux/amd64/13.0/desktop/gnome/systemd にした)
$ eselect profile list
$ eselect profile set NUM
$ # カーネルをビルドするための準備 (ついでに vim と eix も入れておく)
$ emerge -av -j5 gentoo-sources vim eix
$ # (/usr/src/linux/.config をうまいこと生成する)
$ # このひとが起動してくるとインターネットに支障があるので切る
$ systemctl disable dhcpcd
Kernel の設定
Systemd を使う場合、推奨されている設定があるので必要なものは有効にしておく。 https://wiki.gentoo.org/wiki/Systemd を参考に。
加えて CONFIG_CMDLINE
の設定も必要。この記事を参考に。
CONFIG_CMDLINE="root=/dev/sda3 init=/usr/lib/systemd/systemd"
それから、EFI
のつく設定はだいたい y にした。
このスクリプト を /etc/kernel/postinst.d/efi
に配置しておくと、カーネルのビルド後に適切な場所へイメージを配置してくれる。
rc-update -> systemctl
https://wiki.gentoo.org/wiki/Systemd を参考に。
次のインストールで
- まず時刻を正しくするんだ。Gentoo ハンドブックにもそう書いてる
- Systemd で NetworkManager を有効にするの、最後あたりがいいかも
時刻を適当なままにしておいたおかげで、必要な Perl パッケージがインストールできなくなる悲しい時間の浪費があった。
設定は Systemd の timedatectl
でやれる。
RTC in local TZ
を設定しようとしたら、完全にサポートしてないみたいなことを言われたので BIOS の時刻を UTC にした。
NetworkManager がうまく起動しない問題があって、権限に絡む問題みたいだけど、結局原因はよくわからなかった。
/etc/dbus-1/system.d/org.freedesktop.NetworkManager.conf
の <policy context="default">
下を弄って無理矢理解決したけど別の問題がありそうで心配。
systemctl enable NetworkManager.service
するのが早すぎたりしたのかなと想像してるけどよくわからない。