* [Buildroot] [PATCH v3 1/3] support/download: add blake2b-256 hash support
@ 2026-06-18 6:51 James Hilliard
2026-06-18 6:51 ` [Buildroot] [PATCH v3 2/3] package/pkg-python: derive PyPI site from blake2b-256 hash James Hilliard
2026-06-18 6:51 ` [Buildroot] [PATCH v3 3/3] package/python-async-timeout: use hash-based PyPI site James Hilliard
0 siblings, 2 replies; 8+ messages in thread
From: James Hilliard @ 2026-06-18 6:51 UTC (permalink / raw)
To: buildroot
Cc: Thomas Petazzoni, James Hilliard, Thomas Perale,
Ricardo Martincoski
PyPI exposes a blake2b_256 digest for distribution files, and that
same digest is used in the hash-based files.pythonhosted.org download
paths. Add support for storing those hashes in Buildroot .hash files.
Teach the download hash checker to validate blake2b-256 entries using
b2sum -l 256, and update check-package so the new hash type and length
are accepted. Also add the CycloneDX hash spelling so generated SBOMs
can include blake2b-256 hashes from .hash files.
Update scanpypi to write the PyPI-provided blake2b_256 digest alongside
the existing md5 and sha256 entries.
Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
---
Changes v2 -> v3:
- Require b2sum -l 256 in the host coreutils suitability check.
---
docs/manual/adding-packages-directory.adoc | 3 ++-
support/dependencies/check-host-coreutils.mk | 2 +-
support/dependencies/check-host-coreutils.sh | 3 +++
support/download/check-hash | 7 ++++++-
support/testing/tests/utils/test_generate_cyclonedx.py | 9 +++++++++
utils/checkpackagelib/lib_hash.py | 2 +-
utils/checkpackagelib/test_lib_hash.py | 4 ++++
utils/generate-cyclonedx | 1 +
utils/scanpypi | 7 ++++++-
9 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/docs/manual/adding-packages-directory.adoc b/docs/manual/adding-packages-directory.adoc
index 15de559deb..27f0fcd9a9 100644
--- a/docs/manual/adding-packages-directory.adoc
+++ b/docs/manual/adding-packages-directory.adoc
@@ -464,7 +464,7 @@ The format of this file is one line for each file for which to check the
hash, each line with the following three fields separated by two spaces:
* the type of hash, one of:
-** +md5+, +sha1+, +sha224+, +sha256+, +sha384+, +sha512+
+** +md5+, +sha1+, +sha224+, +sha256+, +sha384+, +sha512+, +blake2b-256+
* the hash of the file:
** for +md5+, 32 hexadecimal characters
** for +sha1+, 40 hexadecimal characters
@@ -472,6 +472,7 @@ hash, each line with the following three fields separated by two spaces:
** for +sha256+, 64 hexadecimal characters
** for +sha384+, 96 hexadecimal characters
** for +sha512+, 128 hexadecimal characters
+** for +blake2b-256+, 64 hexadecimal characters
* the name of the file:
** for a source archive: the basename of the file, without any directory
component,
diff --git a/support/dependencies/check-host-coreutils.mk b/support/dependencies/check-host-coreutils.mk
index 87a3f446ea..32aed6eb3b 100644
--- a/support/dependencies/check-host-coreutils.mk
+++ b/support/dependencies/check-host-coreutils.mk
@@ -1,5 +1,5 @@
# Check whether the host's coreutils are up to date enough
-# to provide 'ln --relative' and 'realpath'.
+# to provide 'ln --relative', 'realpath' and 'b2sum -l'.
ifeq (,$(call suitable-host-package,coreutils))
BR2_COREUTILS_HOST_DEPENDENCY = host-coreutils
diff --git a/support/dependencies/check-host-coreutils.sh b/support/dependencies/check-host-coreutils.sh
index 4d36d74933..36c7a802cf 100755
--- a/support/dependencies/check-host-coreutils.sh
+++ b/support/dependencies/check-host-coreutils.sh
@@ -9,4 +9,7 @@ ln --relative --help >/dev/null 2>&1
# Does realpath exist?
realpath --help >/dev/null 2>&1
+# Does b2sum exist and support the BLAKE2b-256 length option?
+b2sum -l 256 /dev/null >/dev/null 2>&1
+
echo OK
diff --git a/support/download/check-hash b/support/download/check-hash
index d18ec8b134..74079dac1a 100755
--- a/support/download/check-hash
+++ b/support/download/check-hash
@@ -49,6 +49,7 @@ check_one_hash() {
case "${_h}" in
md5|sha1) ;;
sha224|sha256|sha384|sha512) ;;
+ blake2b-256) ;;
*) # Unknown hash, exit with error
printf "ERROR: unknown hash '%s' for '%s'\n" \
"${_h}" "${base}" >&2
@@ -57,7 +58,11 @@ check_one_hash() {
esac
# Do the hashes match?
- _hash="$( "${_h}sum" "${_file}" |cut -d ' ' -f 1 )"
+ if [ "${_h}" = "blake2b-256" ]; then
+ _hash="$( b2sum -l 256 "${_file}" |cut -d ' ' -f 1 )"
+ else
+ _hash="$( "${_h}sum" "${_file}" |cut -d ' ' -f 1 )"
+ fi
if [ "${_hash}" = "${_known}" ]; then
printf "%s: OK (%s: %s)\n" "${base}" "${_h}" "${_hash}"
return 0
diff --git a/support/testing/tests/utils/test_generate_cyclonedx.py b/support/testing/tests/utils/test_generate_cyclonedx.py
index e6640fbd0d..bb80a5ff23 100644
--- a/support/testing/tests/utils/test_generate_cyclonedx.py
+++ b/support/testing/tests/utils/test_generate_cyclonedx.py
@@ -186,6 +186,7 @@ class TestGenerateCycloneDX(unittest.TestCase):
"# source archive checksums\n"
"sha256 1111111111111111111111111111111111111111111111111111111111111111 foo-1.2.tar.gz\n"
"sha1 2222222222222222222222222222222222222222 foo-1.2.tar.gz\n"
+ "blake2b-256 3333333333333333333333333333333333333333333333333333333333333333 foo-1.2.tar.gz\n"
"sha256 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa LICENSE\n"
)
@@ -220,6 +221,10 @@ class TestGenerateCycloneDX(unittest.TestCase):
"alg": "SHA-1",
"content": "2222222222222222222222222222222222222222",
},
+ {
+ "alg": "BLAKE2b-256",
+ "content": "3333333333333333333333333333333333333333333333333333333333333333",
+ },
]
},
{
@@ -234,6 +239,10 @@ class TestGenerateCycloneDX(unittest.TestCase):
"alg": "SHA-1",
"content": "2222222222222222222222222222222222222222",
},
+ {
+ "alg": "BLAKE2b-256",
+ "content": "3333333333333333333333333333333333333333333333333333333333333333",
+ },
],
}
],
diff --git a/utils/checkpackagelib/lib_hash.py b/utils/checkpackagelib/lib_hash.py
index 5968c809bf..3eafe7d9e0 100644
--- a/utils/checkpackagelib/lib_hash.py
+++ b/utils/checkpackagelib/lib_hash.py
@@ -31,7 +31,7 @@ class HashNumberOfFields(_CheckFunction):
class HashType(_CheckFunction):
len_of_hash = {"md5": 32, "sha1": 40, "sha224": 56, "sha256": 64,
- "sha384": 96, "sha512": 128}
+ "sha384": 96, "sha512": 128, "blake2b-256": 64}
def check_line(self, lineno, text):
if _empty_line_or_comment(text):
diff --git a/utils/checkpackagelib/test_lib_hash.py b/utils/checkpackagelib/test_lib_hash.py
index fdc6338189..cbccad647d 100644
--- a/utils/checkpackagelib/test_lib_hash.py
+++ b/utils/checkpackagelib/test_lib_hash.py
@@ -124,6 +124,10 @@ HashType = [
'sha512 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678'
'9012345678\n',
[]),
+ ('blake2b-256',
+ 'any',
+ 'blake2b-256 1234567890123456789012345678901234567890123456789012345678901234\n',
+ []),
]
diff --git a/utils/generate-cyclonedx b/utils/generate-cyclonedx
index bade018cd4..2f5981934f 100755
--- a/utils/generate-cyclonedx
+++ b/utils/generate-cyclonedx
@@ -298,6 +298,7 @@ def cyclonedx_source_hashes(comp, source):
"sha256": "SHA-256",
"sha512": "SHA-512",
"md5": "MD5",
+ "blake2b-256": "BLAKE2b-256",
}
hashes = []
diff --git a/utils/scanpypi b/utils/scanpypi
index 61879e39d4..de658328fe 100755
--- a/utils/scanpypi
+++ b/utils/scanpypi
@@ -672,7 +672,7 @@ class BuildrootPackage():
print('Creating {filename}...'.format(filename=path_to_hash))
lines = []
if self.used_url['digests']['md5'] and self.used_url['digests']['sha256']:
- hash_header = '# md5, sha256 from {url}\n'.format(
+ hash_header = '# md5, sha256, blake2b-256 from {url}\n'.format(
url=self.metadata_url)
lines.append(hash_header)
hash_line = '{method} {digest} {filename}\n'.format(
@@ -685,6 +685,11 @@ class BuildrootPackage():
digest=self.used_url['digests']['sha256'],
filename=self.filename)
lines.append(hash_line)
+ hash_line = '{method} {digest} {filename}\n'.format(
+ method='blake2b-256',
+ digest=self.used_url['digests']['blake2b_256'],
+ filename=self.filename)
+ lines.append(hash_line)
if self.license_files:
lines.append('# Locally computed sha256 checksums\n')
--
2.53.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Buildroot] [PATCH v3 2/3] package/pkg-python: derive PyPI site from blake2b-256 hash
2026-06-18 6:51 [Buildroot] [PATCH v3 1/3] support/download: add blake2b-256 hash support James Hilliard
@ 2026-06-18 6:51 ` James Hilliard
2026-09-14 21:22 ` Thomas Petazzoni via buildroot
2026-06-18 6:51 ` [Buildroot] [PATCH v3 3/3] package/python-async-timeout: use hash-based PyPI site James Hilliard
1 sibling, 1 reply; 8+ messages in thread
From: James Hilliard @ 2026-06-18 6:51 UTC (permalink / raw)
To: buildroot
Cc: Thomas Petazzoni, James Hilliard, Thomas Perale,
Ricardo Martincoski
Python packages downloaded from PyPI currently store the complete
files.pythonhosted.org package path in their .mk file. That path is
hash-based, so it changes for every version bump and adds churn to
updates and backports.
When a Python package does not define _SITE, derive the hash-based
files.pythonhosted.org site from the blake2b-256 entry matching the
package source archive in the package .hash file before the generic
package infrastructure validates _SITE.
Follow the usual target/host fallback pattern for _SITE, and raise an
explicit error if no hash file is available or if the hash file does not
contain a matching blake2b-256 entry. Add the host coreutils dependency
for packages using this resolver so b2sum is available when needed for
hash verification.
Update scanpypi to omit generated _SITE assignments so newly generated
PyPI packages can use the resolver.
Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
---
Changes v2 -> v3:
- Add the host coreutils dependency for packages using the hash-derived
PyPI site.
Changes v1 -> v2:
- Follow the usual target/host _SITE fallback pattern.
- Drop the /dev/null awk input and guard missing hash files explicitly.
- Error out when no matching blake2b-256 entry is found.
---
docs/manual/adding-packages-python.adoc | 5 +++++
package/pkg-python.mk | 15 +++++++++++++++
utils/scanpypi | 9 ---------
3 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/docs/manual/adding-packages-python.adoc b/docs/manual/adding-packages-python.adoc
index d6bae299a0..a66af1e7e2 100644
--- a/docs/manual/adding-packages-python.adoc
+++ b/docs/manual/adding-packages-python.adoc
@@ -82,6 +82,11 @@ All the package metadata information variables that exist in the
xref:generic-package-reference[generic package infrastructure] also
exist in the Python infrastructure.
+For Python packages downloaded from PyPI, the +PYTHON_FOO_SITE+ variable
+can be omitted when the package +.hash+ file contains a +blake2b-256+
+hash for the source archive. Buildroot derives the hash-based
+files.pythonhosted.org URL from that hash.
+
Note that:
* It is not necessary to add +python+ or +host-python+ in the
diff --git a/package/pkg-python.mk b/package/pkg-python.mk
index 32ace4aac1..9ffb26b430 100644
--- a/package/pkg-python.mk
+++ b/package/pkg-python.mk
@@ -454,6 +454,21 @@ endif
endif # host / target
+ifndef $(2)_SITE
+ ifdef $(3)_SITE
+ $(2)_SITE = $$($(3)_SITE)
+ else
+ $(2)_DOWNLOAD_DEPENDENCIES += $(BR2_COREUTILS_HOST_DEPENDENCY)
+ $(2)_SITE = $$(strip $$(if $$(strip $$($(2)_HASH_FILES)),\
+ $$(or $$(shell \
+ awk -v filename="$$(notdir $$($(2)_SOURCE))" \
+ '$$$$1 == "blake2b-256" && $$$$3 == filename { h = $$$$2; printf "https://files.pythonhosted.org/packages/%s/%s/%s", substr(h, 1, 2), substr(h, 3, 2), substr(h, 5); exit }' \
+ $$($(2)_HASH_FILES)),\
+ $$(error $(2)_SITE must be set or $$($(2)_HASH_FILES) must contain a blake2b-256 hash for $$($(2)_SOURCE))),\
+ $$(error $(2)_SITE must be set or a hash file must exist to derive the PyPI site)))
+ endif
+endif
+
# Call the generic package infrastructure to generate the necessary
# make targets
$(call inner-generic-package,$(1),$(2),$(3),$(4))
diff --git a/utils/scanpypi b/utils/scanpypi
index de658328fe..63b8f8f4d0 100755
--- a/utils/scanpypi
+++ b/utils/scanpypi
@@ -495,15 +495,6 @@ class BuildrootPackage():
filename=targz)
lines.append(targz_line)
- if self.filename not in self.url:
- # Sometimes the filename is in the url, sometimes it's not
- site_url = self.url
- else:
- site_url = self.url[:self.url.find(self.filename)]
- site_line = '{name}_SITE = {url}'.format(name=self.mk_name,
- url=site_url)
- site_line = site_line.rstrip('/') + '\n'
- lines.append(site_line)
return lines
def __create_mk_setup(self):
--
2.53.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Buildroot] [PATCH v3 3/3] package/python-async-timeout: use hash-based PyPI site
2026-06-18 6:51 [Buildroot] [PATCH v3 1/3] support/download: add blake2b-256 hash support James Hilliard
2026-06-18 6:51 ` [Buildroot] [PATCH v3 2/3] package/pkg-python: derive PyPI site from blake2b-256 hash James Hilliard
@ 2026-06-18 6:51 ` James Hilliard
1 sibling, 0 replies; 8+ messages in thread
From: James Hilliard @ 2026-06-18 6:51 UTC (permalink / raw)
To: buildroot
Cc: Thomas Petazzoni, James Hilliard, Thomas Perale,
Ricardo Martincoski
Add the blake2b-256 digest from the PyPI metadata and drop the explicit
PYTHON_ASYNC_TIMEOUT_SITE assignment.
The Python package infrastructure can now derive the hash-based
files.pythonhosted.org site from the package .hash file.
Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
---
package/python-async-timeout/python-async-timeout.hash | 3 ++-
package/python-async-timeout/python-async-timeout.mk | 1 -
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/package/python-async-timeout/python-async-timeout.hash b/package/python-async-timeout/python-async-timeout.hash
index 451c07de5d..c812b9c6c3 100644
--- a/package/python-async-timeout/python-async-timeout.hash
+++ b/package/python-async-timeout/python-async-timeout.hash
@@ -1,5 +1,6 @@
-# md5, sha256 from https://pypi.org/pypi/async-timeout/json
+# md5, sha256, blake2b-256 from https://pypi.org/pypi/async-timeout/json
md5 566a39011e87cb8044ee75369e69b327 async_timeout-5.0.1.tar.gz
sha256 d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3 async_timeout-5.0.1.tar.gz
+blake2b-256 a5ae136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780 async_timeout-5.0.1.tar.gz
# Locally computed sha256 checksums
sha256 e18d7bb8f513e2c46bb585c94b585bd30720dd3ccb21ddb0786f72d16658f92c LICENSE
diff --git a/package/python-async-timeout/python-async-timeout.mk b/package/python-async-timeout/python-async-timeout.mk
index 2835368003..017ea548b5 100644
--- a/package/python-async-timeout/python-async-timeout.mk
+++ b/package/python-async-timeout/python-async-timeout.mk
@@ -6,7 +6,6 @@
PYTHON_ASYNC_TIMEOUT_VERSION = 5.0.1
PYTHON_ASYNC_TIMEOUT_SOURCE = async_timeout-$(PYTHON_ASYNC_TIMEOUT_VERSION).tar.gz
-PYTHON_ASYNC_TIMEOUT_SITE = https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780
PYTHON_ASYNC_TIMEOUT_LICENSE = Apache-2.0
PYTHON_ASYNC_TIMEOUT_LICENSE_FILES = LICENSE
PYTHON_ASYNC_TIMEOUT_SETUP_TYPE = setuptools
--
2.53.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Buildroot] [PATCH v3 2/3] package/pkg-python: derive PyPI site from blake2b-256 hash
2026-06-18 6:51 ` [Buildroot] [PATCH v3 2/3] package/pkg-python: derive PyPI site from blake2b-256 hash James Hilliard
@ 2026-09-14 21:22 ` Thomas Petazzoni via buildroot
2026-09-15 17:14 ` James Hilliard
0 siblings, 1 reply; 8+ messages in thread
From: Thomas Petazzoni via buildroot @ 2026-09-14 21:22 UTC (permalink / raw)
To: James Hilliard; +Cc: buildroot, Thomas Perale, Ricardo Martincoski
Hello,
On Thu, Jun 18, 2026 at 12:51:36AM -0600, James Hilliard wrote:
> Python packages downloaded from PyPI currently store the complete
> files.pythonhosted.org package path in their .mk file. That path is
> hash-based, so it changes for every version bump and adds churn to
> updates and backports.
>
> When a Python package does not define _SITE, derive the hash-based
> files.pythonhosted.org site from the blake2b-256 entry matching the
> package source archive in the package .hash file before the generic
> package infrastructure validates _SITE.
>
> Follow the usual target/host fallback pattern for _SITE, and raise an
> explicit error if no hash file is available or if the hash file does not
> contain a matching blake2b-256 entry. Add the host coreutils dependency
> for packages using this resolver so b2sum is available when needed for
> hash verification.
>
> Update scanpypi to omit generated _SITE assignments so newly generated
> PyPI packages can use the resolver.
>
> Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
I must say I am not a fan of this approach. It is very "tricky" and
not obvious to understand that the _SITE information is in some cases
derived from information in the .hash file. For me this breaks the
principle of "obviousness" that makes Buildroot generally quite nice
to work with. I don't really find the current situation problematic,
and what we have currently is completely obvious to use/understand.
Of course, if the other maintainers are happy with your approach, I
will not oppose. But since so far nobody provided feedback, I thought
I should share my humble feedback.
Another concern: I assume you're adding
$(BR2_COREUTILS_HOST_DEPENDENCY) to DOWNLOAD_DEPENDENCIES so that
'awk' is available? But then if we run "make show-info" without doing
any build, it means we no longer have the _SITE information?
Best regards,
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Buildroot] [PATCH v3 2/3] package/pkg-python: derive PyPI site from blake2b-256 hash
2026-09-14 21:22 ` Thomas Petazzoni via buildroot
@ 2026-09-15 17:14 ` James Hilliard
2026-09-16 12:46 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 8+ messages in thread
From: James Hilliard @ 2026-09-15 17:14 UTC (permalink / raw)
To: Thomas Petazzoni; +Cc: buildroot, Thomas Perale, Ricardo Martincoski
On Mon, Sep 14, 2026 at 3:23 PM Thomas Petazzoni
<thomas.petazzoni@bootlin.com> wrote:
>
> Hello,
>
> On Thu, Jun 18, 2026 at 12:51:36AM -0600, James Hilliard wrote:
> > Python packages downloaded from PyPI currently store the complete
> > files.pythonhosted.org package path in their .mk file. That path is
> > hash-based, so it changes for every version bump and adds churn to
> > updates and backports.
> >
> > When a Python package does not define _SITE, derive the hash-based
> > files.pythonhosted.org site from the blake2b-256 entry matching the
> > package source archive in the package .hash file before the generic
> > package infrastructure validates _SITE.
> >
> > Follow the usual target/host fallback pattern for _SITE, and raise an
> > explicit error if no hash file is available or if the hash file does not
> > contain a matching blake2b-256 entry. Add the host coreutils dependency
> > for packages using this resolver so b2sum is available when needed for
> > hash verification.
> >
> > Update scanpypi to omit generated _SITE assignments so newly generated
> > PyPI packages can use the resolver.
> >
> > Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
>
> I must say I am not a fan of this approach. It is very "tricky" and
> not obvious to understand that the _SITE information is in some cases
> derived from information in the .hash file. For me this breaks the
> principle of "obviousness" that makes Buildroot generally quite nice
> to work with. I don't really find the current situation problematic,
> and what we have currently is completely obvious to use/understand.
Yeah, it's a bit weird deriving from a non-make file, although auto deriving
_SITE in general does have precedent and if the hash is missing there
should at least be a clear error explaining the reason:
https://github.com/buildroot/buildroot/blob/2026.08/package/pkg-luarocks.mk#L79-L85
> Of course, if the other maintainers are happy with your approach, I
> will not oppose. But since so far nobody provided feedback, I thought
> I should share my humble feedback.
Here's some background on where the suggestion for this change came from:
https://lore.kernel.org/buildroot/fb186248-7df4-4f73-94a2-c9b2ebefa843@bubu1.eu/
> Another concern: I assume you're adding
> $(BR2_COREUTILS_HOST_DEPENDENCY) to DOWNLOAD_DEPENDENCIES so that
> 'awk' is available?
Isn't awk already mandatory?:
https://github.com/buildroot/buildroot/blob/2026.08/support/dependencies/dependencies.sh#L157
> But then if we run "make show-info" without doing
> any build, it means we no longer have the _SITE information?
That should still work fine, we still set _SITE with this approach, it only
changes how/where it gets set.
>
> Best regards,
>
> Thomas
> --
> Thomas Petazzoni, co-owner and CEO, Bootlin
> Embedded Linux and Kernel engineering and training
> https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Buildroot] [PATCH v3 2/3] package/pkg-python: derive PyPI site from blake2b-256 hash
2026-09-15 17:14 ` James Hilliard
@ 2026-09-16 12:46 ` Thomas Petazzoni via buildroot
2026-09-16 16:56 ` James Hilliard
0 siblings, 1 reply; 8+ messages in thread
From: Thomas Petazzoni via buildroot @ 2026-09-16 12:46 UTC (permalink / raw)
To: James Hilliard; +Cc: buildroot, Thomas Perale, Ricardo Martincoski
Hello,
On Tue, Sep 15, 2026 at 11:14:14AM -0600, James Hilliard wrote:
> > I must say I am not a fan of this approach. It is very "tricky" and
> > not obvious to understand that the _SITE information is in some cases
> > derived from information in the .hash file. For me this breaks the
> > principle of "obviousness" that makes Buildroot generally quite nice
> > to work with. I don't really find the current situation problematic,
> > and what we have currently is completely obvious to use/understand.
>
> Yeah, it's a bit weird deriving from a non-make file, although auto deriving
> _SITE in general does have precedent and if the hash is missing there
> should at least be a clear error explaining the reason:
> https://github.com/buildroot/buildroot/blob/2026.08/package/pkg-luarocks.mk#L79-L85
This is not at all the same thing: this is a case where we have a
default. If nothing is specified, a default is used, but that default
value is not magically inferred from the .hash file.
> > Of course, if the other maintainers are happy with your approach, I
> > will not oppose. But since so far nobody provided feedback, I thought
> > I should share my humble feedback.
>
> Here's some background on where the suggestion for this change came from:
> https://lore.kernel.org/buildroot/fb186248-7df4-4f73-94a2-c9b2ebefa843@bubu1.eu/
OK. I still find this "meh". But again, this is just my own
opinion/voice, and I will not oppose to this getting merged. It's just
that it's been sitting on patchwork for a bit of time with no
feedback, so I thought that to help get things move forward, I would
share my feedback.
> > Another concern: I assume you're adding
> > $(BR2_COREUTILS_HOST_DEPENDENCY) to DOWNLOAD_DEPENDENCIES so that
> > 'awk' is available?
>
> Isn't awk already mandatory?:
> https://github.com/buildroot/buildroot/blob/2026.08/support/dependencies/dependencies.sh#L157
Indeed. But then why does your patch have:
$(2)_DOWNLOAD_DEPENDENCIES += $(BR2_COREUTILS_HOST_DEPENDENCY)
> > But then if we run "make show-info" without doing
> > any build, it means we no longer have the _SITE information?
>
> That should still work fine, we still set _SITE with this approach, it only
> changes how/where it gets set.
Not if $(BR2_COREUTILS_HOST_DEPENDENCY) must be built to calculate the
_SITE value (see above question).
Thanks!
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Buildroot] [PATCH v3 2/3] package/pkg-python: derive PyPI site from blake2b-256 hash
2026-09-16 12:46 ` Thomas Petazzoni via buildroot
@ 2026-09-16 16:56 ` James Hilliard
2026-09-16 20:38 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 8+ messages in thread
From: James Hilliard @ 2026-09-16 16:56 UTC (permalink / raw)
To: Thomas Petazzoni; +Cc: buildroot, Thomas Perale, Ricardo Martincoski
On Wed, Sep 16, 2026 at 6:46 AM Thomas Petazzoni
<thomas.petazzoni@bootlin.com> wrote:
>
> Hello,
>
> On Tue, Sep 15, 2026 at 11:14:14AM -0600, James Hilliard wrote:
>
> > > I must say I am not a fan of this approach. It is very "tricky" and
> > > not obvious to understand that the _SITE information is in some cases
> > > derived from information in the .hash file. For me this breaks the
> > > principle of "obviousness" that makes Buildroot generally quite nice
> > > to work with. I don't really find the current situation problematic,
> > > and what we have currently is completely obvious to use/understand.
> >
> > Yeah, it's a bit weird deriving from a non-make file, although auto deriving
> > _SITE in general does have precedent and if the hash is missing there
> > should at least be a clear error explaining the reason:
> > https://github.com/buildroot/buildroot/blob/2026.08/package/pkg-luarocks.mk#L79-L85
>
> This is not at all the same thing: this is a case where we have a
> default. If nothing is specified, a default is used, but that default
> value is not magically inferred from the .hash file.
>
> > > Of course, if the other maintainers are happy with your approach, I
> > > will not oppose. But since so far nobody provided feedback, I thought
> > > I should share my humble feedback.
> >
> > Here's some background on where the suggestion for this change came from:
> > https://lore.kernel.org/buildroot/fb186248-7df4-4f73-94a2-c9b2ebefa843@bubu1.eu/
>
> OK. I still find this "meh". But again, this is just my own
> opinion/voice, and I will not oppose to this getting merged. It's just
> that it's been sitting on patchwork for a bit of time with no
> feedback, so I thought that to help get things move forward, I would
> share my feedback.
>
> > > Another concern: I assume you're adding
> > > $(BR2_COREUTILS_HOST_DEPENDENCY) to DOWNLOAD_DEPENDENCIES so that
> > > 'awk' is available?
> >
> > Isn't awk already mandatory?:
> > https://github.com/buildroot/buildroot/blob/2026.08/support/dependencies/dependencies.sh#L157
>
> Indeed. But then why does your patch have:
>
> $(2)_DOWNLOAD_DEPENDENCIES += $(BR2_COREUTILS_HOST_DEPENDENCY)
That dependency provides b2sum -l 256, which support/download/check-hash
uses to verify the downloaded archive. I added it following Yann's
review about supporting hosts with older coreutils.
>
> > > But then if we run "make show-info" without doing
> > > any build, it means we no longer have the _SITE information?
> >
> > That should still work fine, we still set _SITE with this approach, it only
> > changes how/where it gets set.
>
> Not if $(BR2_COREUTILS_HOST_DEPENDENCY) must be built to calculate the
> _SITE value (see above question).
Resolving _SITE only uses awk to read the digest already recorded in
.hash and format it into the PyPI URL. It does not calculate a hash or
invoke b2sum, so it does not require host-coreutils to be built.
>
> Thanks!
>
> Thomas
> --
> Thomas Petazzoni, co-owner and CEO, Bootlin
> Embedded Linux and Kernel engineering and training
> https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Buildroot] [PATCH v3 2/3] package/pkg-python: derive PyPI site from blake2b-256 hash
2026-09-16 16:56 ` James Hilliard
@ 2026-09-16 20:38 ` Thomas Petazzoni via buildroot
0 siblings, 0 replies; 8+ messages in thread
From: Thomas Petazzoni via buildroot @ 2026-09-16 20:38 UTC (permalink / raw)
To: James Hilliard; +Cc: buildroot, Thomas Perale, Ricardo Martincoski
On Wed, Sep 16, 2026 at 10:56:35AM -0600, James Hilliard wrote:
> > $(2)_DOWNLOAD_DEPENDENCIES += $(BR2_COREUTILS_HOST_DEPENDENCY)
>
> That dependency provides b2sum -l 256, which support/download/check-hash
> uses to verify the downloaded archive. I added it following Yann's
> review about supporting hosts with older coreutils.
But then that doesn't work either, because it only adds
$(BR2_COREUTILS_HOST_DEPENDENCY) in DOWNLOAD_DEPENDENCIES for python
packages that don't specify a _SITE variable.
But the blake2 hash support is completely unrelated to Python: any
other package could use it, not necessarily a Python package. Or could
be a Python package that specifies _SITE explicitly.
> Resolving _SITE only uses awk to read the digest already recorded in
> .hash and format it into the PyPI URL. It does not calculate a hash or
> invoke b2sum, so it does not require host-coreutils to be built.
Indeed, but see above :-)
(Also, this line adding $(BR2_COREUTILS_HOST_DEPENDENCY) the
dependencies would definitely need a comment)
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-09-16 20:38 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-18 6:51 [Buildroot] [PATCH v3 1/3] support/download: add blake2b-256 hash support James Hilliard
2026-06-18 6:51 ` [Buildroot] [PATCH v3 2/3] package/pkg-python: derive PyPI site from blake2b-256 hash James Hilliard
2026-09-14 21:22 ` Thomas Petazzoni via buildroot
2026-09-15 17:14 ` James Hilliard
2026-09-16 12:46 ` Thomas Petazzoni via buildroot
2026-09-16 16:56 ` James Hilliard
2026-09-16 20:38 ` Thomas Petazzoni via buildroot
2026-06-18 6:51 ` [Buildroot] [PATCH v3 3/3] package/python-async-timeout: use hash-based PyPI site James Hilliard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox