pmb.helpers.apk: support PMB_APK_NO_CACHE

Add a new environment variable that disables apk's caching feature for
space constrained environments such as the bpo image build jobs.

Currently we have a workaround in place in bpo: the apk cache is moved
to a tmpfs. But this is fragile and just disabling the apk cache is a
more elegant solution.

I've decided to make this an env var instead of a full pmbootstrap
option since this option is not relevant for normal users, only for CI
jobs in space constrained environments. Also we already have another
`PMB_APK_` env var.

Related: bpo issue 136
Part-of: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/merge_requests/2553
This commit is contained in:
Oliver Smith 2025-02-16 16:27:41 +01:00
parent dcc4137ee8
commit 4bf3f11b78
No known key found for this signature in database
GPG key ID: 5AE7F5513E0885CB
2 changed files with 16 additions and 3 deletions

View file

@ -14,6 +14,11 @@ APKINDEX results in a 404 not found error. This is used by
the first time. For example if the `x86_64` repository was already built and
published, but the `aarch64` repository wasn't published yet.
## `PMB_APK_NO_CACHE`
When this is set to `1`, pmbootstrap will disable apk's caching feature. This
is used by bpo for image build jobs, so these jobs don't need as much space.
## `PMB_FDE_PASSWORD`
This variable can be used to set the password when running `install --fde`. The

View file

@ -173,10 +173,14 @@ def _prepare_cmd(command: Sequence[PathString], chroot: Chroot | None) -> list[s
str(chroot.path),
"--arch",
str(chroot.arch),
"--cache-dir",
str(cache_dir),
]
)
if os.getenv("PMB_APK_NO_CACHE") == "1":
_command.extend(["--no-cache"])
else:
_command.extend(["--cache-dir", str(cache_dir)])
local_repos = pmb.helpers.repo.urls(
user_repository=config.work / "packages", mirrors_exclude=True
)
@ -212,7 +216,11 @@ def run(command: Sequence[PathString], chroot: Chroot, with_progress: bool = Tru
raise RuntimeError(
"Encountered an 'apk add' command without --no-interactive! This is a bug."
)
if "--cache-dir" not in _command:
if os.getenv("PMB_APK_NO_CACHE") == "1" and "--no-cache" not in _command:
raise RuntimeError(
"Encountered an 'apk add' command without --no-cache! This is a bug."
)
if os.getenv("PMB_APK_NO_CACHE") != "1" and "--cache-dir" not in _command:
raise RuntimeError(
"Encountered an 'apk add' command without --cache-dir! This is a bug."
)