[arch-projects] [devtools] [PATCH] use nspawn to bind mount needed directories

Dave Reisner d at falconindy.com
Sun Mar 10 14:38:12 EDT 2013


On Sun, Mar 10, 2013 at 06:48:21PM +0100, Pierre Schmitz wrote:
> Am 10.03.2013 18:37, schrieb Dave Reisner:
> > On Sun, Mar 10, 2013 at 10:09:48AM +0100, Pierre Schmitz wrote:
> >> Am 28.02.2013 23:09, schrieb Dave Reisner:
> >> > systemd-nspawn is capable of doing this as of systemd-198.
> >> >
> >> > Signed-off-by: Dave Reisner <dreisner at archlinux.org>
> >> > ---
> >> >  mkarchroot.in | 21 ++++++++++++++-------
> >> >  1 file changed, 14 insertions(+), 7 deletions(-)
> >> >
> >> > diff --git a/mkarchroot.in b/mkarchroot.in
> >> > index 20de5e6..c7c7bcb 100644
> >> > --- a/mkarchroot.in
> >> > +++ b/mkarchroot.in
> >> > @@ -95,14 +95,21 @@ bind_mount() {
> >> >  	mount --make-slave "$target"
> >> >  }
> >> >
> >> > -chroot_mount() {
> >> > -	trap 'trap_chroot_umount' EXIT INT QUIT TERM HUP
> >> > +build_mount_args() {
> >> > +	local p
> >> > +	declare -g mount_args=()
> >> >
> >> > -	[[ -n $host_mirror_path ]] && bind_mount "$host_mirror_path" ro
> >> > +	if [[ -n $host_mirror_path ]]; then
> >> > +		printf -v p '%q' "$host_mirror_path"
> >> > +		mount_args+=(--bind-ro="$p")
> >> > +	fi
> >> > +
> >> > +	printf -v p '%q' "${cache_dirs[0]}"
> >> > +	mount_args+=(--bind="$p")
> >> >
> >> > -	bind_mount "${cache_dirs[0]}"
> >> >  	for cache_dir in ${cache_dirs[@]:1}; do
> >> > -		bind_mount "$cache_dir" ro
> >> > +		printf -v p '%q' "$cache_dir"
> >> > +		mount_args+=(--bind-ro="$p")
> >> >  	done
> >> >  }
> >> >
> >> > @@ -148,7 +155,7 @@ chroot_lock () {
> >> >  chroot_run() {
> >> >  	local dir=$1
> >> >  	shift
> >> > -	eval systemd-nspawn -D "${dir}" -- ${@} 2>/dev/null
> >> > +	eval systemd-nspawn -D "${dir}" "${mount_args[@]}" -- ${@} 2>/dev/null
> >> >  }
> >> >
> >> >  # }}}
> >> > @@ -164,7 +171,7 @@ if [[ -n $RUN ]]; then
> >> >  	fi
> >> >
> >> >  	chroot_lock
> >> > -	chroot_mount
> >> > +	build_mount_args
> >> >  	copy_hostconf
> >> >
> >> >  	chroot_run "${working_dir}" ${RUN}
> >>
> >> We would still need to use chroot_mount when installing the build env
> >> as we don't use nspawn here.
> > 
> > Could you clarify this? I'm not following this...
> > 
> >> Also: doesn't nspawn umount the mounts it mounted on exit?
> > 
> > Yes, it does. Isn't that what we want?
> > 
> > I've been using this patch since I wrote it, and haven't seen any
> > strange behavior as of yet.
> 
> Strange. You removed the chroot_mount() function even though it's still
> used when creating the chroot with pacstrap.

Ah, I see. I assumed cleaning a chroot to *re*create it was the same
codepath as creating a new one from scratch. I'll play with this more.

> 
> -- 
> Pierre Schmitz, https://pierre-schmitz.com


More information about the arch-projects mailing list