说明#
本文为 Gentoo Linux 安装指南 系列的第一部分:基础安装。
系列导航:
- 基础安装(本文):从零开始安装 Gentoo 基础系统
- 桌面配置:显卡驱动、桌面环境、输入法等
阅读顺序:
- 基础安装(第 0-11 节)→ 桌面配置(第 12 节)
指南说明#
本文演示完整的 Gentoo 安装流程,并提供官方 Wiki 和技术文档链接,供查阅各步骤的原理和配置细节。
本文以官方手册为准,并附有参考链接。安装 Gentoo 时需要自行查阅 Wiki 和排查问题,可使用搜索引擎或 AI 工具查找资料。
如有疑问或发现问题,可通过以下渠道提出:
- Gentoo 中文社区:Telegram 群组 | Telegram 频道 | GitHub
- 官方社区:Gentoo Forums | IRC: #gentoo @ Libera.Chat
请以官方手册为准:
内容已验证至 2025 年 11 月 25 日
Gentoo 简介#
Gentoo Linux 是基于源代码的 Linux 发行版,支持高度定制和性能优化。与其他发行版不同,Gentoo 让用户从源代码编译所有软件,因此:
- 硬件优化:软件针对硬件编译
- 系统组成:决定系统包含和不包含的内容
- 系统理解:通过亲手构建系统理解 Linux
- 编译时间:初次安装需要较长时间(建议预留 3-6 小时)
- 学习曲线:需要一定的 Linux 基础知识
适合人群
- 想深入学习 Linux 的技术爱好者
- 追求系统性能和定制化的用户
- 喜欢 DIY 过程的用户
不适合人群
- 需要快速安装并使用系统的新手(建议先尝试 Ubuntu、Fedora 等)
- 没有时间配置和维护系统的用户
核心概念(点击展开)
安装前需要了解以下概念:
Stage3 (Wiki) 一个最小化的 Gentoo 基础系统压缩包,包含构建完整系统所需的基础工具链(编译器、库等)。将其解压到硬盘后,它成为新系统的基础。
Portage (Wiki)
Gentoo 的包管理系统。它不直接安装预编译软件包,而是下载源代码并按配置编译后安装。核心命令是 emerge。
USE Flags (Wiki)
控制软件功能的开关。例如,USE="bluetooth" 会让所有支持蓝牙的软件在编译时启用蓝牙功能。这是 Gentoo 定制化的核心。
Profile (Wiki)
预设的系统配置模板。例如 desktop/plasma/systemd profile 会自动启用适合 KDE Plasma 桌面的默认 USE flags。
Emerge (Wiki) Portage 的命令行工具。常用命令:
emerge --ask <包名>- 安装软件emerge --sync- 同步软件仓库emerge -avuDN @world- 更新整个系统
安装时间估算(点击展开)
| 步骤 | 预计时间 |
|---|---|
| 准备安装媒介 | 10-15 分钟 |
| 磁盘分区与格式化 | 15-30 分钟 |
| 下载并解压 Stage3 | 5-10 分钟 |
| 配置 Portage 与 Profile | 15-20 分钟 |
| 编译内核(最耗时) | 30 分钟 - 2 小时 |
| 安装系统工具 | 20-40 分钟 |
| 配置引导程序 | 10-15 分钟 |
| 安装桌面环境(可选) | 1-3 小时 |
| 总计 | 3-6 小时(取决于硬件性能) |
提示
预编译内核和二进制包可以大幅缩短安装时间,但会牺牲部分定制性。
磁盘空间需求与开始前检查清单(点击展开)
磁盘空间需求#
- 最小安装:10 GB(无桌面环境)
- 推荐空间:30 GB(轻量桌面)
- 完整桌面:80 GB+(完整桌面 + 编译缓存)
开始前的检查清单#
- 已备份所有重要数据
- 准备了 8GB+ 的 USB 闪存盘
- 建议使用稳定的有线网络
- 预留充足时间(建议完整的半天)
- 具备一定的 Linux 命令行基础
- 准备另一台设备查阅文档(或使用 GUI LiveCD)
内容概览#
本文说明如何在 x86_64 UEFI 平台安装 Gentoo Linux。
涵盖内容:
- 从零开始安装 Gentoo 基础系统(分区、Stage3、内核、引导程序)
- 配置 Portage 并优化编译参数(make.conf、USE flags、CPU flags)
- 可选配置(LUKS 根文件系统加密)
- 桌面配置 涵盖桌面环境、locale、字体、Fcitx5 输入法、Flatpak 和系统维护
重要提醒
关闭 Secure Boot
开始安装前,请在 BIOS 中暂时关闭 Secure Boot。启用 Secure Boot 可能导致安装介质无法启动,或导致安装后的系统无法引导。系统安装完成并成功启动后,可参考本指南后续章节重新配置并启用 Secure Boot。
数据备份
本指南包含磁盘分区操作。开始前请备份所有重要数据。
0. 准备安装媒介#
0.1 下载 Gentoo ISO#
按下载页面提供的方式获取下载链接。
注意
以下命令从官方 current-install-amd64-minimal 目录读取当前 ISO 文件名。
下载 Minimal ISO:
ISO_DIR=https://distfiles.gentoo.org/releases/amd64/autobuilds/current-install-amd64-minimal
ISO=$(wget -qO- "$ISO_DIR/latest-install-amd64-minimal.txt" | grep -E '^install-amd64-minimal-[0-9]{8}T[0-9]{6}Z[.]iso ' | cut -d' ' -f1)
test -n "$ISO" || exit 1
wget "$ISO_DIR/$ISO" "$ISO_DIR/$ISO.asc"新手可选:LiveGUI USB Image
安装时如需直接使用浏览器或更方便地连接 Wi-Fi,可选择 LiveGUI USB Image。
建议新手从 Gentoo 官方下载页面 选择 LiveGUI USB Image。
Live ISO 登录凭据:
- 账号:
live - 密码:
live - Root 密码:
live
系统支持:
- 支持中文显示、Fcitx5 输入法和 flclash 等
验证签名(推荐):
# 导入 Gentoo 官方发布签名公钥。
# 推荐方式:使用 Live media 或 sec-keys/openpgp-keys-gentoo-release 提供的本地副本
gpg --import /usr/share/openpgp-keys/gentoo-release.asc
# 备用方式:autobuild 由每周自动发布密钥签名;没有本地副本时,从 keyserver 获取:
# gpg --keyserver hkps://keys.gentoo.org --recv-keys 13EBBDBEDE7A12775DFDB1BABB572E0E2D182910
# 验证 ISO 文件的数字签名
gpg --verify "$ISO.asc" "$ISO"
# "$ISO.asc":签名文件(ASCII armored)
# "$ISO":待验证的 ISO 文件0.2 创建 USB 安装盘#
Linux:
sudo dd if="$ISO" of=/dev/sdX bs=4M status=progress oflag=sync
# if=输入文件 of=输出设备 bs=块大小 status=显示进度提示
请将 sdX 替换为 USB 设备名称,例如 /dev/sdb。
**Windows:**推荐使用 Rufus → 选择 ISO → 写入时选择 DD 模式。
1. 进入 Live 环境并连接网络#
目的
Gentoo 安装需要通过网络下载源码包(Stage3)和软件仓库(Portage)。在 Live 环境中配置网络是安装的第一步。
Gentoo Live media 默认启用 NetworkManager。有线网络通常通过 DHCP 自动连接;无线网络可通过 TUI 配置。
NetworkManager(Live media 默认):
nmtui # 交互式:选择「Activate a connection」或「Edit a connection」确认连通:
ping -c3 gentoo.org如需手动配置,或使用不带 NetworkManager 的旧版 Minimal ISO,请参考下列两节。
1.1 有线网络(手动)#
ip link # 查看网卡接口名称 (如 eno1, wlan0)
dhcpcd eno1 # 对有线网卡启用 DHCP 自动获取 IP
ping -c3 gentoo.org # 测试网络连通性1.2 无线网络(手动)#
交互式配置:
net-setupwpa_supplicant(替换为实际接口、SSID 和密码):
wpa_passphrase "SSID" "PASSWORD" | tee /etc/wpa_supplicant/wpa_supplicant.conf
wpa_supplicant -B -i wlp0s20f3 -c /etc/wpa_supplicant/wpa_supplicant.conf
dhcpcd wlp0s20f3注意
若 WPA3 不稳定,请先回退至 WPA2。
进阶设置:启动 SSH 以便远程操作(点击展开)
passwd # 设定 root 密码 (远程登录需要)
rc-service sshd start # 启动 SSH 服务
rc-update add sshd default # 设置 SSH 开机自启 (Live 环境中可选)
ip a | grep inet # 查看当前 IP 地址
# 在另一台设备上:ssh root@<IP>2. 规划磁盘分区#
目的
需要为 Linux 系统划分独立的存储空间。UEFI 系统通常需要一个 ESP 分区(引导)和一个根分区(系统)。合理规划可简化后续维护。
EFI 系统分区(ESP)#
在由 UEFI(而非 BIOS)启动的操作系统上安装 Gentoo 时,必须创建 EFI 系统分区(ESP)。ESP 必须使用 FAT 文件系统,在 Linux 中可能显示为 vfat。UEFI 规范规定固件可识别 FAT12、FAT16 或 FAT32,建议使用 FAT32。
警告
如果 ESP 未使用 FAT 文件系统格式化,系统 UEFI 固件将找不到引导加载程序(或 Linux 内核),系统很可能无法引导。
建议分区方案(UEFI)#
下表提供 Gentoo 试用安装的默认分区方案。
| 设备路径 | 挂载点 | 文件系统 | 描述 |
|---|---|---|---|
/dev/nvme0n1p1 | /efi | vfat | EFI 系统分区 (ESP) |
/dev/nvme0n1p2 | swap | swap | 交换分区 |
/dev/nvme0n1p3 | / | xfs | 根分区 |
cfdisk 分区示例#
cfdisk 是图形化分区工具,操作直观。
cfdisk /dev/nvme0n1操作:
- 选择 GPT 标签类型。
- 创建 ESP:新建分区 → 大小
1G→ 类型选择EFI System。 - 创建 Swap:新建分区 → 大小
4G→ 类型选择Linux swap。 - 创建 Root:新建分区 → 剩余空间 → 类型选择
Linux filesystem(默认)。 - 选择 Write 写入更改,输入
yes确认。 - 选择 Quit 退出。
Disk: /dev/nvme0n1
Size: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Label: gpt, identifier: 9737D323-129E-4B5F-9049-8080EDD29C02
设备 Start 终点 扇区 Size 类型
/dev/nvme0n1p1 34 32767 32734 16M Microsoft reserved
/dev/nvme0n1p2 32768 879779839 879747072 419.5G Microsoft basic data
/dev/nvme0n1p3 1416650752 1418747903 2097152 1G EFI System
/dev/nvme0n1p4 1418747904 1437622271 18874368 9G Linux swap
/dev/nvme0n1p5 1437622272 1953523711 515901440 246G Linux filesystem
>> /dev/nvme0n1p6 879779840 1416650751 536870912 256G Linux filesystem
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Partition UUID: F2F1EF58-82EA-46A6-BF49-896AA40C6060 │
│ Partition type: Linux filesystem (0FC63DAF-8483-4772-8E79-3D69D8477DE4) │
│ Filesystem UUID: b4b0b42d-20be-4cf8-be81-9775efa6c151 │
│Filesystem LABEL: crypthomevar │
│ Filesystem: crypto_LUKS │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
[ 删除 ] [Resize] [ 退出 ] [ 类型 ] [ 帮助 ] [ 排序 ] [ 写入 ] [ 导出 ]
Quit program without writing changes进阶设置:fdisk 命令行分区(点击展开)
fdisk 是功能完整的命令行分区工具。
fdisk /dev/nvme0n11. 查看当前分区布局
按 p 显示磁盘当前的分区配置。
Command (m for help): p
Disk /dev/nvme0n1: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: NVMe SSD
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 3E56EE74-0571-462B-A992-9872E3855D75
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 2099199 2097152 1G EFI System
/dev/nvme0n1p2 2099200 10487807 8388608 4G Linux swap
/dev/nvme0n1p3 10487808 1953523711 1943035904 926.5G Linux root (x86-64)2. 创建新的磁盘标签
按 g 会立即删除所有现有磁盘分区并创建新的 GPT 磁盘标签:
Command (m for help): g
Created a new GPT disklabel (GUID: ...).如要保留现有 GPT 磁盘标签,可按 d 逐个删除现有分区。
3. 创建 EFI 系统分区(ESP)
输入 n 创建新分区,选择分区号 1,使用默认起始扇区(2048),并在结束扇区输入 +1G:
Command (m for help): n
Partition number (1-128, default 1): 1
First sector (2048-..., default 2048): <Enter>
Last sector, +/-sectors or +/-size{K,M,G,T,P} (...): +1G
Created a new partition 1 of type 'Linux filesystem' and of size 1 GiB.
Partition #1 contains a vfat signature.
Do you want to remove the signature? [Y]es/[N]o: Y
The signature will be removed by a write command.将分区标记为 EFI 系统分区(类型代码 1):
Command (m for help): t
Selected partition 1
Partition type or alias (type L to list all): 1
Changed type of partition 'Linux filesystem' to 'EFI System'.4. 创建 Swap 分区
创建 4 GB 的 Swap 分区:
Command (m for help): n
Partition number (2-128, default 2): 2
First sector (...): <Enter>
Last sector (...): +4G
Created a new partition 2 of type 'Linux filesystem' and of size 4 GiB.
Command (m for help): t
Partition number (1,2, default 2): 2
Partition type or alias (type L to list all): 19
Changed type of partition 'Linux filesystem' to 'Linux swap'.(注:类型代码 19 是 Linux swap)
5. 创建根分区
将剩余空间分配给根分区:
Command (m for help): n
Partition number (3-128, default 3): 3
First sector (...): <Enter>
Last sector (...): <Enter>
Created a new partition 3 of type 'Linux filesystem' and of size 926.5 GiB.注意
将根分区设为 "Linux root (x86-64)" 并非必需;设为 "Linux filesystem" 时,系统也能正常运行。只有使用支持该类型的引导程序(即 systemd-boot)且不需要 fstab 文件时,才需要此文件系统类型。
将分区类型设为 "Linux root (x86-64)"(类型代码 23):
Command (m for help): t
Partition number (1-3, default 3): 3
Partition type or alias (type L to list all): 23
Changed type of partition 'Linux filesystem' to 'Linux root (x86-64)'.6. 写入更改
确认无误后,按 w 写入更改并退出:
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.3. 建立文件系统并挂载#
可参考:Gentoo Handbook: AMD64 - 准备磁盘 · Ext4 · XFS · Btrfs
目的
磁盘分区只划分空间,尚不能存储数据。建立文件系统(如 ext4、Btrfs)后,操作系统才能管理和访问这些空间。挂载将文件系统接入 Linux 文件树的指定位置。
3.1 格式化#
mkfs.fat -F 32 /dev/nvme0n1p1 # 格式化 ESP 分区为 FAT32
mkswap /dev/nvme0n1p2 # 格式化 Swap 分区
mkfs.xfs /dev/nvme0n1p3 # 格式化 Root 分区为 XFS若使用 Btrfs:
mkfs.btrfs -L gentoo /dev/nvme0n1p3若使用 ext4:
mkfs.ext4 /dev/nvme0n1p33.2 挂载(以 XFS 为例)#
mount /dev/nvme0n1p3 /mnt/gentoo # 挂载根分区
mkdir -p /mnt/gentoo/efi # 创建 ESP 挂载点
mount /dev/nvme0n1p1 /mnt/gentoo/efi # 挂载 ESP 分区
swapon /dev/nvme0n1p2 # 启用 Swap 分区进阶设置:Btrfs 子卷示例(点击展开)
1. 格式化
mkfs.fat -F 32 /dev/nvme0n1p1 # 格式化 ESP
mkswap /dev/nvme0n1p2 # 格式化 Swap
mkfs.btrfs -L gentoo /dev/nvme0n1p3 # 格式化 Root (Btrfs)2. 创建子卷
mount /dev/nvme0n1p3 /mnt/gentoo
btrfs subvolume create /mnt/gentoo/@
btrfs subvolume create /mnt/gentoo/@home
umount /mnt/gentoo3. 挂载子卷
mount -o compress=zstd,subvol=@ /dev/nvme0n1p3 /mnt/gentoo
mkdir -p /mnt/gentoo/{efi,home}
mount -o subvol=@home /dev/nvme0n1p3 /mnt/gentoo/home
mount /dev/nvme0n1p1 /mnt/gentoo/efi # 注意:ESP 必须是 FAT32 格式
swapon /dev/nvme0n1p24. 验证挂载
lsblk示例输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:1 0 931.5G 0 disk
├─nvme0n1p1 259:7 0 1G 0 part /mnt/gentoo/efi
├─nvme0n1p2 259:8 0 4G 0 part [SWAP]
└─nvme0n1p3 259:9 0 926.5G 0 part /mnt/gentoo/home
/mnt/gentooBtrfs 快照
可使用 Snapper 管理快照。将 @ 和 @home 分开可简化系统回滚。
进阶设置:加密分区(LUKS)(点击展开)
LUKS 专用分区方案
| 设备 | 挂载点 | 文件系统 | 说明 |
|---|---|---|---|
/dev/nvme0n1p1 | /efi | vfat | EFI 系统分区(ESP),1G |
/dev/nvme0n1p2 | /boot | ext4 | 未加密,存放内核和 initramfs,1G |
/dev/nvme0n1p3 | swap | swap | 交换分区 |
/dev/nvme0n1p4 | / | btrfs | LUKS 加密的根分区 |
GRUB 必须在解密前读取内核和 initramfs,因此它们必须存放在未加密的 /boot 中;根分区仍受 LUKS 加密。
1. 建立加密容器
cryptsetup luksFormat --type luks2 --pbkdf argon2id --hash sha512 --key-size 512 /dev/nvme0n1p4此流程仅加密根分区 /dev/nvme0n1p4。ESP、独立的 /boot 分区和独立 Swap 分区未受 LUKS 保护;内存换出的页面会写入未加密的 Swap。
2. 打开加密容器
映射名 cryptroot 会在后续 dracut、fstab 和引导程序章节中重复使用。若改名,请保持一致。
cryptsetup luksOpen /dev/nvme0n1p4 cryptroot3. 格式化
mkfs.fat -F 32 /dev/nvme0n1p1 # 格式化 ESP
mkfs.ext4 /dev/nvme0n1p2 # 格式化未加密的 /boot
mkswap /dev/nvme0n1p3 # 格式化 Swap
mkfs.btrfs --label root /dev/mapper/cryptroot # 在 LUKS 之上格式化 Root(Btrfs)4. 挂载
mount /dev/mapper/cryptroot /mnt/gentoo
btrfs subvolume create /mnt/gentoo/@
btrfs subvolume create /mnt/gentoo/@home
umount /mnt/gentoo
mount -o compress=zstd,subvol=@ /dev/mapper/cryptroot /mnt/gentoo
mkdir -p /mnt/gentoo/boot
mount /dev/nvme0n1p2 /mnt/gentoo/boot
mkdir -p /mnt/gentoo/{efi,home}
mount -o subvol=@home /dev/mapper/cryptroot /mnt/gentoo/home
mount /dev/nvme0n1p1 /mnt/gentoo/efi
swapon /dev/nvme0n1p35. 验证挂载
lsblk示例输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:1 0 931.5G 0 disk
├─nvme0n1p1 259:7 0 1G 0 part /mnt/gentoo/efi
├─nvme0n1p2 259:8 0 1G 0 part /mnt/gentoo/boot
├─nvme0n1p3 259:9 0 4G 0 part [SWAP]
└─nvme0n1p4 259:10 0 925.5G 0 part
└─cryptroot 253:0 0 925.5G 0 crypt /mnt/gentoo验证挂载
挂载完成后,运行 lsblk 确认挂载点。
lsblk示例输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:1 0 931.5G 0 disk
├─nvme0n1p1 259:7 0 1G 0 part /efi
├─nvme0n1p2 259:8 0 4G 0 part [SWAP]
└─nvme0n1p3 259:9 0 926.5G 0 part /4. 下载 Stage3 并进入 chroot#
目的
Stage3 是最小化的 Gentoo 基础系统环境。将它解压到硬盘后,通过 chroot 进入该环境进行后续配置。
4.1 选择 Stage3#
- OpenRC:
stage3-amd64-openrc-*.tar.xz - systemd:
stage3-amd64-systemd-*.tar.xz - Desktop 变种预设启用部分 USE,标准版更灵活。
4.2 下载并解压#
cd /mnt/gentoo
# OpenRC:
BASE=https://distfiles.gentoo.org/releases/amd64/autobuilds
STAGE3=$(wget -qO- "$BASE/latest-stage3-amd64-openrc.txt" | grep -E '^[0-9]{8}T[0-9]{6}Z/stage3-amd64-openrc-[0-9]{8}T[0-9]{6}Z[.]tar[.]xz ' | cut -d' ' -f1)
# systemd:将上一行中的两个 openrc 替换为 systemd。
test -n "$STAGE3" || exit 1
wget "$BASE/$STAGE3"
wget "$BASE/$STAGE3.asc"
gpg --verify "${STAGE3##*/}.asc" "${STAGE3##*/}"
tar xpvf "${STAGE3##*/}" --xattrs-include='*.*' --numeric-owner如同时下载了 .DIGESTS 或 .CONTENTS,可使用 openssl 或 gpg 验证。
4.3 复制 DNS 并挂载伪文件系统#
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/ # 复制 DNS 配置
mount --types proc /proc /mnt/gentoo/proc # 挂载进程信息
mount --rbind /sys /mnt/gentoo/sys # 绑定挂载系统信息
mount --rbind /dev /mnt/gentoo/dev # 绑定挂载设备节点
mount --rbind /run /mnt/gentoo/run # 绑定挂载运行时信息
mount --make-rslave /mnt/gentoo/sys # 设置为从属挂载 (防止卸载时影响宿主)
mount --make-rslave /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/run使用 OpenRC 时可省略
/run。
4.4 进入 chroot#
chroot /mnt/gentoo /bin/bash # 切换根目录到新系统
source /etc/profile # 加载环境变量
export PS1="(chroot) ${PS1}" # 修改提示符以区分环境5. 初始化 Portage 与 make.conf#
目的
Portage 是 Gentoo 的包管理系统。初始化 Portage 并配置 make.conf 后,可决定软件的编译方式、启用的功能和下载来源。
5.1 同步仓库#
emerge-webrsync # 获取最新的 Portage 快照 (比 rsync 快)
emerge --sync # 同步 Portage 树 (获取最新 ebuild)
emerge --ask app-editors/vim # 安装 Vim 编辑器 (推荐)
eselect editor list # 列出可用编辑器
eselect editor set vi # 将 Vim 设置为默认编辑器 (vi 通常是指向 vim 的软链接)设置镜像(任选其一):
emerge --ask --verbose --oneshot app-portage/mirrorselect
mirrorselect -i -o >> /etc/portage/make.conf
# 或手动:
#以 BFSU 镜像站为例
echo 'GENTOO_MIRRORS="https://mirrors.bfsu.edu.cn/gentoo/"' >> /etc/portage/make.conf5.2 make.conf 示例#
编辑 /etc/portage/make.conf:
vim /etc/portage/make.conf新手配置(可复制):
提示
请根据 CPU 核心数修改 MAKEOPTS 中的 -j 参数,例如 8 核 CPU 使用 -j8。
# ========== 编译优化参数 ==========
# -march=native: 针对当前 CPU 架构优化,获得最佳性能
# -O2: 推荐的优化级别,平衡性能与编译时间
# -pipe: 使用管道加速编译过程
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}" # C 编译器选项
CXXFLAGS="${COMMON_FLAGS}" # C++ 编译器选项
FCFLAGS="${COMMON_FLAGS}" # Fortran 编译器选项
FFLAGS="${COMMON_FLAGS}" # Fortran 77 编译器选项
# ========== 并行编译设置 ==========
# -j 后面的数字 = CPU 线程数(运行 nproc 查看)
# 内存不足时可适当减少(如 -j4)
MAKEOPTS="-j8"
# ========== 语言与本地化 ==========
# LC_MESSAGES=C: 保持编译输出为英文,便于搜索错误信息
LC_MESSAGES=C
# L10N/LINGUAS: 支持的语言(影响软件翻译和文档)
L10N="en en-US zh zh-CN zh-TW"
LINGUAS="en en_US zh zh_CN zh_TW"
# ========== 镜像源设置 ==========
# 国内推荐:BFSU、TUNA、USTC 等
GENTOO_MIRRORS="https://mirrors.bfsu.edu.cn/gentoo/"
# ========== USE 标志 ==========
# 只写 profile 默认值以外的部分,其余由 profile 提供
USE="git dist-kernel"
# ========== 许可证设置 ==========
# "*" 接受所有许可证;"@FREE" 仅接受自由软件
ACCEPT_LICENSE="*"确认 profile 提供的 USE 标志
systemd profile 提供 systemd 和 udev;desktop profile 提供 dbus、policykit 和 bluetooth;desktop/plasma profile 提供 networkmanager 并强制启用 policykit。profile 是 USE 的主要来源,因此 make.conf 的 USE 只应写入与 profile 默认值不同的部分;以下命令可确认当前 USE 集合及软件包的 USE 标志:
emerge --info | grep '^USE='
emerge -pv <package>详细配置示例(点击展开)
# vim: set filetype=bash # 告诉 Vim 使用 bash 语法高亮
# ========== 系统架构(勿手动修改) ==========
# 由 Stage3 预设,表示目标系统架构
CHOST="x86_64-pc-linux-gnu"
# ========== 编译优化参数 ==========
# -march=native 针对当前 CPU 架构优化,获得最佳性能
# 注意:编译出的程序可能无法在其他 CPU 上运行
# -O2 推荐的优化级别,平衡性能与稳定性
# 避免使用 -O3,可能导致部分软件编译失败
# -pipe 使用管道代替临时文件传递数据,加速编译
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}" # C 编译器选项
CXXFLAGS="${COMMON_FLAGS}" # C++ 编译器选项
FCFLAGS="${COMMON_FLAGS}" # Fortran 编译器选项
FFLAGS="${COMMON_FLAGS}" # Fortran 77 编译器选项
# CPU 指令集优化(运行 cpuid2cpuflags 自动生成,见下文 5.3)
# CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt sse sse2 ..."
# ========== 并行编译设置 ==========
# MAKEOPTS: 控制 make 的并行任务数
# -j<N> 同时运行的编译任务数,建议 = CPU 线程数(nproc)
# -l<N> 系统负载限制,防止系统过载(可选)
MAKEOPTS="-j8" # 请根据实际 CPU 线程数调整
# 内存不足时的替代配置(例如 16GB 内存 + 8 核 CPU):
# MAKEOPTS="-j4 -l8" # 减少并行数,限制负载
# ========== 语言与本地化设置 ==========
# 保持构建输出为英文,便于搜索错误信息和寻求帮助
LC_MESSAGES=C
# L10N: 本地化语言支持(影响软件翻译、文档等)
L10N="en en-US zh zh-CN zh-TW"
# LINGUAS: 旧式本地化变量(部分软件仍需要)
LINGUAS="en en_US zh zh_CN zh_TW"
# ========== 镜像源设置 ==========
# 国内常用镜像(任选其一):
# BFSU: https://mirrors.bfsu.edu.cn/gentoo/
# TUNA: https://mirrors.tuna.tsinghua.edu.cn/gentoo/
# USTC: https://mirrors.ustc.edu.cn/gentoo/
# SJTU: https://mirrors.sjtug.sjtu.edu.cn/gentoo/
GENTOO_MIRRORS="https://mirrors.bfsu.edu.cn/gentoo/"
# ========== Emerge 默认选项 ==========
# --ask 执行前询问确认
# --verbose 显示详细信息(USE 标志变化等)
# --with-bdeps=y 包含构建时依赖(更新时也检查)
# --complete-graph=y 完整依赖图分析(避免依赖问题)
EMERGE_DEFAULT_OPTS="--ask --verbose --with-bdeps=y --complete-graph=y"
# 可选的额外选项:
# --jobs=N 并行编译多个包(内存充足时可用)
# --load-average=N 系统负载限制
# EMERGE_DEFAULT_OPTS="--ask --verbose --jobs=2 --load-average=8"
# ========== USE 标志(全局功能开关) ==========
# 只写 profile 默认值以外的部分;此处仅启用 git 和 dist-kernel。
USE="git dist-kernel"
# 常用的可选 USE 标志:
# pulseaudio / pipewire 音频服务器
# wayland / X 显示服务器
# vulkan Vulkan 图形 API
# vaapi / vdpau 硬件视频解码
# cups 打印支持
# flatpak Flatpak 应用支持
# ========== 许可证设置 ==========
# "*" 接受所有许可证(包括闭源软件)
# "@FREE" 仅接受自由软件许可证
ACCEPT_LICENSE="*"
# ========== 视频卡配置(可选) ==========
# 根据你的显卡选择:
# intel Intel 集成显卡
# amdgpu AMD 显卡(GCN 1.2+)
# radeonsi AMD 显卡(OpenGL)
# nvidia NVIDIA 显卡(闭源驱动)
# nouveau NVIDIA 显卡(开源驱动)
# VIDEO_CARDS="intel"
# VIDEO_CARDS="amdgpu radeonsi"
# VIDEO_CARDS="nvidia"
# ========== 输入设备配置(可选) ==========
# libinput 是现代桌面的推荐选择
# INPUT_DEVICES="libinput"
# ========== Portage 功能配置(可选) ==========
# 启用拆分调试信息
# FEATURES="${FEATURES} splitdebug"
# ========== 编译日志配置(推荐) ==========
# PORTAGE_ELOG_CLASSES: 要记录的日志级别
# info 一般信息
# warn 警告信息(重要)
# error 错误信息(重要)
# log 普通日志
# qa 质量保证警告
PORTAGE_ELOG_CLASSES="warn error log"
# PORTAGE_ELOG_SYSTEM: 日志输出方式
# save 保存到 /var/log/portage/elog/(推荐)
# echo 编译后直接显示
# mail 通过邮件发送
# syslog 发送到系统日志
# custom 自定义处理
PORTAGE_ELOG_SYSTEM="save"
# 文件末尾保留换行符!提示
MAKEOPTS="-j32"中的数字应为 CPU 线程数,可通过nproc查看- 编译时内存不足可减少并行任务数,例如改为
-j16 - USE 标志决定软件在编译时包含的功能
进阶设置:CPU 指令集配置(CPU_FLAGS_X86)(点击展开)
可参考:CPU_FLAGS_*
配置 CPU_FLAGS_X86,使 Portage 获知 CPU 支持的指令集,例如 AES、AVX 和 SSE4.2。
安装检测工具:
emerge --ask app-portage/cpuid2cpuflags # 安装检测工具运行检测并写入配置:
cpuid2cpuflags >> /etc/portage/make.conf # 将检测结果追加到配置文件检查 /etc/portage/make.conf 末尾,应有类似的一行:
CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt rdrand sse sse2 sse3 sse4_1 sse4_2 ssse3"5.3 二进制包(binhost)(可选)#
目的
Gentoo 从源代码编译软件,时间表中最耗时的项目多为编译。官方 binhost 提供已签名的预编译二进制包。配置匹配时,Portage 直接安装;不匹配时仍从源代码编译。binhost 只改变软件包来源,不改变系统结构,因此可随时启用或停用。
确认仓库配置#
Stage3 已在 /etc/portage/binrepos.conf/gentoo.conf 中预配置官方 binhost,可先查看现有内容:
cat /etc/portage/binrepos.conf/gentoo.conf典型配置:
[gentoo]
priority = 1
sync-uri = https://distfiles.gentoo.org/releases/amd64/binpackages/23.0/x86-64
location = /var/cache/binhost/gentoo
verify-signature = truesync-uri 应指向包含 Packages 索引的目录。更换镜像时仅修改主机部分,路径不变。可用地址见 gentoo-zh 镜像列表。
选择指令集层级#
sync-uri 路径的末段是指令集层级,Stage3 默认使用通用的 x86-64。改用更高层级可获得针对较新指令集优化的软件包。
先检查本机支持的层级:
ld.so --help在输出中查找 Subdirectories of glibc-hwcaps directories 一节。标为 supported, searched 的层级即为本机可用层级:
Subdirectories of glibc-hwcaps directories, in priority order:
x86-64-v4 (supported, searched)
x86-64-v3 (supported, searched)
x86-64-v2 (supported, searched)官方 amd64 binhost 仅构建 x86-64 和 x86-64-v3 两级,不含 v2 和 v4。输出中有 x86-64-v3 (supported, searched) 时使用 x86-64-v3;否则保留 x86-64。上例机器虽支持 v4,可用的仍是 v3。
确认后修改 sync-uri 的末段:
# /etc/portage/binrepos.conf/gentoo.conf
sync-uri = https://distfiles.gentoo.org/releases/amd64/binpackages/23.0/x86-64-v3arm64 只有一个层级,路径为 /releases/arm64/binpackages/23.0/arm64,无需选择。
注意
层级仅决定二进制包使用的指令集,与本地编译无关。CPU 不支持所填层级时,取回的软件包会因非法指令崩溃。因此应以 ld.so --help 的输出为准,不应按 CPU 型号猜测。
自动启用#
让 emerge 在有合适二进制包时自动使用:
# 追加到 /etc/portage/make.conf
FEATURES="${FEATURES} getbinpkg"仅在单次命令中使用:
emerge --ask --getbinpkg sys-kernel/gentoo-kernel-bin 软件包与二进制包不同
sys-kernel/gentoo-kernel-bin 等以 -bin 结尾的软件包使用上游发布的预编译产物。ebuild 仅负责下载和解压,仍遵循普通 ebuild 流程,emerge -pv 显示为 [ebuild]。本节的二进制包由 Portage 打包并通过 binhost 分发,格式为 .gpkg.tar,显示为 [binary]。
因此第 7 章的 gentoo-kernel-bin 本身不编译,也不使用 binhost;从源代码构建的 sys-kernel/gentoo-kernel,以及桌面篇中的浏览器、LLVM、Rust 等大型软件,才可通过 binhost 节省编译时间。
确认是否已使用#
emerge -pv 输出中前缀为 [binary] 才表示该项目使用二进制包,[ebuild] 表示需要从源代码编译:
emerge -pv sys-kernel/gentoo-kernel配置正确但仍显示 [ebuild] 时,常见原因有三项:
- USE 不匹配。
--binpkg-respect-use默认开启。二进制包的 USE 与当前配置不一致时会被跳过。官方 binhost 按 profile 默认 USE 构建,因此make.conf中改动的 USE 越多,命中率越低。 - 依赖变动。
--binpkg-changed-deps默认开启。ebuild 的依赖在打包后变动时,该软件包会被跳过。 - 版本不在索引中。binhost 只提供已构建的版本;同步树上的较新版本会从源代码编译。
CFLAGS 不参与匹配,因此 make.conf 中的 -march=native 不会使官方二进制包失效。本机编译的软件包按 native 优化,来自 binhost 的软件包使用通用指令集,两者可以共存。
相关选项#
| 选项 | 作用 |
|---|---|
-k / --usepkg | 本地 PKGDIR 里有就用 |
-g / --getbinpkg | 从远端 binhost 取,隐含 -k |
-K / --usepkgonly | 只用本地二进制包,没有就报错 |
-G / --getbinpkgonly | 只用二进制包,远端优先于本地 |
安装阶段使用 -g 即可。-K 和 -G 会关闭 --binpkg-respect-use 和 --binpkg-changed-deps,安装的软件包可能与 make.conf 中的 USE 不一致,不建议在此步骤使用。
签名验证#
verify-signature = true 表示该仓库的软件包必须带有可信签名。新版 Portage 默认验证远程二进制包,首次下载时自动执行 getuto,在 /etc/portage/gnupg 中建立信任密钥环。官方 binhost 用户无需再配置 FEATURES="binpkg-request-signature"。取回的软件包缓存在 location 指定的目录,与本机 FEATURES="buildpkg" 产出的软件包分开存放。这两项变化见 2026-05-03 的新闻条目。系统安装完成后,也可使用 eselect news read 查看。
进阶:gentoo-zh 二进制包、自建与局域网共享(点击展开)
gentoo-zh binhost
gentoo-zh overlay 为浏览器、办公套件和 Electron 应用等编译耗时较长的软件包提供预编译版本。目前仅支持 amd64,分为 stable 和 unstable 两个频道,需另外导入社区签名公钥。它是附加仓库,不替代官方 binhost。配置见 gentoo-zh Overlay 页。配置 overlay 的步骤在桌面配置篇的 12.9,因此请在完成该步骤后再配置。
自己构建二进制包
编译时同时产出二进制包,重装或安装第二台机器时可直接复用:
# 追加到 /etc/portage/make.conf
FEATURES="${FEATURES} buildpkg"
PKGDIR="/var/cache/binpkgs"已安装的软件包可补充打包:
emerge --ask app-portage/gentoolkit
quickpkg --include-config=y sys-apps/portage共享给其他机器
可通过任意 HTTP 服务器发布 PKGDIR。客户端在 /etc/portage/binrepos.conf/ 中添加一个指向该目录的仓库。需处理以下两项:
-march=native编译出的包只能在同型号 CPU 上运行。要共享就把构建机的COMMON_FLAGS改成明确的架构,例如-march=x86-64-v3。- 自建的包默认没有签名,所以客户端要么给该仓库设
verify-signature = false,要么在构建机启用FEATURES="binpkg-signing"并把公钥导入客户端的/etc/portage/gnupg。
清理
二进制包会持续占用磁盘空间:
eclean-pkg -p # 先看会删掉哪些
eclean-pkg # 删除已被新版本取代的包
eclean-pkg -d # 只保留重装所需的最小集合6. Profile、系统设置与本地化#
目的
Profile 定义系统的基础配置和预设 USE 标志。配置时区、语言、网络等基本参数后,Gentoo 系统才能正常运行并符合个人使用习惯。
6.1 选择 Profile#
eselect profile list # 列出所有可用 Profile
eselect profile set <编号> # 设置选定的 Profile
emerge -avuDN @world # 更新系统以匹配新 Profile (a:询问 v:详细 u:升级 D:深层依赖 N:新USE)常见 profile:
default/linux/amd64/23.0/desktop/plasma/systemddefault/linux/amd64/23.0/desktop/gnome/systemddefault/linux/amd64/23.0/desktop(OpenRC 桌面)
6.2 时区和语言#
echo "Asia/Shanghai" > /etc/timezone
emerge --config sys-libs/timezone-data
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen # 生成选定的语言环境
eselect locale set en_US.utf8 # 设置系统默认语言 (建议用英文以免乱码)
# 重新加载环境
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"6.3 主机名和网络设置#
设置主机名:
echo "gentoo" > /etc/hostname选择网络管理工具:
方案 A:NetworkManager(通用)
可参考:NetworkManager
适用于大多数桌面用户,支持 OpenRC 和 systemd。
emerge --ask net-misc/networkmanager
# OpenRC:
rc-update add NetworkManager default
# systemd:
systemctl enable NetworkManager配置
图形界面:运行 nm-connection-editor
命令行:使用 nmtui(TUI)或 nmcli
进阶提示:使用 iwd 后端(点击展开)
NetworkManager 支持使用 iwd 作为后端,速度快于 wpa_supplicant。
echo "net-misc/networkmanager iwd" >> /etc/portage/package.use/networkmanager
emerge --ask --newuse net-misc/networkmanager然后编辑 /etc/NetworkManager/NetworkManager.conf,在 [device] 下添加 wifi.backend=iwd。
方案 B:轻量网络工具(点击展开)
如不使用 NetworkManager,可选择以下轻量级工具:
- 有线网络(dhcpcd)
可参考:dhcpcd
emerge --ask net-misc/dhcpcd
# OpenRC:
rc-update add dhcpcd default
# systemd:
systemctl enable dhcpcd- 无线网络(iwd)
可参考:iwd
emerge --ask net-wireless/iwd
# OpenRC:
rc-update add iwd default
# systemd:
systemctl enable iwd提示:iwd 是轻量级无线守护进程。
方案 C:原生网络服务(点击展开)
使用 init 系统内置的网络管理功能,适合服务器或极简环境。
OpenRC 网卡服务:
vim /etc/conf.d/net注意
请将下文的 enp5s0 替换为实际网卡接口名称,可通过 ip link 查看。
添加以下内容:
config_enp5s0="dhcp"ln -s /etc/init.d/net.lo /etc/init.d/net.enp5s0 # 创建网卡服务软链接
rc-update add net.enp5s0 default # 设置开机自启systemd 原生网卡服务:
systemd 内置网络管理功能,适合服务器或极简环境:
systemctl enable systemd-networkd
systemctl enable systemd-resolved注意:需要手动编写 .network 配置文件。
6.4 配置 fstab#
目的
系统启动时需要知道要挂载哪些分区。/etc/fstab 定义:
- 启动时自动挂载的分区
- 每个分区的挂载目录
- 文件系统类型
使用 UUID:设备路径(如 /dev/sda1)可能因硬件变化而改变;UUID 是文件系统的唯一标识符,不会因磁盘顺序变化而改变。
方法 A:使用 genfstab 自动生成#
点击展开查看步骤
安装 genfstab
genfstab 由 sys-fs/genfstab 提供,源自 Arch Linux 的 arch-install-scripts。
- Gig-OS / Arch LiveISO:已预装,可直接使用
- Gentoo Minimal ISO:需要先安装
emerge --ask sys-fs/genfstab
genfstab 参数说明
| 参数 | 说明 | 推荐度 |
|---|---|---|
-U | 使用文件系统 UUID 标识 | 推荐 |
-L | 使用文件系统 LABEL 标识 | 需预设标签 |
-t PARTUUID | 使用 GPT 分区 PARTUUID | GPT 专用 |
| 无参数 | 使用设备路径(/dev/sdX) | 不推荐 |
建议使用 -U 参数。UUID 是文件系统的唯一标识符,不会因磁盘顺序变化而改变。
标准用法(在 chroot 外执行):
# 1. 确认所有分区已正确挂载
lsblk
mount | grep /mnt/gentoo
# 2. 生成 fstab(使用 UUID)
genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab
# 3. 检查生成的文件
cat /mnt/gentoo/etc/fstabchroot 环境下的替代方案
如果已 chroot 进入新系统(/mnt/gentoo 变为 /),可使用以下方法:
方法一:在 chroot 内执行
# 在 chroot 内安装
emerge --ask sys-fs/genfstab
# 直接对根目录生成
genfstab -U / >> /etc/fstab
# 检查并清理多余条目(可能包含 /proc、/sys、/dev 等)
vim /etc/fstab方法二:打开新终端窗口(LiveGUI)
使用 Gig-OS 等带图形界面的 Live 环境时,可直接打开新终端窗口,默认处于 Live 环境:
genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab方法三:通过 TTY 切换(Minimal ISO)
- 按
Ctrl+Alt+F2切换到新 TTY(Live 环境) - 安装并执行:
emerge --ask sys-fs/genfstab genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab - 按
Ctrl+Alt+F1切回 chroot 环境
方法 B:手动配置#
点击展开查看手动配置方法
不使用 genfstab 时,可手动编辑 /etc/fstab。
1. 获取分区 UUID
blkid示例输出:
/dev/nvme0n1p1: UUID="7E91-5869" TYPE="vfat" PARTLABEL="EFI"
/dev/nvme0n1p2: UUID="7fb33b5d-..." TYPE="swap" PARTLABEL="swap"
/dev/nvme0n1p3: UUID="8c08f447-..." TYPE="xfs" PARTLABEL="root"2. 编辑 fstab
vim /etc/fstab基本配置示例(ext4/XFS):
# <UUID> <挂载点> <类型> <选项> <dump> <fsck>
UUID=7E91-5869 /efi vfat umask=0077,tz=UTC 0 2
UUID=7fb33b5d-4cff-47ff-ab12-7b461b5d6e13 none swap sw 0 0
UUID=8c08f447-c79c-4fda-8c08-f447c79ce690 / xfs defaults,noatime 0 1fstab 字段
| 字段 | 说明 |
|---|---|
| UUID | 分区的唯一标识符(通过 blkid 获取) |
| 挂载点 | 文件系统挂载位置(swap 使用 none) |
| 类型 | 文件系统类型:vfat、ext4、xfs、btrfs、swap |
| 选项 | 挂载选项,多个用逗号分隔 |
| dump | 备份标志,通常为 0 |
| fsck | 启动时检查顺序:1=根分区,2=其他,0=不检查 |
Btrfs 子卷
genfstab 自动生成:
Btrfs 子卷正确挂载后,genfstab -U 会自动识别并生成包含 subvol= 的配置。
# 确认子卷挂载情况
mount | grep btrfs
# 输出示例:/dev/nvme0n1p3 on /mnt/gentoo type btrfs (rw,noatime,compress=zstd:3,subvol=/@)
# 自动生成
genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab手动配置示例:
# Root 子卷
UUID=7b44c5eb-caa0-413b-9b7e-a991e1697465 / btrfs defaults,noatime,compress=zstd:3,discard=async,space_cache=v2,subvol=@ 0 0
# Home 子卷(同一 UUID,不同子卷)
UUID=7b44c5eb-caa0-413b-9b7e-a991e1697465 /home btrfs defaults,noatime,compress=zstd:3,discard=async,space_cache=v2,subvol=@home 0 0
# Swap(独立分区)
UUID=7fb33b5d-4cff-47ff-ab12-7b461b5d6e13 none swap sw 0 0
# EFI 分区
UUID=7E91-5869 /efi vfat defaults,noatime,fmask=0022,dmask=0022 0 2Btrfs 挂载选项
| 选项 | 说明 |
|---|---|
compress=zstd:3 | zstd 压缩,级别 3(推荐,平衡性能与压缩率) |
discard=async | 异步 TRIM(SSD 推荐) |
space_cache=v2 | v2 版空间缓存(默认启用,性能更好) |
subvol=@ | 指定挂载的子卷 |
noatime | 不记录访问时间(提升性能) |
注意
- 同一 Btrfs 分区的所有子卷使用相同 UUID
- 使用
blkid获取实际 UUID
LUKS 加密分区配置
要点
fstab 必须使用解密后映射设备的 UUID(/dev/mapper/xxx),而非 LUKS 容器的 UUID。
genfstab 自动生成:
genfstab 会自动检测解密后的设备,并使用正确的 UUID:
# 确认 LUKS 已解密
lsblk
# 应看到类似:nvme0n1p4 → cryptroot → 挂载点
# 自动生成(会使用 /dev/mapper/cryptroot 的 UUID)
genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab手动配置:区分两种 UUID
blkid# LUKS 容器(TYPE="crypto_LUKS")- 不要用这个!
/dev/nvme0n1p4: UUID="562d0251-..." TYPE="crypto_LUKS"
# 解密后设备(TYPE="btrfs")- 用这个!
/dev/mapper/cryptroot: UUID="7b44c5eb-..." TYPE="btrfs"手动配置示例(Btrfs on LUKS):
# Root(使用解密后设备 /dev/mapper/cryptroot 的 UUID)
UUID=7b44c5eb-caa0-413b-9b7e-a991e1697465 / btrfs defaults,noatime,compress=zstd:3,discard=async,space_cache=v2,subvol=@ 0 0
# Boot(未加密)
UUID=9a856e43-a0be-4477-8647-e6ab51cf80ef /boot ext4 defaults,noatime 0 2
# Home(同一加密分区的不同子卷,UUID 相同)
UUID=7b44c5eb-caa0-413b-9b7e-a991e1697465 /home btrfs defaults,noatime,compress=zstd:3,discard=async,space_cache=v2,subvol=@home 0 0
# Swap(独立分区或加密 swap)
UUID=7fb33b5d-4cff-47ff-ab12-7b461b5d6e13 none swap sw 0 0
# EFI(不加密)
UUID=7E91-5869 /efi vfat defaults,noatime,fmask=0022,dmask=0022 0 2常见问题
Q: 为什么不能用 LUKS 容器的 UUID?
A: LUKS 容器保存加密的原始数据,系统无法读取其中的文件系统。必须先解密。解密后的 /dev/mapper/xxx 才有可识别的文件系统和 UUID。
Q: discard=async 在 LUKS 上安全吗?
A: LUKS2 + discard 是安全的。若极度在意安全性,可移除此选项,但会降低 SSD 性能。
7. 内核与固件#
目的
内核负责管理硬件。Gentoo 支持手动裁剪内核,仅保留所需驱动,从而优化性能并减小内核体积。新手也可选择预编译内核快速开始。
7.1 安装固件与微码#
mkdir -p /etc/portage/package.license
# 同意 Linux 固件的授权条款
echo 'sys-kernel/linux-firmware linux-fw-redistributable no-source-code' > /etc/portage/package.license/linux-firmware
# installkernel USE flag 要与你用的引导器对应。择一:
# GRUB → 'sys-kernel/installkernel dracut grub'
# systemd-boot → 'sys-kernel/installkernel dracut systemd systemd-boot'
# Limine / 其他 → 'sys-kernel/installkernel dracut'(引导器手动维护)
echo 'sys-kernel/installkernel dracut grub' > /etc/portage/package.use/installkernel
# systemd-boot 用户还须在首次安装内核前设置内核命令行:
# printf 'root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw quiet\n' > /etc/kernel/cmdline
emerge --ask sys-kernel/linux-firmware
emerge --ask sys-firmware/intel-microcode # Intel CPU
emerge --ask sys-kernel/installkernelpackage.license 说明
前文的 make.conf 示例已设置 ACCEPT_LICENSE="*"。仍为 linux-firmware 单独创建 package.license 文件,原因如下:
- make.conf 是示例:许多用户会按需修改
ACCEPT_LICENSE,例如设为@FREE,仅接受自由软件许可证。 - 独立声明便于维护:package.license 文件明确记录需要特殊许可证的软件包,便于后续维护和审计。
- 保留软件包专用配置:即使全局设为
ACCEPT_LICENSE="*",Gentoo 社区仍建议为特定软件包创建 license 文件。日后调整全局许可证策略时,这可避免意外阻止关键软件包安装。
7.2 快速方案:预编译内核#
emerge --ask sys-kernel/gentoo-kernel-bin
# 若已按旧流程安装内核,执行以下命令重新应用 installkernel 配置:
emerge --ask sys-kernel/installkernel && emerge --ask --config sys-kernel/gentoo-kernel-bin内核升级后,需重新生成引导程序配置。
进阶设置:手动编译内核(点击展开)
提示
编译内核较复杂且耗时。若希望尽快使用 Gentoo,可先跳过本节,使用 7.2 的预编译内核。
手动编译内核可自行控制系统功能和驱动,获得更精简、高效的内核。
快速开始(使用 Genkernel 自动化):
emerge --ask sys-kernel/gentoo-sources sys-kernel/genkernel
eselect kernel list
eselect kernel set <gentoo-sources 对应编号>
genkernel --install all # 自动编译并安装内核、模块和 initramfs
# --install: 编译完成后自动安装到 /boot 目录
# all: 完整构建 (内核 + 模块 + initramfs)8. 基础工具#
目的
Stage3 仅包含最基础的命令。需安装系统日志、网络管理和文件系统工具等组件,系统才能在重启后正常工作。
8.1 系统服务工具#
OpenRC 用户配置(点击展开)
1. 系统日志
可参考:Syslog-ng
emerge --ask app-admin/syslog-ng
rc-update add syslog-ng default2. 定时任务
emerge --ask sys-process/cronie
rc-update add cronie default3. 时间同步
emerge --ask net-misc/chrony
rc-update add chronyd defaultsystemd 用户配置(点击展开)
systemd 已内置日志与定时任务服务,无需额外安装。
时间同步
systemctl enable --now systemd-timesyncd8.2 文件系统工具#
按所用文件系统安装对应工具(必选):
emerge --ask sys-fs/e2fsprogs # ext4
emerge --ask sys-fs/xfsprogs # XFS
emerge --ask sys-fs/dosfstools # FAT/vfat (EFI 分区需要)
emerge --ask sys-fs/btrfs-progs # Btrfs9. 建立用户与权限#
目的
Linux 不建议日常使用 root 账户。请创建普通用户,并授予其使用 sudo 的权限,以提高系统安全性。
将下面的占位符替换为实际用户名;两条命令必须使用相同的用户名:
passwd root # 设置 root 密码
useradd -m -G wheel,video,audio,plugdev <用户名> # 创建用户并加入常用组
passwd <用户名> # 设置用户密码
emerge --ask app-admin/sudo编辑 sudoers 文件,允许 wheel 组用户以 root 身份执行命令:
visudo取消以下行的注释(删除开头的 # ):
%wheel ALL=(ALL:ALL) ALL使用 systemd 时,可按需将用户加入 network、lp 等群组。
10. 安装引导程序#
重要警告:Windows 双系统用户
Windows 更新常会扫描并强制覆盖默认引导路径
/EFI/BOOT/bootx64.efi。 后果:使用该默认路径会导致 Linux 无法启动。 应对方法:
- 使用独立文件名或目录:不要仅将引导程序安装为
bootx64.efi。- 手动注册引导项:使用
efibootmgr将新文件注册到 UEFI 启动列表。下文的 GRUB、systemd-boot 和 Limine 均配置为使用独立路径,可避免此问题。
注:Windows 更新有时还会修改 UEFI 启动顺序(Boot Order)并将 Windows 置顶。发生此情况时,进入 BIOS 重新调整顺序。
10.1 方案 A:GRUB(标准)#
GRUB 功能完备且兼容性好,支持自动检测 Windows。
使用 LUKS 时,必须采用第 3 章 LUKS 分区方案中的未加密独立 /boot;否则 GRUB 无法读取内核。
可参考:GRUB
1. 安装和配置
emerge --ask sys-boot/grub:2
# 安装到 ESP (注意 --bootloader-id=Gentoo 会自动创建独立目录,避免冲突)
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=Gentoo2. 多系统配置(Windows/Linux/其他)
如已安装 Windows 或其他 Linux 发行版,需启用 os-prober 自动发现它们:
emerge --ask sys-boot/os-prober
# 启用 os-prober (默认禁用以保障安全)
echo 'GRUB_DISABLE_OS_PROBER=false' >> /etc/default/grub3. 生成配置
grub-mkconfig -o /boot/grub/grub.cfg(仅限多系统用户)务必检查输出中是否包含 "Found Windows Boot Manager..." 或其他系统的引导项
10.2 方案 B:systemd-boot(简洁)#
systemd-boot(前身为 Gummiboot)轻量且配置简单,适用于 UEFI 系统。
可参考:systemd-boot
1. 安装
systemd 用户: 使用 systemd 版本 >= 254 时,必须启用
bootUSE 标志才能使用bootctl:mkdir -p /etc/portage/package.use echo "sys-apps/systemd boot" >> /etc/portage/package.use/systemd emerge --ask --oneshot --verbose sys-apps/systemd然后安装引导程序并检查引导项:
bootctl --esp-path=/efi install bootctl --esp-path=/efi listOpenRC 用户配置(systemd-utils)— 点击展开
OpenRC 用户需安装
sys-apps/systemd-utils并启用boot和kernel-installUSE 标志:mkdir -p /etc/portage/package.use echo "sys-apps/systemd-utils boot kernel-install" >> /etc/portage/package.use/systemd-utils emerge --ask --oneshot --verbose sys-apps/systemd-utils bootctl --esp-path=/efi install bootctl --esp-path=/efi list
2. 配置加载器
编辑 /efi/loader/loader.conf:
timeout 3
console-mode auto3. 使用 installkernel 管理 Gentoo 引导项
在首次安装内核前,systemd-boot 用户必须在第 7.1 节选择 sys-kernel/installkernel dracut systemd systemd-boot,并将根分区参数写入 /etc/kernel/cmdline。installkernel 会创建 ${ESP}/gentoo/<actual-release>/linux、initrd 及对应的 BLS 引导项。
若已按旧流程安装内核,执行 emerge --ask sys-kernel/installkernel && emerge --ask --config sys-kernel/gentoo-kernel-bin。
4. 多系统配置(Windows)
systemd-boot 会自动检测同一 ESP 分区中的 Windows 引导管理器(/efi/EFI/Microsoft/Boot/bootmgfw.efi),通常无需额外配置。
若 Windows 位于另一块硬盘的 ESP,或自动检测失败,才需手动创建 /efi/loader/entries/windows.conf:
title Windows 11
efi /EFI/Microsoft/Boot/bootmgfw.efi10.3 方案 C:Limine(可定制)#
Limine 支持动态菜单,配置灵活。
可参考:Limine
1. 安装
echo 'sys-boot/limine ~amd64' >> /etc/portage/package.accept_keywords/limine
emerge --ask sys-boot/limine2. 部署引导文件(关键步骤)
为防止 Windows 覆盖,将 Limine 部署为 Gentoo 专用引导项,而非默认的 BOOTX64.EFI。
# 先将已安装的内核和 initramfs 复制到 ESP;随后 ESP 会挂载到 /boot。
ls -1 /boot/vmlinuz-* /boot/initramfs-*
cp -v /boot/vmlinuz-* /boot/initramfs-* /efi/
# 将 /etc/fstab 中 ESP 的挂载点从 /efi 改为 /boot。
vim /etc/fstab
umount /efi
mount /boot
mkdir -p /boot/EFI/Gentoo
cp -v /usr/share/limine/BOOTX64.EFI /boot/EFI/Gentoo/limine.efi
cp -v /usr/share/limine/limine-bios.sys /boot/ # (可选)仅 BIOS 需要3. 配置 Limine
编辑 ESP 上的 /boot/limine.conf。将下列两个占位符替换为前面 ls 输出中属于同一内核版本的完整文件名:
timeout: 5
/Gentoo Linux
protocol: linux
kernel_path: boot():/<vmlinuz-文件名>
module_path: boot():/<initramfs-文件名>
cmdline: root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw
/Windows 11
protocol: efi
path: boot():/EFI/Microsoft/Boot/bootmgfw.efi内核更新后,新的内核和 initramfs 会写入挂载到 /boot 的 ESP。每次更新后、重启前,运行 ls -1 /boot/vmlinuz-* /boot/initramfs-*,并将 kernel_path 和 module_path 更新为匹配的新文件名。
4. 注册 UEFI 引导项
由于未使用默认路径,必须通过 efibootmgr 告诉主板从何处启动 Limine:
emerge --ask sys-boot/efibootmgr
# 创建名为 "Gentoo Limine" 的启动项
# -d: 磁盘设备 (如 /dev/nvme0n1)
# -p: 分区号 (如 1)
# -L: 标签名称
# -l: loader 路径 (Windows 风格斜杠)
efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Gentoo Limine" --loader '\EFI\Gentoo\limine.efi'进阶设置:加密支持(仅限加密用户)— 点击展开
步骤 1:按 init 系统安装 LUKS 依赖
# systemd profile:
mkdir -p /etc/portage/package.use
echo "sys-apps/systemd cryptsetup" >> /etc/portage/package.use/fde
emerge --ask --oneshot sys-apps/systemd sys-kernel/dracut
# OpenRC profile:
emerge --ask sys-fs/cryptsetup sys-kernel/dracut步骤 2:生成含 crypt 模块的 initramfs
编辑 /etc/dracut.conf.d/luks.conf:
注意:请根据你的根文件系统修改
btrfs为xfs或ext4。
# systemd profile:
add_dracutmodules+=" btrfs systemd crypt dm "
# OpenRC profile:
add_dracutmodules+=" btrfs crypt dm "重新生成 initramfs:
# gentoo-kernel-bin:
emerge --ask --config sys-kernel/gentoo-kernel-bin
# Genkernel 或手动内核:
dracut --kver $(make -C /usr/src/linux -s kernelrelease) --force步骤 3:获取 LUKS 分区的 UUID
# 获取 LUKS 加密容器的 UUID(不是里面的文件系统 UUID)
blkid /dev/nvme0n1p4示例输出(查找 TYPE="crypto_LUKS" 所在行):
/dev/nvme0n1p4: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="crypto_LUKS" ...上方 blkid 输出中的 LUKS UUID 要填入后面的各配置文件;请使用自己机器的实际输出,不要照抄示例值。
步骤 4:配置内核引导参数
GRUB (
/etc/default/grub):编辑
/etc/default/grub,将GRUB_CMDLINE_LINUX设为:# 完整示例(替换 UUID 为你的实际 UUID) GRUB_CMDLINE_LINUX="rd.luks.uuid=<LUKS-加密分区UUID> rd.luks.allow-discards root=UUID=<解密后根文件系统UUID> rootfstype=btrfs"
参数:
* rd.luks.uuid=<UUID>:LUKS 加密分区的 UUID(使用 blkid /dev/nvme0n1p4 获取)。
* rd.luks.allow-discards:允许 SSD TRIM 指令穿透加密层(提升 SSD 性能)。
* root=UUID=<UUID>:解密后的根文件系统 UUID(使用 blkid /dev/mapper/cryptroot 获取)。
* rootfstype=btrfs:请根据实际情况修改(例如 xfs, ext4)。
修改后运行 grub-mkconfig -o /boot/grub/grub.cfg。
systemd-boot:
printf 'rd.luks.name=<LUKS-加密分区UUID>=cryptroot root=/dev/mapper/cryptroot rootfstype=btrfs rd.luks.allow-discards\n' > /etc/kernel/cmdline emerge --ask --config sys-kernel/gentoo-kernel-bin
参数:
* rd.luks.name=<LUKS-UUID>=cryptroot:指定 LUKS 分区 UUID 并映射为 cryptroot。
* root=/dev/mapper/cryptroot:指定解密后的根分区设备。
* rootfstype=btrfs:请根据实际情况修改(例如 xfs, ext4)。
Limine(
limine.conf):/Gentoo Linux protocol: linux kernel_path: boot():/<vmlinuz-文件名> module_path: boot():/<initramfs-文件名> cmdline: rd.luks.name=<LUKS-加密分区UUID>=cryptroot root=/dev/mapper/cryptroot rootfstype=btrfs rd.luks.allow-discards
参数:
rd.luks.name:同上,指定 LUKS 分区 UUID。root:指定解密后的根分区设备。rootfstype=btrfs:请按实际情况修改,例如xfs、ext4。
仅在第 3 节的加密分区流程中选择 LUKS 时,才需要执行此步骤。
11. 完成安装#
11.1 最终检查清单#
emerge --info正常执行无错误/etc/fstab中的 UUID 正确(使用blkid再确认)- 已设定 root 与一般用户密码
- 已执行
grub-mkconfig或完成bootctl/Limine 配置 - 若使用 LUKS,确认 initramfs 含有
cryptsetup
11.2 退出 chroot 并重启#
确认无误后,退出 chroot 并卸载挂载点:
exit
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
swapoff -a
reboot下一步:桌面配置






