vmimage.subr: Include dangling symlinks in images

When creating VM images, we filter the METALOG file created by pkg(8)
when installing non-base packages, rejecting any lines which correspond
to files which don't exist; this solves a problem which arose when a
package was installed and then deinstalled (or upgraded) later in the
image-building process.

Unfortunately [ -e ... ] follows symlinks and is not basedir-aware, so
an absolute symlink which is valid *inside* the image is omitted from
the image if it points to something which isn't present in the build
host system.

Replace [ -e ... ] with [ -e ... ] || [ -L ... ] so that symlinks are
included even if dangling.

While I'm here, add quoting in case future paths become problematic.

Sponsored by:	Amazon
MFC after:	3 days
This commit is contained in:
Colin Percival committed 2026-09-21 17:19:01 -07:00
1 parent 8a0cab240f
commit 5a2328a178
1 file changed
+2 -1
+2 -1
View File
@@ -266,7 +266,8 @@ buildfs() {
# have been logged which no longer exist if a package was removed.
if [ -f ${DESTDIR}/METALOG.pkg ]; then
while read F REST; do
if [ -e ${DESTDIR}/${F} ]; then
if [ -e "${DESTDIR}/${F}" ] ||
[ -L "${DESTDIR}/${F}" ]; then
echo "${F} ${REST}" >> ${DESTDIR}/METALOG
fi
done < ${DESTDIR}/METALOG.pkg