[master/rhel7-branch] Show dialog if kernel cmdline in zipl.conf is too long. (#885011)
Vratislav Podzimek
vpodzime at redhat.com
Mon Aug 4 10:33:28 UTC 2014
On Mon, 2014-08-04 at 05:20 -0400, Samantha N. Bueno wrote:
> On s390x, the kernel cmdline has a hard limit of 896 bytes in length.
> There is nothing we can do to circumvent this, so instead of just
> crashing, handle the error gracefully by behaving the same as when
> unsupported hardware is detected.
>
> Resolves: rhbz#885011
> ---
> pyanaconda/bootloader.py | 5 +++++
> pyanaconda/exception.py | 9 +++++++++
> 2 files changed, 14 insertions(+)
>
> diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py
> index a30f2cd..400314a 100644
> --- a/pyanaconda/bootloader.py
> +++ b/pyanaconda/bootloader.py
> @@ -2150,6 +2150,11 @@ class ZIPL(BootLoader):
> # We want to extract the device name and pass that.
> name = re.sub(r".+?: ", "", line)
> self.stage1_name = re.sub(r"(\s\(.+\))?\.$", "", name)
> + # a limitation of s390x is that the kernel parameter list must not
> + # exceed 896 bytes; there is nothing we can do about this, so just
> + # catch the error and show it to the user instead of crashing
> + elif line.startswith("Error: The length of the parameters "):
> + raise BootLoaderError(line)
>
> if not self.stage1_name:
> raise BootLoaderError("could not find IPL device")
> diff --git a/pyanaconda/exception.py b/pyanaconda/exception.py
> index 9767c00..b8ca97a 100644
> --- a/pyanaconda/exception.py
> +++ b/pyanaconda/exception.py
> @@ -33,6 +33,7 @@ import time
> import kickstart
> import blivet.errors
> from pyanaconda.errors import CmdlineError
> +from pyanaconda.bootloader import BootLoaderError
> from pyanaconda.ui.communication import hubQ
> from pyanaconda.constants import ROOT_PATH, THREAD_EXCEPTION_HANDLING_TEST
> from pyanaconda.threads import threadMgr
> @@ -92,6 +93,14 @@ class AnacondaExceptionHandler(ExceptionHandler):
> "The installer will now terminate.") % str(value)
> self.intf.messageWindow(_("Hardware error occured"), hw_error_msg)
> sys.exit(0)
> + elif issubclass(ty, BootLoaderError) and str(value).startswith("Error: The length of the parameters line"):
> + # this only is a risk for s390(x) since there's a hardware limit on
> + # the length of the kernel parameter list for bootloader entries
> + bl_error_msg = _("The installation was stopped due to an error "
> + "installing the bootloader. The exact error "
> + "message is:\n\n%s.\n\n "
> + "The installer will now terminate.") % str(value)
> + self.intf.messageWindow(_("Boot loader error occured"), bl_error_msg)
Do we have to catch this so "globally"? I'd think this exception can
appear only in very few places and thus should use the try-catch block.
Or is it necessary because of the lack of the self.intf reference in
those places?
--
Vratislav Podzimek
Anaconda Rider | RHCE | Red Hat, Inc. | Brno - Czech Republic
More information about the anaconda-patches
mailing list