之前笔者提到过gentoo。这个操作系统,非常的硬核。但是,它缺点意思,你编译Linux,最终还是要用到Linux系统或虚拟机,还是要去网上下载已经编译好的Linux系统的ISO文件。而且,这个gentoo的stage1甚至还失传了,大概从十年前开始,大家再也体会不到编译gentoo系统的乐趣了,因此,gentoo存在的意义也少了一大半!gentoo社区也走向凋敝。
所以,我找到了让(我这样的)新人也能体会到gentoo乐趣的玩法!
关于gentoo的自举,我已经写过了。今天的教程有一点点不一样,我是用live-bootstrap启动的系统来自举gentoo的。本来还担心没法成功,但是我已经在虚拟机上成功测试了,最终可以完整安装最新版的gentoo!
前提条件
- 根据笔者的这篇教程,在虚拟机完成了Linux系统从无到有的编译。
也可以在裸机上执行,但要小心数据丢失。本文如果要安装gentoo,你至少要准备2块闲置硬盘,一块给live-bootstrap,一块给gentoo。 - 根据笔者的这篇教程,编译出linux64位版本4.14的内核,并且启动这个内核。
- 从https://archive.org/download/gentoo-bootstrap-2025.8/distfiles.tar 下载所有gentoo自举所需软件,并解压到自举系统的
/external/sources目录。你可以使用curl命令下载。
自举gentoo
基本上根据这个教程来进行https://mid-kid.root.sx/git/mid-kid/bootstrap/src/branch/master/gentoo-2025.8/gentoo.txt ,中间有些步骤需要极少量变通。
安装dropbear(简易SSH服务端)
这个步骤强烈建议执行,在交叉编译内核之前就执行。之后的命令和配置文件可以全部通过另一台电脑进行复制粘贴来输入,否则手动配置编译极容易出错,还浪费时间。
- 在https://dropbear.nl 下载dropbear的代码,并进行校验。这里需要手动输入
curl -L -O命令来进行下载 - 解压代码后,用
./configure --prefix=/usr --sbindir=/usr/bin --disable-harden --disable-utmp --disable-utmpx --disable-wtmp --disable-wtmpx && make -j($nproc) && make install来安装dropbear - dropbear启动前还必须满足一些条件。首先挂载
devpts:mkdir -p /dev/pts; mount -t devpts devpts /dev/pts(每次重启都必须执行该命令)。再创建配置文件位置mkdir /etc/dropbear。 - 设置root密码
- 启动dropbear
dropbear -R -e - 用curl访问你的迷你网页服务器,找到自举系统的IP地址(该系统没有
ping和ip addr)。从你的Windows宿主机或另一台电脑使用ssh登录该系统。
顺利的话应该是秒开,起始位置为root的用户目录,也就是/root。
开始gentoo编译流程
首先挂载代码目录
1 | mount --bind /external/disfiles /var/cache/distfiles |
然后根据教程https://mid-kid.root.sx/git/mid-kid/bootstrap/src/branch/master/gentoo-2025.8/gentoo.txt 开始自举,其中可以省略下载代码的步骤。只要下载了https://archive.org/download/gentoo-bootstrap-2025.8/distfiles.tar ,下面的编译步骤都可以隔绝网络进行。
其中,自举系统没有rsync等指令,所有退回宿主系统的步骤都需要变通执行,因为这时候没有宿主系统。这里我建议挂载代码目录
1 | mount --bind /external/distfiles /target/var/cache/distfiles |
直到最后chroot进/target目录,运行了
1 | emerge -e @world |
更新stage3文件
1 | emerge-webrsync |
本步骤的时间不亚于编译gentoo-stage3的所有步骤的总和
打包stage3文件
首先,确保更新完整后,解除所有代码目录的挂载,以节省空间和时间。
然后,在stage3的chroot环境内,执行如下代码
1 | tar -cvpjf stage3-amd64-openrc-20260628.tar.xz --exclude=/stage3-amd64-openrc-20260628.tar.xz --one-file-system --xattrs-include='*.*' --numeric-owner / |
文件名stage3-amd64-openrc-20260628.tar.xz你可以自行修改,整行命令中有2处要改!
打包完成后,你就有了完全属于自己编译的stage3!理论上,每个人每台电脑编译出的stage3都应该是一模一样的,差别只跟时间有关,每天的gentoo仓库都是不同的。
安装gentoo
为了验证,需要完整安装一遍gentoo。
**理论上,**你可以在登录ssh的前提下,进行原地替换安装https://wiki.gentoo.org/wiki/User:Jbara/Installing_Gentoo_on_Free_Oracle_VPS ,但是你要删除更多自举有用的无用文件,而且linux-4.14无模块内核,还不知道是否支持重启。因此,我不建议你原地替换安装。
本文只讲安装gentoo的大概步骤,官方手册已有的不再赘述!
第二块硬盘的分区、格式化与挂载
live-bootstrap里面不含cfdisk,而fdisk都不能进行gpt分区。
你可以老老实实安装只能BIOS启动的gentoo。但是,最终也可以安装可以UEFI启动的Linux系统!
live-bootstrap没有且难以安装arch-chroot命令,因此,你还是得需要mount和chroot来进行容器化。
首先,你还是容器化chroot进/target,这时,你会发现,你可以使用lsblk、cfdisk和可以gpt分区的fdisk了!
当然,cfdisk还是只有在ssh界面下,并正确配置TERM环境变量以后才能使用。
容器内外,其实只有内核是一样的,库都是gentoo的。
不仅能正确使用cfdisk,你还可以安装dosfstools,用来把EFI分区格式化为FAT32。但是,你无法挂载EFI分区,以及在上面安装GRUB。
因此,我建议,你还是使用GPT分区,但是做一些微小的调整。首先,照常分区为
| 分区 | 大小 | 备注 |
|---|---|---|
| sdb1 | 1G | EFI分区 |
| sdb2 | 10G | swap分区 |
| sdb3 | 剩下全部 | Linux根目录 |
然后swap分区Resize为10239M,你多出来的1M空间,再建一个分区sda4,类型改为BIOS分区,并且不要格式化!
注意⚠:在
cfdisk中,不要被分区顺序所迷惑,修改类型时不要改错分区!
新系统安装
live-bootstrap系统中不含/mnt,需自行创建。
将/dev/sdb3挂载后,按照官方教程中的命令解压stage3压缩包到/mnt或/mnt/gentoo。根据官方教程,你可以将profile切换为systemd,也可以待安装结束后,启动进入新系统之后再切换systemd。
最后你会发现,linux内核还是可以编译的。
安装grub
有了BIOS分区,你可以将这块硬盘当作MBR硬盘执行
1 | grub-install /dev/sdb |
安装后
安装完成后,你可以在这个新gentoo系统中做任何事,因为这就是一个完整的,官方的gentoo系统。
第一次启动,你还是得BIOS启动进入。但是你可以格式化sda1并安装grub了。为防止报错,你的grub-install建议带上--removable参数。重启成功后,再不带--removable执行一遍。
这其中的原理就是,grub-install不仅安装efi文件,还会在主板上写入启动记录。但是加上--removable以后,主板可以把它当作一个安装盘进行UEFI启动。
如果VMWare无法启动,你可以进入固件,选择Boot from a file,启动gentoo,并重新执行grub-install即可修复。
由此可知,gentoo是最好的发行版,从源码编译,并且功能比LFS完整,还有包管理器让人免于依赖地狱!即使包管理器里没有收录你要的软件,或者还未来得及收录最新版本软件(就比如需要修复CVE零日漏洞),也可以自行编译或安装二进制(NixOS不能在不打包的情况下做到这一点)。
它的包管理器portage也可以给其他系统使用(兼容性不如nix就是)。