Gentoo内核编译¶
备注
Gentoo文档非常详细,我无法完整翻译,只能选择部分自己的需要以及理解进行综合。此外会加上自己的实践经验(基于我现有硬件以及软件需求)
手动配置内核¶
Gentoo为用户提供了 两种 内核配置、安装和升级的方式:
自动(genkernel) ,也就是我在 在MacBook Pro上安装Gentoo Linux 快速采用的内核安装方法
手动(manual) ,大多数Gentoo用户会选择手动配置内核:
更大的灵活性
更小的(内核)尺寸
更短的编译时间
学习经历
闲着无聊
内核配置的绝对知识,和/或
对内核的完全控制
配置概念¶
内核配置即简单又不简单:
通过
make menuconfig
可以从交互菜单选择,系统会自动做一些关联配置,所以还是比较傻瓜化的内核包含的默认值一半是通用且合理的,也就是大多数用户只需要对基本配置做少量改动
在配置内核时,应该循序渐进,每次少量修改默认配置,并进行充分编译和运行验证
内置(build-in) vs. 模块化(modular)¶
大多数配置选项都是三态的(tristate):
根本不构建 (N)
直接构建到内核中 (Y)
构建为模块 (M)。
一般规则:
建议将硬件支持(还需要在内核中包含固件支持)和内核功能直接构建到内核中。 然后内核可以确保功能和硬件支持在需要时可用。
部分功能,例如重要分区的文件系统支持,应该直接构建到内核中(使用模块化会需要 initramfs 支持)
硬件¶
使用
lspci
(sys-apps/pciutils
包) 和lsusb
(sys-apps/usbutils
包)来识别硬件通常以太网适配器必须识别以太网芯片并为特定网卡配置硬件支持
建议将非必须的驱动程序配置为模块(例如偶然使用的外接设备)
内核功能¶
对于磁盘文件系统支持(我选择主要支持
vfat
/xfs
/zfs
/ext
)高级网络功能(路由或防火墙)
内核源代码¶
Gentoo 提供了以下几种支持的内核软件包:
genkernel
默认激活了通用选项和驱动,完全自动化,适合不熟悉手工编译内核的用户gentoo-sources
推荐大多数Gentoo用户使用(既然已经选择了Gentoo),能够最大化定制系统内核gentoo-kernel
已经预先编译好的适合大多数系统的内核,适合对编译内核不感兴趣的用户git-sources
这是从上游内核开发源代码上每天自动生成的软件包
此外,还有一些不被(官方)支持的内核软件包
安装内核源代码:
gentoo-sources
源代码包¶emerge --ask sys-kernel/gentoo-sources
cd /usr/src/linux
make menuconfig
编译内核和安装内核(和模块):
make
make modules_install
# 确保 /boot 已经挂载
make install
更新boot loader¶
如果使用GRUB,则执行以下命令:
grub-mkconfig -o /boot/grub/grub.cfg
由于我在 在MacBook Pro上安装Gentoo Linux 采用了 MacBook Pro上运行Arch Linux 相同的 efibootmgr
管理UEFI启动顺序,所以执行以下命令配置EFI启动:
efibootmgr --disk /dev/nvme0n1 --part 1 --create --label "Gentoo XCloud" --loader /vmlinuz-6.1.12-gentoo-xcloud \
--unicode 'root=PARTUUID=fbf163f3-a42e-411a-be61-f2ae7b398e61 rw' --verbose
备注
这里没有使用 Gentoo initramfs ( ramfs 内存文件系统 的特例 ) ,如果有需要在内核启动时预先加载的内核模块,例如 Linux LVM逻辑卷管理 或 ZFS 作为根卷,或者需要使用特定的文件系统,都需要采用 ramfs 内存文件系统 预先加载内核模块或者维护工具。
警告
建议将关键文件系统直接编译进内核:例如我使用XFS作为根文件系统,但是默认内核配置 xfs
是作为模块编译的,这导致要么使用 Gentoo initramfs 要么就必须直接编译进内核,否则重启系统无法工作。
修复和挽救¶
实际上,内核裁剪和构建总是会遇到各种问题,导致系统无法启动。此时,我们需要采用 在MacBook Pro上安装Gentoo Linux 的挂载并 chroot
步骤,重新进入系统进行排障:
通过Gentoo 安装U盘再次启动启动,然后启动sshd服务并且设置好root密码:
# 启动ssh服务
ssh-keygen -A
/usr/sbin/sshd
# 设置root用户密码
passwd
挂载 root 分区文件系统:
mount /dev/nvme0n1p3 /mnt/gentoo
挂载文件系统:
mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
mount --bind /run /mnt/gentoo/run
mount --make-slave /mnt/gentoo/run
进入Gentoo新环境:
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"
挂载boot分区(这个分区是MacBook的macos和gentoo公用的):
mount /dev/nvme0n1p1 /boot
现在所有环境恢复磁盘上Gentoo Linux的运行状态,除了内核采用了LiveCD提供内核,整个文件系统都是磁盘上文件系统。就可以从新开始内核配置和编译了,可以尝试重新开始内核构建。