Advertisement
stefarossi

/usr/lib/initcpio/hooks/customcrypt

Jan 13th, 2014
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.98 KB | None | 0 0
  1. #!/usr/bin/ash
  2. run_hook() {
  3.     #######################
  4.     KEYS="/keys"
  5.     KEYSIMG="/etc/keys.img"
  6.     #######################
  7.     error=0
  8.     mountcrypt() {
  9.         NAME="$1"
  10.         DEVICE="$2"
  11.         KEYFILE="$3"
  12.    
  13.         if [ -b "$DEVICE" ]; then
  14.             if [ -b "/dev/mapper/$NAME" ]; then
  15.                 echo "$NAME: DEVICE ALREADY MOUNTED"
  16.             else
  17.                 echo "$NAME: mounting..."
  18.                 if [ "$KEYFILE" == "NO" ]; then
  19.                     cryptsetup luksOpen "$DEVICE" "$NAME"
  20.                 else
  21.                     cryptsetup luksOpen -d "$KEYFILE" "$DEVICE" "$NAME"
  22.                 fi
  23.            
  24.                 if [ -b "/dev/mapper/$NAME" ];then
  25.                     echo "$NAME: mounted."
  26.                 else
  27.                     echo "$NAME: UNABLE TO MOUNT."
  28.                     error=1
  29.                 fi
  30.             fi
  31.         else
  32.             echo "$NAME: DEVICE NOT FOUND"
  33.             error=1
  34.         fi
  35.     }
  36.     #######################
  37.  
  38.     # Mount keyfiles
  39.     if [ ! -f "$KEYS/.mounted" ];then
  40.         if [ ! -b "/dev/mapper/keys" ];then
  41.             cryptsetup luksOpen "$KEYSIMG" keys
  42.         fi
  43.         if [ ! -d "$KEYS" ];then
  44.             mkdir -p "$KEYS"
  45.         fi
  46.         mount -t ext2 -o ro /dev/mapper/keys "$KEYS"
  47.     fi
  48.    
  49.     if [ -f "$KEYS/.mounted" ];then
  50.         # Parse crypttab and start mounting
  51.         while read line; do
  52.             if [ "${line:0:1}" != "#" ];then
  53.                 NAME="$(echo $line | awk -F' ' '{print $1}')"
  54.                 DEVICE="$(echo $line | awk -F' ' '{print $2}')"
  55.                 KEYFILE="$(echo $line | awk -F' ' '{print $3}')"
  56.                 if [ "$KEYFILE" == "NO" ]; then
  57.                     mountcrypt $NAME $DEVICE $KEYFILE
  58.                 elif [ "$KEYFILE" == "YES" ]; then
  59.                     KEYFILE="$KEYS/$NAME.key"
  60.                     if [ -f "$KEYFILE" ]; then
  61.                         mountcrypt $NAME $DEVICE $KEYFILE
  62.                     else
  63.                         echo "$NAME: KEYFILE NOT FOUND"
  64.                         error=1
  65.                     fi
  66.                 else
  67.                     echo "$NAME: KEYFILE VALUE IS INCORRECT."
  68.                     error=1
  69.                 fi
  70.             fi
  71.         done < /etc/earlycrypttab
  72.     else
  73.         echo COULD NOT MOUNT KEYFILES IMAGE
  74.         error=1
  75.     fi
  76.  
  77.     if [ -f "$KEYS/.mounted" ];then
  78.         umount /keys
  79.     fi
  80.     if [ -b "/dev/mapper/keys" ];then
  81.         #echo CLOSING KEYS IMAGE
  82.         cryptsetup luksClose keys
  83.     fi
  84.    
  85.     if [ $error != 0 ];then
  86.         echo "ERROR. Press ENTER to continue, or restart the computer."
  87.         read
  88.     fi
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement