git: 6081365c27e6 - main - vmimage.subr: metalog_add generated databases

From: Colin Percival <cperciva_at_FreeBSD.org>
Date: Sat, 11 Oct 2025 00:03:23 UTC
The branch main has been updated by cperciva:

URL: https://cgit.FreeBSD.org/src/commit/?id=6081365c27e68707ad25c98159e364ee90fcf5db

commit 6081365c27e68707ad25c98159e364ee90fcf5db
Author:     Colin Percival <cperciva@FreeBSD.org>
AuthorDate: 2025-10-10 22:01:38 +0000
Commit:     Colin Percival <cperciva@FreeBSD.org>
CommitDate: 2025-10-11 00:02:34 +0000

    vmimage.subr: metalog_add generated databases
    
    The files /etc/login.conf.db, /etc/passwd, /etc/pwd.db, /etc/spwd.db,
    and /var/db/services.db are generated at install time.  When VM images
    are built using installworld, there is Makefile code which emits the
    necessary METALOG lines; but the pkgbase triggers do not do this.  This
    resulted in VM images which lacked these essential database files.
    
    VM images are currently the only place where this matters, since this
    issue is specific to non-root image builds uusing pkgbase.  (In some
    point in the future we will start building release ISO iamges from
    pkgbase, at which point it will be a problem there as well.)
    
    The long-term solution for this is probably to teach the relevant
    database-creating tools to emit METALOG lines; but for now, just log
    the necessary files from vmimage.subr.
    
    Reviewed by:    dch
    MFC after:      5 minutes
    Sponsored by:   https://www.patreon.com/cperciva
    Differential Revision:  https://reviews.freebsd.org/D53034
---
 release/tools/vmimage.subr | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/release/tools/vmimage.subr b/release/tools/vmimage.subr
index 067eb5ea48a8..15c4dd53e70b 100644
--- a/release/tools/vmimage.subr
+++ b/release/tools/vmimage.subr
@@ -213,6 +213,16 @@ vm_extra_install_packages() {
 			    install -y -r ${PKG_REPO_NAME} $pkg
 		done
 		metalog_add_data ./var/db/pkg/local.sqlite
+
+		# 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
 	else
 		if [ -n "${WITHOUT_QEMU}" ]; then
 			return 0