import os import logging import subprocess import sys import gettext import errno APPORT_WHITELIST = { "apt.log": "Aptlog", "apt-term.log": "Apttermlog", "apt-clone_system_state.tar.gz": "Aptclonesystemstate.tar.gz", "history.log": "Historylog", "lspci.txt": "Lspcitxt", "main.log": "Mainlog", "term.log": "Termlog", "screenlog.0": "Screenlog", "xorg_fixup.log": "Xorgfixup", } def _apport_append_logfiles(report, logdir="/var/log/dist-upgrade/"): dirname = 'VarLogDistupgrade' for fname in APPORT_WHITELIST: f = os.path.join(logdir, fname) if not os.path.isfile(f) or os.path.getsize(f) == 0: continue ident = dirname + APPORT_WHITELIST[fname] if os.access(f, os.R_OK): report[ident] = (open(f), ) elif os.path.exists(f): try: from apport.hookutils import root_command_output report[ident] = root_command_output( ["cat", '%s' % f], decode_utf8=False) except ImportError: logging.error("failed to import apport python module, " "can't include: %s" % ident) def apport_crash(type, value, tb): logging.debug("running apport_crash()") if "RELEASE_UPRADER_NO_APPORT" in os.environ: logging.debug("RELEASE_UPRADER_NO_APPORT env set") return False try: # we don't depend on python3-apport because of servers from apport_python_hook import apport_excepthook from apport.report import Report except ImportError as e: logging.error("failed to import apport python module, can't " "generate crash: %s" % e) return False from .DistUpgradeVersion import VERSION # we pretend we are do-release-upgrade sys.argv[0] = "/usr/bin/do-release-upgrade" apport_excepthook(type, value, tb) # now add the files in /var/log/dist-upgrade/* if os.path.exists('/var/crash/_usr_bin_do-release-upgrade.0.crash'): report = Report() report.setdefault('Tags', 'dist-upgrade') release = 'Ubuntu %s' % VERSION[0:5] report.setdefault('DistroRelease', release) # use the version of the release-upgrader tarball, not the installed # package report.setdefault('Package', 'ubuntu-release-upgrader-core 1:%s' % VERSION) _apport_append_logfiles(report) report.add_to_existing( '/var/crash/_usr_bin_do-release-upgrade.0.crash') return True def apport_pkgfailure(pkg, errormsg): logging.debug("running apport_pkgfailure() %s: %s", pkg, errormsg) if "RELEASE_UPRADER_NO_APPORT" in os.environ: logging.debug("RELEASE_UPRADER_NO_APPORT env set") return False LOGDIR = "/var/log/dist-upgrade/" s = "/usr/share/apport/package_hook" # we do not report followup errors from earlier failures # dpkg messages will not be translated if DPKG_UNTRANSLATED_MESSAGES is # set which it is by default so check for the English message first if "dependency problems - leaving unconfigured" in errormsg: logging.debug("dpkg error because of dependency problems, not " "reporting against %s " % pkg) return False needle = gettext.dgettext( 'dpkg', "dependency problems - leaving unconfigured") if needle in errormsg: logging.debug("dpkg error because of dependency problems, not " "reporting against %s " % pkg) return False # we do not run apport_pkgfailure for full disk errors if os.strerror(errno.ENOSPC) in errormsg: logging.debug("dpkg error because of full disk, not reporting " "against %s " % pkg) return False if os.path.exists(s): args = [s, "-p", pkg] args.extend(["--tags", "dist-upgrade"]) for fname in APPORT_WHITELIST: args.extend(["-l", os.path.join(LOGDIR, fname)]) try: p = subprocess.Popen(args, stdin=subprocess.PIPE, universal_newlines=True) p.stdin.write(errormsg) p.stdin.close() #p.wait() except Exception as e: logging.warning("Failed to run apport (%s)" % e) return False return True return False def run_apport(): " run apport, check if we have a display " if "RELEASE_UPRADER_NO_APPORT" in os.environ: logging.debug("RELEASE_UPRADER_NO_APPORT env set") return False if "DISPLAY" in os.environ: # update-notifier will notify about the crash return True elif os.path.exists("/usr/bin/apport-cli"): try: return (subprocess.call("/usr/bin/apport-cli") == 0) except Exception: logging.exception("Unable to launch '/usr/bin/apport-cli'") return False logging.debug("can't find apport") return False if __name__ == "__main__": apport_crash(None, None, None)
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
DistUpgradeApport.py | File | 4.95 KB | 0644 |
|
DistUpgradeAptCdrom.py | File | 12.39 KB | 0644 |
|
DistUpgradeCache.py | File | 52.55 KB | 0644 |
|
DistUpgradeConfigParser.py | File | 3.75 KB | 0644 |
|
DistUpgradeController.py | File | 100.96 KB | 0644 |
|
DistUpgradeFetcher.py | File | 5.83 KB | 0644 |
|
DistUpgradeFetcherCore.py | File | 11.2 KB | 0644 |
|
DistUpgradeFetcherKDE.py | File | 9.72 KB | 0644 |
|
DistUpgradeFetcherSelf.py | File | 2.02 KB | 0644 |
|
DistUpgradeGettext.py | File | 2.97 KB | 0644 |
|
DistUpgradeMain.py | File | 9.1 KB | 0644 |
|
DistUpgradePatcher.py | File | 3.92 KB | 0644 |
|
DistUpgradeQuirks.py | File | 47.38 KB | 0644 |
|
DistUpgradeVersion.py | File | 21 B | 0644 |
|
DistUpgradeView.py | File | 16.2 KB | 0644 |
|
DistUpgradeViewGtk3.py | File | 32.7 KB | 0644 |
|
DistUpgradeViewKDE.py | File | 39.87 KB | 0644 |
|
DistUpgradeViewNonInteractive.py | File | 13.45 KB | 0644 |
|
DistUpgradeViewText.py | File | 12.33 KB | 0644 |
|
GtkProgress.py | File | 3.93 KB | 0644 |
|
MetaRelease.py | File | 16.65 KB | 0644 |
|
QUrlOpener.py | File | 3.24 KB | 0644 |
|
ReleaseNotesViewer.py | File | 7.48 KB | 0644 |
|
ReleaseNotesViewerWebkit.py | File | 2.86 KB | 0644 |
|
SimpleGtk3builderApp.py | File | 2.01 KB | 0644 |
|
SimpleGtkbuilderApp.py | File | 1.99 KB | 0644 |
|
__init__.py | File | 0 B | 0644 |
|
apt_btrfs_snapshot.py | File | 9.64 KB | 0644 |
|
apt_clone.py | File | 32.81 KB | 0644 |
|
dist-upgrade.py | File | 126 B | 0644 |
|
distinfo.py | File | 11.3 KB | 0644 |
|
distro.py | File | 23.16 KB | 0644 |
|
sourceslist.py | File | 18.36 KB | 0644 |
|
telemetry.py | File | 3.4 KB | 0644 |
|
utils.py | File | 17.95 KB | 0644 |
|
xorg_fix_proprietary.py | File | 3.93 KB | 0644 |
|