* [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* 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
* [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
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.