From afbdcc3782ddabe4c4a29763d2a42b0f94f4e970 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 13 Dec 2017 06:27:04 -0500 Subject: [PATCH] [hwclock] Be more lenient. Patch by Gabriel C. (@abucodonosor). - use libcalamares functions - no need to copy /etc/adjtime over we can run hwclock in chroot since we have /proc , /sys , /dev , /run/* already bind mounted. - added RTC and ISA probing methode ( see issue #873) - we probe default from /dev/rtc* , - fall back to ISA - still doesn't work we just print a BIOS/Kernel BUG message and continue - NOTE: issue #873 is about broken ArchLinux kernel config but there are HP boxes with real RTC problems no matter what kernel config is used so let us be nice and don't error out.. FIXES #873 --- src/modules/hwclock/main.py | 38 ++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/modules/hwclock/main.py b/src/modules/hwclock/main.py index 8b31080dd..dd408a372 100644 --- a/src/modules/hwclock/main.py +++ b/src/modules/hwclock/main.py @@ -5,7 +5,8 @@ # # Copyright 2014 - 2015, Philip Müller # Copyright 2014, Teo Mrnjavac -# Copyright 2017. Alf Gaida +# Copyright 2017, Alf Gaida +# Copyright 2017, Gabriel Craciunescu # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,26 +21,33 @@ # You should have received a copy of the GNU General Public License # along with Calamares. If not, see . -import subprocess -import shutil - import libcalamares - def run(): """ Set hardware clock. """ + hwclock_rtc = ["hwclock", "--systohc", "--utc"] + hwclock_isa = ["hwclock", "--systohc", "--utc", "--directisa"] + is_broken_rtc = False + is_broken_isa = False - root_mount_point = libcalamares.globalstorage.value("rootMountPoint") - try: - subprocess.check_call(["hwclock", "--systohc", "--utc"]) - except subprocess.CalledProcessError as e: - return ( - "Cannot set hardware clock.", - "hwclock terminated with exit code {}.".format(e.returncode) - ) - - shutil.copy2("/etc/adjtime", "{!s}/etc/".format(root_mount_point)) + ret = libcalamares.utils.target_env_call(hwclock_rtc) + if ret != 0: + is_broken_rtc = True + libcalamares.utils.debug("Hwclock returned error code {}".format(ret)) + libcalamares.utils.debug(" .. RTC method failed, trying ISA bus method.") + else: + libcalamares.utils.debug("Hwclock set using RTC method.") + if is_broken_rtc: + ret = libcalamares.utils.target_env_call(hwclock_isa) + if ret != 0: + is_broken_isa = True + libcalamares.utils.debug("Hwclock returned error code {}".format(ret)) + libcalamares.utils.debug(" .. ISA bus method failed.") + else: + libcalamares.utils.debug("Hwclock set using ISA bus methode.") + if is_broken_rtc and is_broken_isa: + libcalamares.utils.debug("BIOS or Kernel BUG: Setting hwclock failed.") return None