androot/mount.sh

69 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# disable errors regarding androot.source as
# it is created and loaded at runtime
# shellcheck disable=SC1091
source "${TMPDIR}/androot.source"
source "${TMPDIR}/androot.env"
log_diag "mount is now executing, with arguments \"${*}\""
# to avoid repetition
function mountf() {
# $@ is used intentionally here, so ignore error
# shellcheck disable=SC2068
if ! log_execute mount ${@}; then
indicate_fail
exit 1
fi
}
# to avoid repetition
function umountf() {
# $@ is used intentionally here, so ignore error
# shellcheck disable=SC2068
if ! log_execute umount ${@}; then
indicate_fail
exit 1
fi
}
case "${1}" in
"--mount")
log_diag "Using mount mode"
mkdir -p "${LOCATION}/mountdir"
# remount /data on android to enable
# suid and exec flags
if [ "${IS_ANDROID}" == "true" ]; then
indicate_exec "Remounting /data"
mount_fail "/data (remount)" "/data" -o remount,suid,exec
indicate_ok
fi
indicate_exec "Mounting rootfs"
mountf --bind "${LOCATION}/rootfs" "${LOCATION}/mountdir" -o rw,suid,dev,exec,auto,nouser,async
indicate_ok
indicate_exec "Binding directories"
# mount /dev BEFORE /dev/pts
mountf --bind "/dev" "${LOCATION}/mountdir/dev"
mountf --bind "/dev/pts" "${LOCATION}/mountdir/dev/pts"
mountf --bind "/sys" "${LOCATION}/mountdir/sys"
mountf --bind "/proc" "${LOCATION}/mountdir/proc"
indicate_ok
;;
"--unmount")
log_diag "Using unmount mode"
indicate_exec "Unmounting binds"
# unmount /dev AFTER /dev/pts
umountf "${LOCATION}/mountdir/dev/pts"
umountf "${LOCATION}/mountdir/dev"
umountf "${LOCATION}/mountdir/sys"
umountf "${LOCATION}/mountdir/proc"
indicate_ok
indicate_exec "Unmounting rootfs"
umountf "${LOCATION}/mountdir"
indicate_ok
;;
*)
log_error "--mount or --unmount required"
exit 1
;;
esac