无垠之码

深度剖析代码之道


gentoo系统安装

Gentoo是一个基于Linux的高度可定制化操作系统,能够根据不同的应用场景和需求进行灵活优化。其构建于自由软件生态之上,强调透明性与可控性,不对用户隐藏底层实现机制。Gentoo的核心工具链设计简洁且开放:软件包管理系统Portage基于Python实现,而用于定义软件构建规则的ebuild则采用Bash编写。用户可以自由地审查、修改并扩展系统中的各个组件,从而实现对系统行为的精细化控制。

wget https://distfiles.gentoo.org/releases/amd64/autobuilds/20260412T164603Z/install-amd64-minimal-20260412T164603Z.iso

根据系统启动方式的不同如EFI或传统BIOS/GRUB,Gentoo的安装流程会存在一定差异。本文将以基于GRUB的启动方式为例,对安装过程进行说明。

1.磁盘分区与根文件系统

磁盘分区

通过fdisk工具对磁盘vda进行分区,将其划分为启动分区boot、交换分区swap和根分区/,同时标记各个分区类型,针对boot分区设置启动标记。完成磁盘分区规划后,需要对各分区分别进行对应文件系统的格式化。

fdisk /dev/vda

Welcome to fdisk (util-linux 2.41.3).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/vda: 256 GiB, 274877906944 bytes, 536870912 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xa9402dcc

Device     Boot    Start       End   Sectors  Size Id Type
/dev/vda1  *        2048   2099199   2097152    1G 83 Linux
/dev/vda2        2099200  35653631  33554432   16G 82 Linux swap / Solaris
/dev/vda3       35653632 536870911 501217280  239G 83 Linux

mkfs.xfs /dev/vda1
mkswap /dev/vda2
mkfs.ext4 /dev/vda3

挂载root分区

mkdir --parents /mnt/gentoo
mount /dev/vda3 /mnt/gentoo
mkdir --parents /mnt/gentoo/boot
mount /dev/vda1 /mnt/gentoo/boot
swapon /dev/vda2

根文件系统

使用livecd中自带的link工具下载gentoo根文件系统,并解压至/mnt/gentoo目录。

links https://distfiles.gentoo.org/releases/amd64/autobuilds
tar xpvf ./stage3-amd64-openrc-20260412T164603Z.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt/gentoo

挂载虚拟文件系统

将dns解析配置复制只新系统中,同时挂载安装环境必要的虚拟文件系统。

cp --dereference /etc/resolv.conf /mnt/gentoo/etc/ # 后期包下载需要解析域名
mount --types proc /proc /mnt/gentoo/proc # 部分命令依赖proc文件系统,比如ps、top、emerge

mount --rbind /sys /mnt/gentoo/sys # 系统安装需要udev、硬件识别,r表示递归
mount --rbind /dev /mnt/gentoo/dev # 设备文件挂载,磁盘、终端等
mount --bind /run /mnt/gentoo/run # 运行时状态,服务管理、网络、DNS

mount --make-rslave /mnt/gentoo/sys # 标记单向映射,主 → 从
mount --make-rslave /mnt/gentoo/dev
mount --make-slave /mnt/gentoo/run

2.Portage工具配置

进入新系统

chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"

配置portage及相关编译参数

使用国内portage源

emerge-webrsync
emerge --ask --verbose --oneshot app-portage/mirrorselect
mirrorselect -i -o >> /etc/portage/make.conf
emerge --sync

开启portage的binhost功能,添加二进制包源

cat /etc/portage/binrepos.conf/gentoobinhost.conf
[binhost]
priority = 9998
sync-uri = https://mirrors.bfsu.edu.cn/gentoo/releases/amd64/binpackages/23.0/x86-64/

# 在/etc/portage/make.conf中增加binpkg的支持
FEATURES="${FEATURES} getbinpkg"
FEATURES="${FEATURES} binpkg-request-signature"

# 设置编译优化标记
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
RUSTFLAGS="${RUSTFLAGS} -C target-cpu=native"

# 更新Gentoo Portage信任密钥GPG keyring
# 用于后续 ebuild / binpkg 的签名验证
getuto

更新编译cpu-flags参数,该变量用于构建编译特定的汇编代码或其他内置函数,运行优化

emerge --ask --oneshot app-portage/cpuid2cpuflags
echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags

更新软件许可规定

# 修改/etc/portage/make.conf,覆盖配置文件的ACCEPT_LICENSE默认值
ACCEPT_LICENSE="-* @FREE @BINARY-REDISTRIBUTABLE"

mkdir /etc/portage/package.license
cat /etc/portage/package.license/kernel
app-arch/unrar unRAR # equery meta app-arch/unrar,查询到对应的软件包的license
sys-kernel/linux-firmware linux-fw-redistributable # 网卡等设备固件驱动,允许使用但不允许修改分发
sys-firmware/intel-microcode intel-ucode

更新@world集合(已手动安装的软件集合)

emerge --ask --verbose --update --deep --newuse --getbinpkg @world

3.内核安装

安装固件和微代码

emerge --ask sys-kernel/linux-firmware # 通用固件
emerge --ask sys-firmware/sof-firmware # Sound Open Firmware音频相关固件

二进制内核及源码

# 新增/etc/portage/package.use/installkernel文件
sys-kernel/installkernel grub
sys-kernel/installkernel dracut

# 新增/etc/dracut.conf.d/00-installkernel.conf文件
kernel_cmdline=" root=UUID=2122cd72-94d7-4dcc-821e-3705926deecc " # 请使用blkid获取根分区的uuid

emerge --ask sys-kernel/installkernel # 安装内核安装时所需的工具链
emerge --ask sys-kernel/gentoo-kernel-bin # 官方编译的Linux内核
emerge --ask sys-kernel/gentoo-sources # 内核源码安装
emerge --ask sys-kernel/genkernel # 内核自动编译与生成工具

4.系统引导配置(GRUB与FSTAB)

配置引导项

emerge --ask --verbose sys-boot/grub # 安装grub工具
grub-install /dev/vda # 把GRUB写入磁盘启动区域,让机器具备开机启动Linux的能力
grub-mkconfig -o /boot/grub/grub.cfg

开机挂载fstab

退出chroot环境,执行genfstab工具生成开机挂载项

emerge --ask sys-apps/arch-install-scripts
genfstab -U /mnt/gentoo > /mnt/gentoo/etc/fstab

5.常用工具

emerge --ask sys-apps/mlocate
emerge --ask sys-apps/pciutils
emerge --ask app-shells/bash-completion
emerge --ask app-emulation/qemu-guest-agent
emerge --ask net-misc/chrony

rc-update add sshd default
rc-update add chronyd default
rc-update add qemu-guest-agent default

6.参考文献

  1. https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation/zh-cn#.E5.86.85.E6.A0.B8.E9.80.89.E6.8B.A9