On 11/11/2023 19:00, Roger Marquis wrote:
For those who are concerned about backup files being left in non-backup directories this small script will cleanup .pkgsave files:DBPATH=/var/db/pkgsave/`date +%G%m%d%H%M` if [ ! -d $DBPATH ]; then mkdir -p $DBPATH fi for f in `find / -type f -name \*.pkgsave` ; do fori="`echo $f | sed 's/.pkgsave//'`" diff $f $fori >/dev/null 2>&1 if [ $? = 0 ]; then rm -f $f else oripath="`dirname $f`" if [ ! -d $DBPATH/$oripath ]; then mkdir -p $DBPATH/$oripath fi mv -f $f $DBPATH/$oripath fi done
I too have been busy converting everything to base packages, and it's all gone very smoothly, albeit with a lot of mopping up of .pkgsave files.
A couple of things I noticed:* /var/db/locate.database is replaced by the installation of FreeBSD-runtime and you then would want to restore the original .pkgsave file. However, after that it's then flagged by `pkg check`:
``` # pkg check -s FreeBSD-runtime Checking FreeBSD-runtime: 0%FreeBSD-runtime-14.snap20231109173050: checksum mismatch for /var/db/locate.database
Checking FreeBSD-runtime: 100% ```Which makes no sense -- by its nature /var/db/locate.database is going to be rewritten with contents that vary week-to-week. In fact, this file probably shouldn't be included in any package. It will be created by the 310.locate periodic script whenever that runs, and the locate(1) command handles a non-existent /var/db/locate.database quite sensibly.
```
% git diff
diff --git a/etc/Makefile b/etc/Makefile
index b76d6e6462f4..dd9ddfef373f 100644
--- a/etc/Makefile
+++ b/etc/Makefile
@@ -84,10 +84,6 @@ distribution:
${INSTALL_SYMLINK} -T "package=sendmail" \
mail/aliases ${DESTDIR}/etc/aliases; \
fi
-.endif
-.if ${MK_LOCATE} != "no"
- ${INSTALL} -o nobody -g ${BINGRP} -m 644 -T "package=runtime"\
- /dev/null ${DESTDIR}/var/db/locate.database
.endif
cd ${.CURDIR}/..; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
-T "package=runtime" ${FREEBSD} ${DESTDIR}/
```
This is the only mismatched checksum I've seen as a result of switching
to packages.
* There are several symbolic links to directories that get replaced and renamed adding .pkgsave, for instance:
/usr/share/nls/en_US.US_ASCII.pkgsave -> C /usr/share/nls/POSIX.pkgsave -> C ... and many morebut their target isn't changed, so they resolve to the "new" content of /usr/share/nls/C/ pkg(8) doesn't create .pkgsave versions of directories, and I think it should treat symbolic links likewise, according to what the target of the link is.
So a link to a directory doesn't get a .pkgsave copy. A link to a file should only get a .pkgsave copy if the target file itself gets a .pkgsave copy and in that case, the new .pkgsave link should point at that .pkgsave copy.
Cheers,
Matthew
OpenPGP_signature.asc
Description: OpenPGP digital signature
