From 4bb81dbda320b0ccbbe1fb79ed4dc8c6071cc9b9 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 9 Aug 2026 22:04:25 -0400 Subject: [PATCH] Repair nested abxpkg projections after UID remap --- archivebox/tests/test_permissions.py | 8 +++++++- bin/docker_entrypoint.sh | 9 +++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/archivebox/tests/test_permissions.py b/archivebox/tests/test_permissions.py index 790d984a..fe652d3a 100644 --- a/archivebox/tests/test_permissions.py +++ b/archivebox/tests/test_permissions.py @@ -138,10 +138,16 @@ def test_existing_collection_handoff_is_bounded_to_known_top_level_paths(tmp_pat assert all(path == tmp_path or path.parent in (tmp_path, errors_log.parent) for path in paths) -def test_permission_repair_hint_avoids_recursive_collection_chown(): +def test_permission_repairs_avoid_recursive_collection_and_abxpkg_chown(): from archivebox.misc import checks assert "chown -R" not in Path(checks.__file__).read_text(encoding="utf-8") + entrypoint = (Path(__file__).parents[2] / "bin" / "docker_entrypoint.sh").read_text(encoding="utf-8") + abxpkg_repairs = entrypoint.partition('ensure_dir "$ABXPKG_LIB_DIR"')[2].partition("run_as_archivebox touch")[0] + + assert 'for package_dir in "$provider_dir"/packages/*; do' in abxpkg_repairs + assert 'ensure_file_owner "$package_dir/derived.env"' in abxpkg_repairs + assert "chown -R" not in abxpkg_repairs def test_root_handoff_never_selects_filesystem_root(): diff --git a/bin/docker_entrypoint.sh b/bin/docker_entrypoint.sh index 049e6372..6cb1f065 100755 --- a/bin/docker_entrypoint.sh +++ b/bin/docker_entrypoint.sh @@ -201,12 +201,17 @@ ensure_runtime_tmp_tree ensure_dir "$ABXPKG_LIB_DIR" ensure_dir "$ABXPKG_LIB_DIR/env" ensure_dir "$ABXPKG_LIB_DIR/env/bin" -# abxpkg writes one small derived.env projection per provider. Repair only the -# provider directory and projection file; package/cache contents can be large. +# abxpkg writes small derived.env projections per provider and package. Repair +# only those directories and files; package/cache contents can be large. for provider_dir in "$ABXPKG_LIB_DIR"/*; do [[ -d "$provider_dir" ]] || continue ensure_dir "$provider_dir" ensure_file_owner "$provider_dir/derived.env" + for package_dir in "$provider_dir"/packages/*; do + [[ -d "$package_dir" ]] || continue + ensure_dir "$package_dir" + ensure_file_owner "$package_dir/derived.env" + done done run_as_archivebox touch "$ABXBUS_CACHE_DIR/semaphores/.permissions_test_safe_to_delete" 2>/dev/null || permission_error "$ABXBUS_CACHE_DIR/semaphores" rm -f "$ABXBUS_CACHE_DIR/semaphores/.permissions_test_safe_to_delete"