[arch-projects] [devtools] [PATCH 1/4] arch-nspawn: restore cachedir handling for host_mirrors

Eli Schwartz eschwartz at archlinux.org
Tue Nov 5 23:40:44 UTC 2019


In commit 27ff286ee78eb2faac803e3ef67f3171ddfa0098, we moved from
sourcing the primary cachedir via /etc/pacman.conf, to using the
pacman.conf in the workdir. One unanticipated side effect of this was
breaking the special host mirrors magic we used to turn a host mirror
into a cachedir. It was still processed as a server, but we relied on it
being in the host's cachedirs in order to be persisted, and this no
longer occurred.

Solve this by explicitly adding each host mirror root as a cachedir.

Signed-off-by: Eli Schwartz <eschwartz at archlinux.org>
---
 arch-nspawn.in | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/arch-nspawn.in b/arch-nspawn.in
index 5817143..90fe967 100644
--- a/arch-nspawn.in
+++ b/arch-nspawn.in
@@ -99,7 +99,14 @@ build_mount_args() {
 copy_hostconf () {
 	unshare --fork --pid gpg --homedir "$working_dir"/etc/pacman.d/gnupg/ --no-permission-warning --quiet --batch --import --import-options import-local-sigs "$(pacman-conf GpgDir)"/pubring.gpg >/dev/null 2>&1
 	pacman-key --gpgdir "$working_dir"/etc/pacman.d/gnupg/ --import-trustdb "$(pacman-conf GpgDir)" >/dev/null 2>&1
+
 	printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist"
+	for host_mirror in "${host_mirrors[@]}"; do
+		if [[ $host_mirror == *file://* ]]; then
+			host_mirror=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
+			in_array "$host_mirror" "${cache_dirs[@]}" || cache_dirs+=("$host_mirror")
+		fi
+	done
 
 	[[ -n $pac_conf ]] && cp "$pac_conf" "$working_dir/etc/pacman.conf"
 	[[ -n $makepkg_conf ]] && cp "$makepkg_conf" "$working_dir/etc/makepkg.conf"
-- 
2.24.0


More information about the arch-projects mailing list