[arch-projects] [devtools] [PATCHv2] makechrootpkg: add generic support for additional bind mounts

Dave Reisner dreisner at archlinux.org
Sun Aug 18 20:40:59 EDT 2013


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 at archlinux.org>
---
Resend of an earlier patch, adds the -d and -D options to the getopt
string.

 makechrootpkg.in | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/makechrootpkg.in b/makechrootpkg.in
index 1cd08fb..8c64ae1 100644
--- a/makechrootpkg.in
+++ b/makechrootpkg.in
@@ -24,6 +24,9 @@ passeddir=
 declare -a install_pkgs
 declare -i ret=0
 
+bindmounts_ro=()
+bindmounts_rw=()
+
 copy=$USER
 [[ -n $SUDO_USER ]] && copy=$SUDO_USER
 [[ -z "$copy" || $copy = root ]] && copy=copy
@@ -48,6 +51,8 @@ usage() {
 	echo 'Flags:'
 	echo '-h         This help'
 	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 '           This is useful for rebuilds without dirtying the pristine'
 	echo '           chroot'
@@ -61,10 +66,12 @@ usage() {
 	exit 1
 }
 
-while getopts 'hcur:I:l:nT' arg; do
+while getopts 'hcur:I:l:nTD:d:' arg; do
 	case "$arg" in
 		h) usage ;;
 		c) clean_first=true ;;
+		D) bindmounts_ro+=(--bind-ro="$OPTARG") ;;
+		d) bindmounts_rw+=(--bind="$OPTARG") ;;
 		u) update_first=true ;;
 		r) passeddir="$OPTARG" ;;
 		I) install_pkgs+=("$OPTARG") ;;
@@ -174,7 +181,9 @@ install_packages() {
 		pkgname="${install_pkg##*/}"
 		cp "$install_pkg" "$copydir/$pkgname"
 
-		arch-nspawn "$copydir" pacman -U /$pkgname --noconfirm
+		arch-nspawn "$copydir" \
+			"${bindmounts_ro[@]}" "${bindmounts_rw[@]}" \
+			pacman -U /$pkgname --noconfirm
 		(( ret += !! $? ))
 
 		rm "$copydir/$pkgname"
@@ -338,7 +347,9 @@ load_vars /etc/makepkg.conf
 
 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
 
@@ -349,6 +360,7 @@ download_sources
 if arch-nspawn "$copydir" \
 	--bind-ro="$PWD:/startdir_host" \
 	--bind-ro="$SRCDEST:/srcdest_host" \
+	"${bindmounts_ro[@]}" "${bindmounts_rw[@]}" \
 	/chrootbuild
 then
 	move_products
-- 
1.8.3.4



More information about the arch-projects mailing list