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
This commit is contained in:
Mark Johnston
2025-09-16 16:05:06 +00:00
parent 22cce201da
commit 5eb917426e
3 changed files with 46 additions and 10 deletions
+6
View File
@@ -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 \
+26 -9
View File
@@ -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 \
+14 -1
View File
@@ -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