Compare commits

...

6 commits

Author SHA1 Message Date
eb8fa7805a Update README.md
Note about not having ccache/sccache preinstalled in chroot.
2024-04-08 12:17:42 +09:00
71cf85f1cd Add notice when dependency prefetch is successful 2024-04-08 12:11:31 +09:00
3cc1a0b583 Fix prefetch_dependencies fn
Fixed invalid log of packages to prefetch (tried to read invalid
variable name that changed from "pkg" to "pkgs").
2024-04-08 12:00:08 +09:00
99f3d915c6 Fixes
Change "prefetch_dependency" to "prefetch_dependnecies" and fetch all
"other_deps" at the same time.

Fix some erronous type hints.
2024-04-08 11:57:09 +09:00
a040785bd6 Install s/ccache only when needed, note in README
It is better to not preinstall sccache/ccache in the chroot as mentioned
in the README.
2024-04-08 11:12:13 +09:00
0b91176586 Prefetch "other_deps" with "pacman -Sw" 2024-04-08 11:02:36 +09:00
2 changed files with 74 additions and 2 deletions

View file

@ -63,6 +63,24 @@ GiB somehow).
the build will fail if the limit is reached. If set to false, then the build
will continue even if the limit is reached.
## Soft-lock if `sccache` is preinstalled in chroot
Apparently, some packages automatically use ccache/sccache if it is installed in
the chroot, and in some cases, causes a soft-lock during a build. It is
recommended to not have ccache/sccache preinstalled in the chroot and to just
let the aur-helper-script install it when necessary.
For example, when building `tenacity-git` with sccache preinstalled, the build
will hang after the final build step. Apparently, killing the running `sccache`
process stops the soft-lock in this case.
## Preloading ccache/sccache
This script expects ccache and sccache not to be installed in the chroot (for
reasons as mentioned in the previous section) and ccache or sccache will be
appended to a pkg's "other_deps" if a ccache or sccache directory is configured
for it.
# Setting up the AUR Helper
The AUR Helper requires several things:
@ -86,7 +104,9 @@ The `python-toml` package is required for the Python script to run.
Use `/usr/bin/mkarchroot` to create your CHROOT in a directory.
mkarchroot $HOME/mychroot/root base base-devel ccache sccache cmake ninja
mkarchroot $HOME/mychroot/root base base-devel cmake ninja
As noted earlier, it is better to NOT preinstall `ccache` and `sccache`.
You must refer to the CHROOT as `$HOME/mychroot` if you used the same name as in
the previous example.

View file

@ -741,6 +741,18 @@ def get_pkgbuild_version(
5,
f'{os.environ["HOME"]}/.cargo/git:/build/.cargo/git',
)
if len(pkg_state[pkg]["other_deps"]) != 0:
prefetch_result = prefetch_dependencies(
pkg_state[pkg]["other_deps"], other_state
)
if prefetch_result != "fetched":
log_print(
"ERROR: Failed to prefetch deps {}".format(
pkg_state[pkg]["other_deps"]
),
other_state=other_state,
)
return False, None, None, None
for dep in pkg_state[pkg]["other_deps"]:
dep_fullpath = get_latest_pkg(dep, "/var/cache/pacman/pkg")
if not dep_fullpath:
@ -1374,6 +1386,28 @@ def update_pkg_list(
"--holdver",
]
failure = False
if "ccache_dir" in pkg_state[pkg]:
pkg_state[pkg]["other_deps"].append("ccache")
elif "sccache_dir" in pkg_state[pkg]:
pkg_state[pkg]["other_deps"].append("sccache")
if len(pkg_state[pkg]["other_deps"]) != 0:
prefetch_result = prefetch_dependencies(
pkg_state[pkg]["other_deps"], other_state
)
if prefetch_result != "fetched":
log_print(
"ERROR: Failed to prefetch deps {}".format(
pkg_state[pkg]["other_deps"]
),
other_state=other_state,
)
failure = True
pkg_state[pkg]["build_status"] = "get_dep_fail"
break
log_print(
"Successfully prefetched deps, continuing on to build...",
other_state=other_state,
)
for dep in pkg_state[pkg]["other_deps"]:
dep_fullpath = get_latest_pkg(dep, "/var/cache/pacman/pkg")
if not dep_fullpath:
@ -1987,7 +2021,7 @@ fi
return "ok"
def prepare_user_chroot(other_state: [str, Any]):
def prepare_user_chroot(other_state: dict[str, Any]):
try:
log_print(
'Running "makechrootpkg ... --nobuild" with dummy package to ensure user chroot is ready...',
@ -2030,6 +2064,24 @@ def prepare_user_chroot(other_state: [str, Any]):
return True
def prefetch_dependencies(pkg_names: [str], other_state: dict[str, Any]):
"""Returns "fetched" on success."""
log_print(
f'Prefetching packages "{pkg_names}" with "pacman -Sw"...',
other_state=other_state,
)
command_list = ["/usr/bin/env", "sudo", "pacman", "--noconfirm", "-Sw"]
command_list.extend(pkg_names)
try:
subprocess.run(
command_list,
check=True,
)
except subprocess.CalledProcessError:
return "fail"
return "fetched"
def main():
"""The main function."""
signal.signal(signal.SIGINT, signal_handler)