From e230da3d28e231163d99d116deb5a372921f2dda Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 18 May 2026 16:50:10 +0000 Subject: [PATCH 1/2] Fix Docker repo setup for Debian ARM64 Two issues caused failures on Debian 13 (Trixie) ARM64: 1. apt-get update was never called before installing gnupg, leaving the package cache stale. The cached version (gnupg2 2.4.7-21+b3) was no longer available on the ARM64 mirror, producing 404 errors. Adding apt-get update before the install fixes this. 2. The Docker GPG key and apt repo URL were hardcoded to the Ubuntu endpoint. Debian has its own Docker repo at https://download.docker.com/linux/debian. The distro ID is now read from /etc/os-release and used to select the correct URL. https://claude.ai/code/session_01CkJR1eHoBVMyNNeGdbRBYK --- bootstrap_environment.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/bootstrap_environment.py b/bootstrap_environment.py index df941fa..d814224 100755 --- a/bootstrap_environment.py +++ b/bootstrap_environment.py @@ -266,6 +266,18 @@ def detect_pkg_mgr() -> str: PKG_MGR = detect_pkg_mgr() +def _os_release_field(field: str) -> str: + """Return the value of a field from /etc/os-release (unquoted), or ''.""" + try: + data = Path("/etc/os-release").read_text() + except OSError: + return "" + for line in data.splitlines(): + if line.startswith(field + "="): + _, _, val = line.partition("=") + return val.strip().strip('"') + return "" + def _is_rhel_family() -> bool: """True for RHEL-derived distros (Fedora, RHEL, CentOS, Rocky, Alma, ...).""" try: @@ -467,10 +479,13 @@ def setup_docker_repo() -> None: elif PKG_MGR == "apt-get": if _repo_file_exists("/etc/apt/sources.list.d/docker.list"): return + run(["apt-get", "update"], as_sudo=True) run(["apt-get", "install", "-y", "ca-certificates", "curl", "gnupg"], as_sudo=True) + distro_id = _os_release_field("ID") + docker_distro = distro_id if distro_id in {"debian", "ubuntu"} else "ubuntu" shell( "install -m 0755 -d /etc/apt/keyrings && " - "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | " + f"curl -fsSL https://download.docker.com/linux/{docker_distro}/gpg | " "sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg && " "sudo chmod a+r /etc/apt/keyrings/docker.gpg" ) @@ -484,7 +499,7 @@ def setup_docker_repo() -> None: as_sudo=True, input=( f"deb [arch={deb_arch} signed-by=/etc/apt/keyrings/docker.gpg] " - f"https://download.docker.com/linux/ubuntu {codename} stable\n" + f"https://download.docker.com/linux/{docker_distro} {codename} stable\n" ).encode(), capture_output=True, check=True, ) -- 2.47.3 From aa39c2f493800436081ec384f843d7df401fab4e Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 18 May 2026 17:05:35 +0000 Subject: [PATCH 2/2] Fix README usage command - curl and unzip were pipe-chained, but -o writes to a file so the pipe produced nothing; split into separate steps with && - Extracted directory is bootstrap_dev_env-main, not bootstrap - Script is bootstrap_environment.py, not bootstrap_dev_env https://claude.ai/code/session_01CkJR1eHoBVMyNNeGdbRBYK --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8d0f19b..d3e8d58 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # Usage ``` shell -curl -L -o bootstrap.zip https://github.com/JMR-dev/bootstrap_dev_env/archive/refs/heads/main.zip | unzip bootstrap.zip \ -cd bootstrap \ -python bootstrap_dev_env \ +curl -L -o bootstrap.zip https://github.com/JMR-dev/bootstrap_dev_env/archive/refs/heads/main.zip && \ +unzip bootstrap.zip && \ +cd bootstrap_dev_env-main && \ +python3 bootstrap_environment.py ``` -- 2.47.3