2 changed files with 399 additions and 0 deletions
			
			
		@ -0,0 +1,36 @@ | 
				
			|||||
 | 
					# vim:set ft=sh: | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# After finishing a bootstrap, one may want to build a stage3 tarball and | 
				
			||||
 | 
					# accompanying ISO image... | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Addendum: Build a stage3 and installer iso | 
				
			||||
 | 
					echo dev-util/catalyst >> /etc/portage/package.accept_keywords | 
				
			||||
 | 
					emerge dev-util/catalyst | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ROOT="$PWD/stage" USE=build emerge -1 sys-apps/baselayout | 
				
			||||
 | 
					ROOT="$PWD/stage" QUICKPKG_DEFAULT_OPTS=--include-config=y emerge --quickpkg-direct=y -K @system | 
				
			||||
 | 
					mkdir stage/etc/portage  # catalyst breaks otherwise... | 
				
			||||
 | 
					tar cf stage.tar -C stage . | 
				
			||||
 | 
					rm -rf stage | 
				
			||||
 | 
					xz -9v stage.tar | 
				
			||||
 | 
					mkdir -p /var/tmp/catalyst/builds/23.0-default | 
				
			||||
 | 
					mv stage.tar.xz /var/tmp/catalyst/builds/23.0-default/stage3-amd64-openrc-latest.tar.xz | 
				
			||||
 | 
					wget http://distfiles.gentoo.org/snapshots/squashfs/gentoo-20240801.xz.sqfs | 
				
			||||
 | 
					mkdir -p /var/tmp/catalyst/snapshots | 
				
			||||
 | 
					mv gentoo-20240801.xz.sqfs /var/tmp/catalyst/snapshots/gentoo-20240801.sqfs | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					git clone https://anongit.gentoo.org/git/proj/releng.git | 
				
			||||
 | 
					git -C releng checkout 'master@{2024-08-01}' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					sed -e 's|@TIMESTAMP@|20240801|g' \ | 
				
			||||
 | 
					    -e 's|@TREEISH@|20240801|g' \ | 
				
			||||
 | 
					    -e 's|@REPO_DIR@|'"$PWD/releng"'|g' \ | 
				
			||||
 | 
					    -i \ | 
				
			||||
 | 
					    releng/releases/specs/amd64/stage1-openrc-23.spec \ | 
				
			||||
 | 
					    releng/releases/specs/amd64/stage3-openrc-23.spec \ | 
				
			||||
 | 
					    releng/releases/specs/amd64/installcd-stage1.spec \ | 
				
			||||
 | 
					    releng/releases/specs/amd64/installcd-stage2-minimal.spec | 
				
			||||
 | 
					catalyst -f releng/releases/specs/amd64/stage1-openrc-23.spec | 
				
			||||
 | 
					catalyst -f releng/releases/specs/amd64/stage3-openrc-23.spec | 
				
			||||
 | 
					catalyst -f releng/releases/specs/amd64/installcd-stage1.spec | 
				
			||||
 | 
					catalyst -f releng/releases/specs/amd64/installcd-stage2-minimal.spec | 
				
			||||
@ -0,0 +1,363 @@ | 
				
			|||||
 | 
					# vim:set ft=sh: | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Changelog: | 
				
			||||
 | 
					# - 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: Update python, install portage and extra dependencies for later stages | 
				
			||||
 | 
					# step 2: Create an x86_64 cross-toolchain in /cross | 
				
			||||
 | 
					# step 3: Cross-compile a minimal x86_64 system in /gentoo | 
				
			||||
 | 
					# step 4: Boot into the final system and finish installation | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Build live-bootstrap | 
				
			||||
 | 
					git clone -b 1.0 --depth=1 --recursive https://github.com/fosslinux/live-bootstrap | 
				
			||||
 | 
					cd live-bootstrap | 
				
			||||
 | 
					./rootfs.py -c --external-sources --cores $(nproc) | 
				
			||||
 | 
					umount target/dev/shm  # double mounted? | 
				
			||||
 | 
					umount target/dev/shm target/sys target/proc target/tmp | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Optional: Back up the system | 
				
			||||
 | 
					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 . | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# 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 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					mkdir -p /var/cache/distfiles; cd /var/cache/distfiles | 
				
			||||
 | 
					curl -LO http://gitweb.gentoo.org/proj/portage.git/snapshot/portage-3.0.66.1.tar.bz2 | 
				
			||||
 | 
					curl -LO http://distfiles.gentoo.org/snapshots/squashfs/gentoo-20250101.xz.sqfs | 
				
			||||
 | 
					curl -LO https://github.com/plougher/squashfs-tools/archive/refs/tags/4.6.1/squashfs-tools-4.6.1.tar.gz | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					cd /tmp | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Build squashfs-tools to extract the ::gentoo tree | 
				
			||||
 | 
					tar xf /var/cache/distfiles/squashfs-tools-4.6.1.tar.gz | 
				
			||||
 | 
					cd squashfs-tools-4.6.1 | 
				
			||||
 | 
					make -C squashfs-tools install \ | 
				
			||||
 | 
					    INSTALL_PREFIX=/usr \ | 
				
			||||
 | 
					    XZ_SUPPORT=1 | 
				
			||||
 | 
					cd .. | 
				
			||||
 | 
					rm -rf squashfs-tools-4.6.1 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Unpack the ::gentoo tree | 
				
			||||
 | 
					unsquashfs /var/cache/distfiles/gentoo-20250101.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.66.1.tar.bz2 | 
				
			||||
 | 
					ln -sf portage-3.0.66.1 portage | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Add portage user/group | 
				
			||||
 | 
					echo 'portage:x:250:250:portage:/var/tmp/portage:/bin/false' >> /etc/passwd | 
				
			||||
 | 
					echo 'portage::250:portage' >> /etc/group | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Configure portage | 
				
			||||
 | 
					mkdir -p /etc/portage/make.profile | 
				
			||||
 | 
					cat > /etc/portage/make.profile/make.defaults << 'EOF' | 
				
			||||
 | 
					FETCHCOMMAND="curl -k --retry 3 -m 60 --ftp-pasv -o \"\${DISTDIR}/\${FILE}\" -L \"\${URI}\"" | 
				
			||||
 | 
					RESUMECOMMAND="curl -C - -k --retry 3 -m 60 --ftp-pasv -o \"\${DISTDIR}/\${FILE}\" -L \"\${URI}\"" | 
				
			||||
 | 
					FEATURES="-news -sandbox -usersandbox -pid-sandbox -parallel-fetch" | 
				
			||||
 | 
					BINPKG_COMPRESS="bzip2" | 
				
			||||
 | 
					ARCH="x86" | 
				
			||||
 | 
					ABI="$ARCH" | 
				
			||||
 | 
					DEFAULT_ABI="$ARCH" | 
				
			||||
 | 
					ACCEPT_KEYWORDS="$ARCH" | 
				
			||||
 | 
					CHOST="i386-unknown-linux-musl" | 
				
			||||
 | 
					LIBDIR_x86="lib/$CHOST" | 
				
			||||
 | 
					PKG_CONFIG_PATH="/usr/lib/$CHOST/pkgconfig" | 
				
			||||
 | 
					IUSE_IMPLICIT="kernel_linux elibc_glibc elibc_musl prefix prefix-guest" | 
				
			||||
 | 
					IUSE_IMPLICIT="$IUSE_IMPLICIT x86 amd64"  # dev-libs/gmp | 
				
			||||
 | 
					IUSE_IMPLICIT="$IUSE_IMPLICIT sparc"  # sys-libs/zlib | 
				
			||||
 | 
					USE_EXPAND="PYTHON_TARGETS PYTHON_SINGLE_TARGET" | 
				
			||||
 | 
					USE="kernel_linux elibc_musl build" | 
				
			||||
 | 
					SKIP_KERNEL_CHECK=y  # linux-info.eclass | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					cat > /etc/portage/package.use << 'EOF' | 
				
			||||
 | 
					dev-lang/python -ensurepip -ncurses -readline -sqlite -ssl | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					grep '^PYTHON_TARGETS=\|^PYTHON_SINGLE_TARGET=' \ | 
				
			||||
 | 
					    /var/db/repos/gentoo/profiles/base/make.defaults \ | 
				
			||||
 | 
					    >> /etc/portage/make.profile/make.defaults | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Specify what packages may or may not be installed in the live-bootstrap system | 
				
			||||
 | 
					mkdir -p /etc/portage/profile | 
				
			||||
 | 
					echo '*/*' > /etc/portage/package.mask | 
				
			||||
 | 
					cat > /etc/portage/package.unmask << 'EOF' | 
				
			||||
 | 
					app-alternatives/bzip2 | 
				
			||||
 | 
					app-alternatives/ninja | 
				
			||||
 | 
					app-arch/bzip2  # replaces files, live-bootstrap doesn't build libbz2 | 
				
			||||
 | 
					app-arch/lzip | 
				
			||||
 | 
					app-arch/unzip | 
				
			||||
 | 
					app-misc/pax-utils | 
				
			||||
 | 
					app-portage/elt-patches | 
				
			||||
 | 
					dev-build/autoconf | 
				
			||||
 | 
					dev-build/autoconf-wrapper  # replaces files | 
				
			||||
 | 
					dev-build/automake  # replaces files | 
				
			||||
 | 
					dev-build/automake-wrapper  # replaces files | 
				
			||||
 | 
					dev-build/make  # replaces files | 
				
			||||
 | 
					dev-build/meson | 
				
			||||
 | 
					dev-build/meson-format-array | 
				
			||||
 | 
					dev-build/ninja | 
				
			||||
 | 
					dev-lang/python | 
				
			||||
 | 
					dev-lang/python-exec  # replaces files | 
				
			||||
 | 
					dev-lang/python-exec-conf | 
				
			||||
 | 
					dev-libs/expat | 
				
			||||
 | 
					dev-libs/mpdecimal | 
				
			||||
 | 
					dev-python/flit-core | 
				
			||||
 | 
					dev-python/gentoo-common | 
				
			||||
 | 
					dev-python/gpep517 | 
				
			||||
 | 
					dev-python/installer | 
				
			||||
 | 
					dev-python/jaraco-collections | 
				
			||||
 | 
					dev-python/jaraco-context | 
				
			||||
 | 
					dev-python/jaraco-functools | 
				
			||||
 | 
					dev-python/jaraco-text | 
				
			||||
 | 
					dev-python/more-itertools | 
				
			||||
 | 
					dev-python/packaging | 
				
			||||
 | 
					dev-python/setuptools | 
				
			||||
 | 
					dev-python/wheel | 
				
			||||
 | 
					dev-util/pkgconf  # replaces files, dev-lang/python ebuild requires "--keep-system-libs" option when cross-compiling | 
				
			||||
 | 
					net-misc/rsync | 
				
			||||
 | 
					sys-apps/findutils  # replaces files, portage requires 4.9, live-bootstrap provides 4.2.33 | 
				
			||||
 | 
					sys-apps/gentoo-functions | 
				
			||||
 | 
					sys-apps/portage | 
				
			||||
 | 
					sys-devel/binutils-config | 
				
			||||
 | 
					sys-devel/gcc-config | 
				
			||||
 | 
					sys-devel/gnuconfig | 
				
			||||
 | 
					virtual/pkgconfig | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					cat > /etc/portage/profile/package.provided << 'EOF' | 
				
			||||
 | 
					acct-user/portage-0 | 
				
			||||
 | 
					app-alternatives/awk-0 | 
				
			||||
 | 
					app-alternatives/gzip-0 | 
				
			||||
 | 
					app-alternatives/lex-0 | 
				
			||||
 | 
					app-alternatives/yacc-0 | 
				
			||||
 | 
					app-arch/tar-1.27 | 
				
			||||
 | 
					app-arch/xz-utils-5.4.0 | 
				
			||||
 | 
					app-arch/zstd-0 | 
				
			||||
 | 
					app-crypt/libb2-0 | 
				
			||||
 | 
					app-crypt/libbz2-0 | 
				
			||||
 | 
					dev-build/autoconf-archive-0 | 
				
			||||
 | 
					dev-build/libtool-2.4.7-r3 | 
				
			||||
 | 
					dev-lang/perl-5.38.2-r3 | 
				
			||||
 | 
					dev-libs/libffi-0 | 
				
			||||
 | 
					dev-libs/popt-1.5 | 
				
			||||
 | 
					dev-python/platformdirs-4.2.2 | 
				
			||||
 | 
					dev-python/setuptools-scm-0 | 
				
			||||
 | 
					dev-python/trove-classifiers-2024.10.16 | 
				
			||||
 | 
					dev-util/re2c-0 | 
				
			||||
 | 
					sys-apps/baselayout-2.9 | 
				
			||||
 | 
					sys-apps/help2man-0 | 
				
			||||
 | 
					sys-apps/locale-gen-0 | 
				
			||||
 | 
					sys-apps/sandbox-2.2 | 
				
			||||
 | 
					sys-apps/sed-4.0.5 | 
				
			||||
 | 
					sys-apps/texinfo-7.1 | 
				
			||||
 | 
					sys-apps/util-linux-0 | 
				
			||||
 | 
					sys-devel/binutils-2.27 | 
				
			||||
 | 
					sys-devel/bison-3.5.4 | 
				
			||||
 | 
					sys-devel/flex-2.5.4 | 
				
			||||
 | 
					sys-devel/gcc-6.2 | 
				
			||||
 | 
					sys-devel/gettext-0 | 
				
			||||
 | 
					sys-devel/m4-1.4.16 | 
				
			||||
 | 
					sys-devel/patch-0 | 
				
			||||
 | 
					sys-libs/zlib-1.2.12 | 
				
			||||
 | 
					virtual/libcrypt-0 | 
				
			||||
 | 
					virtual/libintl-0 | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Turn /bin/bzip2 into a symlink to avoid failures in app-arch/bzip2 | 
				
			||||
 | 
					if [ ! -h /bin/bzip2 ]; then | 
				
			||||
 | 
					    mv /bin/bzip2 /bin/bzip2-reference | 
				
			||||
 | 
					    ln -s bzip2-reference /bin/bzip2 | 
				
			||||
 | 
					fi | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# For some reason, make hangs when used in parallel, rebuild it first. | 
				
			||||
 | 
					MAKEOPTS=-j1 ./portage/bin/emerge -1n app-arch/lzip dev-build/make | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Install portage | 
				
			||||
 | 
					./portage/bin/emerge -1n sys-apps/portage | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Install BDEPENDs for cross-toolchain | 
				
			||||
 | 
					emerge -1n sys-devel/binutils-config  # sys-devel/binutils | 
				
			||||
 | 
					emerge -1n sys-devel/gcc-config  # sys-devel/gcc | 
				
			||||
 | 
					emerge -1n net-misc/rsync  # sys-kernel/linux-headers | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Add cross compiler to PATH | 
				
			||||
 | 
					cat > /etc/env.d/50baselayout << 'EOF' | 
				
			||||
 | 
					PATH=/cross/usr/bin:/usr/bin | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					env-update | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Set up cross compiler | 
				
			||||
 | 
					mkdir -p /cross/etc/portage | 
				
			||||
 | 
					ln -sf /etc/portage/make.profile /cross/etc/portage/make.profile | 
				
			||||
 | 
					cat > /cross/etc/portage/make.conf << 'EOF' | 
				
			||||
 | 
					USE="prefix multilib" | 
				
			||||
 | 
					CTARGET="x86_64-bootstrap-linux-gnu" | 
				
			||||
 | 
					LIBDIR_x86="lib" | 
				
			||||
 | 
					LIBDIR_amd64="lib64" | 
				
			||||
 | 
					DEFAULT_ABI="amd64" | 
				
			||||
 | 
					MULTILIB_ABIS="amd64 x86" | 
				
			||||
 | 
					ACCEPT_KEYWORDS="amd64" | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					cat > /cross/etc/portage/package.use << 'EOF' | 
				
			||||
 | 
					sys-devel/gcc -sanitize -fortran | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					mkdir -p /cross/etc/portage/env/sys-devel | 
				
			||||
 | 
					cat > /cross/etc/portage/env/sys-devel/gcc << 'EOF' | 
				
			||||
 | 
					EXTRA_ECONF='--with-sysroot=$EPREFIX/usr/$CTARGET --enable-threads' | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					cat > /cross/etc/portage/package.mask << 'EOF' | 
				
			||||
 | 
					>=sys-devel/gcc-14 | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					# TODO: Build using gcc 14 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					PORTAGE_CONFIGROOT=/cross EPREFIX=/cross USE='headers-only' emerge -O1 sys-kernel/linux-headers | 
				
			||||
 | 
					PORTAGE_CONFIGROOT=/cross EPREFIX=/cross USE='headers-only -multilib' emerge -O1 sys-libs/glibc  | 
				
			||||
 | 
					PORTAGE_CONFIGROOT=/cross EPREFIX=/cross emerge -O1 sys-devel/binutils | 
				
			||||
 | 
					PORTAGE_CONFIGROOT=/cross EPREFIX=/cross USE='-cxx' emerge -O1 sys-devel/gcc | 
				
			||||
 | 
					PORTAGE_CONFIGROOT=/cross EPREFIX=/cross emerge -O1 sys-kernel/linux-headers | 
				
			||||
 | 
					PORTAGE_CONFIGROOT=/cross EPREFIX=/cross emerge -O1 sys-libs/glibc | 
				
			||||
 | 
					PORTAGE_CONFIGROOT=/cross EPREFIX=/cross emerge -O1 sys-devel/gcc | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Reconfigure cross toolchain for final system | 
				
			||||
 | 
					cat > /cross/usr/lib/gcc/x86_64-bootstrap-linux-gnu/specs << 'EOF' | 
				
			||||
 | 
					*link: | 
				
			||||
 | 
					+ %{!shared:%{!static:%{!static-pie:-dynamic-linker %{m32:/lib/ld-linux.so.2;:/lib64/ld-linux-x86-64.so.2}}}} | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					for tool in gcc g++; do | 
				
			||||
 | 
					rm -f /cross/usr/bin/x86_64-bootstrap-linux-gnu-$tool | 
				
			||||
 | 
					cat > /cross/usr/bin/x86_64-bootstrap-linux-gnu-$tool << EOF | 
				
			||||
 | 
					#!/bin/sh | 
				
			||||
 | 
					exec /cross/usr/i386-unknown-linux-musl/x86_64-bootstrap-linux-gnu/gcc-bin/*/x86_64-bootstrap-linux-gnu-$tool --sysroot=/gentoo "\$@" | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					chmod +x /cross/usr/bin/x86_64-bootstrap-linux-gnu-$tool | 
				
			||||
 | 
					done | 
				
			||||
 | 
					cat > /cross/usr/bin/x86_64-bootstrap-linux-gnu-pkg-config << 'EOF' | 
				
			||||
 | 
					#!/bin/sh | 
				
			||||
 | 
					export PKG_CONFIG_SYSROOT_DIR=/gentoo | 
				
			||||
 | 
					export PKG_CONFIG_LIBDIR=/gentoo/usr/lib64/pkgconfig:/gentoo/usr/share/pkgconfig | 
				
			||||
 | 
					export PKG_CONFIG_SYSTEM_INCLUDE_PATH=/gentoo/usr/include | 
				
			||||
 | 
					export PKG_CONFIG_SYSTEM_LIBRARY_PATH=/gentoo/lib64:/gentoo/usr/lib64 | 
				
			||||
 | 
					exec pkg-config "$@" | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					chmod +x /cross/usr/bin/x86_64-bootstrap-linux-gnu-pkg-config | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Configure cross-compilation for final system | 
				
			||||
 | 
					mkdir -p /gentoo.cfg/etc/portage | 
				
			||||
 | 
					ln -sf ../../../var/db/repos/gentoo/profiles/default/linux/amd64/23.0 /gentoo.cfg/etc/portage/make.profile | 
				
			||||
 | 
					cat > /gentoo.cfg/etc/portage/make.conf << 'EOF' | 
				
			||||
 | 
					FETCHCOMMAND="curl -k --retry 3 -m 60 --ftp-pasv -o \"\${DISTDIR}/\${FILE}\" -L \"\${URI}\"" | 
				
			||||
 | 
					RESUMECOMMAND="curl -C - -k --retry 3 -m 60 --ftp-pasv -o \"\${DISTDIR}/\${FILE}\" -L \"\${URI}\"" | 
				
			||||
 | 
					FEATURES="-news -sandbox -usersandbox -pid-sandbox -parallel-fetch" | 
				
			||||
 | 
					BINPKG_COMPRESS="bzip2" | 
				
			||||
 | 
					CBUILD="i386-unknown-linux-musl" | 
				
			||||
 | 
					CHOST="x86_64-bootstrap-linux-gnu" | 
				
			||||
 | 
					CFLAGS_x86="$CFLAGS_x86 -msse"  # https://bugs.gentoo.org/937637 | 
				
			||||
 | 
					CONFIG_SITE="$PORTAGE_CONFIGROOT/etc/portage/config.site" | 
				
			||||
 | 
					USE="-* build $BOOTSTRAP_USE -zstd" | 
				
			||||
 | 
					SKIP_KERNEL_CHECK=y  # linux-info.eclass | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					cat > /gentoo.cfg/etc/portage/package.use << 'EOF' | 
				
			||||
 | 
					# https://gitweb.gentoo.org/proj/releng.git/tree/releases/portage/stages/profile/package.use.force/releng/alternatives | 
				
			||||
 | 
					app-alternatives/lex flex | 
				
			||||
 | 
					app-alternatives/yacc bison | 
				
			||||
 | 
					app-alternatives/tar gnu | 
				
			||||
 | 
					app-alternatives/gzip reference | 
				
			||||
 | 
					app-alternatives/bzip2 reference | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					cat > /gentoo.cfg/etc/portage/config.site << 'EOF' | 
				
			||||
 | 
					if [ "${CBUILD:-${CHOST}}" != "${CHOST}" ]; then | 
				
			||||
 | 
					# https://gitweb.gentoo.org/proj/crossdev.git/tree/wrappers/site/linux | 
				
			||||
 | 
					ac_cv_file__dev_ptmx=yes | 
				
			||||
 | 
					ac_cv_file__dev_ptc=no | 
				
			||||
 | 
					fi | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					cat > /gentoo.cfg/etc/portage/package.mask << 'EOF' | 
				
			||||
 | 
					>=sys-devel/gcc-14 | 
				
			||||
 | 
					EOF | 
				
			||||
 | 
					# TODO: Build using gcc 14 | 
				
			||||
 | 
					# TODO: USE=zstd causes binutils to try to link with target zstd instead of | 
				
			||||
 | 
					#       host. zstd cannot be built for host due to lack of libatomic in gcc. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Cross-compile a basic system | 
				
			||||
 | 
					pkgs_build="$(PORTAGE_CONFIGROOT=/gentoo.cfg python3 -c 'import portage | 
				
			||||
 | 
					print(*portage.util.stack_lists([portage.util.grabfile_package("%s/packages.build"%x)for x in portage.settings.profiles],incremental=1))')" | 
				
			||||
 | 
					PORTAGE_CONFIGROOT=/gentoo.cfg ROOT=/gentoo SYSROOT=/gentoo emerge -O1n \ | 
				
			||||
 | 
					    sys-apps/baselayout \ | 
				
			||||
 | 
					    sys-kernel/linux-headers \ | 
				
			||||
 | 
					    sys-libs/glibc | 
				
			||||
 | 
					PORTAGE_CONFIGROOT=/gentoo.cfg ROOT=/gentoo SYSROOT=/gentoo emerge -D1n $pkgs_build | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Set up final system | 
				
			||||
 | 
					mkdir -p /gentoo/etc/portage | 
				
			||||
 | 
					ln -sf ../../var/db/repos/gentoo/profiles/default/linux/amd64/23.0 /gentoo/etc/portage/make.profile | 
				
			||||
 | 
					echo 'nameserver 1.1.1.1' > /gentoo/etc/resolv.conf | 
				
			||||
 | 
					echo 'C.UTF8 UTF-8' > /gentoo/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 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Optional: Back up the system | 
				
			||||
 | 
					env -i chroot gentoo tar --sort=name -cf /gentoo.tar / | 
				
			||||
 | 
					env -i chroot gentoo bzip2 -9v /gentoo.tar | 
				
			||||
 | 
					mv gentoo/gentoo.tar.bz2 . | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Copy ::gentoo repo and distfiles | 
				
			||||
 | 
					rsync -a var/db/repos/ gentoo/var/db/repos | 
				
			||||
 | 
					rsync -a var/cache/distfiles/ gentoo/var/cache/distfiles | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Enter the final, x86_64 system | 
				
			||||
 | 
					cd gentoo | 
				
			||||
 | 
					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 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Sandbox fails to rebuild itself at first until it's built without sandbox... | 
				
			||||
 | 
					# TODO: Why, though? | 
				
			||||
 | 
					FEATURES='-sandbox -usersandbox' emerge -1 sys-apps/sandbox | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Change CHOST and build OpenMP support (stage2-ish) | 
				
			||||
 | 
					emerge -1 sys-devel/binutils | 
				
			||||
 | 
					emerge -o sys-devel/gcc | 
				
			||||
 | 
					EXTRA_ECONF=--disable-bootstrap emerge -1 sys-devel/gcc | 
				
			||||
 | 
					emerge -1 dev-lang/perl  # https://bugs.gentoo.org/937918 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# USE flag rationale: | 
				
			||||
 | 
					# https://gitweb.gentoo.org/proj/releng.git/tree/releases/portage/stages/package.use/releng/no-filecaps | 
				
			||||
 | 
					# https://gitweb.gentoo.org/proj/releng.git/tree/releases/portage/stages/package.use/releng/circular | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Rebuild everything (stage3) | 
				
			||||
 | 
					USE='-filecaps -http2 -http3 -quic -curl_quic_openssl' emerge -e @system | 
				
			||||
 | 
					emerge -c | 
				
			||||
					Loading…
					
					
				
		Reference in new issue