From d520382f72d1877f00f4577fead422e6cbf08dc9 Mon Sep 17 00:00:00 2001 From: Chris Peterson Date: Fri, 20 Oct 2023 08:47:15 -0700 Subject: [PATCH 1/2] apport: update names and write traceback information to disk --- subiquity/cmd/server.py | 8 ++++++-- subiquity/cmd/tui.py | 8 ++++++-- subiquity/common/errorreport.py | 11 ++++++++++- system_setup/cmd/tui.py | 8 ++++++-- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/subiquity/cmd/server.py b/subiquity/cmd/server.py index 5bd3789d..49ff8ac0 100644 --- a/subiquity/cmd/server.py +++ b/subiquity/cmd/server.py @@ -194,9 +194,13 @@ def main(): logfiles = setup_logger(dir=logdir, base="subiquity-server") logger = logging.getLogger("subiquity") - version = os.environ.get("SNAP_REVISION", "unknown") + revision = os.environ.get("SNAP_REVISION", "unknown") + version = os.environ.get("SNAP_VERSION", "unknown") snap = os.environ.get("SNAP", "unknown") - logger.info(f"Starting Subiquity server revision {version} of snap {snap}") + logger.info( + f"Starting Subiquity server revision {revision} of snap {snap} " + f"of version {version}" + ) logger.info(f"Arguments passed: {sys.argv}") logger.debug(f"Kernel commandline: {opts.kernel_cmdline}") logger.debug(f"Environment: {os.environ}") diff --git a/subiquity/cmd/tui.py b/subiquity/cmd/tui.py index 405efe87..b6933bf8 100755 --- a/subiquity/cmd/tui.py +++ b/subiquity/cmd/tui.py @@ -146,8 +146,12 @@ def main(): async def run_with_loop(): subiquity_interface = SubiquityClient(opts) - subiquity_interface.note_file_for_apport("InstallerLog", logfiles["debug"]) - subiquity_interface.note_file_for_apport("InstallerLogInfo", logfiles["info"]) + subiquity_interface.note_file_for_apport( + "InstallerClientLog", logfiles["debug"] + ) + subiquity_interface.note_file_for_apport( + "InstallerClientLogInfo", logfiles["info"] + ) await subiquity_interface.run() asyncio.run(run_with_loop()) diff --git a/subiquity/common/errorreport.py b/subiquity/common/errorreport.py index 8e6096ba..0fb787b7 100644 --- a/subiquity/common/errorreport.py +++ b/subiquity/common/errorreport.py @@ -34,6 +34,7 @@ import urwid from subiquity.common.types import ErrorReportKind, ErrorReportRef, ErrorReportState from subiquitycore.async_helpers import run_in_thread, schedule_task +from subiquitycore.file_util import write_file log = logging.getLogger("subiquity.common.errorreport") @@ -132,7 +133,9 @@ class ErrorReport(metaclass=urwid.MetaSignals): if not self.reporter.dry_run: self.pr.add_hooks_info(None) apport.hookutils.attach_hardware(self.pr) - self.pr["Syslog"] = apport.hookutils.recent_syslog(re.compile(".")) + self.pr["InstallerJournal"] = apport.hookutils.recent_syslog( + re.compile(".") + ) snap_name = os.environ.get("SNAP_NAME", "") if snap_name != "": self.add_tags([snap_name]) @@ -343,6 +346,7 @@ class ErrorReporter(object): def __init__(self, context, dry_run, root, client=None): self.context = context self.dry_run = dry_run + self.root = root self.crash_directory = os.path.join(root, "var/crash") self.client = client @@ -408,6 +412,11 @@ class ErrorReporter(object): report.pr["Title"] = "{} crashed with {}".format(thing, type(exc).__name__) tb = traceback.TracebackException.from_exception(exc) report.pr["Traceback"] = "".join(tb.format()) + # Write out traceback for apport consumption + traceback_log = os.path.join( + self.root, "var/log/installer", "subiquity-traceback.txt" + ) + write_file(traceback_log, "".join(tb.format())) self._reports_by_exception[exc] = report else: report.pr["Title"] = thing diff --git a/system_setup/cmd/tui.py b/system_setup/cmd/tui.py index 6b1212b9..7ed3818c 100755 --- a/system_setup/cmd/tui.py +++ b/system_setup/cmd/tui.py @@ -155,8 +155,12 @@ def main(): async def run_with_loop(): subiquity_interface = SystemSetupClient(opts) - subiquity_interface.note_file_for_apport("InstallerLog", logfiles["debug"]) - subiquity_interface.note_file_for_apport("InstallerLogInfo", logfiles["info"]) + subiquity_interface.note_file_for_apport( + "InstallerClientLog", logfiles["debug"] + ) + subiquity_interface.note_file_for_apport( + "InstallerClientLogInfo", logfiles["info"] + ) await subiquity_interface.run() asyncio.run(run_with_loop()) From e3d06bce6db42c5dae574a68d98f84c3225cc228 Mon Sep 17 00:00:00 2001 From: Chris Peterson Date: Fri, 20 Oct 2023 15:49:13 -0700 Subject: [PATCH 2/2] apt: move subiquity-curtin-apt.conf to curtin-install/ --- scripts/runtests.sh | 4 ++-- subiquity/server/apt.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/runtests.sh b/scripts/runtests.sh index 159c51e9..fd2130c3 100755 --- a/scripts/runtests.sh +++ b/scripts/runtests.sh @@ -62,7 +62,7 @@ validate () { # not to do that. # If we run an autoinstall that customizes the security section as part # of the test-suite, we will need to adapt this test. - python3 scripts/check-yaml-fields.py $tmpdir/var/log/installer/subiquity-curtin-apt.conf \ + python3 scripts/check-yaml-fields.py $tmpdir/var/log/installer/curtin-install/subiquity-curtin-apt.conf \ apt.security[0].uri='"http://security.ubuntu.com/ubuntu/"' \ apt.security[0].arches='["amd64", "i386"]' \ apt.security[1].uri='"http://ports.ubuntu.com/ubuntu-ports"' @@ -259,7 +259,7 @@ LANG=C.UTF-8 timeout --foreground 60 \ --kernel-cmdline autoinstall \ --source-catalog examples/sources/install.yaml validate -python3 scripts/check-yaml-fields.py $tmpdir/var/log/installer/subiquity-curtin-apt.conf \ +python3 scripts/check-yaml-fields.py $tmpdir/var/log/installer/curtin-install/subiquity-curtin-apt.conf \ apt.disable_components='[non-free, restricted]' \ apt.preferences[0].pin-priority=200 \ apt.preferences[0].pin='"origin *ubuntu.com*"' \ diff --git a/subiquity/server/apt.py b/subiquity/server/apt.py index 60af992d..78e0845a 100644 --- a/subiquity/server/apt.py +++ b/subiquity/server/apt.py @@ -148,7 +148,7 @@ class AptConfigurer: self.configured_tree = await self.mounter.setup_overlay([self.source_path]) config_location = os.path.join( - self.app.root, "var/log/installer/subiquity-curtin-apt.conf" + self.app.root, "var/log/installer/curtin-install/subiquity-curtin-apt.conf" ) generate_config_yaml(config_location, self.apt_config(final)) self.app.note_data_for_apport("CurtinAptConfig", config_location)