[arch-projects] [devtools] [PATCH] mkarchroot: Avoid binding cache dirs in the host mirror path

Dave Reisner d at falconindy.com
Sat Sep 1 21:48:43 EDT 2012


On Sun, Sep 02, 2012 at 03:42:19AM +0200, Jan Alexander Steffens (heftig) wrote:
> From: "Jan Alexander Steffens (heftig)" <jan.steffens at gmail.com>
> 
> This is a workaround that should prevent the zombie mounts we've been seeing
> on brynhild that crept up when combining systemd's shared-by-default mounts,
> nested bind mounts and concurrent mkarchroots.
> 
> So get rid of the nested bind mounts.
> 
> A more proper fix would probably be to --make-slave every bind we're making.
> I've been looking into doing that along with using systemd-nspawn. Alas, nspawn
> currently seems to be interactive-use only, as it expects a terminal on STDIN
> and epoll-able STDOUT.
> ---
>  mkarchroot.in | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/mkarchroot.in b/mkarchroot.in
> index 5bcde76..519837a 100644
> --- a/mkarchroot.in
> +++ b/mkarchroot.in
> @@ -75,6 +75,8 @@ fi
>  host_mirror=$(pacman -Sddp extra/devtools 2>/dev/null | sed -E 's#(.*/)extra/os/.*#\1$repo/os/$arch#')
>  if echo "${host_mirror}" | grep -q 'file://'; then
>  	host_mirror_path=$(echo "${host_mirror}" | sed -E 's#file://(/.*)/\$repo/os/\$arch#\1#g')
> +	# Remove cache dirs in host mirror path, those are handled specially to avoid additional binds
> +	cache_dirs=( "${cache_dirs[@]/${host_mirror_path}*/}" )
>  fi
>  
>  # {{{ functions
> @@ -149,7 +151,12 @@ copy_hostconf () {
>  		cp ${makepkg_conf} ${working_dir}/etc/makepkg.conf
>  	fi
>  
> -	sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n ${cache_dirs[@]})|g" -i ${working_dir}/etc/pacman.conf
> +	local conf_cache_dirs=( "${cache_dirs[@]}" )
> +	if [[ -n ${host_mirror_path} ]]; then
> +		conf_cache_dirs+=( "${host_mirror_path}"/pool/{packages,community} )
> +	fi
> +
> +	sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n ${conf_cache_dirs[@]})|" -i ${working_dir}/etc/pacman.conf

As I mentioned on IRC, you should be about to  get rid of the echo -n
hack by expanding conf_cache_dirs correctly as ${conf_cache_dirs[*]}.

>  }
>  
>  chroot_umount () {
> -- 
> 1.7.12
> 


More information about the arch-projects mailing list