From nobody Fri Sep 12 21:04:55 2025 X-Original-To: dev-commits-src-main@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 4cNn4R6R7Bz66Vqn; Fri, 12 Sep 2025 21:04:55 +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 4cNn4R4TfGz3WPS; Fri, 12 Sep 2025 21:04:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1757711095; 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=Bibq0urJrxKHDXUPMzyTZVQ2efcptYi7yZC89nVpwlg=; b=R3kW0jW43nh721eaK2LMTU0Mk7v326C/qxWBwiaFvHFAvW2EIGdXf4CcmQ+lZKUPP5d+qZ nXgR+5NCj1w3qnxmKRXvUaJeexJz0mXaHOnASnVmPhIHcgpyWX0LOGi2kkp8DtwTaHUyq8 GWdM+CdC2W3Ku+rMiOZAcug4CCgPu/sC7QKg+46wxjp4Lq5K67rQZ6O1yxlPNYRpBlWHX3 cbtysjjdckhxaV79quxsMlA0ofY2Y6XlDnA+PSGgr6GcQvzhJn01RXcKw9Cjqq7swXwly5 1U47R5zY1JoD1a/6n01Dp5dUb7vTEsWMMVR+0gtLvACC/R7vmjyf9c5Y6W1MqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1757711095; 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=Bibq0urJrxKHDXUPMzyTZVQ2efcptYi7yZC89nVpwlg=; b=XxdH7RoiwustyR6RekIX8kT4TLZSr+zhV6N2l0jA0TWJ2LUbVZNlnnTiAMrX3QnNCHavq5 w2TMq1HTu4yOc8ZG86zNenT0PSv/l2YMiKoZGEanZtAmn0kSmVc1ErZgBGByS/cpZvefCo h4AzZMDIDif4uGhsU6up8enMmgiuLTOhySzYB//Br8+gymsc7L9S3DG4y2IUDlY8NJ8/T9 PBrMkIxyR97hBd97f4mf8m2jsTt++7d2IhtjHcm4A2H5VSriCVRItXQE3AqqQUfWe5LN11 U4XsN0CsxmxNpJkhbzlC/Bqu3usufb7NzgIFzmrHR/DMB+tDzJzcEXt1XUTAUA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1757711095; a=rsa-sha256; cv=none; b=MjcIYvjrMoYh2g7xGksq/sPxL7ZlFYUD2EVEQvAIhvJSk0MtWkqrNIe8opVdR3vLM3GzNB naUgBIE6jnfld+bt0PxSZdIw3VpITRCtJ5WE1XoG2RUNMJ81030BSvPFdA+rpNYk7yg2rK nlvW5+sX8wvhV46LLg4vPnw4E1buJGHJcXhN/oglYVpfoqboGIrY7eAQlkyVQ/LZ46gMBA 1ehX8ek8r+Zx2AzMuOkQtRXauM3jmPpM62FGf8UL8WGaYiqaH/q30xZ19AuN/4EjmHKlb5 l1BB5vhaK23u/igjtE2/Hy3Y6U9oNvGNkW+WK9T2c/2B/Kr1JGxta3BWI7kLjg== 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 4cNn4R41cgz18Mp; Fri, 12 Sep 2025 21:04:55 +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 58CL4tcx045310; Fri, 12 Sep 2025 21:04:55 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 58CL4tD4045307; Fri, 12 Sep 2025 21:04:55 GMT (envelope-from git) Date: Fri, 12 Sep 2025 21:04:55 GMT Message-Id: <202509122104.58CL4tD4045307@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Lexi Winter Subject: git: 66f36c368676 - main - packages: Add meta-package sets List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: 66f36c3686762d9a6e48b0453fc7221be36a0eb8 Auto-Submitted: auto-generated The branch main has been updated by ivy: URL: https://cgit.FreeBSD.org/src/commit/?id=66f36c3686762d9a6e48b0453fc7221be36a0eb8 commit 66f36c3686762d9a6e48b0453fc7221be36a0eb8 Author: Lexi Winter AuthorDate: 2025-09-12 20:59:25 +0000 Commit: Lexi Winter CommitDate: 2025-09-12 20:59:25 +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 --- 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