Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Sep 2025 13:12:09 GMT
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 4227d51b6e09 - main - release: create pkgbase VM and cloud images
Message-ID:  <202509251312.58PDC9SU061275@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=4227d51b6e09ceaaae0f5832c85ec700d80ef18f

commit 4227d51b6e09ceaaae0f5832c85ec700d80ef18f
Author:     Isaac Freund <ifreund@freebsdfoundation.org>
AuthorDate: 2025-07-24 08:43:43 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2025-09-25 12:55:56 +0000

    release: create pkgbase VM and cloud images
    
    VM and cloud images are now built as packaged base systems by default,
    matching the default for installation media.
    
    Setting -DNOPKGBASE allows building as non-pkgbase systems.
    
    Reviewed by:    emaste
    Sponsored by:   The FreeBSD Foundation
    Differential Revision: https://reviews.freebsd.org/D51483
---
 release/Makefile               |  3 ++-
 release/Makefile.vm            |  8 ++++++--
 release/tools/ec2-builder.conf |  9 +++++++++
 release/tools/ec2-small.conf   |  9 +++++++++
 release/tools/vmimage.subr     | 36 ++++++++++++++++++++++++++++++++----
 5 files changed, 58 insertions(+), 7 deletions(-)

diff --git a/release/Makefile b/release/Makefile
index fb2a60130700..d131a36157d7 100644
--- a/release/Makefile
+++ b/release/Makefile
@@ -23,7 +23,8 @@
 #            (by default, the directory above this one)
 #  NODISTSETS: if set, do not include dist sets or MANIFEST
 #  NOPKGBASE:  if set, include dist tarballs rather than pkgbase packages in
-#            disc1 and dvd1 installation media
+#            disc1 and dvd1 installation media and build VM/cloud images using
+#            make installkernel installworld.
 #  PORTSDIR: location of ports tree to distribute (default: /usr/ports)
 #  XTRADIR:  xtra-bits-dir argument for <arch>/mkisoimages.sh
 #  NOPKG:    if set, do not distribute third-party packages
diff --git a/release/Makefile.vm b/release/Makefile.vm
index 479547f76da1..eafd1d6abf71 100644
--- a/release/Makefile.vm
+++ b/release/Makefile.vm
@@ -126,7 +126,7 @@ ${_CW:tu}${_FS:tu}${_FMT:tu}IMAGE=	${_CW:tl}.${_FS}.${_FMT}
 cw-${_CW:tl}-${_FS}-${_FMT}: cw-ec2-base-${_FS}-${_FMT}
 .endif
 
-cw-${_CW:tl}-${_FS}-${_FMT}: ${QEMUTGT}
+cw-${_CW:tl}-${_FS}-${_FMT}: ${QEMUTGT} ${PKGBASE_REPO_DIR}
 	mkdir -p ${.OBJDIR}/${.TARGET}
 	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \
 		QEMUSTATIC=${QEMUSTATIC} \
@@ -137,6 +137,8 @@ cw-${_CW:tl}-${_FS}-${_FMT}: ${QEMUTGT}
 		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}} \
+		NOPKGBASE=${NOPKGBASE} \
+		PKGBASE_REPO_DIR=${.OBJDIR}/pkgbase-repo-dir \
 		${.CURDIR}/scripts/mk-vmimage.sh \
 		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
 		-F ${"${_CW:MEC2-BUILDER}" != "":?ufs:${_FS}} \
@@ -180,7 +182,7 @@ CLEANFILES+=	${VMBASE}.${FS}.${FORMAT}
 
 vm-base:	vm-image
 
-vm-image:	${QEMUTGT}
+vm-image:	${QEMUTGT} ${PKGBASE_REPO_DIR}
 .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
 . for FORMAT in ${VMFORMATS}
 .  for FS in ${VMFSLIST}
@@ -193,6 +195,8 @@ vm-image:	${QEMUTGT}
 		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}} \
+		NOPKGBASE=${NOPKGBASE} \
+		PKGBASE_REPO_DIR=${.OBJDIR}/pkgbase-repo-dir \
 		${.CURDIR}/scripts/mk-vmimage.sh \
 		-C ${.CURDIR}/tools/vmimage.subr \
 		-d ${.OBJDIR}/${.TARGET}-${FORMAT}-${FS} -F ${FS} \
diff --git a/release/tools/ec2-builder.conf b/release/tools/ec2-builder.conf
index 993dffc565eb..cf4276fc80ec 100644
--- a/release/tools/ec2-builder.conf
+++ b/release/tools/ec2-builder.conf
@@ -11,6 +11,15 @@ export VMSIZE=8000m
 export INSTALLOPTS="WITHOUT_DEBUG_FILES=YES WITHOUT_KERNEL_SYMBOLS=YES \
     WITHOUT_LIB32=YES WITHOUT_TESTS=YES WITHOUT_LLDB=YES"
 
+# Equivalent to INSTALLOPTS for pkgbase
+vm_extra_filter_base_packages() {
+	grep -v \
+		-e '.*-dbg$' \
+		-e '.*-lib32$' \
+		-e '^FreeBSD-tests.*' \
+		-e '^FreeBSD-lldb.*'
+}
+
 # Packages to install into the image we're creating.  In addition to packages
 # present on all EC2 AMIs, we install:
 # * ec2-scripts, which provides a range of EC2ification startup scripts,
diff --git a/release/tools/ec2-small.conf b/release/tools/ec2-small.conf
index e2a348d6ba8f..32d02cbb79e4 100644
--- a/release/tools/ec2-small.conf
+++ b/release/tools/ec2-small.conf
@@ -14,6 +14,15 @@ export VMSIZE=5000m
 export INSTALLOPTS="WITHOUT_DEBUG_FILES=YES WITHOUT_KERNEL_SYMBOLS=YES \
     WITHOUT_LIB32=YES WITHOUT_TESTS=YES WITHOUT_LLDB=YES"
 
+# Equivalent to INSTALLOPTS for pkgbase
+vm_extra_filter_base_packages() {
+	grep -v \
+		-e '.*-dbg$' \
+		-e '.*-lib32$' \
+		-e '^FreeBSD-tests.*' \
+		-e '^FreeBSD-lldb.*'
+}
+
 # Packages to install into the image we're creating.  In addition to packages
 # present on all EC2 AMIs, we install:
 # * ec2-scripts, which provides a range of EC2ification startup scripts,
diff --git a/release/tools/vmimage.subr b/release/tools/vmimage.subr
index b3187efd6526..577abaac73cf 100644
--- a/release/tools/vmimage.subr
+++ b/release/tools/vmimage.subr
@@ -70,13 +70,41 @@ vm_copy_base() {
 	return 0
 }
 
+vm_filter_base_packages() {
+	# Reads a list of all base system packages from stdin.
+	# Writes a list of base system packages to install to stdout.
+	grep -v -e '^FreeBSD-src.*' -e '^FreeBSD-kernel.*'
+	# There are several kernel variants available in separate packages.
+	# For VMs it is sufficient to install only the generic kernel.
+	echo "FreeBSD-kernel-man"
+	echo "FreeBSD-kernel-generic"
+	echo "FreeBSD-kernel-generic-dbg"
+}
+
+vm_extra_filter_base_packages() {
+	# Prototype. When overridden, allows further filtering of base system
+	# packages, reading package names from stdin and writing to stdout.
+	cat
+}
+
 vm_install_base() {
 	# Installs the FreeBSD userland/kernel to the virtual machine disk.
 
-	cd ${WORLDDIR} && \
-		make DESTDIR=${DESTDIR} ${INSTALLOPTS} \
-		installworld installkernel distribution || \
-		err "\n\nCannot install the base system to ${DESTDIR}."
+	if [ -z "${NOPKGBASE}" ]; then
+		local pkg_cmd
+		pkg_cmd="pkg --rootdir ${DESTDIR} --repo-conf-dir ${PKGBASE_REPO_DIR}
+			-o ASSUME_ALWAYS_YES=yes -o IGNORE_OSVERSION=yes
+			-o INSTALL_AS_USER=yes "
+		$pkg_cmd update
+		selected=$($pkg_cmd rquery -U -r FreeBSD-base %n | \
+			vm_filter_base_packages | vm_extra_filter_base_packages)
+		$pkg_cmd install -U -r FreeBSD-base $selected
+	else
+		cd ${WORLDDIR} && \
+			make DESTDIR=${DESTDIR} ${INSTALLOPTS} \
+			installworld installkernel distribution || \
+			err "\n\nCannot install the base system to ${DESTDIR}."
+	fi
 
 	# Bootstrap etcupdate(8) database.
 	mkdir -p ${DESTDIR}/var/db/etcupdate



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202509251312.58PDC9SU061275>