上回说到,Gentoo Prefix可以(理论上)让你在任何机器上使用portage,其实,有很多gentoo功能是不能使用的。首先,你不能在不完整的gentoo上安装二进制包(FEATURES=" getbinpkg "),prefix上也别这么做,否则会在安装过程中报错。其次,还有很多软件无法使用。用途最明显的就是gentoo prefix的wine不错,这似乎是arch linux也做不到的事情。
但是,叫它编译一个完整的stage文件就做不到了。

因此,我尝试了爆改Gentoo Prefix的脚本,也无济于事。
直到我搜索了……

Gentoo Full Source Bootstrap

这个脚本就在官方的Gentoo Wiki里面,似乎未写完,要鸽不鸽的样子。地址:https://wiki.gentoo.org/wiki/Full_Source_Bootstrap
里面引用了一个网站,写了个脚本,旧版的似乎不顶用了,应该看看新版的https://mid-kid.root.sx/git/mid-kid/bootstrap/src/branch/master/gentoo-2025.8/gentoo.txt
这个脚本亲测可用!建议所有读者下载!如果作者删了,详见互联网档案馆
同时,我也导出了该作者的git点击查看
或者,我将代码贴在此处

点击展开代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
# vim:set ft=sh:

# Distfiles mirror:
# https://archive.org/download/gentoo-bootstrap-2025.8/distfiles.tar/

# Changelog:
# - 2025.8:
# - Set up a proper gentoo install using prefix, by building a bunch of tools
# in a temporary prefix, and then cross-compiling a final prefix.
# - Use crossdev to build the final system.
# - Both of these changes make the instructions significantly more
# future-proof, although there's still a lot of bugs to fix upstream, and
# ways to lessen the amount of compilation needed.
# - 2025:
# - Upstreamed portage patch
# - Cross-compile all packages in packages.build for the profile
# (this simplifies the steps afterwards significantly)
# - Pin to GCC 13 (gcc 14 isn't working...)
# - Future proofing by ignoring HTTPs certificates
# (portage verifies the checksums anyway)
# - Avoid using wget (need to set FETCHCOMMAND anyway...)
# - Future proofing by not hardcoding a python version
# - 2024.8:
# - Rewrite bootstrap to avoid using LFS
# - Pin the repository version
# - 2024:
# - Initial version

# Overview of bootstrap:
# step 0: Build live-bootstrap as a starting point
# step 1: Install a temporary copy of portage to /tmp/portage
# step 2: Setup a prefix-guest using the live-bootstrap toolchain, build a few additional tools
# step 3: Set up a target prefix, build glibc, and a cross compiler targetting it
# step 4: Build portage and necessary utilities for the target prefix
# step 5: Switch to it and emerge the rest of @world
# step 6: Install crossdev and build the final system

# Build live-bootstrap
git clone https://github.com/fosslinux/live-bootstrap
git -C live-bootstrap checkout 63b24502c7e5bad7db5ee1d2005db4cc5905ab74
git -C live-bootstrap submodule update --init --recursive --depth=1 --progress
cd live-bootstrap
python3 -m venv env
env/bin/pip install -U --no-binary :all: pip
env/bin/pip install -v --no-binary :all: requests
./download-distfiles.sh
#sudo -s # if not root already
umask 022
env/bin/python ./rootfs.py -c --external-sources --cores $(nproc) -m ''
umount target/dev/shm # double mounted?
umount target/dev/shm target/sys target/proc target/tmp

# Optional: Back up the system
rm -r target/dev/* # allow extracting as non-root
env -i chroot target tar --exclude='/external' --sort=name -cf /target.tar /
env -i chroot target bzip2 -9v /target.tar
mv target/external/repo .
mv target/target.tar.bz2 .
rm -rf target/external

# Optional: Keep distfiles in one place
mkdir -p target/var/cache/distfiles
mount --bind distfiles target/var/cache/distfiles

# Chroot into the live-bootstrap system
cd target
mount -t proc proc proc
mount -t sysfs sysfs sys
mount -t devtmpfs devtmpfs dev
mount -t devpts devpts dev/pts
env -i TERM="$TERM" chroot . /bin/bash -l

umask 022
source /steps/env
cd /tmp

# Optional: Configure additional mirrors for missing/removed distfiles
# This is a space-separated list of URLs, but full paths to local directories
# can be added as well.
export GENTOO_MIRRORS="/mirror http://distfiles.gentoo.org"

mkdir -p /var/cache/distfiles; cd /var/cache/distfiles
curl -LO http://gitweb.gentoo.org/proj/portage.git/snapshot/portage-3.0.68.tar.bz2
curl -LO http://distfiles.gentoo.org/snapshots/squashfs/gentoo-20250801.xz.sqfs
curl -LO https://github.com/plougher/squashfs-tools/archive/refs/tags/4.7.2/squashfs-tools-4.7.2.tar.gz
cd /tmp
# TODO: gentoo currently uses squashfs-tools-4.7, but that fails to build, upgraded to 4.7.2

# Build squashfs-tools to extract the ::gentoo tree
# TODO: Include in live-bootstrap proper
tar xf /var/cache/distfiles/squashfs-tools-4.7.2.tar.gz
cd squashfs-tools-4.7.2
make -C squashfs-tools install \
INSTALL_PREFIX=/usr \
LZO_SUPPORT=0 LZ4_SUPPORT=0 ZSTD_SUPPORT=0
cd ..
rm -rf squashfs-tools-4.7.2

# Make some additional root modifications
cp /usr/include/asm-generic/mman.h /usr/include/asm # needed by dev-libs/openssl

# Unpack the ::gentoo tree
unsquashfs /var/cache/distfiles/gentoo-20250801.xz.sqfs
mkdir -p /var/db/repos
rm -rf /var/db/repos/gentoo
mv squashfs-root /var/db/repos/gentoo

# Install temporary copy of portage
tar xf /var/cache/distfiles/portage-3.0.68.tar.bz2
ln -sfT portage-3.0.68 portage

# Add portage user/group
echo 'portage:x:250:250:portage:/var/tmp/portage:/bin/false' >> /etc/passwd
echo 'portage::250:portage' >> /etc/group

# Create cross repository
mkdir -p /var/db/repos/cross/profiles
echo cross > /var/db/repos/cross/profiles/repo_name
mkdir -p /var/db/repos/cross/metadata
printf '%s\n' 'masters = gentoo' 'thin-manifests = true' \
> /var/db/repos/cross/metadata/layout.conf
mkdir -p /var/db/repos/cross/cross-base
ln -sfT /var/db/repos/gentoo/sys-devel/binutils /var/db/repos/cross/cross-base/binutils
ln -sfT /var/db/repos/gentoo/sys-devel/gcc /var/db/repos/cross/cross-base/gcc
mkdir -p /var/db/repos/cross/cross-base/glibc
printf '%s\n' EAPI=8 SLOT=0 KEYWORDS='"*"' > /var/db/repos/cross/cross-base/glibc/glibc-0.ebuild

# Register i686-cross-linux-gnu toolchain
echo cross-i686-cross-linux-gnu >> /var/db/repos/cross/profiles/categories
ln -sfT cross-base /var/db/repos/cross/cross-i686-cross-linux-gnu

# Configure prefix for host tools
mkdir -p /cross/etc/portage/make.profile
cat > /cross/etc/portage/make.profile/make.defaults << 'EOF'
FETCHCOMMAND="curl -k --retry 3 -y 60 --ftp-pasv -o \"\${DISTDIR}/\${FILE}\" -L \"\${URI}\""
RESUMECOMMAND="curl -C - -k --retry 3 -y 60 --ftp-pasv -o \"\${DISTDIR}/\${FILE}\" -L \"\${URI}\""
FEATURES="-news -sandbox -usersandbox -pid-sandbox -ipc-sandbox -network-sandbox -parallel-fetch"
BINPKG_COMPRESS=bzip2
CLEAN_DELAY=0

ARCH=x86
ACCEPT_KEYWORDS="$ARCH"
CHOST=i686-unknown-linux-musl
IUSE_IMPLICIT="prefix prefix-guest kernel_linux elibc_musl elibc_glibc sparc m68k alpha amd64 x86"
USE="prefix prefix-guest kernel_linux elibc_musl x86 python_targets_python3_13"

C_INCLUDE_PATH="$EROOT/usr/include"
CPLUS_INCLUDE_PATH="$EROOT/usr/include"
LIBRARY_PATH="$EROOT/usr/lib"
PKG_CONFIG_PATH="$EROOT/usr/lib/pkgconfig:$EROOT/usr/share/pkgconfig"
LDFLAGS="-Wl,--disable-new-dtags,-rpath,$EPREFIX/usr/lib"
EOF
cat > /cross/etc/portage/repos.conf << 'EOF'
[cross]
location = /var/db/repos/cross
EOF
cat > /cross/etc/portage/package.use << 'EOF'
dev-lang/perl minimal
dev-libs/libxml2 -python
sys-apps/file -seccomp
sys-apps/util-linux -su
cross-i686-cross-linux-gnu/gcc -sanitize -fortran openmp
EOF
cat > /cross/etc/portage/package.mask << 'EOF'
sys-devel/binutils
sys-devel/gcc
EOF
cat > /cross/etc/portage/make.profile/package.provided << 'EOF'
sys-devel/binutils-2.27
sys-devel/gcc-6.2
app-arch/xz-utils-0
EOF
mkdir -p /cross/etc/portage/env/cross-i686-cross-linux-gnu
cat > /cross/etc/portage/env/cross-i686-cross-linux-gnu/gcc << '_EOF'
EXTRA_ECONF='--with-sysroot=/gentoo'
post_src_install() {
cat > "$ED/usr/lib/gcc/$CTARGET/specs" << 'EOF'
*link:
+ %{!shared:%{!static:%{!static-pie:-dynamic-linker %{m64|mx32:;:/gentoo/lib/ld-linux.so.2}%{m64:/gentoo/lib64/ld-linux-x86-64.so.2}%{mx32:/gentoo/libx32/ld-linux-x32.so.2}}}}
EOF
}
_EOF
mkdir -p /cross/etc/portage/env/dev-lang
cat > /cross/etc/portage/env/dev-lang/python << 'EOF'
pre_src_prepare() {
sed -i 's/\[MULTIARCH=\$(.*\]/[MULTIARCH=]/' configure.ac || die
}
EOF
mkdir -p /cross/etc/portage/env/dev-build
echo 'CFLAGS=-std=c17' > /cross/etc/portage/env/dev-build/make

# TODO: Upgrade to findutils 4.9 for portage, and add pax-utils for "scanelf". Both of these are required by portage's `estrip`

# Initialize environment
PORTAGE_OVERRIDE_EPREFIX=/cross ./portage/bin/emerge -D1n sys-apps/baselayout
echo 'PATH=/usr/bin' > /cross/etc/env.d/99host
PORTAGE_OVERRIDE_EPREFIX=/cross ./portage/bin/env-update
mkdir -p /cross/bin
ln -sf /bin/sh /cross/bin # Required by sys-devel/gcc
ln -sf /bin/bash /cross/bin # Required by eautoreconf

# Build tools missing from/broken in live-bootstrap
# TODO: Include in live-bootstrap proper
PORTAGE_OVERRIDE_EPREFIX=/cross MAKEOPTS=-j1 ./portage/bin/emerge -D1n dev-build/make # make in live-bootstrap has trouble with parallel builds under portage
PORTAGE_OVERRIDE_EPREFIX=/cross ./portage/bin/emerge -D1n net-misc/rsync # https://bugs.gentoo.org/963902

# Configure target prefix
mkdir -p /gentoo/etc/portage
ln -sfT /var/db/repos/gentoo/profiles/default/linux/x86/23.0/i686/prefix/kernel-3.2+ /gentoo/etc/portage/make.profile
cat > /gentoo/etc/portage/make.conf << 'EOF'
FETCHCOMMAND="curl -k --retry 3 -y 60 --ftp-pasv -o \"\${DISTDIR}/\${FILE}\" -L \"\${URI}\""
RESUMECOMMAND="curl -C - -k --retry 3 -y 60 --ftp-pasv -o \"\${DISTDIR}/\${FILE}\" -L \"\${URI}\""
FEATURES="-news -sandbox -usersandbox -pid-sandbox -ipc-sandbox -network-sandbox -parallel-fetch"
BINPKG_COMPRESS=bzip2
CLEAN_DELAY=0

PORTDIR=/var/db/repos/gentoo
DISTDIR=/var/cache/distfiles
PORTAGE_TMPDIR=/var/tmp

CHOST=i686-cross-linux-gnu
ACCEPT_KEYWORDS="-~$ARCH"
USE=-nls
INSTALL_MASK=/etc/env.d/99host
EOF
mkdir -p /gentoo/etc/portage/profile
cat > /gentoo/etc/portage/profile/package.use << 'EOF'
sys-devel/gcc -sanitize -fortran
app-arch/gzip pic
EOF
cat > /gentoo/etc/portage/profile/package.accept_keywords << 'EOF'
~net-misc/curl-8.15.0 # Fix bug that prevents --ftp-pasv from working
EOF
cat > /gentoo/etc/portage/bashrc << 'EOF'
if [ "$CBUILD" = i686-unknown-linux-musl ]; then
export BUILD_CFLAGS="-I$BROOT/usr/include"
export BUILD_LDFLAGS="-L$BROOT/usr/lib -Wl,--disable-new-dtags,-rpath,$BROOT/usr/lib"
export PKG_CONFIG_LIBDIR="$EROOT/usr/lib/pkgconfig:$EROOT/usr/share/pkgconfig"
export PKG_CONFIG_SYSTEM_INCLUDE_PATH="$EROOT/usr/include"
export PKG_CONFIG_SYSTEM_LIBRARY_PATH="$EROOT/lib:$EROOT/usr/lib"
export CONFIG_SITE="$EROOT/etc/portage/config.site"
fi
EOF
cat > /gentoo/etc/portage/config.site << 'EOF'
ac_cv_file__dev_ptmx=yes # dev-lang/python
ac_cv_file__dev_ptc=no # dev-lang/python
gl_cv_func_strcasecmp_works=yes # sys-apps/diffutils
EOF
mkdir -p /gentoo/etc/portage/env/dev-lang
cat > /gentoo/etc/portage/env/dev-lang/python << '_EOF'
if [ "$CBUILD" = i686-unknown-linux-musl ]; then
pre_src_prepare() {
sed -i 's/\[MULTIARCH=\$(.*\]/[MULTIARCH=]/' configure.ac || die
}
fi
_EOF

# Initialize prefix
PORTAGE_OVERRIDE_EPREFIX=/gentoo USE=build ./portage/bin/emerge -D1n sys-apps/baselayout
echo 'man:x:13:15:System user; man:/dev/null:/sbin/nologin' >> /gentoo/etc/passwd
echo 'man:x:15:' >> /gentoo/etc/group
# TODO: The acct-user and acct-group should create the groups honestly

# Build libc and adapt compiler for target prefix
# Usually, CC and CXX should be the CHOST compilers, to cross compile. However, they're compatible enough here.
# Using --nodeps because the live-bootstrap environment is guaranteed to provide enough to build glibc
PORTAGE_OVERRIDE_EPREFIX=/cross PORTAGE_CONFIGROOT=/gentoo EPREFIX=/gentoo CBUILD=i686-unknown-linux-musl CC=i686-unknown-linux-musl-gcc CXX=i686-unknown-linux-musl-g++ BOOTSTRAP_RAP=y ./portage/bin/emerge -O1n sys-kernel/linux-headers
PORTAGE_OVERRIDE_EPREFIX=/cross PORTAGE_CONFIGROOT=/gentoo EPREFIX=/gentoo CBUILD=i686-unknown-linux-musl CC=i686-unknown-linux-musl-gcc CXX=i686-unknown-linux-musl-g++ BOOTSTRAP_RAP=y ./portage/bin/emerge -O1n sys-libs/glibc
PORTAGE_OVERRIDE_EPREFIX=/cross ./portage/bin/emerge -D1n cross-i686-cross-linux-gnu/glibc # Dummy package to use proper flags in gcc
PORTAGE_OVERRIDE_EPREFIX=/cross ./portage/bin/emerge -D1n cross-i686-cross-linux-gnu/binutils # TODO: cross-gcc doesn't depend on the right binutils
PORTAGE_OVERRIDE_EPREFIX=/cross ./portage/bin/emerge -D1n cross-i686-cross-linux-gnu/gcc

# Build compiler and initial tools for prefix
PORTAGE_OVERRIDE_EPREFIX=/cross ./portage/bin/emerge -D1n sys-libs/ncurses # https://bugs.gentoo.org/963660
PORTAGE_OVERRIDE_EPREFIX=/cross ./portage/bin/emerge -D1n dev-lang/python # TODO: dev-util/re2c requires dev-lang/python
PORTAGE_OVERRIDE_EPREFIX=/cross PORTAGE_CONFIGROOT=/gentoo EPREFIX=/gentoo CBUILD=i686-unknown-linux-musl USE=build ./portage/bin/emerge -D1n \
app-alternatives/awk \
app-alternatives/gzip \
app-shells/bash \
dev-build/make \
sys-apps/coreutils \
sys-apps/diffutils \
sys-apps/grep \
sys-apps/portage \
sys-apps/sed \
sys-devel/binutils \
sys-devel/gcc \
sys-devel/patch

# Finalize prefix
/gentoo/usr/bin/emerge -DUu @world
/gentoo/usr/bin/emerge -c

# Optional: Back up
tar --sort=name -cf /gentoo.tar /gentoo
bzip2 -9v /gentoo.tar

# Create a cross compiler
/gentoo/usr/bin/emerge -Dn sys-devel/crossdev app-eselect/eselect-repository sys-apps/shadow
( . /gentoo/etc/profile; eselect repository create crossdev )
mkdir -p /gentoo/etc/portage/profile/package.use.mask
printf 'cross-x86_64-pc-linux-gnu/%s -multilib cet\n' linux-headers glibc binutils gcc gdb > /gentoo/etc/portage/profile/package.use.mask/cross-x86_64-pc-linux-gnu.multilib
( . /gentoo/etc/profile; crossdev -A 'amd64 x86' -S -P -v x86_64-pc-linux-gnu )

# Configure new system
( . /gentoo/etc/profile; PORTAGE_CONFIGROOT=/gentoo/usr/x86_64-pc-linux-gnu eselect profile set --force default/linux/amd64/23.0 )
( m=/gentoo/usr/x86_64-pc-linux-gnu/etc/portage/make.conf; \
test -f "$m" && mv "$m" "$m.tmp" && mkdir "$m" && mv "$m.tmp" "$m/0100_crossdev.conf" )
cat > /gentoo/usr/x86_64-pc-linux-gnu/etc/portage/make.conf/1000_make.conf << 'EOF'
FEATURES="$FEATURES -news -sandbox -usersandbox -pid-sandbox -ipc-sandbox -network-sandbox -parallel-fetch"
PORTDIR=/var/db/repos/gentoo
DISTDIR=/var/cache/distfiles

ACCEPT_KEYWORDS="-~$ARCH"
CONFIG_SITE=/gentoo/usr/share/config.site # Needed because --prefix for target != /gentoo/usr
EOF
cat > /gentoo/usr/x86_64-pc-linux-gnu/etc/portage/bashrc << 'EOF'
export SOURCE_DATE_EPOCH=315532800 # 1980-01-01, because 0 is too old for zip files (e.g. python wheels)
EOF
mkdir -p /gentoo/usr/x86_64-pc-linux-gnu/etc/portage/env/dev-libs
cat > /gentoo/usr/x86_64-pc-linux-gnu/etc/portage/env/dev-libs/libassuan << 'EOF'
# https://bugs.gentoo.org/962780
export GPGRT_CONFIG="$ESYSROOT/usr/bin/$CHOST-gpgrt-config"
EOF
cat > /gentoo/usr/x86_64-pc-linux-gnu/etc/portage/env/dev-libs/libgcrypt << 'EOF'
# https://bugs.gentoo.org/963810
export GPGRT_CONFIG="$ESYSROOT/usr/bin/$CHOST-gpgrt-config"
EOF
cat > /gentoo/usr/x86_64-pc-linux-gnu/etc/portage/env/dev-libs/libksba << 'EOF'
# https://bugs.gentoo.org/963811
export GPGRT_CONFIG="$ESYSROOT/usr/bin/$CHOST-gpgrt-config"
EOF

# Work around an ebuild bug
ln -s /gentoo/lib/ld-linux.so.2 /lib # https://bugs.gentoo.org/962756

# Cross compile the new system
( . /gentoo/etc/profile; USE=build x86_64-pc-linux-gnu-emerge -D1n sys-apps/baselayout )
( . /gentoo/etc/profile; x86_64-pc-linux-gnu-emerge -DUu @world )

# Create final rootfs
( . /gentoo/etc/profile; ROOT=/target USE=build x86_64-pc-linux-gnu-emerge -KDU1n sys-apps/baselayout )
( . /gentoo/etc/profile; ROOT=/target x86_64-pc-linux-gnu-emerge -KDUu @world )

# Set up final system
mkdir -p /target/etc/portage
ln -sfT ../../var/db/repos/gentoo/profiles/default/linux/amd64/23.0 /target/etc/portage/make.profile
echo 'nameserver 1.1.1.1' > /target/etc/resolv.conf
echo 'C.UTF8 UTF-8' > /target/etc/locale.gen

# This is the point where you have to move from the x86 system to an x86_64 system.
# Make sure that you are running a x86_64 kernel before chrooting, or booting it.
exit
umount dev/pts dev sys proc
umount var/cache/distfiles

# Optional: Back up the system
env -i chroot target tar --sort=name -cf /target-gentoo.tar /
env -i chroot target bzip2 -9v /target-gentoo.tar
mv target/target-gentoo.tar.bz2 ..

# Copy ::gentoo repo and distfiles
mkdir -p target/var/db/repos
rsync -a var/db/repos/gentoo/ target/var/db/repos/gentoo
rsync -a var/cache/distfiles/ target/var/cache/distfiles

# Enter the final, x86_64 system
cd target
mount -t proc proc proc
mount -t sysfs sysfs sys
mount -t devtmpfs devtmpfs dev
mount -t devpts devpts dev/pts
env -i TERM="$TERM" chroot . /bin/bash -l

umask 022

# Initialize system and break dependency cycles
ldconfig
USE='-nls' emerge -1n sys-devel/gettext

# Rebuild everything
emerge -e @world

系统要求

硬件

最低配置:4核8G
推荐配置:64核线程撕裂者

笔者使用20核虚拟机,编译了大约12小时
其中,下载fosslinux/live-bootstrap所需代码花费了大约2小时,20核编译至少4小时。构建gentoo时还需多次编译gcc。笔者的AMD编译gcc需要至少半小时,如果使用国产8核CPU,编译一次gcc则至少需要2小时

软件

运行此脚本系统需要安装Python3。Ubuntu还需要安装python3.13-env,Arch Linux仅需要安装python3。
建议安装arch-install-scripts
无需安装任何编译器

踩坑笔记

笔者在测试时,总体顺利,但也经历了若干次编译失败。
失败原因:

  1. 代码下载失败。gentoo官方从服务器删除代码,fosslinux代码下载失败
  2. gentoo python3编译失败

./download-distfiles.sh发生错误

这种情况下千万不要执行env/bin/python ./rootfs.py -c --external-sources --cores $(nproc) -m '',执行了的话应该rm -rf target。这时代码不完整。./download-distfiles.sh脚本会校对下载的代码包,如果有错误,应当删除校验失败的代码包,再重新执行此脚本。
如果反复出现错误,应该执行

1
./download-distfiles.sh https://live-bootstrap.stikonas.eu/

截至2026年5月2日,上一条命令可以完整下载所需代码包。

gentoo代码下载错误

这是因为官方已经从软件源核代码仓库删除该版本软件导致的。
**千万不要手动修改软件仓库!**因为它有校验码。而且新版本软件或仓库会引发依赖冲突和循环依赖!
解决办法:
https://archive.org/download/gentoo-bootstrap-2025.8/distfiles.tar/ 下载代码,拷到相应目录,例如live-bootstrap/distfiles。此时gentoo会假装自己从预定网址下载到了正确代码。上一小节代码错误或无法下载时也可以如此处理。

此外,我还将代码包上传到了GitHub
毕竟这是最好还免费的存储方案了。以后可能搬到家里服务器。如果用别的存储方案,要么托管商关门跑路,要么我没钱维持存储,只能跑路了。
当然,我还是远不如互联网档案馆靠谱。
还是希望大家都能fork一下,有1.8G硬盘空间的能下载一下这些代码。

gentoo Python3编译错误

这应该是只有部分发行版才会有的错误,是因为没有挂载/dev/shm导致的。另开一个终端,将它挂载到容器中的/dev/shm即可。
最好的解决办法是安装arch-install-scripts,使用arch-chroot来代替mountchroot。这个命令退出chroot时也会自动解除挂载,非常方便,效率很高。

建议

上述脚本应该逐行(有catEOF的那种应该复制多行)复制执行。执行过程中应该灵活变通,尤其是最好把https://archive.org/download/gentoo-bootstrap-2025.8/distfiles.tar/ 全部下载,再解压到live-bootstrap/distfiles。执行过程中按脚本将它挂载到容器中,免除所有下载,也避免软件下架的问题。我记得它一周之内已经新增2个软件代码被删了,以后会更多。

点评

这个脚本让我见识到了gentoo是很难做出从任意系统自举的操作的。本来以为只需要用portage编译出一个stage1就行了,其实它还需要多次交叉编译才能实现。