#!/bin/bash
if [ $# -lt 2 ]; then
echo "Bad call to $0." >&2
echo "Expected: $0 images <source> [username] [password]" >&2
exit 1
fi
WHAT="$1"
SOURCE="$2"
USERNAME="$3"
PASSWORD="$4"
# Currently WHAT can only be images (the central store for all images),
# but maybe there will be other storage types in the future.
case "$WHAT" in
images)
DEST="/srv/openslx/nfs"
;;
*)
echo "Invalid/Unknown mount type: '$WHAT'." >&2
exit 1
;;
esac
# Sanity checks: Destination exists?
if [ ! -d "$DEST" ]; then
mkdir -p "$DEST"
chown root:images "$DEST"
chmod 0775 "$DEST"
fi
# Still a no?
if [ ! -d "$DEST" ]; then
echo "Mount point '$DEST' does not exist and could not be created!" >&2
echo "This should not happen and means this server is severely messed up. :(" >&2
exit 1
fi
# Already mounted?
if awk '{print $2}' "/proc/mounts" | grep -q "^${DEST}\$"; then
echo "Trying to unmount '$DEST'..."
umount -v "$DEST"
RET=$?
if [ "$RET" -ne "0" ]; then
echo "Cannot unmount '$DEST'!" >&2
exit "$RET"
fi
fi
# Unmount and not requested to mount (local mode)
if [[ "${SOURCE}" == "null" ]]; then
rm -f "${DEST}/.notmounted"
exit 0
fi
touch "${DEST}/.notmounted"
# Mount!
if grep -E -q '^[^/].+:.+' <<<$SOURCE; then
# seems to be NFS
for i in 1 2 3; do
mount -v -t nfs -o rw,async,nolock,vers=3,fg,ac,retry=1,timeo=100,sec=sys "$SOURCE" "$DEST"
RET=$?
[ "$RET" -eq "0" ] && break
done
elif grep -E -q '^//' <<<$SOURCE; then
# seems to be SMB
export USER="$USERNAME"
export PASSWD="$PASSWORD"
for sec in ntlmv2 ntlm; do
echo " * Trying ${sec}..."
mount -v -t cifs -o rw,uid=0,gid=12345,forceuid,forcegid,nounix,file_mode=0664,dir_mode=0775,sec=$sec "$SOURCE" "$DEST"
RET=$?
if [ "$RET" -eq "0" ]; then
echo " * Success!"
break
fi
done
unset USER PASSWD
else
echo "Unknown mount type: $SOURCE"
exit 1
fi
if [ "$RET" == "0" ]; then
chgrp -R images "$DEST" 2>/dev/null
chmod -R ug+rwX "$DEST" 2>/dev/null
TEST="$DEST/.test-$RANDOM-$RANDOM"
sudo -n -u dmsd touch "$TEST"
RET=$?
if [ -e "$TEST" ]; then
sudo -n -u dmsd rm -f -- "$TEST"
else
[ "$RET" = "0" ] && RET=127
echo "Error: Mounted share is not writable, aborting." >&2
umount -v "$DEST"
fi
fi
if [ "$RET" = "0" ]; then
echo "----------------------------------"
echo "-- Share mounted successfully! --"
echo "----------------------------------"
fi
exit $RET