The branch main has been updated by cperciva:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=71b2f9853529b1d1a160eaaa202e93a14f91eed1

commit 71b2f9853529b1d1a160eaaa202e93a14f91eed1
Author:     Colin Percival <[email protected]>
AuthorDate: 2025-10-17 07:01:33 +0000
Commit:     Colin Percival <[email protected]>
CommitDate: 2025-10-17 16:50:52 +0000

    vmimage.subr: Add missing directories to METALOG
    
    Theoretically METALOG should include everything which needs to go
    into disk images; unfortunately there are still a few bugs which
    are resulting in directories not being listed -- and if METALOG
    has files in unrecorded directories, the directories end up being
    created with 000 permissions.
    
    Oddly enough, systems where / has 000 permissions are not very
    usable.
    
    As a temporary hack, compare the staging tree against METALOG and
    add entries for any unrecorded directories.  This will hopefully
    be reverted before 15.0-RELEASE.
    
    Reviewed by:    bapt, emaste, ivy
    Sponsored by:   https://www.patreon.com/cperciva
    MFC after:      5 minutes
    Differential Revision:  https://reviews.freebsd.org/D53153
---
 release/tools/vmimage.subr | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/release/tools/vmimage.subr b/release/tools/vmimage.subr
index c3c917dcd642..842a808c623e 100644
--- a/release/tools/vmimage.subr
+++ b/release/tools/vmimage.subr
@@ -290,6 +290,24 @@ buildfs() {
                cat ${DESTDIR}/METALOG.pkg >> ${DESTDIR}/METALOG
        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
+
        # 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

Reply via email to