I tried removing and reinstalling e2fsprogs, and it made no difference. # pkg check -s e2fsprogs Checking e2fsprogs: 0% e2fsprogs-1.45.6_5: checksum mismatch for /usr/local/sbin/e2fsck e2fsprogs-1.45.6_5: checksum mismatch for /usr/local/sbin/fsck.ext2 e2fsprogs-1.45.6_5: checksum mismatch for /usr/local/sbin/fsck.ext3 e2fsprogs-1.45.6_5: checksum mismatch for /usr/local/sbin/fsck.ext4 e2fsprogs-1.45.6_5: checksum mismatch for /usr/local/sbin/fsck_ext2fs $ uname -mrs FreeBSD 12.2-RELEASE-p1 amd64 $ cat /usr/local/etc/pkg/repos/FreeBSD.conf FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest", }
This is a known issue due to a pkg limitation. We need to have the same executable accessible in $PREFIX/sbin where it belongs, and under /sbin. In order to avoid packaging the same file twice, I could use symlinks or hardlinks. Hardlinks would break when pkg unpacks the package on installation in case $PREFIX/sbin were not on the same file system as /sbin. The current solution is that the post-install script (pkg-install) tries to convert them to hard links on systems where this is possible. This happens without pkg's knowing and causes the checksum differences. I'd previously tried to just linking or copyoing the files without packaging them, which caused PRs complaining that "pkg which" would't report which package the files originated from... So some artifact will remain until pkg learns some "hardlink or copy" option.
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/ports/commit/?id=54b26298c82275501e6dcc6c733d21c0a6bf0d9f commit 54b26298c82275501e6dcc6c733d21c0a6bf0d9f Author: Matthias Andree <mandree@FreeBSD.org> AuthorDate: 2021-08-04 20:09:19 +0000 Commit: Matthias Andree <mandree@FreeBSD.org> CommitDate: 2021-08-04 21:23:08 +0000 sysutils/e2fsprogs: port rework 1 - sysutils/e2fsprogs: fix checksum mismatches e2fsprogs has replaced symlinks by hardlinks in its post-install if /sbin and ${PREFIX}/sbin were on the same file system, and unless script processing was defeated on install or upgrade. Leave symlinks in place to avoid checksum mismatches. PR: 252184 [1] 2 - add FLAVORS for /sbin handling - no flavor (default): set symlinks from $PREFIX/sbin to /sbin - roothardlinks: set hardlinks from $PREFIX/sbin to /sbin, when $PREFIX, its children, and /sbin reside on the same file system - nobootfsck: do not install into /sbin, but this makes fsck unavailable for ext2/ext3/ext4 file systems before $PREFIX/ is mounted Require tests on i386 and amd64 only for FreeBSD >= 14 (not >= 12). Do not print removal advice from post-uninstall on upgrades. sysutils/e2fsprogs/Makefile | 40 +++++++++++++++++++++++++++++++++++++--- sysutils/e2fsprogs/pkg-install | 21 ++------------------- sysutils/e2fsprogs/pkg-plist | 4 ++-- 3 files changed, 41 insertions(+), 24 deletions(-)
I have the latest version of the e2fsprogs package installed. I tried transferring the system to another hard drive using dump/restore. After restore I have: pkg check -s e2fsprogs Checking e2fsprogs: 0% e2fsprogs-1.46.3: missing file /usr/local/sbin/fsck.ext2 e2fsprogs-1.46.3: missing file /usr/local/sbin/fsck.ext3 e2fsprogs-1.46.3: missing file /usr/local/sbin/fsck.ext4 Checking e2fsprogs: 100% Why is this happening? And how can I avoid this without reinstalling e2fsprogs? -- FreeBSD 12.2 RELEASE p9 amd64.
(In reply to Serge Volkov from comment #3) Serge, I don't know how or why this happened. Were there any errors or warnings reported from dump or restore? What options did you use? Did you restore into the same directories, or move things around? What file systems types did you use? This is an extract from a fresh package install: 1446205 lrwxr-xr-x 4 root wheel 12 Aug 5 03:12 /usr/local/sbin/e2fsck -> /sbin/e2fsck 1446206 -r-xr-xr-x 1 root wheel 32800 Aug 5 03:12 /usr/local/sbin/e2image 1446244 -r-xr-xr-x 3 root wheel 104912 Aug 5 03:12 /usr/local/sbin/e2label 1446149 -r-xr-xr-x 2 root wheel 25472 Aug 5 03:12 /usr/local/sbin/e2mmpstatus 1446245 -r-xr-xr-x 1 root wheel 15704 Aug 5 03:12 /usr/local/sbin/e2undo 1446244 -r-xr-xr-x 3 root wheel 104912 Aug 5 03:12 /usr/local/sbin/findfs 1446205 lrwxr-xr-x 4 root wheel 12 Aug 5 03:12 /usr/local/sbin/fsck.ext2 -> /sbin/e2fsck 1446205 lrwxr-xr-x 4 root wheel 12 Aug 5 03:12 /usr/local/sbin/fsck.ext3 -> /sbin/e2fsck 1446205 lrwxr-xr-x 4 root wheel 12 Aug 5 03:12 /usr/local/sbin/fsck.ext4 -> /sbin/e2fsck You can see that the missing fsck.ext* files are hard links with e2fsck which in itself is a symlink, as of 1.46.3. You can recreate them easily (or else you can reinstall e2fsprogs). cd /usr/local/sbin ln e2fsck fsck.ext2 ln e2fsck fsck.ext3 ln e2fsck fsck.ext4
(In reply to Matthias Andree from comment #4) For cloning full system I use /sbin/mount_msdosfs /dev/da0s1 /mnt /sbin/dump -0Lf - / | /usr/local/bin/7z a -si -mx=9 /mnt/dump.img.7z >/dev/null /sbin/umount /mnt No errors occur during the dumping. For restore on another hard drive I use newfs -U /dev/ada1p3 tunefs -j disable /dev/ada1p3 mkdir -p /mnt mount /dev/ada1p3 /mnt cd /mnt && 7z x -so dump.img.7z | restore -vrf - Here is part of the restore log: ... extract file ./usr/local/include/tss/tss_structs.h Create symbolic link ./usr/local/sbin/e2fsck->/sbin/e2fsck extract file ./usr/local/sbin/e2image ... Create hard link ./usr/local/share/poppler/cMap/Adobe-Japan1/UniJIS-UTF32-H->./usr/local/share/cmap/UniJIS-UTF32-H Create hard link ./usr/local/sharewarning: cannot create hard link ./usr/local/sbin/fsck.ext4->./usr/local/sbin/e2fsck: No such file or directory warning: cannot create hard link ./usr/local/sbin/fsck.ext3->./usr/local/sbin/e2fsck: No such file or directory warning: cannot create hard link ./usr/local/sbin/fsck.ext2->./usr/local/sbin/e2fsck: No such file or directory /poppler/cMap/Adobe-Japan1/UniJIS-UTF32-V->./usr/local/share/cmap/UniJIS-UTF32-V Create hard link ./usr/local/share/poppler/cMap/Adobe-Japan1/UniJIS-UTF8-H->./usr/local/share/cmap/UniJIS-UTF8-H ... I use only UFS file system. As you can see, the error occurs when trying to create a hard links. I often need to clone one system across multiple disks. Therefore, it is not convenient to reinstall the e2fsprogs package on each new disk. If I use your advice and create links, I get the following: pkg check -s e2fsprogs Checking e2fsprogs: 0% e2fsprogs-1.43.3: checksum mismatch for /usr/local/sbin/fsck.ext2 e2fsprogs-1.46.3: checksum mismatch for /usr/local/sbin/fsck.ext3 e2fsprogs-1.46.3: checksum mismatch for /usr/local/sbin/fsck.ext4 Is there any other way to solve this problem?
Oh joy. After some experimentation, I conclude that restore(8) and tar(1) are broken on FreeBSD 13.0-RELEASE-p3. Neither can restore the hardlink-to-absolute-symlink. Use gtar -H posix to create the "backup" (posix for nanosecond timestamps) and extract it with gtar. Not sure if that copies flags. With respect to the bad checksums, my apologies for providing inaccurate information. Please do: cd /usr/local/sbin ln -fhP e2fsck fsck.ext2 ln -fhP e2fsck fsck.ext3 ln -fhP e2fsck fsck.ext4