summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch-nspawn.in2
-rw-r--r--archbuild.in4
-rw-r--r--lib/common.sh13
-rw-r--r--makechrootpkg.in2
-rw-r--r--mkarchroot.in3
5 files changed, 18 insertions, 6 deletions
diff --git a/arch-nspawn.in b/arch-nspawn.in
index 6900382..4436a0e 100644
--- a/arch-nspawn.in
+++ b/arch-nspawn.in
@@ -37,8 +37,8 @@ while getopts 'hC:M:c:' arg; do
done
shift $(($OPTIND - 1))
-(( $EUID != 0 )) && die 'This script must be run as root.'
(( $# < 1 )) && die 'You must specify a directory.'
+check_root "$0" "$@"
working_dir=$(readlink -f "$1")
shift 1
diff --git a/archbuild.in b/archbuild.in
index b1c96f9..ae2f511 100644
--- a/archbuild.in
+++ b/archbuild.in
@@ -40,9 +40,7 @@ done
# Pass all arguments after -- right to makepkg
makechrootpkg_args+=("${@:$OPTIND}")
-if (( EUID )); then
- die 'This script must be run as root.'
-fi
+check_root "$0" "$@"
if ${clean_first} || [[ ! -d "${chroots}/${repo}-${arch}" ]]; then
msg "Creating chroot for [${repo}] (${arch})..."
diff --git a/lib/common.sh b/lib/common.sh
index c9ff1b8..b885080 100644
--- a/lib/common.sh
+++ b/lib/common.sh
@@ -228,3 +228,16 @@ find_cached_package() {
return 1
esac
}
+
+##
+# usage : check_root ("$0" "$@")
+##
+check_root() {
+ (( EUID == 0 )) && return
+ if type -P sudo >/dev/null; then
+ exec sudo -- "$@"
+ else
+ exec su root -c "$(printf '%q' "$@")"
+ fi
+ die 'This script must be run as root.'
+}
diff --git a/makechrootpkg.in b/makechrootpkg.in
index 47c6ac9..97c7780 100644
--- a/makechrootpkg.in
+++ b/makechrootpkg.in
@@ -81,7 +81,7 @@ while getopts 'hcur:I:l:nTD:d:' arg; do
esac
done
-(( EUID != 0 )) && die 'This script must be run as root.'
+check_root "$0" "$@"
[[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.'
diff --git a/mkarchroot.in b/mkarchroot.in
index 7cdb274..fb472bc 100644
--- a/mkarchroot.in
+++ b/mkarchroot.in
@@ -35,9 +35,10 @@ while getopts 'hC:M:c:' arg; do
done
shift $(($OPTIND - 1))
-(( $EUID != 0 )) && die 'This script must be run as root.'
(( $# < 2 )) && die 'You must specify a directory and one or more packages.'
+check_root "$0" "$@"
+
working_dir="$(readlink -f $1)"
shift 1