Files
cloudron-box/src/scripts/addmount.sh
2021-06-22 13:03:44 -07:00

52 lines
1.3 KiB
Bash
Executable File

#!/bin/bash
set -eu -o pipefail
if [[ ${EUID} -ne 0 ]]; then
echo "This script should be run as root." > /dev/stderr
exit 1
fi
if [[ $# -eq 0 ]]; then
echo "No arguments supplied"
exit 1
fi
if [[ "$1" == "--check" ]]; then
echo "OK"
exit 0
fi
mount_file_contents="$1"
timeout="$2" # seconds
# mount units must be named after the mount point directories they control
where=$(echo "${mount_file_contents}" | grep "^Where=" | cut -d'=' -f 2)
mount_filename=$(systemd-escape -p --suffix=mount "$where")
mount_file="/etc/systemd/system/${mount_filename}"
# cleanup any previous mount of same name (after midway box crash?)
if systemctl -q is-active "${mount_filename}"; then
echo "Previous mount active, unmounting"
# unmounting can fail if a user is cd'ed into the directory. if we go ahead and mount anyway, systemd says "active" because it's referring to the previous mount config
if ! systemctl stop "${mount_filename}"; then
echo "Failed to unmount"
exit 2
fi
fi
echo "$mount_file_contents" > "${mount_file}"
systemctl daemon-reload
if ! timeout "${timeout}" systemctl enable --now "${mount_filename}"; then
echo "Failed to mount"
exit 3
fi
echo "Mount succeeded"
# this has to be done post-mount because permissions come from the underlying mount file system and not the mount point
chmod 777 "${where}"