From nobody Wed Oct 1 21:20:00 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ccSW44Nvgz69Qxp; Wed, 01 Oct 2025 21:20:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ccSW43txcz3CyB; Wed, 01 Oct 2025 21:20:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759353600; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=YpaaSFWxC4Ce0d9s5plpneZxmiUdQM27pq5SEjYwtcY=; b=CdA5sWR1uBsBUio2SP000jyhRPZsTG5dgk7yzpo0fraw2EOTLb4R23HZInvuRhfImOfyWR 6FTKI/051xFyRXk/Npn9HzPW1vFPaooDKDlHrF6H/yO5MTCAF02+2Rd6rHupEF9wMlEPht 0UgxDLs4moqO6cOL4tYVrzn1FN5FC0GSnizn70KkvkQzqzQGw43Xhlt2Y37keFd7KC8olV tP0op8PUPWW8uNZy8uUTrWF1Okq0/u1sydkJXJacifzpKG4xiANxQ9OfJyv4x3zkzvmd23 scbjWq9Kx8yjkapEGg8Vmhdsd0NgUkPlKXOxKn1AfU4CMHd5zCOcpcJuwbrR7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759353600; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=YpaaSFWxC4Ce0d9s5plpneZxmiUdQM27pq5SEjYwtcY=; b=BBFqN9ugMGY4y1wMV6eBrQaVUIpJDSz1R5bHphY0AidVsJRhpbcZ7Vj9MEBavmUj2xPKzw 55Dc37LkHsYj7A5ZeSLMECY7g623TshP46ieE3WWR8XzLUK0s3x+MbYqQrENd+Hu0VCZjJ 9C0M2GWUhHH7SGkARAX+yw6NgL5GqPfAfKf6Bko1LwkYuQ6pwglLXLbcMarKjRvkeNvkAE VUuS7UdP9ge0B0EuCzpOsAZujqnVPIyqTvl1kzFViPdEYtmkJa7SGpkiDp9FkUdm+OmSe4 xaQmBkq82a9Ayk9QDRRxDjMNkKd3p0Jw8LyS5VrdTbZ0qzJ6gyP6vAU9U85gKg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1759353600; a=rsa-sha256; cv=none; b=k++nlY8DjpqMMVNi+NX9rQuDwuWg40v89QKM/K7CtYJRq4x3UzQ8b1uT/+kV0WBRRzXSd5 JASzDoNjg76AMYDes6vwYxKT2jRseLwwX+d2bvyn6p/FyhdOrX9hj8Lyn/Ialjd42KpkpG qqjnkuVH8aJ7RR5fJw0x5Eh3+eRnS1cH1WPbx8dEXeC+YVLjA2EBwWquLs2YyOz4LtxzPi 85Mr2wZLxYfp7OV3JxuVYEkjMKlnEUMsxaKIqFWmQzJBEgF7XkvLb/lGxAyrgTqeKvWOYW Q+PJkV7GcIyM9/juXgEWHUdYT7LChPV19oTmX3Ndd2G1T9v3OaQ5gjw7ySushw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ccSW43B4Bzf01; Wed, 01 Oct 2025 21:20:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 591LK05t048630; Wed, 1 Oct 2025 21:20:00 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 591LK0lU048604; Wed, 1 Oct 2025 21:20:00 GMT (envelope-from git) Date: Wed, 1 Oct 2025 21:20:00 GMT Message-Id: <202510012120.591LK0lU048604@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Ed Maste Subject: git: ecfdb6df48cc - stable/15 - release: create pkgbase VM and cloud images List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: ecfdb6df48cc1743b7624330d840747ca65a5479 Auto-Submitted: auto-generated The branch stable/15 has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=ecfdb6df48cc1743b7624330d840747ca65a5479 commit ecfdb6df48cc1743b7624330d840747ca65a5479 Author: Isaac Freund AuthorDate: 2025-07-24 08:43:43 +0000 Commit: Ed Maste CommitDate: 2025-10-01 21:19:16 +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 (cherry picked from commit 4227d51b6e09ceaaae0f5832c85ec700d80ef18f) --- 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 425223747148..6aec279cf161 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 /mkisoimages.sh # NOPKG: if set, do not distribute third-party packages diff --git a/release/Makefile.vm b/release/Makefile.vm index 25c37ade1121..7b1591e5390c 100644 --- a/release/Makefile.vm +++ b/release/Makefile.vm @@ -131,7 +131,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} \ @@ -142,6 +142,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}} \ @@ -185,7 +187,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} @@ -198,6 +200,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 33a87eb55f53..20f90f01c0c7 100644 --- a/release/tools/vmimage.subr +++ b/release/tools/vmimage.subr @@ -57,13 +57,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