Okay this is interesting... here are the differences. Do you see anything problematic or weird?
Production machine (Rust doesn't build)
/usr/local/lib/compat/pkg # ls -l
total 14552
lrwxr-xr-x 1 root wheel 21 Nov 9 2023 libanonymous.so.3 -> libanonymous.so.3.0.0
-rwxr-xr-x 1 root wheel 17520 Nov 9 2023 libanonymous.so.3.0.0
lrwxr-xr-x 1 root wheel 19 Nov 9 2023 libcrammd5.so.3 -> libcrammd5.so.3.0.0
-rwxr-xr-x 1 root wheel 20168 Nov 9 2023 libcrammd5.so.3.0.0
lrwxr-xr-x 1 root wheel 18 Apr 18 2024 libdb-5.3.so.0 -> db5/libdb-5.3.so.0
-rwxr-xr-x 1 root wheel 1710000 Apr 18 2024 libdb-5.3.so.0.0.0
lrwxr-xr-x 1 root wheel 14 Apr 18 2024 libdb-5.so.0 -> libdb-5.3.so.0
lrwxr-xr-x 1 root wheel 22 Apr 18 2024 libdb_cxx-5.3.so.0 -> db5/libdb_cxx-5.3.so.0
-rwxr-xr-x 1 root wheel 1862232 Apr 18 2024 libdb_cxx-5.3.so.0.0.0
lrwxr-xr-x 1 root wheel 18 Apr 18 2024 libdb_cxx-5.so.0 -> libdb_cxx-5.3.so.0
lrwxr-xr-x 1 root wheel 22 Apr 18 2024 libdb_stl-5.3.so.0 -> db5/libdb_stl-5.3.so.0
-rwxr-xr-x 1 root wheel 1935840 Apr 18 2024 libdb_stl-5.3.so.0.0.0
lrwxr-xr-x 1 root wheel 18 Apr 18 2024 libdb_stl-5.so.0 -> libdb_stl-5.3.so.0
lrwxr-xr-x 1 root wheel 21 Nov 9 2023 libdigestmd5.so.3 -> libdigestmd5.so.3.0.0
-rwxr-xr-x 1 root wheel 57552 Nov 9 2023 libdigestmd5.so.3.0.0
lrwxr-xr-x 1 root wheel 16 Nov 8 2023 libgit2.so.1.6 -> libgit2.so.1.6.4
-rwxr-xr-x 1 root wheel 1227264 Nov 8 2023 libgit2.so.1.6.4
lrwxr-xr-x 1 root wheel 23 Nov 8 2023 libhttp_parser.so.2.9 -> libhttp_parser.so.2.9.4
-rwxr-xr-x 1 root wheel 33416 Nov 8 2023 libhttp_parser.so.2.9.4
lrwxr-xr-x 1 root wheel 17 Nov 9 2023 liblogin.so.3 -> liblogin.so.3.0.0
-rwxr-xr-x 1 root wheel 18144 Nov 9 2023 liblogin.so.3.0.0
lrwxr-xr-x 1 root wheel 20 Jun 20 2023 libmysqlclient_r.so.20 -> libmysqlclient.so.20
lrwxr-xr-x 1 root wheel 16 Nov 9 2023 libntlm.so.3 -> libntlm.so.3.0.0
-rwxr-xr-x 1 root wheel 37480 Nov 9 2023 libntlm.so.3.0.0
lrwxr-xr-x 1 root wheel 15 Nov 9 2023 libotp.so.3 -> libotp.so.3.0.0
-rwxr-xr-x 1 root wheel 27216 Nov 9 2023 libotp.so.3.0.0
lrwxr-xr-x 1 root wheel 17 Nov 7 2023 libperl.so.5.34 -> libperl.so.5.34.1
-r--r--r-- 1 root wheel 3727648 Nov 7 2023 libperl.so.5.34.1
lrwxr-xr-x 1 root wheel 17 Nov 9 2023 libperl.so.5.36 -> libperl.so.5.36.1
-r--r--r-- 1 root wheel 3804648 Nov 9 2023 libperl.so.5.36.1
lrwxr-xr-x 1 root wheel 17 Nov 9 2023 libplain.so.3 -> libplain.so.3.0.0
-rwxr-xr-x 1 root wheel 18264 Nov 9 2023 libplain.so.3.0.0
lrwxr-xr-x 1 root wheel 18 Nov 9 2023 libsasldb.so.3 -> libsasldb.so.3.0.0
-rwxr-xr-x 1 root wheel 24064 Nov 9 2023 libsasldb.so.3.0.0
lrwxr-xr-x 1 root wheel 17 Nov 9 2023 libscram.so.3 -> libscram.so.3.0.0
-rwxr-xr-x 1 root wheel 41136 Nov 9 2023 libscram.so.3.0.0
Backup machine, where Rust DID build successfully:
/usr/local/lib/compat/pkg # ls -l
total 19828
lrwxr-xr-x 1 root wheel 21 Apr 1 2023 libanonymous.so.3 -> libanonymous.so.3.0.0
-rwxr-xr-x 1 root wheel 17520 Apr 1 2023 libanonymous.so.3.0.0
lrwxr-xr-x 1 root wheel 19 Apr 1 2023 libcrammd5.so.3 -> libcrammd5.so.3.0.0
-rwxr-xr-x 1 root wheel 20168 Apr 1 2023 libcrammd5.so.3.0.0
lrwxr-xr-x 1 root wheel 18 Feb 28 2024 libdb-5.3.so.0 -> db5/libdb-5.3.so.0
-rwxr-xr-x 1 root wheel 1710000 Feb 28 2024 libdb-5.3.so.0.0.0
lrwxr-xr-x 1 root wheel 14 Feb 28 2024 libdb-5.so.0 -> libdb-5.3.so.0
lrwxr-xr-x 1 root wheel 22 Feb 28 2024 libdb_cxx-5.3.so.0 -> db5/libdb_cxx-5.3.so.0
-rwxr-xr-x 1 root wheel 1862232 Feb 28 2024 libdb_cxx-5.3.so.0.0.0
lrwxr-xr-x 1 root wheel 18 Feb 28 2024 libdb_cxx-5.so.0 -> libdb_cxx-5.3.so.0
lrwxr-xr-x 1 root wheel 22 Feb 28 2024 libdb_stl-5.3.so.0 -> db5/libdb_stl-5.3.so.0
-rwxr-xr-x 1 root wheel 1935840 Feb 28 2024 libdb_stl-5.3.so.0.0.0
lrwxr-xr-x 1 root wheel 18 Feb 28 2024 libdb_stl-5.so.0 -> libdb_stl-5.3.so.0
lrwxr-xr-x 1 root wheel 21 Apr 1 2023 libdigestmd5.so.3 -> libdigestmd5.so.3.0.0
-rwxr-xr-x 1 root wheel 57552 Apr 1 2023 libdigestmd5.so.3.0.0
lrwxr-xr-x 1 root wheel 17 Apr 1 2023 liblogin.so.3 -> liblogin.so.3.0.0
-rwxr-xr-x 1 root wheel 18144 Apr 1 2023 liblogin.so.3.0.0
lrwxr-xr-x 1 root wheel 16 Apr 1 2023 libntlm.so.3 -> libntlm.so.3.0.0
-rwxr-xr-x 1 root wheel 37480 Apr 1 2023 libntlm.so.3.0.0
lrwxr-xr-x 1 root wheel 15 Apr 1 2023 libotp.so.3 -> libotp.so.3.0.0
-rwxr-xr-x 1 root wheel 27216 Apr 1 2023 libotp.so.3.0.0
lrwxr-xr-x 1 root wheel 17 Dec 4 2020 libperl.so.5.28 -> libperl.so.5.28.3
-r--r--r-- 1 root wheel 3253512 Dec 4 2020 libperl.so.5.28.3
lrwxr-xr-x 1 root wheel 17 Aug 5 2021 libperl.so.5.32 -> libperl.so.5.32.1
-r--r--r-- 1 root wheel 3773384 Aug 5 2021 libperl.so.5.32.1
lrwxr-xr-x 1 root wheel 17 Nov 4 2023 libperl.so.5.36 -> libperl.so.5.36.1
-r--r--r-- 1 root wheel 3804648 Nov 4 2023 libperl.so.5.36.1
lrwxr-xr-x 1 root wheel 17 Apr 1 2023 libplain.so.3 -> libplain.so.3.0.0
-rwxr-xr-x 1 root wheel 18264 Apr 1 2023 libplain.so.3.0.0
-rw-r--r-- 1 root wheel 3284480 Aug 5 2021 libpython3.8.so.1.0
lrwxr-xr-x 1 root wheel 18 Apr 1 2023 libsasldb.so.3 -> libsasldb.so.3.0.0
-rwxr-xr-x 1 root wheel 24064 Apr 1 2023 libsasldb.so.3.0.0
lrwxr-xr-x 1 root wheel 17 Apr 1 2023 libscram.so.3 -> libscram.so.3.0.0
-rwxr-xr-x 1 root wheel 41136 Apr 1 2023 libscram.so.3.0.0
I've saved both list as:
- the former (affected): /tmp/list_affected.txt
- the latter (backup, not affected): /tmp/list_normal.txt
and performed below.
Code:
% cut -w -f9,10,11 /tmp/list_normal.txt | sort > /tmp/list_normal2.txt
% cut -w -f9,10,11 /tmp/list_affected.txt | sort > /tmp/list_affected2.txt
% diff -u -p /tmp/list_normal2.txt /tmp/list_affected2.txt | lv
--- /tmp/list_normal2.txt 2025-11-23 08:59:03.455167000 +0900
+++ /tmp/list_affected2.txt 2025-11-23 08:59:19.496596000 +0900
@@ -15,21 +15,23 @@ libdigestmd5.so.3.0.0
libdb-5.so.0 -> libdb-5.3.so.0
libdigestmd5.so.3 -> libdigestmd5.so.3.0.0
libdigestmd5.so.3.0.0
+libgit2.so.1.6 -> libgit2.so.1.6.4
+libgit2.so.1.6.4
+libhttp_parser.so.2.9 -> libhttp_parser.so.2.9.4
+libhttp_parser.so.2.9.4
liblogin.so.3 -> liblogin.so.3.0.0
liblogin.so.3.0.0
+libmysqlclient_r.so.20 -> libmysqlclient.so.20
libntlm.so.3 -> libntlm.so.3.0.0
libntlm.so.3.0.0
libotp.so.3 -> libotp.so.3.0.0
libotp.so.3.0.0
-libperl.so.5.28 -> libperl.so.5.28.3
-libperl.so.5.28.3
-libperl.so.5.32 -> libperl.so.5.32.1
-libperl.so.5.32.1
+libperl.so.5.34 -> libperl.so.5.34.1
+libperl.so.5.34.1
libperl.so.5.36 -> libperl.so.5.36.1
libperl.so.5.36.1
libplain.so.3 -> libplain.so.3.0.0
libplain.so.3.0.0
-libpython3.8.so.1.0
libsasldb.so.3 -> libsasldb.so.3.0.0
libsasldb.so.3.0.0
libscram.so.3 -> libscram.so.3.0.0
The lines headed by
- means existing on normal case only,
+ means existing on affected case only, and
(space) means that matches.
and among things headed by +, devel/libgit2, which is required by devel/cargo-c that is related with Rust, requires it.
So, does things differ if you rename libgit2.so.1.6 and libgit2.so.1.6.4 in /usr/local/lib/compat/pkg on affected computer to something like libgit2.so.1.6.orig and libgit2.so.1.6.4.orig?
Anyway, not all of libraries there wouldn't actually needed, as the directory is (if I recall correctly) first introduced by portupgrade to preserve old libraries on upgrading not to break anything until all upgrades finishes sanely.
This worked quite fine as there were no other subdirectories in /usr/local/lib at the era portupgrade first appeared and /usr/local/lib/compat/pkg was looked for only when there's no wanted libraries directly under /lib, /usr/lib or /usr/local/lib.
But things are changed significantly and many ports create their own subdirectories under /usr/local/lib now.
Because of this, if libraries in /usr/local/lib/compat/pkg is/are loaded BEFORE actually needed libraries, it hurts.
Not always 100% assured to be safe, but
usually deleting everything under /usr/local/lib/compat/pkg is safe, if you're NOT pending to upgrade some port and NOT keeping ports which are dissappeared from ports tree, or nothing failed for upgrading exist.