Gentoo没有“一键安装基础环境”,stage3是预编译的最小根文件系统快照,解压即用;选错或跳过将导致chroot失败或emerge报错。

直接说结论:Gentoo 没有“一键安装基础环境”这回事,stage3 就是它的基础环境——不是安装包,而是预编译好的最小根文件系统快照,解压即用。跳过这步或选错 stage3,后续所有操作都会卡在 chroot 失败或 emerge 报错。
怎么选对 stage3 文件
选错 stage3 是新手最常踩的坑,错误现象包括:chroot 后 bash 找不到、emerge 报 command not found、gcc 版本与 glibc 不兼容。
- 先确认 CPU 架构:
uname -m(常见是x86_64,别选amd64目录下的arm64或ppc) - 决定 init 系统:要
systemd就选文件名含systemd的,如stage3-amd64-systemd-*.tar.xz;要OpenRC就选含openrc的 - 国内推荐镜像源:
https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/,别用官网默认链接(太慢且易 404) - 别下
hardened版,除非你明确需要 SELinux/Mandatory Access Control——它会默认禁用部分编译器特性,导致很多包编译失败
tar 解压时必须加的三个参数
只用 tar -xf 解压 stage3,大概率进不了 chroot:设备节点丢失、扩展属性损坏、UID/GID 错乱,ls /dev 可能为空,mount 会报 Operation not permitted。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
--xattrs-include='*.*':保留 SELinux/AppArmor 扩展属性(即使不用,也得带,否则 Portage 后续校验失败) -
--numeric-owner:强制按 tar 包内记录的 UID/GID 解压,避免 Live 环境用户 ID 冲突 -
-C /mnt/gentoo:指定解压目标目录,且确保该目录已存在、为空、挂载点正确 - 完整命令:
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt/gentoo
chroot 前必须挂载的虚拟文件系统
没挂全就 chroot,进去后 ps 看不到进程、ls /proc 是空的、emerge 无法读取网络、udev 设备节点不生成——这不是 Portage 故障,是内核接口没接通。
-
mount -t proc /proc /mnt/gentoo/proc(必须,否则/proc不可用) -
mount --rbind /sys /mnt/gentoo/sys && mount --make-rslave /mnt/gentoo/sys(--rbind和--make-rslave缺一不可,否则systemd启动失败) -
mount --rbind /dev /mnt/gentoo/dev && mount --make-rslave /mnt/gentoo/dev(同上,--make-rslave防止子挂载污染) - 别漏
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/,否则chroot后ping不通、wget失败
chroot 后第一件事不是编译内核
很多人 chroot 成功就冲去 emerge gentoo-sources,结果卡在 sync 失败或 genkernel 找不到 gcc——因为 Portage 数据库还没拉,make.conf 还是默认空配置。
- 先运行
emerge-webrsync(比emerge --sync更快更稳,适合首次同步) - 再执行
eselect profile list确认 profile 是否匹配你选的stage3(比如systemd对应default/linux/amd64/23.0/systemd) - 编辑
/etc/portage/make.conf:至少设CHOST(x86_64-pc-linux-gnu)、CFLAGS(别写-O3,-O2更稳)、MAKEOPTS(-j$(nproc)) - 最后才跑
emerge -av sys-kernel/gentoo-sources,别跳步骤
真正麻烦的从来不是命令敲错,而是某个挂载漏了、某个参数少写了、某个 profile 没对齐——这些错误不会立刻报错,但会在几小时后的内核编译或首次启动时突然爆发。盯着 blkid 输出的 UUID、mount 的挂载列表、eselect profile show 的结果,比盲目重试高效得多。

















