Re: FYI: pkgbase and pkg issue details that came up during my pkgbase system upgrade (main-amd64)
Date: Sun, 10 Aug 2025 21:00:46 UTC
On Aug 9, 2025, at 22:07, Mark Millard <marklmi@yahoo.com> wrote:
> These notes are very narrowly focused on specific things that
> happened. I do not necessarily present them all in the order
> that they occurred.
>
> I made no use of "force". (I normally do not.)
>
> The context has:
>
> # grep BACKUP /usr/local/etc/pkg.conf
> BACKUP_LIBRARIES=true
>
>
> I first dealt with the kernel installations and the
> reboot using the kernel.GENERIC-NODEBUG kernel. That
> got me to:
>
> # uname -apKU
> FreeBSD 7950X3D-ZFS 15.0-PRERELEASE FreeBSD 15.0-PRERELEASE main-n279519-7a9834041c91 GENERIC-NODEBUG amd64 amd64 1500059 1500048
>
> The sequence for that was, in part:
>
> # pkg-static install -F -rFreeBSD-base -g 'FreeBSD-kernel-*' FreeBSD-src-sys
> # pkg-static install -U -rFreeBSD-base -g 'FreeBSD-kernel-*' FreeBSD-src-sys
> # shutdown -r now
>
> (The context does not involve a FreeBSD-dtb .)
>
>
> I then used what is likely an unusual sequence for the
> rest of the base package updating:
>
> # pkg-static install -F -rFreeBSD-base -g 'FreeBSD-*'
> # pkg-static install -U -rFreeBSD-base -g 'FreeBSD-src*'
> # pkg-static install -U -rFreeBSD-base -g 'FreeBSD-*'
>
> That last eventually stopped with:
>
> [580/1170] Deleting files for pkcs11-helper-1.29.0_3: 100%
> pkg-static: Cannot runscript POST-DEINSTALL:No such file or directory
> pkg-static: Cannot delete pkg itself without force flag
>
> At this point the context had the property:
>
> pkg-static: Unable to determine the ABI, none of the ABI_FILEs can be read.
>
> So I continued with (no use of 'env' as it was "not found"):
>
> # ABI=FreeBSD:15:amd64 pkg-static install -U -rFreeBSD-base -g 'FreeBSD-*'
>
>
> With that for context, my various notes are . . .
>
>
> ) pkg ended up disabled (but not removed) :
>
> I naturally got the notice:
>
> pkg-static: Cannot delete pkg itself without force flag
>
> and it naturally stopped because of it.
>
> But I unnaturally got the status (presuming I'm
> supposed to be able to use pkg at that point):
>
> # pkg check -sa
> ld-elf.so.1: Shared object "libutil.so.9" not found, required by "pkg"
>
> I had to use pkg-static explicitly (or explicitly cause it
> to be used where it normally is not).
>
> Note: poudriere-devel uses a mix of pkg-static and pkg and so
> does not work in this context. I modified poudriere-devel for
> it to be able to later do the likes of:
>
> # poudriere jail -j release-amd64 -u
>
> (where release-amd64 is based on pkgbase).
>
> Note: As of yet, an updated pkg that avoids libutil.so.9 was
> not available from the distribution servers.
>
> Note: pkg-static can try to run other programs. Thus it need
> not be fully functional, despite its static status. I did not
> explore this issue.
>
>
> ) port-package removals vs. POST-DEINSTALL :
>
> I got 5 instances of:
>
> pkg-static: Cannot runscript POST-DEINSTALL:No such file or directory
>
> Specifically:
>
> 565/1170] Deinstalling coreutils-9.7...
> [565/1170] Deleting files for coreutils-9.7: 100%
> pkg-static: Cannot runscript POST-DEINSTALL:No such file or directory
> . . .
> [568/1170] Deinstalling git-2.50.0...
> [568/1170] Deleting files for git-2.50.0: 100%
> pkg-static: Cannot runscript POST-DEINSTALL:No such file or directory
> . . .
> [570/1170] Deinstalling llvm20-20.1.6...
> [570/1170] Deleting files for llvm20-20.1.6: 100%
> pkg-static: Cannot runscript POST-DEINSTALL:No such file or directory
> . . .
> [572/1170] Deinstalling openvpn-2.6.14...
> [572/1170] Deleting files for openvpn-2.6.14: 100%
> pkg-static: Cannot runscript POST-DEINSTALL:No such file or directory
> . . .
> [580/1170] Deinstalling pkcs11-helper-1.29.0_3...
> [580/1170] Deleting files for pkcs11-helper-1.29.0_3: 100%
> pkg-static: Cannot runscript POST-DEINSTALL:No such file or directory
>
> It appeared to me that POST-DEINSTALL became unavailable
> too early relative to when port-packages were being
> deleted. (Wording not trying to determines what moves
> where to get the proper order.)
>
>
> ) base-package upgrades vs. POST-INSTALL :
>
> I got:
>
> [402/513] Upgrading FreeBSD-caroot from 15.snap20250313075117 to 15.snap20250808125411...
> [402/513] Extracting FreeBSD-caroot-15.snap20250808125411: 100%
> pkg-static: Cannot runscript POST-INSTALL:No such file or directory
>
> It appeared to me that POST-INSTALL became available
> too late relative to when base-packages were being
> upgraded that try to use POST-INSTALL . (Wording not
> trying to determines what moves where to get the proper
> order.)
>
> This was from the command after pkg was not deleted:
>
> # ABI=FreeBSD:15:amd64 pkg-static install -U -rFreeBSD-base -g 'FreeBSD-*'
>
>
> Other information . . .
>
> Note: I ignore here dealing with *.pkgsave and the like.
>
> # shutdown -r now
>
> got me to a world with system processes based on:
>
> # uname -apKU
> FreeBSD 7950X3D-ZFS 15.0-PRERELEASE FreeBSD 15.0-PRERELEASE main-n279519-7a9834041c91 GENERIC-NODEBUG amd64 amd64 1500059
>
> pkg still had the property:
>
> ld-elf.so.1: Shared object "libutil.so.9" not found, required by "pkg"
>
>
> To deal with port-packages, I used:
>
> # pkg-static install -rFreeBSD `cat ~/origins/amd64-pkgs.txt`
> # pkg-static upgrade -rFreeBSD
>
> (I'll ignore dealing with packages conflicts here.)
>
> Note: main-amd64's distribution server for port-packages
> was missing poudriere-devel so it was not listed in that
> amd64-pkgs.txt file.
>
> The poudiere-devel patches for avoiding pkg use and using
> pkg-static instead are as shown by:
>
> diff -ru /mnt/usr/local/share/poudriere/image.sh /usr/local/share/poudriere/image.sh
> --- /mnt/usr/local/share/poudriere/image.sh 2025-06-13 18:13:29.000000000 -0700
> +++ /usr/local/share/poudriere/image.sh 2025-08-09 20:19:24.112622000 -0700
> @@ -230,8 +230,8 @@
> export REPOS_DIR PKG_DBDIR
> # Always need this from host.
> export ABI_FILE="${WRKDIR}/world/usr/lib/crt1.o"
> - pkg -o ASSUME_ALWAYS_YES=yes update >/dev/null || :
> - pkg rquery '%At %o@%Av %n-%v' | \
> + pkg-static -o ASSUME_ALWAYS_YES=yes update >/dev/null || :
> + pkg-static rquery '%At %o@%Av %n-%v' | \
> awk -v pkglist="${PACKAGELIST}" \
> -f "${AWKPREFIX}/unique_pkgnames_from_flavored_origins.awk"
> rm -rf "${PKG_DBDIR:?}" "${REPOS_DIR:?}"
> @@ -248,10 +248,10 @@
> enabled: true
> }
> -EOF
> - pkg -o ABI_FILE="${mnt}/usr/lib/crt1.o" -o REPOS_DIR=${WRKDIR}/world/etc/pkg/ -o ASSUME_ALWAYS_YES=yes -r ${WRKDIR:?}/world update ${PKG_QUIET}
> + pkg-static -o ABI_FILE="${mnt}/usr/lib/crt1.o" -o REPOS_DIR=${WRKDIR}/world/etc/pkg/ -o ASSUME_ALWAYS_YES=yes -r ${WRKDIR:?}/world update ${PKG_QUIET}
> msg "Installing base packages"
> while read line; do
> - pkg -o ABI_FILE="${mnt}/usr/lib/crt1.o" -o REPOS_DIR=${WRKDIR}/world/etc/pkg/ -o ASSUME_ALWAYS_YES=yes -r ${WRKDIR:?}/world install -r local ${PKG_QUIET} -y ${line}
> + pkg-static -o ABI_FILE="${mnt}/usr/lib/crt1.o" -o REPOS_DIR=${WRKDIR}/world/etc/pkg/ -o ASSUME_ALWAYS_YES=yes -r ${WRKDIR:?}/world install -r local ${PKG_QUIET} -y ${line}
> done < ${PKGBASELIST}
> rm ${WRKDIR:?}/world/etc/pkg/FreeBSD-base.conf
> msg "Base packages installed"
> @@ -572,7 +572,7 @@
> export ASSUME_ALWAYS_YES=yes SYSLOG=no \
> REPOS_DIR="${WRKDIR}/world/tmp/" \
> ABI_FILE="${WRKDIR}/world/usr/lib/crt1.o"
> - pkg -r "${WRKDIR:?}/world/" install pkg
> + pkg-static -r "${WRKDIR:?}/world/" install pkg
> convert_package_list "${PACKAGELIST}" | \
> xargs pkg -r "${WRKDIR:?}/world/" install
> )
> diff -ru /mnt/usr/local/share/poudriere/include/pkg.sh /usr/local/share/poudriere/include/pkg.sh
> --- /mnt/usr/local/share/poudriere/include/pkg.sh 2025-06-13 18:13:29.000000000 -0700
> +++ /usr/local/share/poudriere/include/pkg.sh 2025-08-09 20:18:57.636494000 -0700
> @@ -634,7 +634,7 @@
> *)
> local repokeypath=$(repo_key_path)
>
> - pkg key --sign -t "${repokeytype}" "${repokeypath}" < "${pkgfile}" \
> + pkg-static key --sign -t "${repokeytype}" "${repokeypath}" < "${pkgfile}" \
> > "${pkgfile}.pubkeysig"
> ;;
> esac
> diff -ru /mnt/usr/local/share/poudriere/jail.sh /usr/local/share/poudriere/jail.sh
> --- /mnt/usr/local/share/poudriere/jail.sh 2025-06-13 18:13:29.000000000 -0700
> +++ /usr/local/share/poudriere/jail.sh 2025-08-09 20:20:23.447656000 -0700
> @@ -375,9 +375,9 @@
> pkgbase)
> VERSION=$(jget ${JAILNAME} version | cut -d '.' -f 1)
> [ -z "${ARCH}" ] && ARCH=$(jget ${JAILNAME} arch)
> - pkg -o IGNORE_OSVERSION=yes -o ABI="FreeBSD:${VERSION}:${ARCH}" -o REPOS_DIR="${JAILMNT}/etc/pkg" -r "${JAILMNT}" update || \
> + pkg-static -o IGNORE_OSVERSION=yes -o ABI="FreeBSD:${VERSION}:${ARCH}" -o REPOS_DIR="${JAILMNT}/etc/pkg" -r "${JAILMNT}" update || \
> err 1 "pkg update failed"
> - pkg -o IGNORE_OSVERSION=yes -o ABI="FreeBSD:${VERSION}:${ARCH}" -o REPOS_DIR="${JAILMNT}/etc/pkg" -r "${JAILMNT}" upgrade -y || \
> + pkg-static -o IGNORE_OSVERSION=yes -o ABI="FreeBSD:${VERSION}:${ARCH}" -o REPOS_DIR="${JAILMNT}/etc/pkg" -r "${JAILMNT}" upgrade -y || \
> err 1 "pkg upgrade failed"
> markfs clean ${JAILMNT}
> ;;
> @@ -927,12 +927,12 @@
> }
> EOF
>
> - pkg -o IGNORE_OSVERSION=yes -o REPOS_DIR="${JAILMNT}/etc/pkg" -o ABI="FreeBSD:${VERSION}:${ARCH}" -r ${JAILMNT}/ update
> + pkg-static -o IGNORE_OSVERSION=yes -o REPOS_DIR="${JAILMNT}/etc/pkg" -o ABI="FreeBSD:${VERSION}:${ARCH}" -r ${JAILMNT}/ update
> # Omit the man/debug/kernel/src and tests packages, unneeded for us.
> - pkg -o IGNORE_OSVERSION=yes -o REPOS_DIR="${JAILMNT}/etc/pkg" -o ABI="FreeBSD:${VERSION}:${ARCH}" -r ${JAILMNT}/ search -qCx '^FreeBSD-.*' | grep -vE -- '-man|-dbg|-kernel-|-tests|-src-' | xargs pkg -o REPOS_DIR="${JAILMNT}/etc/pkg" -r ${JAILMNT}/ install -y
> - pkg -o IGNORE_OSVERSION=yes -o REPOS_DIR="${JAILMNT}/etc/pkg" -o ABI="FreeBSD:${VERSION}:${ARCH}" -r ${JAILMNT}/ search -q '^FreeBSD-src-sys' | xargs pkg -o REPOS_DIR="${JAILMNT}/etc/pkg" -r ${JAILMNT}/ install -y
> + pkg-static -o IGNORE_OSVERSION=yes -o REPOS_DIR="${JAILMNT}/etc/pkg" -o ABI="FreeBSD:${VERSION}:${ARCH}" -r ${JAILMNT}/ search -qCx '^FreeBSD-.*' | grep -vE -- '-man|-dbg|-kernel-|-tests|-src-' | xargs pkg -o REPOS_DIR="${JAILMNT}/etc/pkg" -r ${JAILMNT}/ install -y
> + pkg-static -o IGNORE_OSVERSION=yes -o REPOS_DIR="${JAILMNT}/etc/pkg" -o ABI="FreeBSD:${VERSION}:${ARCH}" -r ${JAILMNT}/ search -q '^FreeBSD-src-sys' | xargs pkg -o REPOS_DIR="${JAILMNT}/etc/pkg" -r ${JAILMNT}/ install -y
> if [ -n "${KERNEL}" ]; then
> - pkg -o IGNORE_OSVERSION=yes -o REPOS_DIR="${JAILMNT}/etc/pkg" -o ABI="FreeBSD:${VERSION}:${ARCH}" -r ${JAILMNT}/ install -y FreeBSD-kernel-"${KERNEL}" || \
> + pkg-static -o IGNORE_OSVERSION=yes -o REPOS_DIR="${JAILMNT}/etc/pkg" -o ABI="FreeBSD:${VERSION}:${ARCH}" -r ${JAILMNT}/ install -y FreeBSD-kernel-"${KERNEL}" || \
> err 1 "Failed to install FreeBSD-kernel-${KERNEL}"
> fi
>
>
>
> Note: I have some other lines patched in
> /usr/local/share/poudriere/common.sh for
> other reasons (for my normal use).
poudriere-devel has an internal /usr/local/libexec/poudriere/cpdup
that it can try to use. But:
[00:00:00] Creating the reference jail...ld-elf.so.1: Shared object "libcrypto.so.30" not found, required by "cpdup"
Error: (14603) /usr/local/share/poudriere/bulk.sh:_do_clone:255: set -e error: status = 1
So, overall, more than just pkg -> pkg-static use is involved
in getting poudriere-devel to work.
So far, dealing with pkg-static refrences, possibly /usr/local/sbin/pkg ,
and with /usr/local/libexec/poudriere/cpdup seems to allow poudriere
builders to run.
Note: poudriere also had some Makefile notation to adjust
after the (b)make update.
===
Mark Millard
marklmi at yahoo.com