From e83fc08e4473e92e62171eaa8dd6911244b99689 Mon Sep 17 00:00:00 2001 From: Steffen Winterfeldt Date: Fri, 1 Feb 2013 14:48:46 +0100 Subject: [PATCH] - fix boot partition filesystem check for efi systems (bnc #784907) --- VERSION | 2 +- package/yast2-bootloader.changes | 6 ++++++ src/routines/lilolike.ycp | 11 +++++++---- src/routines/misc.ycp | 18 +++++++++++++----- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/VERSION b/VERSION index 6363e78f4..1207d06d2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.17.89 +2.17.90 diff --git a/package/yast2-bootloader.changes b/package/yast2-bootloader.changes index 356899d34..6c6706ab8 100644 --- a/package/yast2-bootloader.changes +++ b/package/yast2-bootloader.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Oct 29 14:48:39 CET 2012 - snwint@suse.de + +- fix boot partition filesystem check for efi systems (bnc #784907) +- 2.17.90 + ------------------------------------------------------------------- Fri Jul 13 10:13:35 CEST 2012 - snwint@suse.de diff --git a/src/routines/lilolike.ycp b/src/routines/lilolike.ycp index 886b60ec4..8ee607115 100644 --- a/src/routines/lilolike.ycp +++ b/src/routines/lilolike.ycp @@ -335,13 +335,15 @@ define string soft_MDraid_boot_disk(list partitions) // return; map mp = Storage::GetMountPoints(); - list mountdata_boot = mp["/boot"]:(mp["/"]:[]); list mountdata_root = mp["/"]:[]; + list mountdata_boot = mp["/boot"]:mountdata_root; + list mountdata_boot_efi = mp["/boot/efi"]:mountdata_boot; y2milestone( "mountPoints %1", mp ); y2milestone( "mountdata_boot %1", mountdata_boot ); + y2milestone( "mountdata_boot_efi %1", mountdata_boot_efi ); - BootCommon::RootPartitionDevice = mp["/", 0]:""; + BootCommon::RootPartitionDevice = mountdata_root[0]:""; if (BootCommon::RootPartitionDevice == "") { @@ -349,8 +351,9 @@ define string soft_MDraid_boot_disk(list partitions) } // if /boot changed, re-configure location - BootCommon::BootPartitionDevice - = mountdata_boot[0]:BootCommon::RootPartitionDevice; + BootCommon::BootPartitionDevice = mountdata_boot[0]:BootCommon::RootPartitionDevice; + + BootCommon::BootEFIPartitionDevice = mountdata_boot_efi[0]:BootCommon::BootPartitionDevice; if (BootCommon::mbrDisk == "" || BootCommon::mbrDisk == nil) { diff --git a/src/routines/misc.ycp b/src/routines/misc.ycp index 20fb94c5b..404c7f320 100644 --- a/src/routines/misc.ycp +++ b/src/routines/misc.ycp @@ -2117,9 +2117,14 @@ global boolean BootloaderInstallable () { // the only relevant is the partition holding the /boot filesystem { DetectDisks (); - y2milestone ("Boot partition device: %1", - BootCommon::BootPartitionDevice); - map dev = Storage::GetDiskPartition( BootCommon::BootPartitionDevice); + string loader = BootCommon::getLoaderType (false); + boolean is_efi = loader == "elilo" || loader == "grub2-efi"; + + // FIXME: what about using getBootPartition() ??? + string boot_partition = is_efi ? BootCommon::BootEFIPartitionDevice : BootCommon::BootPartitionDevice; + + y2milestone ("Boot partition device: %1", boot_partition); + map dev = Storage::GetDiskPartition( boot_partition ); y2milestone ("Disk info: %1", dev); // MD, but not mirroring is OK // FIXME: type detection by name deprecated @@ -2130,7 +2135,7 @@ global boolean BootloaderInstallable () { list parts = md["partitions"]:[]; map info = $[]; foreach (map p, parts, { - if (p["device"]:"" == BootPartitionDevice) + if (p["device"]:"" == boot_partition) info = p; }); if (tolower (info["raid_type"]:"") != "raid1") @@ -2152,7 +2157,7 @@ global boolean BootloaderInstallable () { } // EVMS // FIXME: type detection by name deprecated - else if (search (getBootPartition(), "/dev/evms/") == 0) + else if (search (boot_partition, "/dev/evms/") == 0) { y2milestone ("Cannot install bootloader on EVMS"); return false; @@ -2621,6 +2626,9 @@ global define void WriteToSysconf(boolean inst_bootloader) } /** + * + * FIXME: what is the difference to using BootCommon::BootPartitionDevice directly ??? + * * Function return boot device it means * return boot partition or root partition if boot partition deosn't exist * function return "" if boot partition or root partition is not defined (autoyast)