makechrootpkg: add generic support for additional bind mounts
Piggyback on systemd-nspawn's --bind and --bind-ro flags to allow arbitrary mount points to be added to the build container. Signed-off-by: Dave Reisner <dreisner@archlinux.org> Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
This commit is contained in:
parent
9c85d116f0
commit
e77242c539
|
@ -24,6 +24,9 @@ passeddir=
|
||||||
declare -a install_pkgs
|
declare -a install_pkgs
|
||||||
declare -i ret=0
|
declare -i ret=0
|
||||||
|
|
||||||
|
bindmounts_ro=()
|
||||||
|
bindmounts_rw=()
|
||||||
|
|
||||||
copy=$USER
|
copy=$USER
|
||||||
[[ -n $SUDO_USER ]] && copy=$SUDO_USER
|
[[ -n $SUDO_USER ]] && copy=$SUDO_USER
|
||||||
[[ -z "$copy" || $copy = root ]] && copy=copy
|
[[ -z "$copy" || $copy = root ]] && copy=copy
|
||||||
|
@ -48,6 +51,8 @@ usage() {
|
||||||
echo 'Flags:'
|
echo 'Flags:'
|
||||||
echo '-h This help'
|
echo '-h This help'
|
||||||
echo '-c Clean the chroot before building'
|
echo '-c Clean the chroot before building'
|
||||||
|
echo '-d <dir> Bind directory into build chroot as read-write'
|
||||||
|
echo '-D <dir> Bind directory into build chroot as read-only'
|
||||||
echo '-u Update the working copy of the chroot before building'
|
echo '-u Update the working copy of the chroot before building'
|
||||||
echo ' This is useful for rebuilds without dirtying the pristine'
|
echo ' This is useful for rebuilds without dirtying the pristine'
|
||||||
echo ' chroot'
|
echo ' chroot'
|
||||||
|
@ -61,10 +66,12 @@ usage() {
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
while getopts 'hcur:I:l:nT' arg; do
|
while getopts 'hcur:I:l:nTD:d:' arg; do
|
||||||
case "$arg" in
|
case "$arg" in
|
||||||
h) usage ;;
|
h) usage ;;
|
||||||
c) clean_first=true ;;
|
c) clean_first=true ;;
|
||||||
|
D) bindmounts_ro+=(--bind-ro="$OPTARG") ;;
|
||||||
|
d) bindmounts_rw+=(--bind="$OPTARG") ;;
|
||||||
u) update_first=true ;;
|
u) update_first=true ;;
|
||||||
r) passeddir="$OPTARG" ;;
|
r) passeddir="$OPTARG" ;;
|
||||||
I) install_pkgs+=("$OPTARG") ;;
|
I) install_pkgs+=("$OPTARG") ;;
|
||||||
|
@ -174,7 +181,9 @@ install_packages() {
|
||||||
pkgname="${install_pkg##*/}"
|
pkgname="${install_pkg##*/}"
|
||||||
cp "$install_pkg" "$copydir/$pkgname"
|
cp "$install_pkg" "$copydir/$pkgname"
|
||||||
|
|
||||||
arch-nspawn "$copydir" pacman -U /$pkgname --noconfirm
|
arch-nspawn "$copydir" \
|
||||||
|
"${bindmounts_ro[@]}" "${bindmounts_rw[@]}" \
|
||||||
|
pacman -U /$pkgname --noconfirm
|
||||||
(( ret += !! $? ))
|
(( ret += !! $? ))
|
||||||
|
|
||||||
rm "$copydir/$pkgname"
|
rm "$copydir/$pkgname"
|
||||||
|
@ -338,7 +347,9 @@ load_vars /etc/makepkg.conf
|
||||||
|
|
||||||
create_chroot
|
create_chroot
|
||||||
|
|
||||||
$update_first && arch-nspawn "$copydir" pacman -Syu --noconfirm
|
$update_first && arch-nspawn "$copydir" \
|
||||||
|
"${bindmounts_ro[@]}" "${bindmounts_rw[@]}" \
|
||||||
|
pacman -Syu --noconfirm
|
||||||
|
|
||||||
[[ -n ${install_pkgs[*]} ]] && install_packages
|
[[ -n ${install_pkgs[*]} ]] && install_packages
|
||||||
|
|
||||||
|
@ -349,6 +360,7 @@ download_sources
|
||||||
if arch-nspawn "$copydir" \
|
if arch-nspawn "$copydir" \
|
||||||
--bind-ro="$PWD:/startdir_host" \
|
--bind-ro="$PWD:/startdir_host" \
|
||||||
--bind-ro="$SRCDEST:/srcdest_host" \
|
--bind-ro="$SRCDEST:/srcdest_host" \
|
||||||
|
"${bindmounts_ro[@]}" "${bindmounts_rw[@]}" \
|
||||||
/chrootbuild
|
/chrootbuild
|
||||||
then
|
then
|
||||||
move_products
|
move_products
|
||||||
|
|
Loading…
Reference in New Issue