欢迎回来!这里是《在VMware Workstation 17 Pro 上安装 Gentoo Linux》系列指南的第三篇,也是整个安装过程的核心攻坚阶段。

在上一篇中,我们成功 chroot 进入了新系统,为后续所有操作打下了基础。从这一刻起,我们才真正开始构建属于我们自己的 Gentoo 系统。本篇我们将完成大量关键配置,并迎来整个安装过程中最令人兴奋(也可能最耗时)的一步——编译 Linux 内核。
本篇我们将依次完成以下任务:
对于UEFI系统,/dev/sda1 已格式化为 FAT32 文件系统,并将用作 EFI 系统分区(ESP)。创建新的/ efi 目录(若尚未创建),然后将ESP挂载至该目录:
(chroot) livecd / # mkdir /efi
(chroot) livecd / # mount /dev/sda1 /efi

安装 Gentoo ebuild 数据库。这个快照包含一组文件,包括通知 Portage 中有关可用软件的标题(用于安装),系统管理员可以选择哪些配置文件,软件包或 profile 特定新闻 (news) 项目等。
(chroot) livecd / # emerge-webrsync

新闻条目是为了提供一个通信媒介,通过 Gentoo ebuild 数据库来给用户推送重要的消息。
对于news模块,最常用的有三个操作:
list显示一个可用新闻条目的预览。read来阅读新闻条目。purge将在新闻条目阅读后删除,并且不能再次阅读。(chroot) livecd / # eselect news list
(chroot) livecd / # eselect news read

配置文件是任何一个Gentoo系统的积木。它不仅指定USE、CFLAGS和其它重要变量的默认值,还会锁定系统的包版本范围。
运行 eselect 使用 profile模块,能看到当前系统正在使用什么配置文件:

(chroot) livecd / # eselect profile list
# 默认配置是自己期望的配置文件,则跳过下面这条配置文件设置命令。
(chroot) livecd / # eselect profile set 2
若要使用 systemd, 请选择名称中包含 "systemd" 的配置文件。否则,选择相反的配置文件。
USE是Gentoo为用户提供的最具威力的变量之一,很多程序通过它可以选择编译或者不编译某些可选的支持。
使用命令 emerge --info | grep ^USE查看当前的 USE 变量,本次实践安装不作修改,保持默认即可。如需修改请参考官方 Wiki 。

当系统应用了任何升级,或从 任何 profile 构建了stage3 后,应用了变化的 use 标记时,这一步是必要的。
此步骤比较耗时,请耐心等待~
(chroot) livecd / # emerge --ask --verbose --update --deep --newuse @world

系统升级后务必清除过时软件包。通过 emerge --depclean --pretend命令仔细检查输出结果,确认是否存在需保留的待清理软件包(若您正在使用这些软件包)。若需保留某软件包使其免于被 depclean 清除,使用emerge --noreplace foo命令。如果满足条件,则执行真正的 depclean:
(chroot) livecd / # emerge --ask --pretend --depclean
(chroot) livecd / # emerge --ask --depclean

为系统选择时区。在 /usr/share/zoneinfo/ 中查找可用的时区,然后写进 /etc/timezone 文件。
(chroot) livecd / # ls /usr/share/zoneinfo
(chroot) livecd / # ls /usr/share/zoneinfo/Asia/
(chroot) livecd / # ln -sf ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime

Locale 不只是指定用户应该使用与系统进行交互的语言,同时也指定了字符串排序,日期和时间的显示等规则。Locale 是 "区分大小写" 的,必须完全按照描述的方式表示。接着运行 locale-gen命令。此命令会生成 /etc/locale.gen 文件中所有指定的地区。
(chroot) livecd / # nano /etc/locale.gen
# 取消相应区域的设置
# 添加 zh_CN.UTF-8 UTF-8
(chroot) livecd / # locale-gen


再次使用 eselect 设定区域设置,现在使用 locale模块。通过 eselect locale list命令可显示可用的目标,使用 eselect locale set <NUMBER>选择正确的区域设置:
(chroot) livecd / # eselect locale list
(chroot) livecd / # eselect locale set 6

现在重新加载环境:
(chroot) livecd / # env-update && source /etc/profile && export PS1="(chroot) ${PS1}"
>>> Regenerating /etc/ld.so.cache...
在许多系统中,某些硬件需要非自由开源软件(FOSS)固件才能正常工作。sys-kernel/linux-firmware软件包包含了大量设备(但并非全部)的固件。
(chroot) livecd / # emerge --ask sys-kernel/linux-firmware
提醒:较新的设备可能需要安装
sys-firmware/sof-firmware固件。

除了独立显卡硬件和网络接口之外,CPU 可能也需要固件更新。通常这种固件被称为微码(microcode)。有时需要更新版本的微码来修补 CPU 硬件中的不稳定性、安全问题或其他复杂的错误。
AMD CPU 的微码更新在前面提到的 sys-kernel/linux-firmware软件包内分发。Intel CPU 的微码可以在 sys-firmware/intel-microcode包中找到,并且需要单独安装。
(chroot) livecd / # emerge --ask sys-firmware/intel-microcode

当为基于 amd64 的系统安装和编译内核时,Gentoo 推荐使用 sys-kernel/gentoo-sources软件包。
(chroot) livecd / # emerge --ask sys-kernel/gentoo-sources

列出所有已安装的内核,选择内核,并创建一个符号连接:
(chroot) livecd / # eselect kernel list
(chroot) livecd / # eselect kernel set
(chroot) livecd / # ls -l /usr/src/linux
lrwxrwxrwx 1 root root 20 Aug 29 08:34 /usr/src/linux -> linux-6.12.41-gentoo

安装 genkernel,并使用命令 genkernel all安装内核 。
(chroot) livecd / # emerge --ask sys-kernel/genkernel
(chroot) livecd / # genkernel all


内核安装成功后将显示类似如下界面:

...
Kernel compiled successfully!
*
* --no-bootloader set; Skipping bootloader update ...
*
* Required kernel parameter:
*
* root=/dev/$ROOT
*
* Where $ROOT is the device node for your root partition as the
* one specified in /etc/fstab
* If you require Genkernel's hardware detection features, you MUST
* tell your bootloader to use the provided initramfs file '/boot/initramfs-6.12.41-gentoo-x86_64.img'.
...
恭喜!看到 Kernel compiled successfully! 的提示,意味着我们已经成功跨过了 Gentoo 安装中最有挑战性的关卡之一! 一个为我们当前硬件定制的内核已经准备就绪。
本篇小结 & 下篇预告
至此,我们已经成功完成了 Gentoo 安装的第三阶段:系统配置与内核构建。我们来回顾一下本篇的巨大进展:
现在,我们的 Gentoo 系统已经拥有了灵魂(Stage3)、躯体(分区)和强大的心脏(内核)。
在下一篇,也就是系列的收官之作《Gentoo 安装指南第四篇:配置引导与系统收尾》中,我们将: