git: 5eb917426e0a - main - release: Enable installing packages as a non-root user
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 16 Sep 2025 16:10:03 UTC
The branch main has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=5eb917426e0aab1e82c7b0e7239724d18bae206a
commit 5eb917426e0aab1e82c7b0e7239724d18bae206a
Author: Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2025-09-16 16:05:06 +0000
Commit: Mark Johnston <markj@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