git: 70dcf0608cfc - stable/14 - release: Use the ABI of the target release to fetch packages

From: Colin Percival <>
Date: Wed, 17 Apr 2024 05:44:02 UTC
The branch stable/14 has been updated by cperciva:


commit 70dcf0608cfc767321b16509f615c5dddb9378af
Author:     John Baldwin <>
AuthorDate: 2024-04-13 21:16:01 +0000
Commit:     Colin Percival <>
CommitDate: 2024-04-17 05:43:27 +0000

    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 <>
    Reviewed by:    imp, delphij
    MFC after:      3 days
    Differential Revision:
    (cherry picked from commit ea2663040d524efd84b12edcbe83884437fdceea)
 release/scripts/ | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/release/scripts/ b/release/scripts/
index e53bd72db249..bdfa3643bacb 100755
--- a/release/scripts/
+++ b/release/scripts/
@@ -8,7 +8,8 @@ export ASSUME_ALWAYS_YES="YES"
 export PKG_DBDIR="/tmp/pkg"
-export PKGCMD="/usr/sbin/pkg -d"
+export ROOTDIR="$PWD/dvd"
+export PKGCMD="/usr/sbin/pkg -d --rootdir ${ROOTDIR}"
 export PORTSDIR="${PORTSDIR:-/usr/ports}"
@@ -47,14 +48,13 @@ if [ ! -x /usr/local/sbin/pkg ]; then
 	/usr/bin/make -C ${PORTSDIR}/ports-mgmt/pkg install clean
-export DVD_DIR="dvd/packages"
-export PKG_ABI=$(pkg config ABI)
-export PKG_ALTABI=$(pkg config ALTABI 2>/dev/null)
+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}
 # Ensure the ports listed in _DVD_PACKAGES exist to sanitize the
@@ -83,11 +83,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)
+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