现在gentoo的官网,上面只能找到如何使用stage3来安装系统,那stage1和stage2去哪了?
这个东西,其实我在十年前的暗网上看到过,现在也没印象了。当时说是要想登录“马里亚纳网络”,就必须得使用gentoo。点进链接就是说从stage1开始编译系统。

我业余时间在网上搜了好几天,都说这个stage1和stage2费时费力,并且“没有任何教学意义”,所以“Gentoo发行工程团队”就把它删掉了,以后开发也用不上它了。所以就这么失传了
???

最近一次见到stage1还是用gentoo-prefix的时候。编译的时候它会显示目前处于stage1~stage3。Gentoo Prefix是官方宣称的在其它系统使用portage的最佳方案。
这真的确实,是这样的。不过经过官方测试,红帽系列(CentOS)运行prefix脚本必定失败;我测试下来,Arch Linux运行脚本也必定失败。
我在这里强烈不建议读者去测试,因为每次测试,它至少要编译3次gcc!

那么用Gentoo Prefix编译出一个stage文件可以吗?答案也是不可以,因为它的动态链接库自带前缀,完全没法chroot运行。

系统要求

最小:4核8G
推荐:AMD 64核 线程撕裂者,内存越大越好

警告⚠:笔者使用了20核进行编译,总共花费大约6小时

stage1在哪里?

经过我在网上没日没夜地搜索,找到了一个前gentoo社区成员发布的stage1文件,地址在这https://gentoofan.org 。按照Gentoo官网的文档解压后,arch-chroot进去,再qlist -I,就会发现它是用portage安装100多个软件组成的。
所以说,要生成stage1其实很简单,在gentoo官方的portage软件仓库里,有一个packages.buildGitHub上在这)文件。它的注释写得很清楚

Copyright 1999-2024 Gentoo Authors
Distributed under the terms of the GNU General Public License v2

This file describes the packages needed to build a stage1 based on this
profile. Packages in this file are built in order.

意思是stage1正是由这些软件包组成的。

所以,现代获取stage1的方式就是,找一台运行完整gentoo的机器,或者直接官网下载stage3,arch-chroot即可。先把packages.build复制出来,把注释和空白行删掉。然后运行

1
USE="build -openmp -nls" ROOT="/mnt/gentoo" emerge -av1 $(cat packages.build)

这时,你就会发现,它安装依赖和软件包,跟https://gentoofan.org 上下载的差不多。这就是stage1,带所有权和属性打包后,就是stage1文件。

stage2在哪里?

这个操作就很简单了,但是时间依然要花不少。
执行软件仓库中的脚本。顺利完成后就是stage2。
执行bootstrap.sh有几个坑
首先,应该先执行

1
./bootstrap.sh -f

先下载文件,同时检查依赖。不建议不带-f边下载边安装,因为用我上一节方法安装的stage1和https://gentoofan.org 下载的stage1执行脚本,必定会出现依赖问题。你需要做的就是把提示的软件给手动emerge安装一遍。
顺利跑完仅下载模式,再进行编译。

1
./bootstrap.sh

stage3是怎样炼成的

顺利跑完上一节的代码后,运行

1
emerge -ave @system

如果有问题,先重新编译一遍gcc emerge -av1 gcc
建议时间充裕时运行,不建议多次中断。因为它必须重复安装大量软件(截至目前,gentoo需要编译安装300个软件包)。