123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #!/usr/bin/env bash
- set -e
- RAMDISK_FILE=".ramdisk_id"
- RAMDISK_VOLUME_NAME="stash"
- RAMDISK_SIZE=65536
- STASH_FILE="stash.tar.gz.gpg"
- STASH_DIR="stash"
- OSX_STASH_LOCATION="/Volumes/$RAMDISK_VOLUME_NAME"
- LINUX_STASH_LOCATION="/mnt/$RAMDISK_VOLUME_NAME"
- ME_FILE=".me"
- function mk_ramdisk() {
- if [ -f "$RAMDISK_FILE" ]; then
- echo "Run ./run.sh -r to remove the existing ramdisk";
- exit 1;
- fi
- echo "Making ramdisk...";
- if [ "$(uname)" == "Darwin" ]; then
- hdiutil attach -nomount "ram://$RAMDISK_SIZE" > $RAMDISK_FILE;
- elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
- sudo mkdir -p $LINUX_STASH_LOCATION
- sudo chown `whoami`:`whoami` $LINUX_STASH_LOCATION
- sudo chmod 700 $LINUX_STASH_LOCATION
- sudo mount -t ramfs -o size=$RAMDISK_SIZE ramfs $LINUX_STASH_LOCATION > $RAMDISK_FILE
- fi
- if [ "$(uname)" == "Darwin" ]; then
- echo "Formatting ramdisk";
- diskutil partitionDisk $(cat $RAMDISK_FILE) 1 GPTFormat APFS "$RAMDISK_VOLUME_NAME" "100%";
- fi
- echo "Linking ramdisk to stash dir"
- if [ "$(uname)" == "Darwin" ]; then
- ln -s $OSX_STASH_LOCATION $STASH_DIR;
- elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
- ln -s $LINUX_STASH_LOCATION $STASH_DIR;
- fi
- }
- function rm_ramdisk() {
- if [ ! -f "$RAMDISK_FILE" ]; then
- echo "Can't remove ramdisk - $RAMDISK_FILE not found";
- exit 1;
- fi
- echo "Unmounting ramdisk...";
- if [ "$(uname)" == "Darwin" ]; then
- hdiutil detach -force $(cat $RAMDISK_FILE) || true;
- rm $RAMDISK_FILE $STASH_DIR;
- elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
- sudo umount $LINUX_STASH_LOCATION;
- rm $RAMDISK_FILE $STASH_DIR;
- fi
- }
- while getopts "miedr" opt; do
- case $opt in
- m)
- if [ -f "$ME_FILE" ]; then
- echo "Remove the existing $ME_FILE if you want to set the recipient key (which should probably be you)";
- exit 1;
- fi
- echo $2 > "$ME_FILE";
- ;;
- i)
- echo "Creating initial stash directory"
- mk_ramdisk
- ;;
- e)
- if [ ! -d "$STASH_DIR" ]; then
- echo "Run ./run.sh -d to decrypt the stash change the contents before encrypting";
- exit 1;
- elif [ ! -f "$ME_FILE" ]; then
- echo "Run ./run.sh -m to set the recipient key before encrypting";
- exit 1;
- fi
-
- echo "Encrypting...";
- ME=$(cat $ME_FILE);
- tar --exclude=".*" -zcv $STASH_DIR/* | gpg --encrypt -r $ME - > "$STASH_FILE";
- ;;
- d)
- # Check if we have both a ramdisk *and* a mount before we rm_ramdisk, to avoid blowing away another ramdisk
- # that $RAMDISK_FILE might be referencing
- if ls $OSX_STASH_LOCATION &> /dev/null; then
- rm_ramdisk;
- elif [ -f "$RAMDISK_FILE" ]; then
- rm $RAMDISK_FILE;
- fi
- mk_ramdisk;
- echo "Decrypting...";
- gpg --decrypt "$STASH_FILE" | tar -zxvf - -C $STASH_DIR --strip-components=1;
- ;;
- r)
- rm_ramdisk;
- ;;
- \?)
- echo "Invalid option: -$OPTARG" >&2
- exit 1
- ;;
- :)
- echo "Option -$OPTARG requires an argument." >&2
- exit 1
- ;;
- esac
- done
|