pong.ursm.jp

Gentoo はどんどん簡単になっている

Gentoo Linux はインストールや運用のハードルが高いディストリビューションとして有名ですが、近年ではビルド済みカーネルamd64/arm64 向けバイナリパッケージが提供されて格段に楽になっています。これにより非力な VPS で Gentoo を運用することも現実的になりました(このブログもメモリ 1GB の Gentoo VM でホストしています)。

実録: Gentoo のインストール

実際に Gentoo のインストールがどれほど楽になっているか見てみましょう。GNOME Boxes で適当な VM を作成して、Gentoo source mirrors からダウンロードした Minimal installation CD を使ってブートします。

Screenshot From 2025-04-19 21-09-36.png

パーティションを作成します。今回作成した VM は legacy BIOS システムのため、BIOS boot partition を 2MB 取って残りを rootfs にします。

gdisk /dev/vda

Screenshot From 2025-04-20 07-10-42.png

ファイルシステムを作成してマウントします。

mkfs.xfs -L root /dev/vda2
mount /dev/vda2 /mnt/gentoo

スワップファイルを作成して有効にしておきます。

cd /mnt/gentoo
fallocate -l 2GiB swapfile
chmod 600 swapfile
mkswap swapfile
swapon swapfile

時計を合わせましょう。

chronyd -q

Gentoo source mirrors から stage3-amd64-systemd-*.tar.xz をダウンロードして展開します。

tar xpvf stage3-amd64-systemd-*.tar.xz --xattrs-include='*.*' --numeric-owner
rm stage3-amd64-systemd-*.tar.xz

/mnt/gentoo/etc/portage/make.conf を編集してバイナリパッケージを利用するための設定をします。binpkg-request-signature はパッケージの署名を検証するオプションです。

FEATURES="getbinpkg binpkg-request-signature"

/mnt/gentoo/etc/portage/binrepos.conf/gentoobinhost.conf を編集して、より最適化されたバイナリを使うようにします (Gentoo x86-64-v3 binary packages available – Gentoo Linux)。

- sync-uri = https://distfiles.gentoo.org/releases/amd64/binpackages/17.1/x86-64
+ sync-uri = https://distfiles.gentoo.org/releases/amd64/binpackages/17.1/x86-64-v3

/etc/resolv.conf をコピーして Gentoo 環境に chroot します。

cp -L /etc/resolv.conf /mnt/gentoo/etc/
arch-chroot /mnt/gentoo

Portage tree のスナップショットを取得します。ついでにニュースを流し読みしておきましょう。

emerge-webrsync
eselect news read new

rsync は遅いので Portage tree の取得元を GitHub にしましょう。まず Git を入れます。

emerge -av dev-vcs/git

Screenshot From 2025-04-19 22-59-16.png

ここで行が紫色、行頭が binary となっているパッケージはバイナリパッケージからインストールされ、緑色で ebuild となっている行のパッケージは通常通りローカルでビルドされます。Gentoo にはパッケージごとにビルドオプションなどを調整する USE フラグという仕組みがあり、これが一致するバイナリパッケージがある場合はそれが使われ、ない場合はビルドにフォールバックされます。今回は nghttp2 だけマッチするバイナリパッケージがなかったのでビルドされています。当然ですが、バイナリパッケージのインストールはアーカイブをダウンロードして展開するだけなので非常に高速です。

Screenshot From 2025-04-19 23-05-11.png

続いて eselect-repository を入れます。

emerge -av eselect-repository

既存の Porage tree を一旦削除し、GitHub から取得し直します。

rm -rf /var/db/repos/gentoo
eselect repository enable gentoo
emerge --sync

Screenshot From 2025-04-19 23-09-33.png

全パッケージを更新しておきましょう。ここでもほとんどのパッケージはバイナリインストールになるので大した時間は掛かりません。

emerge -avuDN @world

タイムゾーンを設定します。

ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
date

ロケールを設定します。

echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen
locale-gen
eselect locale set en_US.utf8
. /etc/profile

ファームウェアをインストールします。ファームウェアにはオープンソース互換ライセンスでないものも含まれているので、/etc/portage/make.conf で受け入れ可能なライセンスを設定します。* は任意のライセンスを受け入れるの意です。

ACCEPT_LICENSE="*"

続いて linux-firmware パッケージをインストールします。

emerge -av linux-firmware

カーネルのインストールに移ります。USE フラグの設定を簡単にするため、flaggie をインストールしましょう。

emerge -av flaggie

今回はブートローダとして grub を使うため、適切な USE フラグを設定して installkernel をインストールします。

flaggie installkernel +grub
emerge -av installkernel

カーネルをインストールします。

emerge -av gentoo-kernel-bin

Screenshot From 2025-04-20 05-47-41.png

USE フラグの変更が必要だと言われるので dispatch-conf しましょう。u で新しい設定を適用します。

dispatch-conf

Screenshot From 2025-04-20 05-49-31.png

あらためてカーネルをインストールします。

emerge -av gentoo-kernel-bin

既存の gentoo-sources はカーネルソースだけをインストールして後のコンフィグとビルドは自分で頑張らないといけなかったのですが、gentoo-kernel-bin はカーネルイメージそのものをインストールします。つまり、これだけでカーネルのインストールはおしまいです。

この新しい方式のカーネルパッケージを Distribution Kernel と呼びます。Distribution Kernel には現状 vanilla-kernel(Gentoo のパッチセットが当たっていない素のカーネル、ソースコードからビルド)、gentoo-kernel(パッチセットを適用したカーネル、ソースコードからビルド)、gentoo-kernel-bin(パッチセットを適用したカーネル、バイナリインストール)の3種類があります。gentoo-kernel-bin 以外の2つはインストール前にコンフィグをカスタマイズすることもできます。プリセットのコンフィグは Fedora のものが使われているそうです。

Distribution Kernel 環境用の USE フラグがあるので /etc/portage/make.conf に設定しておきましょう。これによってカーネル更新時にカーネルモジュールが自動でリビルドされるようになります。

USE="dist-kernel"

USE フラグを変更したので影響のあるパッケージをリビルドしましょう。

emerge -avuDN @world

/etc/fstab を設定します。

LABEL=root	/	xfs	defaults,noatime	0 1
/swapfile	none	swap	sw	0 0

ルートパスワードを設定して作業用アカウントを作成します。

passwd
useradd -m -G wheel,portage ursm
passwd ursm

sudo をインストールして設定します。

emerge -av sudo
visudo

wheel グループに対して sudo を許可するようにしましょう。NOPASSWD: ALL はお好みで。

%wheel ALL=(ALL:ALL) NOPASSWD: ALL

Systemd の初期設定を行います。

systemd-machine-id-setup
systemd-firstboot --prompt

ブートローダをインストールします。

grub-install /dev/vda

systemd-networkd の設定ファイル /etc/systemd/network/50-dhcp.network を作成します。

[Match]
Name=en*

[Network]
DHCP=yes

chroot 環境を抜けて reboot します。

^D
reboot

Screenshot From 2025-04-20 07-38-54.png

作業用アカウントでログインして、ネットワークを使える状態にします。

sudo systemctl enable --now systemd-networkd

これでインストールは完了です。ね、簡単でしょう?


「ビルドせずして何が Gentoo か」という声もあろうかと思うのですが、別に Gentoo はバイナリベースのディストリビューションになろうとしているわけではありません。基本はビルドで、オプションとしてバイナリパッケージという選択肢が提供されただけです。冒頭に挙げた非力な VPS のように、これまで Gentoo の運用が難しかった環境への導入の道が開けますし、初回インストールはバイナリインストールで手早くセットアップして後からシステム全体をビルドし直すようなやり方も取れるようになります。まさに "Choice is another Gentoo design principle" を体現する動きと言えるのではないでしょうか。

2025-04-20