Use Portage config directly from src dir

Instead of copying the Portage configuration files to `/etc/portage` and
`/usr/${target}/etc/portage`, the build scripts now use the
configuration directories from the source directory.  This avoids issues
with changes (especially removal of files) getting propagated to the
actual configuration paths.
master
Dustin 2023-03-07 10:30:06 -06:00
parent 3ca750f495
commit 5f62193247
59 changed files with 41 additions and 48 deletions

4
.gitignore vendored
View File

@ -1,6 +1,10 @@
/images
/linux
/output
/portage/config/*/etc/portage/make.profile
/portage/config/*/etc/portage/repos.conf
/portage/config/target/etc/portage/make.conf/10-crossdev.conf
/portage/repos/x-portage
/.built
/.prepared
/.host-tools

View File

@ -5,12 +5,9 @@ update.tar: $(IMAGESDIR)/update.tar.zstd
$(O)/.prepared: \
prepare.sh \
config-portage.sh \
setup-local-repo.sh \
$(shell find portage host-portage -type f) \
$(shell find patches/ebuilds -type f)
./prepare.sh
./config-portage.sh
./setup-local-repo.sh
mkdir -p $(O)
touch $(O)/.prepared

View File

@ -1,5 +1,6 @@
#!/bin/sh
# vim: set sw=4 ts=4 sts=4 et :
PORTAGE_CONFIGROOT="${PWD}"/portage/config/host \
< host-tools.packages xargs -ro \
emerge -vnUj

View File

@ -7,6 +7,7 @@ O="${1}"
. ./config
PORTAGE_CONFIGROOT="${PWD}"/portage/config/host \
emerge -vnj ${kernel_pkg}
export ARCH=arm64 CROSS_COMPILE=${target}-

View File

@ -23,12 +23,12 @@ ln -snf \
cp -r portage/. /mnt/gentoo/etc/portage/
ROOT=/mnt/gentoo \
PORTAGE_CONFIGROOT=/mnt/gentoo \
PORTAGE_CONFIGROOT="${PWD}"/portage/config/target \
< install.packages xargs -ro \
${target}-emerge -Kvnj
ROOT=/mnt/gentoo \
PORTAGE_CONFIGROOT=/mnt/gentoo \
PORTAGE_CONFIGROOT="${PWD}"/portage/config/target \
< installonly.packages xargs -ro \
${target}-emerge -vnj

View File

@ -7,6 +7,8 @@ set -e
unset MAKEFLAGS MAKEOVERRIDES MAKELEVEL
export PORTAGE_CONFIGROOT="${PWD}"/portage/config/target
${target}-emerge -vuUDj sys-apps/util-linux
cat \

View File

@ -1,14 +0,0 @@
#!/bin/sh
# vim: set sw=4 ts=4 sts=4 et :
set -e
. ./config
cp -r host-portage/. /etc/portage/
cp -r portage/. /usr/${target}/etc/portage/
# Set the Portage profile
ln -snf \
/var/db/repos/gentoo/profiles/${profile} \
/usr/${target}/etc/portage/make.profile

View File

@ -0,0 +1 @@
masters = gentoo

View File

@ -0,0 +1 @@
x-portage

View File

@ -13,16 +13,16 @@ fi
chown portage: "$(portageq envvar DISTDIR)"
ARCH=$(PORTAGE_CONFIGROOT=/usr/${target} portageq envvar ARCH)
PKGDIR=$(portageq envvar PKGDIR)
FEATURES="${FEATURES} binpkg-multi-instance"
if [ -f /usr/${target}/etc/portage/make.conf ]; then
sed -i '/PKGDIR=/d' /usr/${target}/etc/portage/make.conf
fi
# For some reason, libcap installs its pkg-config files in the wrong
# place. More strangely, even though `PKG_CONFIG_PATH` contains that
# directory, `pkg-config` does not find the `.pc` files for libcap.
# We work around this by merging /usr/lib64/pkgconfig and
# /usr/lib/pkgconfig.
FEATURES="${FEATURES} binpkg-multi-instance" \
FEATURES="${FEATURES}" \
PKGDIR="${PKGDIR}" \
${target}-emerge -kb1vnj sys-libs/libcap
if [ -d /usr/${target}/usr/lib/pkgconfig ] \
&& [ ! -d /usr/${target}/usr/lib64/pkgconfig ]; then
@ -30,32 +30,35 @@ if [ -d /usr/${target}/usr/lib/pkgconfig ] \
ln -snf ../lib64/pkgconfig /usr/${target}/usr/lib/pkgconfig
fi
if [ ! -d /usr/${target}/etc/portage/make.conf ]; then
mv /usr/${target}/etc/portage/make.conf \
/usr/${target}/etc/portage/make.conf.orig
sed -ri 's: ?-pam::' /usr/${target}/etc/portage/make.conf.orig
ls -l /usr/${target}/etc/portage
mkdir /usr/${target}/etc/portage/make.conf
mv /usr/${target}/etc/portage/make.conf.orig \
/usr/${target}/etc/portage/make.conf/10-base.conf
fi
if [ ! -d /etc/portage/make.conf ]; then
mv /etc/portage/make.conf \
/etc/portage/make.conf.orig
mkdir /etc/portage/make.conf
mv /etc/portage/make.conf.orig \
/etc/portage/make.conf/10-base.conf
if [ ! -f portage/make.conf/10-crossdev.conf ]; then
sed -r \
-e 's: ?-pam::' \
-e '/PKGDIR=/d' \
/usr/${target}/etc/portage/make.conf \
> portage/config/target/etc/portage/make.conf/10-crossdev.conf
fi
ln -snf /var/db/repos/gentoo/profiles/default/linux/${ARCH}/17.0 \
/usr/${target}/etc/portage/make.profile
FEATURES="${FEATURES}" \
PKGDIR="${PKGDIR}" \
${target}-emerge -bk1nvj sys-libs/glibc
FEATURES="${FEATURES}" \
PKGDIR=$(portageq envvar PKGDIR) \
USE=pam \
${target}-emerge -bknvj sys-apps/util-linux
# Migrate to the merged-usr layout
mkdir -p /usr/${target}/bin
emerge -bknv --quiet-build=y merge-usr
merge-usr --root=/usr/${target}
# Set the Portage profile
ln -snf \
/var/db/repos/gentoo/profiles/${profile} \
portage/config/target/etc/portage/make.profile
ln -snf \
$(realpath /etc/portage/make.profile) \
portage/config/host/etc/portage/make.profile

View File

@ -5,13 +5,10 @@ set -e
. ./config
mkdir -p /var/db/repos/x-portage/profiles /var/db/repos/x-portage/metadata
echo x-portage > /var/db/repos/x-portage/profiles/repo_name
echo 'masters = gentoo' > /var/db/repos/x-portage/metadata/layout.conf
mkdir -p /usr/${target}/etc/portage/repos.conf
cat > /usr/${target}/etc/portage/repos.conf/x-portage.conf <<EOF
mkdir -p portage/config/target/etc/portage/repos.conf
cat > portage/config/target/etc/portage/repos.conf/x-portage.conf <<EOF
[x-portage]
location = /var/db/repos/x-portage
location = ${PWD}/portage/repos/x-portage
auto-sync = no
EOF
@ -20,9 +17,9 @@ for patch in patches/ebuilds/*/*/*.patch; do
cp=${patch#patches/ebuilds/}
cp=${cp%/*.patch}
printf 'Applying patch %s for %s ...\n' "${patch##*/}" "${cp}"
mkdir -p /var/db/repos/x-portage/${cp}
cp -r /var/db/repos/gentoo/${cp}/. /var/db/repos/x-portage/${cp}
for f in /var/db/repos/x-portage/${cp}/*.ebuild; do
mkdir -p portage/repos/x-portage/${cp}
cp -r /var/db/repos/gentoo/${cp}/. portage/repos/x-portage/${cp}
for f in portage/repos/x-portage/${cp}/*.ebuild; do
patch "${f}" "${patch}"
ebuild "${f}" digest
done