use nspawn to bind mount needed directories

systemd-nspawn is capable of doing this as of systemd-198. Doing this
means we can remove all of our home grown chroot mount/umount logic, as
it's all performed by pacstrap or systemd-nspawn.

Signed-off-by: Dave Reisner <dreisner@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
This commit is contained in:
Dave Reisner 2013-03-10 15:11:26 -04:00 committed by Pierre Schmitz
parent 35dc7485fb
commit f03086a0e1
1 changed files with 16 additions and 37 deletions

View File

@ -78,31 +78,21 @@ if echo "${host_mirror}" | grep -q 'file://'; then
fi
# {{{ functions
bind_mount() {
local mode="${2:-rw}"
local target="${working_dir}${1}"
build_mount_args() {
local p
declare -g mount_args=()
if [[ ! -e "$target" ]]; then
if [[ -d "$1" ]]; then
install -d "$target"
else
install -D /dev/null "$target"
fi
if [[ -n $host_mirror_path ]]; then
printf -v p '%q' "$host_mirror_path"
mount_args+=(--bind-ro="$p")
fi
mount -o bind "$1" "$target"
mount -o remount,${mode},bind "$target"
mount --make-slave "$target"
}
printf -v p '%q' "${cache_dirs[0]}"
mount_args+=(--bind="$p")
chroot_mount() {
trap 'trap_chroot_umount' EXIT INT QUIT TERM HUP
[[ -n $host_mirror_path ]] && bind_mount "$host_mirror_path" ro
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
}
@ -121,16 +111,6 @@ copy_hostconf () {
sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n ${cache_dirs[@]})|g" -i ${working_dir}/etc/pacman.conf
}
trap_chroot_umount () {
trap 'trap_abort' INT QUIT TERM HUP
trap 'trap_exit' EXIT
for cache_dir in ${cache_dirs[@]}; do
umount "${working_dir}/${cache_dir}"
done
[[ -n $host_mirror_path ]] && umount "${working_dir}/${host_mirror_path}"
}
chroot_lock () {
# Only reopen the FD if it wasn't handed to us
if [[ $(readlink -f /dev/fd/9) != "${working_dir}.lock" ]]; then
@ -148,7 +128,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 +144,7 @@ if [[ -n $RUN ]]; then
fi
chroot_lock
chroot_mount
build_mount_args
copy_hostconf
chroot_run "${working_dir}" ${RUN}
@ -181,18 +161,17 @@ else
fi
chroot_lock
chroot_mount
pacargs="${cache_dirs[@]/#/--cachedir=}"
pacargs=("${cache_dirs[@]/#/--cachedir=}")
if [[ -n $pac_conf ]]; then
pacargs="$pacargs --config=${pac_conf}"
pacargs+=("--config=${pac_conf}")
fi
if (( $# != 0 )); then
if [[ $FORCE = 'y' ]]; then
pacargs="$pacargs --force"
pacargs+=("--force")
fi
if ! pacstrap -GMcd "${working_dir}" ${pacargs} $@; then
if ! pacstrap -GMcd "${working_dir}" "${pacargs[@]}" "$@"; then
die 'Failed to install all packages'
fi
fi