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