]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
support LUKS in shell libraries
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 22 Apr 2011 22:13:56 +0000 (00:13 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 22 Apr 2011 22:13:56 +0000 (00:13 +0200)
util/grub-install.in
util/grub-mkconfig.in
util/grub-mkconfig_lib.in

index ff8bea87c3cabd717410ae18992858e3d74c6758..3b3383ab4041ba721852ba9d7166f50c56284fe4 100644 (file)
@@ -456,6 +456,8 @@ for dir in "${localedir}"/*; do
     fi
 done
 
+is_path_readable_by_grub "${grubdir}" || (echo "${grubdir}" not readable 1>&2 ; exit 1)
+
 # Write device to a variable so we don't have to traverse /dev every time.
 grub_device="`"$grub_probe" --device-map="${device_map}" --target=device "${grubdir}"`" || exit 1
 
@@ -536,6 +538,12 @@ if [ "x${devabstraction_module}" = "x" ] ; then
              
           exit 1
         fi
+       if [ x$GRUB_LUKS_ENABLE = xy ]; then
+           for uuid in "`"${grub_probe}" --device "${device}" --target=luks_uuid`"; do
+               echo "luksmount -u $uuid"
+           done
+       fi
+
         echo "search.fs_uuid ${uuid} root " >> "${grubdir}/load.cfg"
        echo 'set prefix=($root)'"${relative_grubdir}" >> "${grubdir}/load.cfg"
        config_opt="-c ${grubdir}/load.cfg "
index afc66f886b416ab5063c320ea8696343baa45df0..41e68bc1b251cbc2b81f5c92d86c695949ec708a 100644 (file)
@@ -254,6 +254,7 @@ export GRUB_DEFAULT \
   GRUB_DISABLE_OS_PROBER \
   GRUB_INIT_TUNE \
   GRUB_SAVEDEFAULT \
+  GRUB_ENABLE_LUKS \
   GRUB_BADRAM
 
 if test "x${grub_cfg}" != "x"; then
index 2c5fd8c6f51f460a9a54b4453040386c14f9b35f..1664b6bbe156a6463ffba79877479e9a3c32f91d 100644 (file)
@@ -63,10 +63,22 @@ is_path_readable_by_grub ()
 
   # ... or if we can't figure out the abstraction module, for example if
   # memberlist fails on an LVM volume group.
-  if ${grub_probe} -t abstraction $path > /dev/null 2>&1 ; then : ; else
+  if abstractions="`"${grub_probe}" -t abstraction "$path"`" 2>&1 ; then 
+      :
+  else
     return 1
   fi
 
+  if [ x$GRUB_LUKS_ENABLE = xy ]; then
+      return 0
+  fi
+  
+  for abstraction in $abstractions; do
+      if [ "x$abstraction" = xluks ]; then
+         return 1
+      fi
+  done
+
   return 0
 }
 
@@ -126,6 +138,12 @@ prepare_grub_to_access_device ()
     echo "insmod ${module}"
   done
 
+  if [ x$GRUB_LUKS_ENABLE = xy ]; then
+      for uuid in "`"${grub_probe}" --device "${device}" --target=luks_uuid`"; do
+         echo "luksmount -u $uuid"
+      done
+  fi
+
   # If there's a filesystem UUID that GRUB is capable of identifying, use it;
   # otherwise set root as per value in device.map.
   echo "set root='`"${grub_probe}" --device "${device}" --target=drive`'"