From 1d3b447d672352fc7c2445171891921e20f5e2f6 Mon Sep 17 00:00:00 2001 From: Tom Elliott Date: Sun, 5 Jul 2026 08:30:08 -0500 Subject: [PATCH 1/4] build.sh: fail on source-download errors; fetch kernel from cdn.kernel.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --fs-download-only ignored the exit status of 'make source', so the CI download_filesystem_packages job went green today (run 28741856230) despite failing to download linux-6.18.38.tar.xz for all three arches — which then poisoned the Buildroot dl cache and failed every init build downstream. Propagate the failure. Also fetch the kernel tarball from cdn.kernel.org instead of www.kernel.org: the www frontend is what was timing out today, and the CDN is the endpoint kernel.org documentation recommends for downloads (it's also Buildroot's default BR2_KERNEL_MIRROR these days). Co-Authored-By: Claude Fable 5 --- build.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.sh b/build.sh index dd2cc07..57bedfb 100755 --- a/build.sh +++ b/build.sh @@ -170,6 +170,8 @@ function buildFilesystem() { if [[ $fsDownloadOnly == "y" ]]; then echo "Downloading Buildroot source packages for $arch ..." make source + status=$? + [[ $status -gt 0 ]] && echo "Failed to download source packages for $arch." && exit $status cd .. echo "$arch filesystem packages downloaded. Exiting." return 0 @@ -234,7 +236,7 @@ function buildKernel() { kflags=$(makeFlags "$arch" kernel) ktarget=bzImage [[ $arch == arm64 ]] && ktarget=Image - kernelURL="https://www.kernel.org/pub/linux/kernel/v${KERNEL_VERSION:0:1}.x/linux-$KERNEL_VERSION.tar.xz" + kernelURL="https://cdn.kernel.org/pub/linux/kernel/v${KERNEL_VERSION:0:1}.x/linux-$KERNEL_VERSION.tar.xz" echo "Preparing kernel $KERNEL_VERSION on $arch build:" [[ -d kernelsource$arch ]] && rm -rf "kernelsource$arch" if [[ ! -f linux-$KERNEL_VERSION.tar.xz ]]; then From 711f56369a22b8c79e60d323a1791fb657c3002b Mon Sep 17 00:00:00 2001 From: Tom Elliott Date: Sun, 5 Jul 2026 08:49:28 -0500 Subject: [PATCH 2/4] dependencies.sh: autopoint is a Debian package name; RHEL-family ships it in gettext-devel The dependency check greps installed package names, so on Fedora/RHEL it always reported autopoint missing (and --install-dep tried to 'dnf install autopoint', which doesn't exist). Move autopoint to the Debian list and check/install gettext-devel on RHEL-family instead. Co-Authored-By: Claude Fable 5 --- dependencies.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dependencies.sh b/dependencies.sh index af2af70..31cb87d 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -26,7 +26,6 @@ declare -ar common_dependencies=( "findutils" "autoconf" "libtool" - "autopoint" ) declare -ar deb_dependencies=( @@ -34,6 +33,7 @@ declare -ar deb_dependencies=( "xz-utils" "g++" "libncurses-dev" + "autopoint" ) declare -ar rhel_dependencies=( @@ -42,6 +42,7 @@ declare -ar rhel_dependencies=( "xz" "gcc-c++" "ncurses-devel" + "gettext-devel" ) From b885a970ebec7e682de81cc273d0006f377f9a48 Mon Sep 17 00:00:00 2001 From: Tom Elliott Date: Sun, 5 Jul 2026 09:30:30 -0500 Subject: [PATCH 3/4] dependencies.sh: add automake (aclocal), needed by AUTORECONF packages partclone (PARTCLONE_AUTORECONF = YES) fails at configure with "Can't exec aclocal" on hosts without automake. Ubuntu CI runners ship it preinstalled, which masked the missing entry. Co-Authored-By: Claude Fable 5 --- dependencies.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/dependencies.sh b/dependencies.sh index 31cb87d..38e29fa 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -25,6 +25,7 @@ declare -ar common_dependencies=( "bzip2" "findutils" "autoconf" + "automake" "libtool" ) From 1b210baed685dc2c53b8a0ebd45a3368ab04c802 Mon Sep 17 00:00:00 2001 From: Tom Elliott Date: Sun, 5 Jul 2026 09:53:27 -0500 Subject: [PATCH 4/4] dependencies.sh: query the package manager per package instead of grepping name lists The check piped the full installed-package list through an unanchored grep, so any package whose name contains a dependency's name satisfied the check: libtool-ltdl passed for libtool while libtoolize was actually missing. Anchoring the match instead would break names that are provided by a differently-named package (wget via wget2-wget on Fedora 40+). Ask the package manager directly instead: rpm -q --whatprovides on RHEL-family (resolves virtual provides) and dpkg -s with an installed-status check on Debian-family. Co-Authored-By: Claude Fable 5 --- dependencies.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/dependencies.sh b/dependencies.sh index 38e29fa..29038c1 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -64,15 +64,15 @@ function checkDependencies() { "debian" | "ubuntu") dependencies=("${common_dependencies[@]}" "${deb_dependencies[@]}") package_manager="sudo apt install -y" - pkgmgr() { - dpkg -l + pkginstalled() { + dpkg -s "$1" 2> /dev/null | grep -q "^Status:.*ok installed" } ;; "rhel" | "rocky" | "fedora") dependencies=("${common_dependencies[@]}" "${rhel_dependencies[@]}") package_manager="sudo dnf install -y" - pkgmgr() { - rpm -qa --qf "ii %{NAME}\n" + pkginstalled() { + rpm -q --whatprovides "$1" > /dev/null 2>&1 } if [[ $running_os == "rhel" || $running_os == "rocky" ]]; then __epel_repo_message @@ -87,8 +87,7 @@ function checkDependencies() { missing_packages="" for package in "${dependencies[@]}"; do - pkgmgr | awk '{print $2}' | cut -d':' -f1 | grep -qe "${package}" - if [[ $? -ne 0 ]]; then + if ! pkginstalled "${package}"; then missing_packages="${missing_packages} ${package}" fi done