#!/bin/bash if [[ "$1" != "m" && "$1" != "u" ]] || [ ${#2} -lt 1 ] || [[ "$1" != "u" && ${#3} -lt 1 ]]; then echo "tcmount - mount or unmount a TrueCrypt volume" echo "usage: $0 [m|u] mapmountname [path/to/file/or/device]" echo " m - mounts a volume container file/device" echo " u - unmounts a volume" echo "mapmountname will be used to mkdirs in /media/`whoami` and /dev/mapper" echo exit 1 fi mountit () { local uid=`id -u` local user=`whoami` local device=`sudo losetup -f` local passwd= local tcvol="$2" local mapping=$1 if [ ! -e "$tcvol" ]; then echo "error: volume "$tcvol" does not exist"; exit 1; fi if [ -d "$tcvol" ]; then echo "error: volume "$tcvol" is directory"; exit 1; fi if [ ! -d "/home/$user/.tcmount" ]; then mkdir "/home/$user/.tcmount"; fi if [ -e "/home/$user/$mapping" ]; then echo "error: mapping already exists for $mapping"; exit 1; fi echo "preparing to mount $tcvol to /media/$user/$mapping" echo $device > /home/$user/.tcmount/$mapping sudo mkdir /media/$user/$mapping sudo losetup $device "$tcvol" sudo tcplay --map=$mapping --device=$device sudo mount -o uid=$uid /dev/mapper/$mapping /media/$user/$mapping exit 0 } unmountit () { local uid=`id -u` local user=`whoami` local mapping=$1 if [ ! -d "/home/$user/.tcmount" ]; then echo "error: ~/.tcmount directory missing"; exit 1; fi if [ ! -f "/home/$user/.tcmount/$mapping" ]; then echo "error: ~/.tcmount/$mapping file (contains loop name) is missing"; exit 1; fi local device=`cat /home/$user/.tcmount/$mapping` if [ ! -d "/media/$user/$mapping" ]; then echo "error: /media/$user/$mapping is not a directory or does not exist"; exit 1; fi echo "preparing to unmount /media/$user/$mapping" sudo umount /media/$user/$mapping sudo tcplay -u /dev/mapper/$mapping rm /home/$user/.tcmount/$mapping sudo rmdir /media/$user/$mapping exit 0 } if [ "$1" == "m" ]; then mountit $2 "$3" elif [ "$1" == "u" ]; then unmountit $2 fi