[master/f21/rhel7-branch] s390x: show dialog if kernel cmdline in zipl.conf is too long. (#885011)
Anne Mulhern
amulhern at redhat.com
Mon Oct 6 13:48:06 UTC 2014
----- Original Message -----
> From: "Samantha N. Bueno" <sbueno+anaconda at redhat.com>
> To: anaconda-patches at lists.fedorahosted.org
> Sent: Friday, October 3, 2014 1:46:30 PM
> Subject: [master/f21/rhel7-branch] s390x: show dialog if kernel cmdline in zipl.conf is too long. (#885011)
>
> 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 showing an error window and
> telling the user they need to reboot.
>
> Resolves: rhbz#885011
> ---
> pyanaconda/bootloader.py | 8 ++++++--
> pyanaconda/errors.py | 15 ++++++++++++++-
> 2 files changed, 20 insertions(+), 3 deletions(-)
>
> diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py
> index 4832c49..3264e98 100644
> --- a/pyanaconda/bootloader.py
> +++ b/pyanaconda/bootloader.py
> @@ -36,6 +36,7 @@ from pyanaconda.flags import flags
> from blivet.errors import StorageError
> from blivet.fcoe import fcoe
> import pyanaconda.network
> +from pyanaconda.errors import errorHandler, ERROR_RAISE
> from pyanaconda.packaging.rpmostreepayload import RPMOSTreePayload
> from pyanaconda.nm import nm_device_hwaddress
> from blivet import platform
> @@ -2158,6 +2159,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 "):
> + errorHandler.cb(ZIPLError(line))
>
> if not self.stage1_name:
> raise BootLoaderError("could not find IPL device")
> @@ -2370,8 +2376,6 @@ def writeSysconfigKernel(storage, version):
> def writeBootLoaderFinal(storage, payload, instClass, ksdata):
> """ Do the final write of the bootloader. """
>
> - from pyanaconda.errors import errorHandler, ERROR_RAISE
> -
> # set up dracut/fips boot args
> # XXX FIXME: do this from elsewhere?
> storage.bootloader.set_boot_args(storage=storage,
> diff --git a/pyanaconda/errors.py b/pyanaconda/errors.py
> index 1541c46..e2da7f1 100644
> --- a/pyanaconda/errors.py
> +++ b/pyanaconda/errors.py
> @@ -49,6 +49,9 @@ class PasswordCryptError(Exception):
> Exception.__init__(self)
> self.algo = algo
>
> +class ZIPLError(Exception):
> + pass
> +
> # These constants are returned by the callback in the ErrorHandler class.
> # Each represents a different kind of action the caller can take:
> #
> @@ -257,6 +260,15 @@ class ErrorHandler(object):
> self.ui.showError(message)
> return ERROR_RAISE
>
> + def _ziplErrorHandler(self, *args, **kwargs):
> + details = kwargs["exception"]
> + message = _("Installation was stopped due to an error installing the
> "
> + "boot loader. The exact error message is:\n\n%s\n\n"
> + "The installer will now terminate.") % details
If showError does not handle translation, then message should get an N_, not just
an _, I think.
> +
> + self.ui.showError(message)
> + return ERROR_RAISE
> +
> def cb(self, exn, *args, **kwargs):
> """This method is the callback that all error handling should pass
> through. The return value is one of the ERROR_* constants
> defined
> @@ -290,7 +302,8 @@ class ErrorHandler(object):
> "ScriptError": self._scriptErrorHandler,
> "PayloadInstallError": self._payloadInstallHandler,
> "DependencyError": self._dependencyErrorHandler,
> - "PasswordCryptError": self._passwordCryptErrorHandler}
> + "PasswordCryptError": self._passwordCryptErrorHandler,
> + "ZIPLError": self._ziplErrorHandler}
>
> if exn.__class__.__name__ in _map:
> kwargs["exception"] = exn
> --
> 1.9.3
>
> _______________________________________________
> anaconda-patches mailing list
> anaconda-patches at lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/anaconda-patches
>
- mulhern
More information about the anaconda-patches
mailing list