classabbyamp 1a47dd3d9e common/chroot-style/uchroot.sh: check if xbps-uchroot is executable
... and show a friendly error message

This can be a common failure mode when using `-t` if not in the group
`xbps-uchroot` is owned by, because it is SUID. Previously, the error was
the cryptic message `ERROR: prctl SECBIT_NOROOT (Operation not permitted)`.
2024-05-11 23:30:11 -04:00

37 lines
868 B
Bash
Executable File

#!/bin/sh
#
# This chroot script uses xbps-uchroot(1).
#
readonly MASTERDIR="$1"
readonly DISTDIR="$2"
readonly HOSTDIR="$3"
readonly EXTRA_ARGS="$4"
readonly CMD="$5"
shift 5
msg_red() {
# error messages in bold/red
[ -n "$NOCOLORS" ] || printf >&2 "\033[1m\033[31m"
printf "=> ERROR: %s\\n" "$@" >&2
[ -n "$NOCOLORS" ] || printf >&2 "\033[m"
}
readonly XBPS_UCHROOT_CMD="$(command -v xbps-uchroot 2>/dev/null)"
if [ -z "$XBPS_UCHROOT_CMD" ]; then
msg_red "could not find xbps-uchroot"
exit 1
fi
if ! [ -x "$XBPS_UCHROOT_CMD" ]; then
msg_red "xbps-uchroot is not executable. Are you in the $(stat -c %G "$XBPS_UCHROOT_CMD") group?"
exit 1
fi
if [ -z "$MASTERDIR" ] || [ -z "$DISTDIR" ]; then
msg_red "$0: MASTERDIR/DISTDIR not set"
exit 1
fi
exec xbps-uchroot $EXTRA_ARGS -b $DISTDIR:/void-packages ${HOSTDIR:+-b $HOSTDIR:/host} -- $MASTERDIR $CMD $@