From nobody Fri Sep 19 01:19:53 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 4cSZRt4nmXz68LMC; Fri, 19 Sep 2025 01:19:54 +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 4cSZRs52Brz49Yd; Fri, 19 Sep 2025 01:19:53 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758244793; 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=+IkOS2fnmfNp0Vx38G9CkxCJ3IsoV6Xbn50W36Pns+0=; b=dQ+g+FUolgrR4WXvwvkHsr+s9X3WHGE3MC8GCa7lrBs85L1kSa5f95avPkWGYVRfU/keoR mhCGhYBkm+30RPVc2SInjJN28n0wOjNTUeVymJ3upWx9WON7AheV/lh6HksDVRdzB79k74 93UN8aobTSd0Q4Z+AlwgBEgj8hdBOlGU7AAwzTD26byxUqUGq/FxGTF6GkHtCRsbedgHS9 cB919SdN2zI91OqXUNyv/B3ZSECaDGg36cgsGubYK1fMOdTBWp/Xiun7W75HDpPKSDN2iC PPBTcA+1zEL53yJBwtgwDBaJDPPW2RG+4ooUjNrdDwBrzpbpTntzmnnOlL2jow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758244793; 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=+IkOS2fnmfNp0Vx38G9CkxCJ3IsoV6Xbn50W36Pns+0=; b=NXO2GUihXeKpYaj14+ciGR4S+vy82eViADH4H//7lbEGK4PartV889NLFFEuX/iE7IdEeZ YwS7ADvfjxD4t3dVqtZFzzMFUWERrO9mWzzFw4mDdFdqgDV1IarWmLycSctECuDzGeY020 DpctpS75RuSBOt9v8AbxF8Ex+Bg0eIu96Upuk3pB+FILkZ0VzWRaOlJtnPq3mqoOLhmG2F q5kAdZ2T5Za811n9rN7gzPUbHdZfCnYvSOQgTf+F22HOGIzofDFq5LMhtdLkYrTpo7nN4b b/Z92Wx/vnu8PXS+04Eke9aNN19MgqLj2JZpawQb8qSR+P9C5yngSKuYQlGh6Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1758244793; a=rsa-sha256; cv=none; b=uiaE1JnW2eS7mJgewz63pb8jdAOoubU0cR+CLsnWNRnHQweuM+Z8AHFWYhCQ3yLFP7ddXz LaQJcUbsfFmhag7A3qNMMjn6Py3pZuCZgA+hsP8hEwNNAq7Wj8gsQTLEg5G1do/MayAvl/ gsTNLncQ6zyTStKJkhN+DDeccnYZ0Vp7wnypKbGcJ9wCOTgmSwLTndjTOEf23TjS46wMNh +ffjiDJuwJzRT9kMkU98TuqFnWFI6npUeco2OwBikY5ifaprBqqPCpC6At+cT4Pq2Z1IJe 5Fe1ctAe4mGhF19eJ27fENFFf9mQbFoONHZAJykSY2HjYDxjcoITchPC7P7BaQ== 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 4cSZRs482hzcM9; Fri, 19 Sep 2025 01:19:53 +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 58J1JrLV067091; Fri, 19 Sep 2025 01:19:53 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 58J1Jr5G067088; Fri, 19 Sep 2025 01:19:53 GMT (envelope-from git) Date: Fri, 19 Sep 2025 01:19:53 GMT Message-Id: <202509190119.58J1Jr5G067088@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Lexi Winter Subject: git: 00ae91fa64a1 - stable/15 - packages: Add meta-package sets 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: ivy X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 00ae91fa64a10c7c0b1edcea466b0b2ba97cb0cc Auto-Submitted: auto-generated The branch stable/15 has been updated by ivy: URL: https://cgit.FreeBSD.org/src/commit/?id=00ae91fa64a10c7c0b1edcea466b0b2ba97cb0cc commit 00ae91fa64a10c7c0b1edcea466b0b2ba97cb0cc Author: Lexi Winter AuthorDate: 2025-09-12 20:59:25 +0000 Commit: Lexi Winter CommitDate: 2025-09-19 01:17:27 +0000 packages: Add meta-package sets Add several metapackages which contain no files themselves, but depend on other packages. This allows the user to install a system by using a set like "FreeBSD-set-minimal" instead of having to know which specific packages are required, and it means if we add more package in the future, existing installations will get them automatically as long as they were installed using a set. The defined sets are significantly less granular than the actual packages; the assumption is that users who want a very specific set of packages installed can do that manually, while sets are intended more for typical users who just want to install FreeBSD. The following sets are defined: * minimal: the set of packages required to boot the system and bring up a multi-user UNIX system. This includes hardware support, networking (wireless, DHCP), basic functionality like syslogd, cron and periodic. It does not include a kernel, because the kernels are quite large and the user might want to use a custom kernel. sendmail and DMA are not included in minimal. Since we provide two MTAs, the user should select which one they want, or install one from ports. sshd is not included because it's not required for the base system, and the user might want to install it from ports. Some other significant subsystems (e.g. NFS, Kerberos) are also not included. The minimal set does not include any libraries itself, since we rely on dependencies to pull these in. This implies it doesn't include library manpages, which is fine, since users won't want manpages for libraries unless they've also installed the development packages. * devel: the compiler toolchain for building software, along with all "-dev" packages which include header files and static libraries. * lib32: 32-bit compatibility packages. This includes both runtime and development packages. * kernels: the kernel packages. For freebsd.org builds, this will be GENERIC, GENERIC-DEBUG, etc., for custom builds it will be whatever was set in $KERNCONF. * base: everything else; this includes the entire base system. For each set, also generate a -dbg set containing the debug packages for the set. The sets are built along with the rest of the packages using a new script called create-sets.sh, which examines the "set" annotation in each package and puts it in the appropriate set. This is in anticipation of the later "groups" feature appearing in pkg itself, at which point we can simply replace the set annotation with the group. MFC after: 3 days Reviewed by: imp, bapt Differential Revision: https://reviews.freebsd.org/D52412 (cherry picked from commit 66f36c3686762d9a6e48b0453fc7221be36a0eb8) --- Makefile.inc1 | 30 +++++++++- release/packages/create-sets.sh | 45 ++++++++++++++ release/packages/generate-set-ucl.lua | 96 ++++++++++++++++++++++++++++++ release/packages/generate-ucl.lua | 34 +++++++++++ release/packages/set-template.ucl | 15 +++++ release/packages/sets/base-dbg.ucl | 16 +++++ release/packages/sets/base.ucl | 16 +++++ release/packages/sets/devel-dbg.ucl | 13 ++++ release/packages/sets/devel.ucl | 13 ++++ release/packages/sets/kernels-dbg.ucl | 6 ++ release/packages/sets/kernels.ucl | 6 ++ release/packages/sets/lib32-dbg.ucl | 6 ++ release/packages/sets/lib32.ucl | 6 ++ release/packages/sets/minimal-dbg.ucl | 6 ++ release/packages/sets/minimal.ucl | 6 ++ release/packages/template.ucl | 33 +++++++--- release/packages/ucl/README | 21 +++++++ release/packages/ucl/at-all.ucl | 4 ++ release/packages/ucl/bmake-all.ucl | 5 ++ release/packages/ucl/bootloader-all.ucl | 4 ++ release/packages/ucl/caroot-all.ucl | 4 ++ release/packages/ucl/certctl-all.ucl | 4 ++ release/packages/ucl/clang-all.ucl | 4 ++ release/packages/ucl/clibs-all.ucl | 5 ++ release/packages/ucl/cron-all.ucl | 4 ++ release/packages/ucl/ctf-tools-all.ucl | 5 ++ release/packages/ucl/devd-all.ucl | 5 ++ release/packages/ucl/devmatch-all.ucl | 11 +++- release/packages/ucl/dhclient-all.ucl | 5 ++ release/packages/ucl/dtb-all.ucl | 5 ++ release/packages/ucl/fetch-all.ucl | 10 +++- release/packages/ucl/firmware-iwm-all.ucl | 10 +++- release/packages/ucl/fwget-all.ucl | 10 +++- release/packages/ucl/geom-all.ucl | 11 +++- release/packages/ucl/hyperv-tools-all.ucl | 10 +++- release/packages/ucl/inetd-all.ucl | 9 ++- release/packages/ucl/kernel-all.ucl | 5 ++ release/packages/ucl/lld-all.ucl | 4 ++ release/packages/ucl/lldb-all.ucl | 4 ++ release/packages/ucl/locales-all.ucl | 5 ++ release/packages/ucl/mtree-all.ucl | 5 ++ release/packages/ucl/newsyslog-all.ucl | 10 +++- release/packages/ucl/nuageinit-all.ucl | 5 ++ release/packages/ucl/periodic-all.ucl | 11 +++- release/packages/ucl/pkg-bootstrap-all.ucl | 11 +++- release/packages/ucl/ppp-all.ucl | 5 ++ release/packages/ucl/rc-all.ucl | 11 +++- release/packages/ucl/rdma-all.ucl | 3 + release/packages/ucl/rescue-all.ucl | 11 +++- release/packages/ucl/resolvconf-all.ucl | 11 +++- release/packages/ucl/runtime-all.ucl | 10 +++- release/packages/ucl/runtime.ucl | 1 + release/packages/ucl/syslogd-all.ucl | 10 +++- release/packages/ucl/toolchain-all.ucl | 5 ++ release/packages/ucl/ufs-all.ucl | 5 ++ release/packages/ucl/utilities-all.ucl | 5 ++ release/packages/ucl/vi-all.ucl | 10 +++- release/packages/ucl/vt-data-all.ucl | 5 ++ release/packages/ucl/wpa-all.ucl | 5 ++ release/packages/ucl/zfs-all.ucl | 5 ++ release/packages/ucl/zoneinfo-all.ucl | 4 ++ 61 files changed, 619 insertions(+), 40 deletions(-) diff --git a/Makefile.inc1 b/Makefile.inc1 index 98059640daab..97a0b00cc517 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -2097,6 +2097,14 @@ create-packages-world: _pkgbootstrap _repodir .PHONY DESTDIR=${WSTAGEDIR} \ PKG_VERSION=${PKG_VERSION} create-world-packages +.ORDER: create-packages-world create-packages-sets +.ORDER: create-packages-kernel create-packages-sets +create-packages-sets: _pkgbootstrap _repodir .PHONY + ${_+_}@cd ${.CURDIR}; \ + ${MAKE} -f Makefile.inc1 \ + DESTDIR=${WSTAGEDIR} \ + PKG_VERSION=${PKG_VERSION} create-sets-packages + create-packages-kernel: _pkgbootstrap _repodir .PHONY ${_+_}@cd ${.CURDIR}; \ ${MAKE} -f Makefile.inc1 \ @@ -2109,6 +2117,8 @@ create-packages-kernel-repo: .PHONY create-packages-kernel sign-packages create-packages-world-repo: .PHONY create-packages-world sign-packages +create-packages-sets-repo: .PHONY create-packages-sets sign-packages + create-packages-source: _pkgbootstrap _repodir .PHONY ${_+_}@cd ${.CURDIR}; \ ${MAKE} -f Makefile.inc1 \ @@ -2117,7 +2127,7 @@ create-packages-source: _pkgbootstrap _repodir .PHONY SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ create-source-packages -create-packages: .PHONY create-packages-world create-packages-kernel create-packages-source +create-packages: .PHONY create-packages-world create-packages-kernel create-packages-source create-packages-sets create-source-src-package: _pkgbootstrap .PHONY rm -f ${SSTAGEDIR}/src.plist 2>/dev/null || : @@ -2214,6 +2224,24 @@ create-world-package-${pkgname}: .PHONY -o ${REPODIR}/${PKG_ABI}/${PKG_OUTPUT_DIR} .endfor +create-sets-packages-jobs: .PHONY create-sets-packages +create-sets-packages: .PHONY + @echo "==> Creating set metapackages." + sh "${SRCDIR}/release/packages/create-sets.sh" "${SRCDIR}" \ + "${WSTAGEDIR}" "${REPODIR}/${PKG_ABI}/${PKG_OUTPUT_DIR}" \ + VERSION "${PKG_VERSION}" \ + PKG_NAME_PREFIX "${PKG_NAME_PREFIX}" \ + PKG_MAINTAINER "${PKG_MAINTAINER}" \ + PKG_WWW "${PKG_WWW}" + @for manifest in ${WSTAGEDIR}/set-*.ucl; do \ + echo "--> Processing manifest: $$manifest"; \ + ${PKG_CMD} -o ABI=${PKG_ABI} -o OSVERSION="${SRCRELDATE}" \ + create -f ${PKG_FORMAT} ${PKG_CLEVEL} \ + -M $$manifest \ + -o "${REPODIR}/${PKG_ABI}/${PKG_OUTPUT_DIR}" \ + || exit 1; \ + done + _default_flavor= -default .if make(*package*) && exists(${KSTAGEDIR}/kernel.meta) . if ${MK_DEBUG_FILES} != "no" diff --git a/release/packages/create-sets.sh b/release/packages/create-sets.sh new file mode 100755 index 000000000000..6c034834672e --- /dev/null +++ b/release/packages/create-sets.sh @@ -0,0 +1,45 @@ +#! /bin/sh + +# Generate metapackage sets. We do this by examining the annotations field +# of the packages we previously built. + +set -e + +if [ $# -lt 3 ]; then + printf >&2 'usage: %s \n' "$0" + exit 1 +fi + +srcdir="$1"; shift +wstagedir="$1"; shift +repodir="$1"; shift +# Everything after the first three arguments is UCL variables we pass to +# generate-set-ucl.lua. +UCL_VARS="$@" + +for pkg in "$repodir"/*.pkg; do + # If the package name doesn't containing a '-', then it's + # probably data.pkg or packagesite.pkg, which are not real + # packages. + { echo "$pkg" | grep -q '-'; } || continue + + set -- $(pkg query -F "$pkg" '%At %n %Av' | grep '^set ') + pkgname="$2" + set="$3" + SETS="$SETS $set" + setvar="$(echo "$set" | tr - _)" + eval PKGS_${setvar}=\"\$PKGS_${setvar} $pkgname\" +done + +for set in $(echo $SETS | tr ' ' '\n' | sort | uniq); do + setvar="$(echo "$set" | tr - _)" + eval deps=\"\$PKGS_${setvar}\" + + "${srcdir}/release/packages/generate-set-ucl.lua" \ + "${srcdir}/release/packages/set-template.ucl" \ + PKGNAME "$set" \ + SET_DEPENDS "$deps" \ + UCLFILES "${srcdir}/release/packages/sets" \ + $UCL_VARS \ + > "${wstagedir}/set-${set}.ucl" +done diff --git a/release/packages/generate-set-ucl.lua b/release/packages/generate-set-ucl.lua new file mode 100755 index 000000000000..b1b70053b02a --- /dev/null +++ b/release/packages/generate-set-ucl.lua @@ -0,0 +1,96 @@ +#!/usr/libexec/flua + +--[[ usage: +generare-set-ucl.lua