summaryrefslogblamecommitdiffstats
path: root/scripts/mount-store
blob: 098dba6485b161bf11f3ce041c9aff13399034fc (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
















                                                                       
                               































































                                                                                                                     
#!/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
	mount -t nfs -o rw,async,nolock,fg,ac,retry=1,timeo=600 "$SOURCE" "$DEST"
	RET=$?
elif grep -E -q '^//' <<<$SOURCE; then
	# seens to be SMB
	export USER="$USERNAME"
	export PASSWD="$PASSWORD"
	mount -t cifs -o rw,uid=0,gid=12345,forceuid,forcegid,file_mode=0664,dir_mode=0775,sec=ntlm "$SOURCE" "$DEST"
	RET=$?
	unset USER PASSWD
else
	echo "Unknown mount type: $SOURCE"
	exit 1
fi

if [ "$RET" == "0" ]; then
	chmod -R ug+rw "$DEST"
fi

exit $RET