run.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #!/usr/bin/env bash
  2. set -e
  3. RAMDISK_FILE=".ramdisk_id"
  4. RAMDISK_VOLUME_NAME="stash"
  5. RAMDISK_SIZE=65536
  6. STASH_FILE="stash.tar.gz.gpg"
  7. STASH_DIR="stash"
  8. OSX_STASH_LOCATION="/Volumes/$RAMDISK_VOLUME_NAME"
  9. LINUX_STASH_LOCATION="/mnt/$RAMDISK_VOLUME_NAME"
  10. ME_FILE=".me"
  11. function mk_ramdisk() {
  12. if [ -f "$RAMDISK_FILE" ]; then
  13. echo "Run ./run.sh -r to remove the existing ramdisk";
  14. exit 1;
  15. fi
  16. echo "Making ramdisk...";
  17. if [ "$(uname)" == "Darwin" ]; then
  18. hdiutil attach -nomount "ram://$RAMDISK_SIZE" > $RAMDISK_FILE;
  19. elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
  20. sudo mkdir -p $LINUX_STASH_LOCATION
  21. sudo chown `whoami`:`whoami` $LINUX_STASH_LOCATION
  22. sudo chmod 700 $LINUX_STASH_LOCATION
  23. sudo mount -t ramfs -o size=$RAMDISK_SIZE ramfs $LINUX_STASH_LOCATION > $RAMDISK_FILE
  24. fi
  25. if [ "$(uname)" == "Darwin" ]; then
  26. echo "Formatting ramdisk";
  27. diskutil partitionDisk $(cat $RAMDISK_FILE) 1 GPTFormat APFS "$RAMDISK_VOLUME_NAME" "100%";
  28. fi
  29. echo "Linking ramdisk to stash dir"
  30. if [ "$(uname)" == "Darwin" ]; then
  31. ln -s $OSX_STASH_LOCATION $STASH_DIR;
  32. elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
  33. ln -s $LINUX_STASH_LOCATION $STASH_DIR;
  34. fi
  35. }
  36. function rm_ramdisk() {
  37. if [ ! -f "$RAMDISK_FILE" ]; then
  38. echo "Can't remove ramdisk - $RAMDISK_FILE not found";
  39. exit 1;
  40. fi
  41. echo "Unmounting ramdisk...";
  42. if [ "$(uname)" == "Darwin" ]; then
  43. hdiutil detach -force $(cat $RAMDISK_FILE) || true;
  44. rm $RAMDISK_FILE $STASH_DIR;
  45. elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
  46. sudo umount $LINUX_STASH_LOCATION;
  47. rm $RAMDISK_FILE $STASH_DIR;
  48. fi
  49. }
  50. while getopts "miedr" opt; do
  51. case $opt in
  52. m)
  53. if [ -f "$ME_FILE" ]; then
  54. echo "Remove the existing $ME_FILE if you want to set the recipient key (which should probably be you)";
  55. exit 1;
  56. fi
  57. echo $2 > "$ME_FILE";
  58. ;;
  59. i)
  60. echo "Creating initial stash directory"
  61. mk_ramdisk
  62. ;;
  63. e)
  64. if [ ! -d "$STASH_DIR" ]; then
  65. echo "Run ./run.sh -d to decrypt the stash change the contents before encrypting";
  66. exit 1;
  67. elif [ ! -f "$ME_FILE" ]; then
  68. echo "Run ./run.sh -m to set the recipient key before encrypting";
  69. exit 1;
  70. fi
  71. echo "Encrypting...";
  72. ME=$(cat $ME_FILE);
  73. tar --exclude=".*" -zcv $STASH_DIR/* | gpg --encrypt -r $ME - > "$STASH_FILE";
  74. ;;
  75. d)
  76. # Check if we have both a ramdisk *and* a mount before we rm_ramdisk, to avoid blowing away another ramdisk
  77. # that $RAMDISK_FILE might be referencing
  78. if ls $OSX_STASH_LOCATION &> /dev/null; then
  79. rm_ramdisk;
  80. elif [ -f "$RAMDISK_FILE" ]; then
  81. rm $RAMDISK_FILE;
  82. fi
  83. mk_ramdisk;
  84. echo "Decrypting...";
  85. gpg --decrypt "$STASH_FILE" | tar -zxvf - -C $STASH_DIR --strip-components=1;
  86. ;;
  87. r)
  88. rm_ramdisk;
  89. ;;
  90. \?)
  91. echo "Invalid option: -$OPTARG" >&2
  92. exit 1
  93. ;;
  94. :)
  95. echo "Option -$OPTARG requires an argument." >&2
  96. exit 1
  97. ;;
  98. esac
  99. done