Synced over the install log to the install medium upon Installer() __exit__. Default storage is /var/log/archinstall/install.log but can be configured in storage.py. This will include crash dumps and a identical copy is found in the ISO as well, in case the users starts looking in /var/log/archinstall in the ISO medium.
This commit is contained in:
parent
65e6b8fe31
commit
165d4ebc7f
|
|
@ -75,10 +75,15 @@ class Installer():
|
||||||
def __exit__(self, *args, **kwargs):
|
def __exit__(self, *args, **kwargs):
|
||||||
# b''.join(sys_command(f'sync')) # No need to, since the underlaying fs() object will call sync.
|
# b''.join(sys_command(f'sync')) # No need to, since the underlaying fs() object will call sync.
|
||||||
# TODO: https://stackoverflow.com/questions/28157929/how-to-safely-handle-an-exception-inside-a-context-manager
|
# TODO: https://stackoverflow.com/questions/28157929/how-to-safely-handle-an-exception-inside-a-context-manager
|
||||||
|
|
||||||
if len(args) >= 2 and args[1]:
|
if len(args) >= 2 and args[1]:
|
||||||
#self.log(self.trace_log.decode('UTF-8'), level=LOG_LEVELS.Debug)
|
#self.log(self.trace_log.decode('UTF-8'), level=LOG_LEVELS.Debug)
|
||||||
self.log(args[1], level=LOG_LEVELS.Error)
|
self.log(args[1], level=LOG_LEVELS.Error)
|
||||||
|
|
||||||
|
self.sync_log_to_install_medium()
|
||||||
|
|
||||||
|
# We avoid printing /mnt/<log path> because that might confuse people if they note it down
|
||||||
|
# and then reboot, and a identical log file will be found in the ISO medium anyway.
|
||||||
print(f"[!] A log file has been created here: {os.path.join(storage['LOG_PATH'], storage['LOG_FILE'])}")
|
print(f"[!] A log file has been created here: {os.path.join(storage['LOG_PATH'], storage['LOG_FILE'])}")
|
||||||
print(f" Please submit this issue (and file) to https://github.com/Torxed/archinstall/issues")
|
print(f" Please submit this issue (and file) to https://github.com/Torxed/archinstall/issues")
|
||||||
raise args[1]
|
raise args[1]
|
||||||
|
|
@ -87,6 +92,7 @@ class Installer():
|
||||||
|
|
||||||
if not (missing_steps := self.post_install_check()):
|
if not (missing_steps := self.post_install_check()):
|
||||||
self.log('Installation completed without any errors. You may now reboot.', bg='black', fg='green', level=LOG_LEVELS.Info)
|
self.log('Installation completed without any errors. You may now reboot.', bg='black', fg='green', level=LOG_LEVELS.Info)
|
||||||
|
self.sync_log_to_install_medium()
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
self.log('Some required steps were not successfully installed/configured before leaving the installer:', bg='black', fg='red', level=LOG_LEVELS.Warning)
|
self.log('Some required steps were not successfully installed/configured before leaving the installer:', bg='black', fg='red', level=LOG_LEVELS.Warning)
|
||||||
|
|
@ -94,8 +100,23 @@ class Installer():
|
||||||
self.log(f' - {step}', bg='black', fg='red', level=LOG_LEVELS.Warning)
|
self.log(f' - {step}', bg='black', fg='red', level=LOG_LEVELS.Warning)
|
||||||
self.log(f"Detailed error logs can be found at: {log_path}", level=LOG_LEVELS.Warning)
|
self.log(f"Detailed error logs can be found at: {log_path}", level=LOG_LEVELS.Warning)
|
||||||
self.log(f"Submit this zip file as an issue to https://github.com/Torxed/archinstall/issues", level=LOG_LEVELS.Warning)
|
self.log(f"Submit this zip file as an issue to https://github.com/Torxed/archinstall/issues", level=LOG_LEVELS.Warning)
|
||||||
|
self.sync_log_to_install_medium()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def sync_log_to_install_medium(self):
|
||||||
|
# Copy over the install log (if there is one) to the install medium if
|
||||||
|
# at least the base has been strapped in, otherwise we won't have a filesystem/structure to copy to.
|
||||||
|
if self.helper_flags.get('base-strapped', False) is True:
|
||||||
|
if (filename := storage.get('LOG_FILE', None)):
|
||||||
|
absolute_logfile = os.path.join(storage.get('LOG_PATH', './'), filename)
|
||||||
|
|
||||||
|
if not os.path.isdir(f"{self.mountpoint}/{os.path.dirname(absolute_logfile)}"):
|
||||||
|
os.makedirs(f"{self.mountpoint}/{os.path.dirname(absolute_logfile)}")
|
||||||
|
|
||||||
|
shutil.copy2(absolute_logfile, f"{self.mountpoint}/{absolute_logfile}")
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
def mount(self, partition, mountpoint, create_mountpoint=True):
|
def mount(self, partition, mountpoint, create_mountpoint=True):
|
||||||
if create_mountpoint and not os.path.isdir(f'{self.mountpoint}{mountpoint}'):
|
if create_mountpoint and not os.path.isdir(f'{self.mountpoint}{mountpoint}'):
|
||||||
os.makedirs(f'{self.mountpoint}{mountpoint}')
|
os.makedirs(f'{self.mountpoint}{mountpoint}')
|
||||||
|
|
@ -239,6 +260,7 @@ class Installer():
|
||||||
if self.partition.filesystem == 'xfs':
|
if self.partition.filesystem == 'xfs':
|
||||||
self.base_packages.append('xfsprogs')
|
self.base_packages.append('xfsprogs')
|
||||||
self.pacstrap(self.base_packages)
|
self.pacstrap(self.base_packages)
|
||||||
|
self.helper_flags['base-strapped'] = True
|
||||||
#self.genfstab()
|
#self.genfstab()
|
||||||
|
|
||||||
with open(f"{self.mountpoint}/etc/fstab", "a") as fstab:
|
with open(f"{self.mountpoint}/etc/fstab", "a") as fstab:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue