aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2024-04-13 21:16:01 +0000
committerColin Percival <cperciva@FreeBSD.org>2024-04-24 05:04:44 +0000
commit835b1bd4045a7ef56f58868fc150d099b2ce135b (patch)
tree35419c807268b812a268c3743ab82a593815d64f
parent6b8ca8c4e40635ef7bd62e20d014c79f017b0e7e (diff)
downloadsrc-835b1bd4045a7ef56f58868fc150d099b2ce135b.tar.gz
src-835b1bd4045a7ef56f58868fc150d099b2ce135b.zip
release: Use the ABI of the target release to fetch packages
- Point --rootdir at the installed destdir in the dvd tree. This causes pkg to determine the ABI from the installed destdir instead of the host's binaries. Previously the result was that packages for the host's ABI were always downloaded breaking cross-releases (e.g. arm64 releases built on an amd64 host included amd64 packages on the DVD ISO image rather than arm64 packages). This also handles version mismatches, and I tested this by cross-building a 15.x arm64 release on a 14.x amd64 host. - As a result, pkg now does a chdir(3) to the rootdir before running, so the -o argument to fetch needs to be updated to be relative to rootdir instead of the CWD as make runs. - Add a new ROOTDIR variable to limit references to "dvd" to one place. Ideally ROOTDIR would be an argument to this script so that it didn't really know about the dvd layout at all. - While here, simplify creation of symlinks by just using a longer path to the link name instead of using 'cd' in the shell before invoking ln(1). Also use ln -sf to create the pkg.pkg symlink rather than rm + ln. PR: 278273 Reported by: gatekeeper <tiago.gasiba@gmail.com> Reviewed by: imp, delphij MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D44749 (cherry picked from commit ea2663040d524efd84b12edcbe83884437fdceea)
-rwxr-xr-xrelease/scripts/pkg-stage.sh23
1 files changed, 11 insertions, 12 deletions
diff --git a/release/scripts/pkg-stage.sh b/release/scripts/pkg-stage.sh
index b96ce2947bb1..b51bdd4a2117 100755
--- a/release/scripts/pkg-stage.sh
+++ b/release/scripts/pkg-stage.sh
@@ -8,7 +8,8 @@ export ASSUME_ALWAYS_YES="YES"
export PKG_DBDIR="/tmp/pkg"
export PERMISSIVE="YES"
export REPO_AUTOUPDATE="NO"
-export PKGCMD="/usr/sbin/pkg -d"
+export ROOTDIR="$PWD/dvd"
+export PKGCMD="/usr/sbin/pkg -d --rootdir ${ROOTDIR}"
export PORTSDIR="${PORTSDIR:-/usr/ports}"
_DVD_PACKAGES="archivers/unzip
@@ -46,14 +47,13 @@ if [ ! -x /usr/local/sbin/pkg ]; then
/usr/bin/make -C ${PORTSDIR}/ports-mgmt/pkg install clean
fi
-export DVD_DIR="dvd/packages"
-export PKG_ABI=$(pkg config ABI)
-export PKG_ALTABI=$(pkg config ALTABI 2>/dev/null)
-export PKG_REPODIR="${DVD_DIR}/${PKG_ABI}"
+export PKG_ABI=$(pkg --rootdir ${ROOTDIR} config ABI)
+export PKG_ALTABI=$(pkg --rootdir ${ROOTDIR} config ALTABI 2>/dev/null)
+export PKG_REPODIR="packages/${PKG_ABI}"
-/bin/mkdir -p ${PKG_REPODIR}
+/bin/mkdir -p ${ROOTDIR}/${PKG_REPODIR}
if [ ! -z "${PKG_ALTABI}" ]; then
- (cd ${DVD_DIR} && ln -s ${PKG_ABI} ${PKG_ALTABI})
+ ln -s ${PKG_ABI} ${ROOTDIR}/packages/${PKG_ALTABI}
fi
# Ensure the ports listed in _DVD_PACKAGES exist to sanitize the
@@ -82,11 +82,10 @@ ${PKGCMD} fetch -o ${PKG_REPODIR} -d ${DVD_PACKAGES}
# Create the 'Latest/pkg.txz' symlink so 'pkg bootstrap' works
# using the on-disc packages.
-mkdir -p ${PKG_REPODIR}/Latest
-(cd ${PKG_REPODIR}/Latest && \
- ln -s ../All/$(${PKGCMD} rquery %n-%v pkg).pkg pkg.pkg)
-(cd ${PKG_REPODIR}/Latest && \
- rm -f pkg.txz && ln -s pkg.pkg pkg.txz)
+export LATEST_DIR="${ROOTDIR}/${PKG_REPODIR}/Latest"
+mkdir -p ${LATEST_DIR}
+ln -s ../All/$(${PKGCMD} rquery %n-%v pkg).pkg ${LATEST_DIR}/pkg.pkg
+ln -sf pkg.pkg ${LATEST_DIR}/pkg.txz
${PKGCMD} repo ${PKG_REPODIR}