The branch main has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=5eb917426e0aab1e82c7b0e7239724d18bae206a

commit 5eb917426e0aab1e82c7b0e7239724d18bae206a
Author:     Mark Johnston <ma...@freebsd.org>
AuthorDate: 2025-09-16 16:05:06 +0000
Commit:     Mark Johnston <ma...@freebsd.org>
CommitDate: 2025-09-16 16:09:55 +0000

    release: Enable installing packages as a non-root user
    
    Provide variables, PKG_REPOS_DIR and PKG_REPO_NAME, to allow the user to
    configure the source package repository.  Configure pkg to emit added
    files to a metalog which gets concatenated with the main metalog
    immediately before we build the root filesystem.
    
    Reviewed by:    cperciva, emaste
    MFC after:      3 days
    Sponsored by:   The FreeBSD Foundation
    Sponsored by:   Klara, Inc.
    Differential Revision:  https://reviews.freebsd.org/D52453
---
 release/Makefile.vm        |  6 ++++++
 release/tools/vmimage.subr | 35 ++++++++++++++++++++++++++---------
 share/man/man7/release.7   | 15 ++++++++++++++-
 3 files changed, 46 insertions(+), 10 deletions(-)

diff --git a/release/Makefile.vm b/release/Makefile.vm
index 8375650cd9aa..25c37ade1121 100644
--- a/release/Makefile.vm
+++ b/release/Makefile.vm
@@ -138,6 +138,9 @@ cw-${_CW:tl}-${_FS}-${_FMT}: ${QEMUTGT}
                EC2BASEIMG=${.OBJDIR}/${EC2-BASE${_FS:tu}${_FMT:tu}IMAGE} \
                ${WITHOUT_QEMU:DWITHOUT_QEMU=true} \
                ${NO_ROOT:DNO_ROOT=true} \
+               PKG_CMD=${PKG_CMD:Upkg} \
+               PKG_REPOS_DIR=${PKG_REPOS_DIR:U${.OBJDIR}/${.TARGET}/etc/pkg} \
+               PKG_REPO_NAME=${PKG_REPO_NAME:UFreeBSD-ports} \
                PKG_INSTALL_EPOCH=${PKG_INSTALL_EPOCH:U${GITEPOCH}} \
                ${.CURDIR}/scripts/mk-vmimage.sh \
                -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
@@ -191,6 +194,9 @@ vm-image:   ${QEMUTGT}
                QEMUSTATIC=${QEMUSTATIC} \
                ${WITHOUT_QEMU:DWITHOUT_QEMU=true} \
                ${NO_ROOT:DNO_ROOT=true} \
+               PKG_CMD=${PKG_CMD:Upkg} \
+               
PKG_REPOS_DIR=${PKG_REPOS_DIR:U${.OBJDIR}/${.TARGET}-${FORMAT}-${FS}/etc/pkg} \
+               PKG_REPO_NAME=${PKG_REPO_NAME:UFreeBSD-ports} \
                PKG_INSTALL_EPOCH=${PKG_INSTALL_EPOCH:U${GITEPOCH}} \
                ${.CURDIR}/scripts/mk-vmimage.sh \
                -C ${.CURDIR}/tools/vmimage.subr \
diff --git a/release/tools/vmimage.subr b/release/tools/vmimage.subr
index 41f889a1e665..b3187efd6526 100644
--- a/release/tools/vmimage.subr
+++ b/release/tools/vmimage.subr
@@ -163,19 +163,32 @@ vm_extra_enable_services() {
 }
 
 vm_extra_install_packages() {
-       if [ -n "${WITHOUT_QEMU}" ]; then
-               return 0
-       fi
-
        if [ -z "${VM_EXTRA_PACKAGES}" ]; then
                return 0
        fi
-       chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
-               /usr/sbin/pkg bootstrap -y
-       for p in ${VM_EXTRA_PACKAGES}; do
+       if [ -n "${NO_ROOT}" ]; then
+               for pkg in ${VM_EXTRA_PACKAGES}; do
+                       INSTALL_AS_USER=yes \
+                       ${PKG_CMD} \
+                           -o METALOG=${DESTDIR}/METALOG.pkg \
+                           -o REPOS_DIR=${PKG_REPOS_DIR} \
+                           -o PKG_DBDIR=${DESTDIR}/var/db/pkg \
+                           -r ${DESTDIR} \
+                           install -y -r ${PKG_REPO_NAME} $pkg
+               done
+               metalog_add_data ./var/db/pkg/local.sqlite
+       else
+               if [ -n "${WITHOUT_QEMU}" ]; then
+                       return 0
+               fi
+
                chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
-                       /usr/sbin/pkg install -y ${p}
-       done
+                       /usr/sbin/pkg bootstrap -y
+               for p in ${VM_EXTRA_PACKAGES}; do
+                       chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes 
\
+                               /usr/sbin/pkg install -y ${p}
+               done
+       fi
 
        return 0
 }
@@ -219,6 +232,10 @@ vm_extra_pkg_rmcache() {
 buildfs() {
        local md tmppool
 
+       if [ -f ${DESTDIR}/METALOG.pkg ]; then
+               cat ${DESTDIR}/METALOG.pkg >> ${DESTDIR}/METALOG
+       fi
+
        case "${VMFS}" in
        ufs)
                cd ${DESTDIR} && ${MAKEFS} ${MAKEFSARGS} -o label=rootfs -o 
version=2 -o softupdates=1 \
diff --git a/share/man/man7/release.7 b/share/man/man7/release.7
index 36c14afe0bf1..05f80374926f 100644
--- a/share/man/man7/release.7
+++ b/share/man/man7/release.7
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd May 20, 2025
+.Dd September 11, 2025
 .Dt RELEASE 7
 .Os
 .Sh NAME
@@ -286,6 +286,19 @@ is expected to exist by alternative means.
 Include base system packages for use with
 .Xr pkg 8
 on the install media, instead of legacy tarball distribution sets.
+.It Va PKG_CMD
+A path to the
+.Xr pkg 8
+executable to use when installing packages in release images as a non-root 
user.
+.It Va PKG_REPOS_DIR
+An optional path to a directory containing
+.Xr pkg 8
+repository configuration files.
+These configuration files will be used when installing packages in release
+images as a non-root user.
+.It Va PKG_REPO_NAME
+The name of the repository configuration to use when installing packages in
+release images as a non-root user.
 .El
 .Sh EMBEDDED BUILDS
 The following

Reply via email to