Skip to content

Instantly share code, notes, and snippets.

@cyphunk
Last active December 4, 2019 14:48
Show Gist options
  • Save cyphunk/bc3b75b2a62b97663836d253c98f7044 to your computer and use it in GitHub Desktop.
Save cyphunk/bc3b75b2a62b97663836d253c98f7044 to your computer and use it in GitHub Desktop.
mount scripts
#!/bin/bash
# basic script to mount/unmount secondary storage drives
# also supportes mounting .tc files as truecrypt containers
# also supportes mounting .img files
EXCLUDE='sda|vg0-root|luks|docker'
#EXCLUDEBLK="7" # <major_num>. 7 loop
EXCLUDEBLK="999" # <major_num>. 7 loop
FILEMANAGERCMD="dbus-launch xdg-open" # called on mount when X available
USAGE=$(cat <<EOM
$(basename $0) [/dev/blk [fs]]
$(basename $0) [truecrypt.tc [mount_point]]
$(basename $0) [file.img [mount_point]]
EOM
)
# sudo call integrity check: only root should be able to change script
l=($(/usr/bin/ls -l `/usr/bin/readlink -f $0`))
[ ${l[0]:2:1} != "-" ] && [ "${l[2]}" != "root" ] ||
[ ${l[0]:5:1} != "-" ] && [ "${l[3]}" != "root" ] ||
[ ${l[0]:8:1} != "-" ] && { echo -e "only root should be able to modify\n${l[@]}"; exit 1;}
IFS=$'\n'
DEVS=$(lsblk --exclude $EXCLUDEBLK -n --paths --output NAME,FSTYPE,MOUNTPOINT,LABEL | egrep -v "${EXCLUDE}")
if [ $# -eq 0 ]; then
echo -e "Usage:\n$USAGE"
echo "Select device:"
COLUMNS=1
select DEV in $DEVS; do
break
done
DEV=$(echo $DEV | sed 's/ *[└─├│]//g' | awk '{print $1}')
else
DEV="$1"
fi
if [ ! -e "$DEV" ]; then
echo -e "\"$DEV\" not a dev or file"
exit 1
fi
MOUNTED_AT=$(lsblk -n --paths --list | grep $DEV | cut -d ' ' -f 2- | grep '/' | sed 's/^[^\/]\+\(\/\S\+\).*/\1/g')
myUID=$(id -u)
if [ ${DEV: -3} == ".tc" ]; then
echo "$DEV is truecrypt container"
NAME=$(basename $DEV)
if [ "${MOUNTED_AT}" != "" ]; then
set -x
sudo umount $DEV && sudo cryptsetup close $NAME || sudo lsof +d "${MOUNTED_AT}"
set +x
else
test -n "$2" && MNT="$2" || MNT=/mnt/$(basename $DEV)
mkdir $MNT 2>/dev/null
set -x
sudo cryptsetup --type tcrypt open $DEV $NAME && \
#sudo mount -o uid=$myUID,umask=0077 /dev/mapper/$NAME $MNT || exit
sudo mount -o gid=users,fmask=113,dmask=002 /dev/mapper/$NAME $MNT || exit
set +x
fi
elif [ ${DEV: -4} == ".img" ]; then
echo "$DEV is img file"
MNT=/mnt/$(basename $DEV)
if [ "${MOUNTED_AT}" != "" ]; then
echo sudo umount $DEV
sudo umount $DEV || sudo lsof +d "${MOUNTED_AT}"
else
mkdir $MNT 2>/dev/null
echo sudo mount -o loop,rw,uid=$myUID,umask=0077 $DEV $MNT
sudo mount -o loop,rw,uid=$myUID,umask=0077 $DEV $MNT || exit
fi
else
if [ "${MOUNTED_AT}" != "" ]; then
echo sudo umount $DEV
sudo umount $DEV || sudo lsof +d "${MOUNTED_AT}"
else
MNT=/mnt/$(basename $DEV)
mkdir $MNT 2>/dev/null
if [ $# -ge 2 ]; then
echo sudo mount -o rw,uid=$myUID,umask=0077 $DEV $MNT -t $2
sudo mount -o rw,uid=$myUID,umask=0077 $DEV $MNT -t $2 || exit
#sudo mount $DEV $MNT -t $2 || exit
else
echo sudo mount -o uid=$myUID,umask=0077 $DEV $MNT || sudo mount $DEV $MNT
sudo mount -o uid=$myUID,umask=0077 $DEV $MNT || \
sudo mount $DEV $MNT || exit
fi
ls $MNT
# if x available open file manager
if xset q &>/dev/null; then
eval $FILEMANAGERCMD $MNT
fi
fi
fi
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment