#!/bin/sh # PUBLIC DOMAIN # # pwlocker.sh -- handy password locker management with Linux Unified Key Setup # Tue Jun 29 09:26:46 PDT 2010 -- Scott Doty # version 0.1 # # Wed Feb 22 16:00:00 PST 2012 -- Scott Doty # version 0.2 -- now mounts synchronous # Wed Feb 22 17:17:19 PST 2012 -- Scott Doty # version 0.9 added fsck code # ~ could really use chkconfig love up in here ~ # rcs log follows: #$Log: pwlocker,v $ #Revision 0.9 2012/02/23 01:18:03 scott #added fsck code # # OWNER=scott LNAME=pwlocker IMG=`eval echo ~$OWNER/$LNAME.img` MOUNTPOINT=`eval echo ~$OWNER/$LNAME` MOUNTOPTS=relatime,sync LOOPDEV=/dev/loop0 die() { echo $* 1>&2; exit 2; } warn() { echo $* 1>&2; } [ ! -z "$1" ] || die "Usage: $0 {start|stop|FORMAT|status}" [ -f $IMG ] || die "$IMG doesn't exist" case "$1" in start) set -x losetup $LOOPDEV $IMG || die "losetup failed." cryptsetup luksOpen $LOOPDEV $LNAME || die "crypsetup failed." mount -o$MOUNTOPTS /dev/mapper/$LNAME $MOUNTPOINT || die "mount failed." set +x ;; stop) set -x umount $MOUNTPOINT || die "umount failed" cryptsetup luksClose $LNAME || die "luksClose failed." losetup --detach $LOOPDEV || die "losetup --detach failed." set +x ;; mount) set -x mount -o$MOUNTOPTS /dev/mapper/$LNAME $MOUNTPOINT || die "mount failed." set +x ;; unmount) set -x umount $MOUNTPOINT || die "umount failed" set +x ;; fsck) set -x fsck /dev/mapper/$LNAME set +x ;; FIX-start) set -x losetup $LOOPDEV $IMG || warn "losetup failed." cryptsetup luksOpen $LOOPDEV $LNAME || warn "crypsetup failed." fsck /dev/mapper/$LNAME || die "fsck failed." mount -o$MOUNTOPTS /dev/mapper/$LNAME $MOUNTPOINT || die "mount failed." set +x ;; status) set -x [ -e /dev/mapper/$LNAME ] || die "Stopped." fuser -vm $MOUNTPOINT cryptsetup luksDump $LOOPDEV losetup --associated $IMG df -k $MOUNTPOINT set +x ;; FORMAT) set -x [ -f $IMG ] \ || die "won't format: use dd(1) to create $IMG first." losetup $LOOPDEV $IMG || die "FORMAT: losetup failed." cryptsetup luksFormat $LOOPDEV \ || die "FORMAT: cryptsetup luksFormat failed." cryptsetup luksOpen $LOOPDEV $LNAME mkfs.ext2 /dev/mapper/$LNAME || die "FORMAT: mkfs.ext2 failed." mkdir $MOUNTPOINT > /dev/null 2>&1 mount -o$MOUNTOPTS /dev/mapper/$LNAME $MOUNTPOINT \ || die "FORMAT: mount failed." chown -R $OWNER $MOUNTPOINT || die "FORMAT: chown failed." chgrp -R $OWNER $MOUNTPOINT > /dev/null 2>&1 echo "Success -- device should be ready for use." ;; esac exit 0