git: 54e006369c9a - main - release: Remove not-NO_ROOT cases
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 29 Jan 2026 17:03:34 UTC
The branch main has been updated by emaste:
URL: https://cgit.FreeBSD.org/src/commit/?id=54e006369c9aab4f3a22f026eb6924c0f9cafda8
commit 54e006369c9aab4f3a22f026eb6924c0f9cafda8
Author: Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2025-12-11 17:16:53 +0000
Commit: Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-01-29 17:03:20 +0000
release: Remove not-NO_ROOT cases
We always use NO_ROOT for release artifact builds, so remove the
alternate code paths.
For the first step we set NO_ROOT unconditionally in cases that invoke
submakes, and turn NO_ROOT being unset into an error in lover-level
targets so that we can catch potential out-of-tree build scripts (or
missed in-tree cases) that expect to run not-NO_ROOT builds. The second
step will be to remove those entirely.
Reviewed by: cperciva
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D54179
---
release/release.sh | 4 +-
release/scripts/pkg-stage.sh | 14 +---
release/tools/azure.conf | 13 +--
release/tools/ec2.conf | 8 +-
release/tools/vagrant.conf | 10 +--
release/tools/vmimage.subr | 192 ++++++++++++++++++-------------------------
6 files changed, 92 insertions(+), 149 deletions(-)
diff --git a/release/release.sh b/release/release.sh
index f0226e4cd3c5..480d6b34f191 100755
--- a/release/release.sh
+++ b/release/release.sh
@@ -200,9 +200,7 @@ env_check() {
WITH_DVD=${WITH_DVD} WITH_VMIMAGES=${WITH_VMIMAGES} \
WITH_CLOUDWARE=${WITH_CLOUDWARE} WITH_OCIIMAGES=${WITH_OCIIMAGES} \
XZ_THREADS=${XZ_THREADS} NOPKGBASE=${NOPKGBASE}"
- if [ -n "${NO_ROOT}" ]; then
- RELEASE_RMAKEFLAGS="${RELEASE_RMAKEFLAGS} NO_ROOT=1 WITHOUT_QEMU=1"
- fi
+ RELEASE_RMAKEFLAGS="${RELEASE_RMAKEFLAGS} NO_ROOT=1 WITHOUT_QEMU=1"
return 0
} # env_check()
diff --git a/release/scripts/pkg-stage.sh b/release/scripts/pkg-stage.sh
index b64fe5e5f1e5..d06fc9dd1d41 100755
--- a/release/scripts/pkg-stage.sh
+++ b/release/scripts/pkg-stage.sh
@@ -4,8 +4,6 @@
set -e
-unset NO_ROOT
-
export ASSUME_ALWAYS_YES="YES"
export PKG_DBDIR="/tmp/pkg"
export PERMISSIVE="YES"
@@ -53,15 +51,13 @@ usage()
while getopts N opt; do
case "$opt" in
- N) NO_ROOT=1 ;;
+ N) ;;
*) usage ;;
esac
done
PKG_ARGS="-d --rootdir ${ROOTDIR}"
-if [ $NO_ROOT ]; then
- PKG_ARGS="$PKG_ARGS -o INSTALL_AS_USER=1"
-fi
+PKG_ARGS="$PKG_ARGS -o INSTALL_AS_USER=1"
PKGCMD="/usr/sbin/pkg ${PKG_ARGS}"
if [ ! -x /usr/local/sbin/pkg ]; then
@@ -110,10 +106,8 @@ ln -s ../All/$(${PKGCMD} rquery %n-%v pkg).pkg ${LATEST_DIR}/pkg.pkg
${PKGCMD} repo ${PKG_REPODIR}
-if [ $NO_ROOT ]; then
- mtree -c -p $ROOTDIR | mtree -C -k type,mode,link,size | \
- grep '^./packages[/ ]' >> $ROOTDIR/METALOG
-fi
+mtree -c -p $ROOTDIR | mtree -C -k type,mode,link,size | \
+ grep '^./packages[/ ]' >> $ROOTDIR/METALOG
# Always exit '0', even if pkg(8) complains about conflicts.
exit 0
diff --git a/release/tools/azure.conf b/release/tools/azure.conf
index 4fa6ba4d924d..7a4f0b5027cf 100644
--- a/release/tools/azure.conf
+++ b/release/tools/azure.conf
@@ -34,17 +34,8 @@ vm_extra_pre_umount() {
# builds this is unnecessary as pkg will not be installed to
# begin with.
if [ -z "${NO_ROOT}" ]; then
- mount -t devfs devfs ${DESTDIR}/dev
-
- # The firstboot_pkgs rc.d script will download the repository
- # catalogue and install or update pkg when the instance first
- # launches, so these files would just be replaced anyway; removing
- # them from the image allows it to boot faster.
- chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
- /usr/sbin/pkg delete -f -y pkg
- umount ${DESTDIR}/dev
- rm -r ${DESTDIR}/var/db/pkg/repos/FreeBSD-ports
- rm -r ${DESTDIR}/var/db/pkg/repos/FreeBSD-ports-kmods
+ echo "ERROR: NO_ROOT not set" >&2
+ exit 1
fi
pw -R ${DESTDIR} usermod root -h -
diff --git a/release/tools/ec2.conf b/release/tools/ec2.conf
index 335db6cca93a..744ac24a3f0f 100644
--- a/release/tools/ec2.conf
+++ b/release/tools/ec2.conf
@@ -26,12 +26,8 @@ ec2_common() {
# unprivileged builds this is unnecessary as pkg will not be
# installed to begin with.
if [ -z "${NO_ROOT}" ]; then
- mount -t devfs devfs ${DESTDIR}/dev
- chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
- /usr/sbin/pkg delete -f -y pkg
- umount ${DESTDIR}/dev
- rm -r ${DESTDIR}/var/db/pkg/repos/FreeBSD-ports
- rm -r ${DESTDIR}/var/db/pkg/repos/FreeBSD-ports-kmods
+ echo "ERROR: NO_ROOT not set" >&2
+ exit 1
fi
# Turn off IPv6 Duplicate Address Detection; the EC2 networking
diff --git a/release/tools/vagrant.conf b/release/tools/vagrant.conf
index 37eff7a899ab..f14a9e8cb6fc 100644
--- a/release/tools/vagrant.conf
+++ b/release/tools/vagrant.conf
@@ -15,14 +15,8 @@ export VM_RC_LIST="firstboot_freebsd_update firstboot_pkgs growfs"
vagrant_common () {
if [ -z "${NO_ROOT}" ]; then
- # The firstboot_pkgs rc.d script will download the repository
- # catalogue and install or update pkg when the instance first
- # launches, so these files would just be replaced anyway;
- # removing them from the image allows it to boot faster.
- pkg -c ${DESTDIR} clean -y -a
- pkg -c ${DESTDIR} delete -f -y pkg
- rm -r ${DESTDIR}/var/db/pkg/repos/FreeBSD-ports
- rm -r ${DESTDIR}/var/db/pkg/repos/FreeBSD-ports-kmods
+ echo "ERROR: NO_ROOT not set" >&2
+ exit 1
fi
# Vagrant instances use DHCP to get their network configuration.
diff --git a/release/tools/vmimage.subr b/release/tools/vmimage.subr
index f7fc9906c049..3975e94913c9 100644
--- a/release/tools/vmimage.subr
+++ b/release/tools/vmimage.subr
@@ -41,21 +41,19 @@ cleanup() {
metalog_add_data() {
local file mode type
- if [ -n "${NO_ROOT}" ]; then
- file=$1
- if [ -f ${DESTDIR}/${file} ]; then
- type=file
- mode=${2:-0644}
- elif [ -d ${DESTDIR}/${file} ]; then
- type=dir
- mode=${2:-0755}
- else
- echo "metalog_add_data: ${file} not found" >&2
- return 1
- fi
- echo "${file} type=${type} uname=root gname=wheel mode=${mode}" >> \
- ${DESTDIR}/METALOG
+ file=$1
+ if [ -f ${DESTDIR}/${file} ]; then
+ type=file
+ mode=${2:-0644}
+ elif [ -d ${DESTDIR}/${file} ]; then
+ type=dir
+ mode=${2:-0755}
+ else
+ echo "metalog_add_data: ${file} not found" >&2
+ return 1
fi
+ echo "${file} type=${type} uname=root gname=wheel mode=${mode}" >> \
+ ${DESTDIR}/METALOG
}
vm_create_base() {
@@ -103,9 +101,7 @@ vm_install_base() {
pkg_cmd="${PKG_CMD} --rootdir ${DESTDIR} --repo-conf-dir ${PKGBASE_REPO_DIR}
-o ASSUME_ALWAYS_YES=yes -o IGNORE_OSVERSION=yes
-o ABI=${PKG_ABI} -o INSTALL_AS_USER=yes "
- if [ -n "${NO_ROOT}" ]; then
- pkg_cmd="$pkg_cmd -o METALOG=METALOG"
- fi
+ pkg_cmd="$pkg_cmd -o METALOG=METALOG"
$pkg_cmd update
selected=$(vm_base_packages_list | vm_extra_filter_base_packages)
$pkg_cmd install -U -r FreeBSD-base $selected
@@ -126,14 +122,12 @@ vm_install_base() {
etcupdate extract -B \
-M "TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH}" \
-s ${WORLDDIR} -d ${DESTDIR}/var/db/etcupdate \
- -L /dev/stdout ${NO_ROOT:+-N}
- if [ -n "${NO_ROOT}" ]; then
- # Reroot etcupdate's internal METALOG to the whole tree
- sed -n 's,^\.,./var/db/etcupdate/current,p' \
- ${DESTDIR}/var/db/etcupdate/current/METALOG | \
- env -i LC_COLLATE=C sort >> ${DESTDIR}/METALOG
- rm ${DESTDIR}/var/db/etcupdate/current/METALOG
- fi
+ -L /dev/stdout -N
+ # Reroot etcupdate's internal METALOG to the whole tree
+ sed -n 's,^\.,./var/db/etcupdate/current,p' \
+ ${DESTDIR}/var/db/etcupdate/current/METALOG | \
+ env -i LC_COLLATE=C sort >> ${DESTDIR}/METALOG
+ rm ${DESTDIR}/var/db/etcupdate/current/METALOG
echo '# Custom /etc/fstab for FreeBSD VM images' \
> ${DESTDIR}/etc/fstab
@@ -209,40 +203,25 @@ vm_extra_install_packages() {
if [ -z "${VM_EXTRA_PACKAGES}" ]; then
return 0
fi
- if [ -n "${NO_ROOT}" ]; then
- for pkg in ${VM_EXTRA_PACKAGES}; do
- INSTALL_AS_USER=yes \
- ${PKG_CMD} \
- -o ABI=${PKG_ABI} \
- -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
+ for pkg in ${VM_EXTRA_PACKAGES}; do
INSTALL_AS_USER=yes \
- ${PKG_CMD} \
+ ${PKG_CMD} \
-o ABI=${PKG_ABI} \
+ -o METALOG=${DESTDIR}/METALOG.pkg \
-o REPOS_DIR=${PKG_REPOS_DIR} \
-o PKG_DBDIR=${DESTDIR}/var/db/pkg \
-r ${DESTDIR} \
- autoremove -y
- if [ -n "${NOPKGBASE}" ]; then
- metalog_add_data ./var/db/pkg/local.sqlite
- fi
- else
- if [ -n "${WITHOUT_QEMU}" ]; then
- return 0
- fi
-
- chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
- /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
- chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
- /usr/sbin/pkg autoremove -y
+ install -y -r ${PKG_REPO_NAME} $pkg
+ done
+ INSTALL_AS_USER=yes \
+ ${PKG_CMD} \
+ -o ABI=${PKG_ABI} \
+ -o REPOS_DIR=${PKG_REPOS_DIR} \
+ -o PKG_DBDIR=${DESTDIR}/var/db/pkg \
+ -r ${DESTDIR} \
+ autoremove -y
+ if [ -n "${NOPKGBASE}" ]; then
+ metalog_add_data ./var/db/pkg/local.sqlite
fi
return 0
@@ -276,18 +255,11 @@ vm_emulation_cleanup() {
}
vm_extra_pkg_rmcache() {
- if [ -n "${NO_ROOT}" ]; then
- ${PKG_CMD} \
- -o ASSUME_ALWAYS_YES=yes \
- -o INSTALL_AS_USER=yes \
- -r ${DESTDIR} \
- clean -y -a
- else
- if [ -e ${DESTDIR}/usr/local/sbin/pkg ]; then
- chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
- /usr/local/sbin/pkg clean -y -a
- fi
- fi
+ ${PKG_CMD} \
+ -o ASSUME_ALWAYS_YES=yes \
+ -o INSTALL_AS_USER=yes \
+ -r ${DESTDIR} \
+ clean -y -a
return 0
}
@@ -306,57 +278,55 @@ buildfs() {
done < ${DESTDIR}/METALOG.pkg
fi
- if [ -n "${NO_ROOT}" ]; then
- # Check for any directories in the staging tree which weren't
- # recorded in METALOG, and record them now. This is a quick hack
- # to avoid creating unusable VM images and should go away once
- # the bugs which produce such unlogged directories are gone.
- grep type=dir ${DESTDIR}/METALOG |
- cut -f 1 -d ' ' |
- sort -u > ${DESTDIR}/METALOG.dirs
- ( cd ${DESTDIR} && find . -type d ) |
- sort |
- comm -23 - ${DESTDIR}/METALOG.dirs > ${DESTDIR}/METALOG.missingdirs
- if [ -s ${DESTDIR}/METALOG.missingdirs ]; then
- echo "WARNING: Directories exist but were not in METALOG"
- cat ${DESTDIR}/METALOG.missingdirs
- fi
- while read DIR; do
- metalog_add_data ${DIR}
- done < ${DESTDIR}/METALOG.missingdirs
-
- if [ -z "${NOPKGBASE}" ]; then
- # Add some database files which are created by pkg triggers;
- # at some point in the future the tools which create these
- # files should probably learn how to record them in METALOG
- # (which would simplify no-root installworld as well).
- metalog_add_data ./etc/login.conf.db
- metalog_add_data ./etc/passwd
- metalog_add_data ./etc/pwd.db
- metalog_add_data ./etc/spwd.db 600
- metalog_add_data ./var/db/services.db
- fi
+ # Check for any directories in the staging tree which weren't
+ # recorded in METALOG, and record them now. This is a quick hack
+ # to avoid creating unusable VM images and should go away once
+ # the bugs which produce such unlogged directories are gone.
+ grep type=dir ${DESTDIR}/METALOG |
+ cut -f 1 -d ' ' |
+ sort -u > ${DESTDIR}/METALOG.dirs
+ ( cd ${DESTDIR} && find . -type d ) |
+ sort |
+ comm -23 - ${DESTDIR}/METALOG.dirs > ${DESTDIR}/METALOG.missingdirs
+ if [ -s ${DESTDIR}/METALOG.missingdirs ]; then
+ echo "WARNING: Directories exist but were not in METALOG"
+ cat ${DESTDIR}/METALOG.missingdirs
+ fi
+ while read DIR; do
+ metalog_add_data ${DIR}
+ done < ${DESTDIR}/METALOG.missingdirs
- if [ -n "${MISSING_METALOGS}" ]; then
- # Hack to allow VM configurations to add files which
- # weren't being added to METALOG appropriately. This
- # is mainly a workaround for the @sample bug and it
- # should go away before FreeBSD 15.1 ships.
- for P in ${MISSING_METALOGS}; do
- metalog_add_data ${P}
- done
- fi
+ if [ -z "${NOPKGBASE}" ]; then
+ # Add some database files which are created by pkg triggers;
+ # at some point in the future the tools which create these
+ # files should probably learn how to record them in METALOG
+ # (which would simplify no-root installworld as well).
+ metalog_add_data ./etc/login.conf.db
+ metalog_add_data ./etc/passwd
+ metalog_add_data ./etc/pwd.db
+ metalog_add_data ./etc/spwd.db 600
+ metalog_add_data ./var/db/services.db
+ fi
- # Sort METALOG file; makefs produces directories with 000 permissions
- # if their contents are seen before the directories themselves.
- env -i LC_COLLATE=C sort -u ${DESTDIR}/METALOG > ${DESTDIR}/METALOG.sorted
- mv ${DESTDIR}/METALOG.sorted ${DESTDIR}/METALOG
+ if [ -n "${MISSING_METALOGS}" ]; then
+ # Hack to allow VM configurations to add files which
+ # weren't being added to METALOG appropriately. This
+ # is mainly a workaround for the @sample bug and it
+ # should go away before FreeBSD 15.1 ships.
+ for P in ${MISSING_METALOGS}; do
+ metalog_add_data ${P}
+ done
fi
+ # Sort METALOG file; makefs produces directories with 000 permissions
+ # if their contents are seen before the directories themselves.
+ env -i LC_COLLATE=C sort -u ${DESTDIR}/METALOG > ${DESTDIR}/METALOG.sorted
+ mv ${DESTDIR}/METALOG.sorted ${DESTDIR}/METALOG
+
case "${VMFS}" in
ufs)
cd ${DESTDIR} && ${MAKEFS} ${MAKEFSARGS} -o label=rootfs -o version=2 -o softupdates=1 \
- ${VMBASE} .${NO_ROOT:+/METALOG}
+ ${VMBASE} ./METALOG
;;
zfs)
cd ${DESTDIR} && ${MAKEFS} -t zfs ${MAKEFSARGS} \
@@ -376,7 +346,7 @@ buildfs() {
-o fs=zroot/var/log\;setuid=off\;exec=off \
-o fs=zroot/var/mail\;atime=on \
-o fs=zroot/var/tmp\;setuid=off \
- ${VMBASE} .${NO_ROOT:+/METALOG}
+ ${VMBASE} ./METALOG
;;
*)
echo "Unexpected VMFS value '${VMFS}'"