systemd-nspawn is capable of doing this as of systemd-198. Signed-off-by: Dave Reisner <dreisner@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} -- 1.8.1.4