Skip to content

uv update reports a checksum mismatch because sha256sum cannot start

Source: Troubleshooting reference

Symptom: both uv self-update and its standalone installer print sha256sum: error while loading shared libraries: libcrypto.so.3, followed by ERROR: checksum mismatch with an empty got: value. The checksum program did not run; this output does not establish a corrupt download.

Cause: a source-built Coreutils can auto-detect globally linked OpenSSL without the Homebrew formula declaring that dependency. Its checksum binaries then search the global Brew library directory. Transitioning global links from OpenSSL 3 to 4 removes libcrypto.so.3 from that directory even though the OpenSSL 3 keg remains installed. Keeping that keg alone does not repair the binary’s search path.

Confirm the selected binary’s execution and ELF dependencies. If inspecting runtime resolution, use its own ELF interpreter with --list; system ldd can mislead by resolving libraries against the system glibc instead:

Terminal window
command -v sha256sum
printf abc | sha256sum
readelf -d "$(readlink -f "$(command -v sha256sum)")"

Fix: after all other installs using the prefix have stopped, apply the managed formula patch and rebuild Coreutils:

Terminal window
bash ~/dotfiles/install/patch-homebrew-coreutils.sh
HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_FROM_API=1 \
HOMEBREW_NO_INSTALL_CLEANUP=1 brew reinstall --build-from-source coreutils
printf abc | sha256sum
DF_MODE=upgrade bash ~/dotfiles/install/python.sh

The digest must be ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. The patch adds an explicit openssl@4 dependency and --with-openssl=yes, preserving OpenSSL acceleration while giving the build a versioned library search path. linux-packages.sh checks the known digest before and after Bundle and rebuilds a broken installed Coreutils; python.sh preserves the original self-update failure instead of claiming every failure means an unsupported uv build.

DF_PATCH_BREW_COREUTILS=0 or DF_PATCH_BREW_ALL=0 disables this Linux patch and automatic repair. The check covers checksum execution, not every installed program. Do not skip checksum verification, globally set LD_LIBRARY_PATH, or relink OpenSSL 3 over OpenSSL 4. The authoritative patch is patch-homebrew-coreutils.sh; GNU documents the build option in its Coreutils manual.