84 lines
3.1 KiB
Python
84 lines
3.1 KiB
Python
"""Send reports about ubuntu-desktop-bootstrap to the correct Launchpad
|
|
project."""
|
|
|
|
# pylint: disable=invalid-name
|
|
# pylint: enable=invalid-name
|
|
|
|
import re
|
|
from pathlib import Path
|
|
|
|
from apport import Report, hookutils
|
|
from apport.ui import HookUI
|
|
|
|
|
|
def attach_journal(report: Report, log_map: dict[str, Path]) -> None:
|
|
"""Attach installer environment journal log to report.
|
|
|
|
Appends the installer specific journal to the log map if it exists,
|
|
otherwise appends the system journal to the report directly.
|
|
"""
|
|
installer_journal = Path("/var/log/installer/installer-journal.txt")
|
|
if installer_journal.exists():
|
|
log_map["InstallerJournal"] = installer_journal
|
|
else:
|
|
report["SystemJournal"] = hookutils.recent_syslog(re.compile("."))
|
|
|
|
|
|
def add_info(report: Report, unused_ui: HookUI) -> None:
|
|
"""Send reports about ubuntu-desktop-bootstrap to the correct Launchpad
|
|
project."""
|
|
report["SourcePackage"] = "ubuntu-desktop-bootstrap"
|
|
# rewrite this section so the report goes to the project in Launchpad
|
|
report[
|
|
"CrashDB"
|
|
] = """\
|
|
{
|
|
"impl": "launchpad",
|
|
"project": "ubuntu-desktop-provision",
|
|
"bug_pattern_url": "http://people.canonical.com/"
|
|
"~ubuntu-archive/bugpatterns/bugpatterns.xml",
|
|
}
|
|
"""
|
|
|
|
# Check if the snap was updated
|
|
# TODO: Add logic to support this outside of the live environment.
|
|
# It may be possible someone wants to report a bug against the
|
|
# installer after first boot.
|
|
report["SnapUpdated"] = str(Path("/run/subiquity/updating").exists())
|
|
|
|
prefix = Path("/var/log/installer/")
|
|
curtin_dir = prefix / "curtin-install/"
|
|
log_map = {
|
|
"SubiquityLog": prefix / "subiquity-server-debug.log",
|
|
"CurtinLog": prefix / "curtin-install.log",
|
|
"CurtinError.tar": prefix / "curtin-errors.tar",
|
|
"ProbeData": prefix / "block/probe-data.json",
|
|
"UdbLog": prefix / "ubuntu_bootstrap.log",
|
|
"SubiquityTraceback": prefix / "subiquity-traceback.txt",
|
|
"CurtinAptConfig": prefix / "curtin-install/subiquity-curtin-apt.conf",
|
|
"CurtinCurthooksConfig": curtin_dir / "subiquity-curthooks.conf",
|
|
"CurtinExtractConfig": curtin_dir / "subiquity-extract.conf",
|
|
"CurtinInitialConfig": curtin_dir / "subiquity-initial.conf",
|
|
"CurtinPartitioningConfig": curtin_dir / "subiquity-partitioning.conf",
|
|
}
|
|
|
|
attach_journal(report, log_map)
|
|
|
|
hookutils.attach_hardware(report)
|
|
|
|
# Attach logs if they exist
|
|
# The conventional way to attach logs would be to use the
|
|
# hookutils.attach_file_if_exists method, but since subiquity logs
|
|
# are mostly locked down with root r/w only then we will get a permission
|
|
# error if the caller does not have permissions. Ask for elevated
|
|
# permissions instead of requiring users know to run with sudo or similar
|
|
command_mapping = {}
|
|
for name, path in log_map.items():
|
|
if path.exists():
|
|
command_mapping[name] = f"cat {path.resolve()}"
|
|
|
|
hookutils.attach_root_command_outputs(report, command_mapping)
|
|
|
|
# Always set reports to private since we might collect sensitive data
|
|
report["LaunchpadPrivate"] = "1"
|