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 <[email protected]> > >> > --- > >> > 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
