From 312dfbc71d165d0ac3a93dd3ca8ca9172a2a35ace3918bb58ad4e86a58c858b8 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 14 Mar 2026 20:09:43 +0300 Subject: [PATCH] No dependency on meta4ra-hashers-detect --- build/bin/cksum | 2 +- build/bin/hashers-detect | 122 ++++++++++++++++++ build/bin/hashes-check | 6 +- build/bin/hashes-gen | 8 +- build/distfiles/bin/metadir-from-file | 2 +- build/distfiles/dl/default.rc | 10 +- .../dl/gcc-4-compile-with-gcc-5.patch.do | 2 +- build/lib/mk-pkg | 7 +- build/lib/pkg-inst | 3 +- build/pkg/cp-arch | 6 +- lib/rc | 2 +- 11 files changed, 145 insertions(+), 25 deletions(-) create mode 100755 build/bin/hashers-detect diff --git a/build/bin/cksum b/build/bin/cksum index 55bcbd9..6c692c2 100755 --- a/build/bin/cksum +++ b/build/bin/cksum @@ -38,7 +38,7 @@ while [ $# -ne 0 ] ; do *) printf %d:%s, $(printf %s "$arg" | wc -c) "$arg" esac -done | "$BASS_ROOT"/build/bin/hashes-gen "$hashers" >$tmp +done | BASS_HASHERS="$hashers" "$BASS_ROOT"/build/bin/hashes-gen >$tmp read _name hsh <$tmp [ -n "$hsh" ] perl -MMIME::Base64 \ diff --git a/build/bin/hashers-detect b/build/bin/hashers-detect new file mode 100755 index 0000000..c3f8b5e --- /dev/null +++ b/build/bin/hashers-detect @@ -0,0 +1,122 @@ +#!/bin/sh -e +# Detect possible hashers + +desired="$1" + +check() { + local name="$1" + local cmd="$2" + our=$(echo -n hello world | + sh -e -c "$cmd" | + { read h rem ; printf %s "$h"; }) + [ $HSH == "$our" ] && echo "$name $cmd" || return 1 +} + +no() { + echo no $1 >&2 +} + +n=blake3-256 +if [ -z "$desired" ] || [ $desired = "$n" ] ; then + HSH=d74981efa70a0c880b8d8c1985d075dbcbf679b99a5f9914e5aaf96b831a9e24 + check $n b3sum || # https://github.com/BLAKE3-team/BLAKE3 + check $n "meta4ra-hash -hashers $n:builtin" || + no $n +fi + +n=blake2b-512 +if [ -z "$desired" ] || [ $desired = "$n" ] ; then + HSH=021ced8799296ceca557832ab941a50b4a11f83478cf141f51f933f653ab9fbcc05a037cddbed06e309bf334942c4e58cdf1a46e237911ccd7fcf9787cbc7fd0 + check $n b2sum || # https://blake2.net/, GNU Coreutils + check $n "openssl blake2b512 -r" || + check $n "meta4ra-hash -hashers $n:builtin" || + no $n +fi + +n=blake2b-256 +if [ -z "$desired" ] || [ $desired = "$n" ] ; then + HSH=256c83b297114d201b30179f3f0ef0cace9783622da5974326b436178aeef610 + check $n "b2sum -l 256" || + check $n "meta4ra-hash -hashers $n:builtin" || + no $n +fi + +n=skein-512 +if [ -z "$desired" ] || [ $desired = "$n" ] ; then + HSH=8b4830244fc36daa11177311dc6bf7636376180dce2d29193335878142e7d6f5e9016beba729e0a353dd2fd421c8b2022ee8927f0bce6b88631bb01be2e0f5ba + check $n skein512 || # FreeBSD's out-of-box command + no $n +fi + +n=shake128 +if [ -z "$desired" ] || [ $desired = "$n" ] ; then + HSH=3a9159f071e4dd1c8c4f968607c30942e120d8156b8b1e72e0d376e8871cb8b8 + check $n goshake128 || # go.stargrave.org/gosha3 + check $n "sha3sum -a 128000 | dd bs=1 count=64 2>/dev/null ; echo" || # p5-Digest-SHA3 + check $n "meta4ra-hash -hashers $n:builtin" || + no $n + # openssl shake128 -- useless, as it outputs only 128 bits +fi + +n=shake256 +if [ -z "$desired" ] || [ $desired = "$n" ] ; then + HSH=369771bb2cb9d2b04c1d54cca487e372d9f187f73f7ba3f65b95c8ee7798c527f4f3c2d55c2d46a29f2e945d469c3df27853a8735271f5cc2d9e889544357116 + check $n goshake256 || + check $n "sha3sum -a 256000 | dd bs=1 count=128 2>/dev/null ; echo" || + check $n "meta4ra-hash -hashers $n:builtin" || + no $n +fi + +n=sha-512 +if [ -z "$desired" ] || [ $desired = "$n" ] ; then + HSH=309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f + check $n sha512 || + check $n sha512sum || + check $n "libressl dgst -sha512" || + check $n "openssl sha512 -r" || + check $n "meta4ra-hash -hashers $n:builtin" || + no $n +fi + +n=sha-256 +if [ -z "$desired" ] || [ $desired = "$n" ] ; then + HSH=b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 + check $n sha256 || + check $n sha256sum || + check $n "libressl dgst -sha256" || + check $n "openssl sha256 -r" || + check $n "meta4ra-hash -hashers $n:builtin" || + no $n +fi + +unxxd="xxd -c 0 -p" +unhexdump="hexdump -v -e '/1 \"%02x\"' ; echo" +n=streebog-512 +if [ -z "$desired" ] || [ $desired = "$n" ] ; then + HSH=84d883ede9fa6ce855d82d8c278ecd9f5fc88bf0602831ae0c38b9b506ea3cb02f3fa076b8f5664adf1ff862c0157da4cc9a83e141b738ff9268a9ba3ed6f563 + check $n streebog512 || # go.cypherpunks.su/gogost + check $n "nettle-hash --algorithm=streebog512 --raw | $unxxd" || + check $n "nettle-hash --algorithm=streebog512 --raw | $unhexdump" || + check $n "libressl dgst -streebog512" || + check $n "meta4ra-hash -hashers $n:builtin" || + no $n +fi + +n=streebog-256 +if [ -z "$desired" ] || [ $desired = "$n" ] ; then + HSH=c600fd9dd049cf8abd2f5b32e840d2cb0e41ea44de1c155dcd88dc84fe58a855 + check $n streebog256 || + check $n "nettle-hash --algorithm=streebog256 --raw | $unxxd" || + check $n "nettle-hash --algorithm=streebog256 --raw | $unhexdump" || + check $n "libressl dgst -streebog256" || + check $n "meta4ra-hash -hashers $n:builtin" || + no $n +fi + +n=xxh3-128 +if [ -z "$desired" ] || [ $desired = "$n" ] ; then + HSH=df8d09e93f874900a99b8775cc15b6c7 + check $n "xxhsum -H128" || # https://cyan4973.github.io/xxHash/ + check $n "meta4ra-hash -hashers $n:builtin" || + no $n +fi diff --git a/build/bin/hashes-check b/build/bin/hashes-check index 66d00d4..02e5b5c 100755 --- a/build/bin/hashes-check +++ b/build/bin/hashes-check @@ -3,8 +3,8 @@ hashes="$1" [ -s "$hashes" ] -hashers="$2" -[ -n "$hashers" ] || hashers="$(meta4ra-hashers-detect 2>/dev/null)" +[ -n "$BASS_HASHERS" ] || + BASS_HASHERS="$("$BASS_ROOT"/build/bin/hashers-detect 2>/dev/null)" tmp=$(mktemp -d) trap "rm -fr $tmp" HUP PIPE INT QUIT TERM EXIT while read name cmd ; do @@ -18,7 +18,7 @@ EOF break fi done <&2 diff --git a/build/bin/hashes-gen b/build/bin/hashes-gen index 1c991c2..40c0f99 100755 --- a/build/bin/hashes-gen +++ b/build/bin/hashes-gen @@ -1,10 +1,10 @@ #!/bin/sh -e # Generates hashes with specified hasher -hashers="$1" -[ -n "$hashers" ] || hashers="$(meta4ra-hashers-detect 2>/dev/null)" +[ -n "$BASS_HASHERS" ] || + BASS_HASHERS="$("$BASS_ROOT"/build/bin/hashers-detect 2>/dev/null)" if command -v meta4ra-hash >/dev/null 2>/dev/null ; then - meta4ra-hash -all -hashers "$hashers" + meta4ra-hash -all -hashers "$BASS_HASHERS" exit fi tmp=$(mktemp -d) @@ -19,7 +19,7 @@ EOF chmod +x $name.sh echo $name >>names done <$name.out & diff --git a/build/distfiles/bin/metadir-from-file b/build/distfiles/bin/metadir-from-file index f190972..de9c62a 100755 --- a/build/distfiles/bin/metadir-from-file +++ b/build/distfiles/bin/metadir-from-file @@ -8,4 +8,4 @@ sname=$0 . "$BASS_ROOT"/lib/rc dst=$(basename $1) mkdir -p $dst "$BASS_ROOT"/bin/filessize $1 >$dst/size -"$BASS_ROOT"/build/bin/hashes-gen "$BASS_HASHERS" <$1 >$dst/hashes +"$BASS_ROOT"/build/bin/hashes-gen <$1 >$dst/hashes diff --git a/build/distfiles/dl/default.rc b/build/distfiles/dl/default.rc index 4b4b551..01e08de 100644 --- a/build/distfiles/dl/default.rc +++ b/build/distfiles/dl/default.rc @@ -9,10 +9,9 @@ if [ -r cache/$dst ] ; then echo using cache/$dst... >&2 if [ -s "$metadir"/hashes ] ; then $PV cache/$dst | - "$BASS_ROOT"/build/bin/hashes-check "$metadir"/hashes "$BASS_HASHERS" \ - 2>&1 >/dev/null || { - echo hash check failed >&2 - exit 1 + "$BASS_ROOT"/build/bin/hashes-check "$metadir"/hashes 2>&1 >/dev/null || { + echo hash check failed >&2 + exit 1 } else echo warning: no $metadir/hashes >&2 @@ -57,8 +56,7 @@ justdl) url="${url##*|}" if [ -s "$metadir"/hashes ] ; then $JUSTDL "$url" | - "$BASS_ROOT"/build/bin/hashes-check "$metadir"/hashes "$BASS_HASHERS" \ - >$fn || { + "$BASS_ROOT"/build/bin/hashes-check "$metadir"/hashes >$fn || { echo hash check failed >&2 rm $fn continue diff --git a/build/distfiles/dl/gcc-4-compile-with-gcc-5.patch.do b/build/distfiles/dl/gcc-4-compile-with-gcc-5.patch.do index f41f5a8..79ca64c 100644 --- a/build/distfiles/dl/gcc-4-compile-with-gcc-5.patch.do +++ b/build/distfiles/dl/gcc-4-compile-with-gcc-5.patch.do @@ -4,4 +4,4 @@ v1.5.0 >/dev/null p=gnu/packages/patches/gcc-4-compile-with-gcc-5.patch ( cd ../repo/guix.git ; git archive @ $p | tar xfO - $p ) >$3 -../../bin/hashes-check $1.hashes "$BASS_HASHERS" <$3 >/dev/null +../../bin/hashes-check $1.hashes <$3 >/dev/null diff --git a/build/lib/mk-pkg b/build/lib/mk-pkg index 83156fd..52a8f68 100755 --- a/build/lib/mk-pkg +++ b/build/lib/mk-pkg @@ -38,11 +38,11 @@ tmp=$(mktemp -d $TMPDIR/$namenhash-mk-pkg.XXXXXX) trap "rm -fr $tmp" HUP PIPE INT QUIT TERM EXIT echo $namenhash | tee $tmp/name | - "$BASS_ROOT"/build/bin/hashes-gen "$BASS_HASHERS" >$tmp/name.hashes + "$BASS_ROOT"/build/bin/hashes-gen >$tmp/name.hashes cat >$tmp/buildinfo <$tmp/buildinfo.hashes +"$BASS_ROOT"/build/bin/hashes-gen <$tmp/buildinfo >$tmp/buildinfo.hashes chmod -R a-w $namenhash { @@ -51,8 +51,7 @@ chmod -R a-w $namenhash } | { $COMPRESSOR || touch $tmp/tar-pipe-failed ; } | { tee $tmp/$namenhash || touch $tmp/tar-pipe-failed ; } | -{ "$BASS_ROOT"/build/bin/hashes-gen "$BASS_HASHERS" || touch $tmp/tar-pipe-failed -} >$tmp/$namenhash.hashes +{ "$BASS_ROOT"/build/bin/hashes-gen || touch $tmp/tar-pipe-failed ; } >$tmp/$namenhash.hashes [ ! -e $tmp/tar-pipe-failed ] cd $tmp diff --git a/build/lib/pkg-inst b/build/lib/pkg-inst index 2855809..5879c41 100755 --- a/build/lib/pkg-inst +++ b/build/lib/pkg-inst @@ -44,8 +44,7 @@ else cd $tmp $TAR xf $skelpkg bin.hashes $TAR xfO $skelpkg bin | { - "$BASS_ROOT"/build/bin/hashes-check bin.hashes "$BASS_HASHERS" || - touch untar-failed + "$BASS_ROOT"/build/bin/hashes-check bin.hashes || touch untar-failed } | $TAR xf - || touch untar-failed [ ! -e untar-failed ] rm -f $fn.hashes diff --git a/build/pkg/cp-arch b/build/pkg/cp-arch index c4bf7c7..7f167ff 100755 --- a/build/pkg/cp-arch +++ b/build/pkg/cp-arch @@ -24,8 +24,10 @@ find . -type f -and -not -name "*.do" -and -not -path "*/.redo/*" | while read p oursize=$("$BASS_ROOT"/bin/filessize $pkg) theirsize=$("$BASS_ROOT"/bin/filessize "$dst"/$arch/$base) if [ "$oursize" -eq "$theirsize" ] ; then - "$BASS_ROOT"/build/bin/hashes-gen "$hashers" <$pkg >$tmp/hshour & - "$BASS_ROOT"/build/bin/hashes-gen "$hashers" <"$dst"/$arch/$base >$tmp/hshtheir & + BASS_HASHERS="$hashers" "$BASS_ROOT"/build/bin/hashes-gen \ + <$pkg >$tmp/hshour & + BASS_HASHERS="$hashers" "$BASS_ROOT"/build/bin/hashes-gen \ + <"$dst"/$arch/$base >$tmp/hshtheir & wait read hshour <$tmp/hshour read hshtheir <$tmp/hshtheir diff --git a/lib/rc b/lib/rc index b95a7ed..b76bd30 100644 --- a/lib/rc +++ b/lib/rc @@ -25,7 +25,7 @@ if [ -z "$SETLOCK" ] ; then } fi -export BASS_HASHERS="${BASS_HASHERS:-$(meta4ra-hashers-detect 2>/dev/null)}" +export BASS_HASHERS="${BASS_HASHERS:-$("$BASS_ROOT"/build/bin/hashers-detect 2>/dev/null)}" export FSYNC=${FSYNC:-$(command -v fsync 2>/dev/null || command -v sync)} export TAR=${TAR:-bsdtar} -- 2.52.0