--- apport-1.18.orig/TODO +++ apport-1.18/TODO @@ -10,3 +10,12 @@ hooks: - add hooks which run during program crash, to collect more runtime data + +retracers: + - cache Contents.gz + +hookutils: +- run hooks for related packages in attach_related_packages + +apt-dpkg backend: +- use python-apt's Version.get_source() instead of apt-get source --- apport-1.18.orig/kde/apport-kde.desktop.in +++ apport-1.18/kde/apport-kde.desktop.in @@ -8,3 +8,4 @@ Categories=KDE;System; OnlyShowIn=KDE; StartupNotify=true +X-Ubuntu-Gettext-Domain=apport --- apport-1.18.orig/kde/apport-kde-mime.desktop.in +++ apport-1.18/kde/apport-kde-mime.desktop.in @@ -9,3 +9,4 @@ Categories=KDE; NoDisplay=true StartupNotify=true +X-Ubuntu-Gettext-Domain=apport --- apport-1.18.orig/gtk/apport-gtk-mime.desktop.in +++ apport-1.18/gtk/apport-gtk-mime.desktop.in @@ -9,3 +9,4 @@ Categories=GNOME;GTK; NoDisplay=true StartupNotify=true +X-Ubuntu-Gettext-Domain=apport --- apport-1.18.orig/gtk/apport-gtk.desktop.in +++ apport-1.18/gtk/apport-gtk.desktop.in @@ -9,3 +9,4 @@ Categories=GNOME;Application;Core; OnlyShowIn=GNOME;XFCE; StartupNotify=true +X-Ubuntu-Gettext-Domain=apport --- apport-1.18.orig/gtk/apport-gtk +++ apport-1.18/gtk/apport-gtk @@ -15,6 +15,7 @@ import gobject from gi.repository import Gtk +Gtk.require_version('2.0') import apport from apport import unicode_gettext as _ --- apport-1.18.orig/apport/hookutils.py +++ apport-1.18/apport/hookutils.py @@ -70,6 +70,45 @@ key += "_" report[key] = read_file(path) +def attach_conffiles(report, package, conffiles=None): + '''Attach information about any modified or deleted conffiles''' + + try: + dpkg = subprocess.Popen(['dpkg-query','-W','--showformat=${Conffiles}', + package], stdout=subprocess.PIPE, close_fds=True) + except OSError, e: + return 'Error: ' + str(e) + + out = dpkg.communicate()[0] + if dpkg.returncode != 0: + return + + for line in out.splitlines(): + if not line: + continue + # just take the first two fields, to not stumble over obsolete + # conffiles + path, default_md5sum = line.strip().split()[:2] + + if conffiles and path not in conffiles: continue + + key = 'modified.conffile.' + path_to_key(path) + + if os.path.exists(path): + contents = open(path).read() + m = hashlib.md5() + m.update(contents) + calculated_md5sum = m.hexdigest() + + if calculated_md5sum != default_md5sum: + report[key] = contents + statinfo = os.stat(path) + mtime = datetime.datetime.fromtimestamp(statinfo.st_mtime) + mtime_key = 'mtime.conffile.' + path_to_key(path) + report[mtime_key] = mtime.isoformat() + else: + report[key] = '[deleted]' + def attach_dmesg(report): '''Attach information from the kernel ring buffer (dmesg). --- apport-1.18.orig/etc/default/apport +++ apport-1.18/etc/default/apport @@ -1,4 +1,4 @@ # set this to 0 to disable apport, or to 1 to enable it # you can temporarily override this with -# sudo force_start=1 /etc/init.d/apport start +# sudo service apport start force_start=1 enabled=1 --- apport-1.18.orig/etc/apport/crashdb.conf +++ apport-1.18/etc/apport/crashdb.conf @@ -1,6 +1,18 @@ # map crash database names to CrashDatabase implementations and URLs -default = 'debug' +default = 'ubuntu' + +def get_oem_project(): + '''Determine OEM project name from Distribution Channel Descriptor + + Return None if it cannot be determined or does not exist. + ''' + try: + dcd = open('/var/lib/ubuntu_dist_channel').read() + if dcd.startswith('canonical-oem-'): + return dcd.split('-')[2] + except IOError: + return None databases = { 'ubuntu': { @@ -10,11 +22,10 @@ 'escalation_tag': 'bugpattern-needed', 'escalated_tag': 'bugpattern-written', }, - 'fedora': { - # NOTE this will change Fall '07 when RHT switches to bugzilla 3.x! - 'impl': 'rhbugzilla', - 'bug_pattern_base': 'http://qa.fedoraproject.org/apport/bugpatterns', - 'distro': 'fedora' + 'canonical-oem': { + 'impl': 'launchpad', + 'bug_pattern_base': 'http://people.canonical.com/~pitti/bugpatterns', + 'project': get_oem_project(), }, 'debug': { # for debugging --- apport-1.18.orig/etc/apport/blacklist.d/apport +++ apport-1.18/etc/apport/blacklist.d/apport @@ -0,0 +1,5 @@ +/usr/bin/wine-preloader +/usr/lib/nspluginwrapper/i386/linux/npviewer +/usr/lib/nspluginwrapper/i386/linux/npviewer.bin +/usr/lib/nspluginwrapper/x86_64/linux/npplayer +/usr/lib/nspluginwrapper/x86_64/linux/npwrapper.so --- apport-1.18.orig/man/apport-bug.1 +++ apport-1.18/man/apport-bug.1 @@ -108,8 +108,15 @@ will thoroughly check the situation before filing a bug report can define this in their .B ~/.bashrc -or temporarily on the command line when calling -.B apport\-bug\fR. +or temporarily when calling the apport frontend (\-cli, \-gtk, or \-kde). + +.TP +.B APPORT_STAGING +When reporting bugs to Launchpad (default in Ubuntu), use +.B staging.launchpad.net +instead of the real production instance. You should use this when testing new +hooks or new functionality, to avoid sending uninteresting bug mail to +developers. .SH "SEE ALSO" .BR apport\-cli (1) --- apport-1.18.orig/bin/apport-bug +++ apport-1.18/bin/apport-bug @@ -38,6 +38,14 @@ # main # +# keep backwards compatibility with old documentation which says to use +# ubuntu-bug -p packagename +if [ $# = 2 ] && [ "$1" = '-p' -o "$1" = '-P' ]; then + shift + # Show warning about deprecated options. + echo "Warning: The options -p/-P are deprecated, please do not use them. See $0 --help" +fi + find_programs export APPORT_INVOKED_AS="$0" --- apport-1.18.orig/data/general-hooks/automatix.py +++ apport-1.18/data/general-hooks/automatix.py @@ -0,0 +1,26 @@ +'''Do not send any crashes when automatix is or was installed, since it usually +causes a mess in the system and causes a lot of package installation failures. + +Copyright (C) 2007 Canonical Ltd. +Author: Martin Pitt + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2 of the License, or (at your +option) any later version. See http://www.gnu.org/copyleft/gpl.html for +the full text of the license. +''' + +import apport.packaging + +def add_info(report): + try: + if apport.packaging.get_version('automatix') or \ + apport.packaging.get_version('automatix2') or \ + apport.packaging.get_version('ultamatix'): + report['UnreportableReason'] = 'You have installed automatix or ultamatix on your \ +system. This is known to cause a lot of instability, thus problem reports \ +will not be sent to the %s developers.' % report.get('DistroRelease', + 'distribution').split()[0] + except ValueError, e: + return --- apport-1.18.orig/data/general-hooks/ubuntu.py +++ apport-1.18/data/general-hooks/ubuntu.py @@ -0,0 +1,213 @@ +'''Attach generally useful information, not specific to any package. + +Copyright (C) 2009 Canonical Ltd. +Author: Matt Zimmerman + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2 of the License, or (at your +option) any later version. See http://www.gnu.org/copyleft/gpl.html for +the full text of the license. +''' + +import apport.packaging +import re, os, pwd +from urlparse import urljoin +from urllib2 import urlopen +from apport.hookutils import * + +def get_oem_project(): + '''Determine OEM project name from Distribution Channel Descriptor + + Return None if it cannot be determined or does not exist. + ''' + try: + dcd = open('/var/lib/ubuntu_dist_channel').read() + if dcd.startswith('canonical-oem-'): + return dcd.split('-')[2] + except IOError: + return None + +def trim_dpkg_log(report): + '''Trim DpkgTerminalLog to the most recent installation session.''' + + if 'DpkgTerminalLog' not in report: + return + lines = [] + trim_re = re.compile('^\(.* ... \d+ .*\)$') + for line in report['DpkgTerminalLog'].splitlines(): + if line.startswith('Log started: ') or trim_re.match(line): + lines = [] + continue + lines.append(line) + report['DpkgTerminalLog'] = '\n'.join(lines) + + if not report['DpkgTerminalLog'].strip(): + report['UnreportableReason'] = '/var/log/apt/term.log does not contain any data' + +def add_info(report): + add_tags = [] + + username = pwd.getpwuid(os.geteuid()).pw_name + + # crash reports from live system installer often expose target mount + for f in ('ExecutablePath', 'InterpreterPath'): + if f in report and report[f].startswith('/target/'): + report[f] = report[f][7:] + + # if we are running from a live system, add the build timestamp + attach_file_if_exists(report, '/cdrom/.disk/info', 'LiveMediaBuild') + + # This includes the Ubuntu packaged kernel version + attach_file_if_exists(report, '/proc/version_signature', 'ProcVersionSignature') + + # https://wiki.ubuntu.com/FoundationsTeam/Specs/OemTrackingId + attach_file_if_exists(report, '/var/lib/ubuntu_dist_channel', + 'DistributionChannelDescriptor') + + # file bugs against OEM project for modified packages + if 'Package' in report: + v = report['Package'].split()[1] + oem_project = get_oem_project() + if oem_project and ('common' in v or oem_project in v): + report['CrashDB'] = 'canonical-oem' + + # Allow filing update-manager bugs with obsolete packages + if report.get('Package', '').startswith('update-manager'): + os.environ['APPORT_IGNORE_OBSOLETE_PACKAGES'] = '1' + + # https://bugs.launchpad.net/bugs/364649 + attach_file_if_exists(report, '/var/log/installer/media-info', + 'InstallationMedia') + + release_codename = apport.hookutils.command_output(['lsb_release', '-sc']) + if not release_codename.startswith('Error'): + add_tags.append(release_codename) + + # There are enough of these now that it is probably worth refactoring... + # -mdz + if report['ProblemType'] == 'Package': + trim_dpkg_log(report) + + if report['Package'] not in ['grub', 'grub2']: + # linux-image postinst emits this when update-grub fails + # https://wiki.ubuntu.com/KernelTeam/DebuggingUpdateErrors + if 'DpkgTerminalLog' in report and re.search(r'^User postinst hook script \[.*update-grub\] exited with value', report['DpkgTerminalLog'], re.MULTILINE): + # File these reports on the grub package instead + grub_package = apport.packaging.get_file_package('/usr/sbin/update-grub') + if grub_package is None or grub_package == 'grub': + report['SourcePackage'] = 'grub' + else: + report['SourcePackage'] = 'grub2' + + if report['Package'] != 'initramfs-tools': + # update-initramfs emits this when it fails, usually invoked from the linux-image postinst + # https://wiki.ubuntu.com/KernelTeam/DebuggingUpdateErrors + if 'DpkgTerminalLog' in report and re.search(r'^update-initramfs: failed for ', report['DpkgTerminalLog'], re.MULTILINE): + # File these reports on the initramfs-tools package instead + report['SourcePackage'] = 'initramfs-tools' + + if report['Package'] in ['emacs22', 'emacs23', 'emacs-snapshot', 'xemacs21']: + # emacs add-on packages trigger byte compilation, which might fail + # we are very interested in reading the compilation log to determine + # where to reassign this report to + regex = r'^!! Byte-compilation for x?emacs\S+ failed!' + if 'DpkgTerminalLog' in report and re.search(regex, report['DpkgTerminalLog'], re.MULTILINE): + for line in report['DpkgTerminalLog'].split('\n'): + m = re.search(r'^!! and attach the file (\S+)', line) + if m: + path = m.group(1) + attach_file_if_exists(report, path) + + if report['Package'].startswith('linux-image-') and 'DpkgTerminalLog' in report: + # /etc/kernel/*.d failures from kernel package postinst + m = re.search(r'^run-parts: (/etc/kernel/\S+\.d/\S+) exited with return code \d+', report['DpkgTerminalLog'], re.MULTILINE) + if m: + path = m.group(1) + package = apport.packaging.get_file_package(path) + if package: + report['SourcePackage'] = package + report['ErrorMessage'] = m.group(0) + else: + report['UnreportableReason'] = 'This failure was caused by a program which did not originate from Ubuntu' + + if 'failed to install/upgrade: corrupted filesystem tarfile' in report.get('Title', ''): + report['UnreportableReason'] = 'This failure was caused by a corrupted package download or file system corruption.' + + if 'is already installed and configured' in report.get('ErrorMessage', ''): + report['SourcePackage'] = 'dpkg' + + if 'Package' in report: + package = report['Package'].split()[0] + if package and 'attach_conffiles' in dir(): + attach_conffiles(report, package) + + # do not file bugs against "upgrade-system" if it is not installed (LP#404727) + if package == 'upgrade-system' and 'not installed' in report['Package']: + report['UnreportableReason'] = 'You do not have the upgrade-system package installed. Please report package upgrade failures against the package that failed to install, or against upgrade-manager.' + + # EC2 and Ubuntu Enterprise Cloud instances + ec2_instance = False + for pkg in ('ec2-init', 'cloud-init'): + try: + if apport.packaging.get_version(pkg): + ec2_instance = True + break + except ValueError: + pass + if ec2_instance: + metadata_url = 'http://169.254.169.254/latest/meta-data/' + ami_id_url = urljoin(metadata_url, 'ami-id') + + try: + ami = urlopen(ami_id_url).read() + except: + ami = None + + if ami is None: + cloud = None + elif ami.startswith('ami'): + cloud = 'ec2' + add_tags.append('ec2-images') + fields = { 'Ec2AMIManifest':'ami-manifest-path', + 'Ec2Kernel':'kernel-id', + 'Ec2Ramdisk':'ramdisk-id', + 'Ec2InstanceType':'instance-type', + 'Ec2AvailabilityZone':'placement/availability-zone' } + + report['Ec2AMI'] = ami + for key,value in fields.items(): + try: + report[key]=urlopen(urljoin(metadata_url, value)).read() + except: + report[key]='unavailable' + else: + cloud = 'uec' + add_tags.append('uec-images') + + # running Unity? + if subprocess.call(['killall', '-s0', '-u', username, + 'unity-panel-service'], stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) == 0: + add_tags.append('running-unity') + + if add_tags: + if 'Tags' in report: + report['Tags'] += ' ' + ' '.join(add_tags) + else: + report['Tags'] = ' '.join(add_tags) + +if __name__ == '__main__': + import sys + + # for testing: update report file given on command line + if len(sys.argv) != 2: + print >> sys.stderr, 'Usage for testing this hook: %s ' % sys.argv[0] + sys.exit(1) + + r = apport.Report() + r.load(open(sys.argv[1])) + add_info(r) + f = open(sys.argv[1], 'w') + r.write(f) + f.close() --- apport-1.18.orig/data/package-hooks/source_linux.py +++ apport-1.18/data/package-hooks/source_linux.py @@ -0,0 +1,173 @@ +'''Apport package hook for the Linux kernel. + +(c) 2008 Canonical Ltd. +Contributors: +Matt Zimmerman +Martin Pitt + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2 of the License, or (at your +option) any later version. See http://www.gnu.org/copyleft/gpl.html for +the full text of the license. +''' + +import os.path +import subprocess +from apport.hookutils import * + +SUBMIT_SCRIPT = "/usr/bin/kerneloops-submit" + +def add_info(report, ui): + + # If running an upstream kernel, instruct reporter to file bug upstream + abi = re.search("-(.*?)-", report['Uname']) + if abi and (abi.group(1) == '999' or re.search("^0", abi.group(1))): + ui.information("It appears you are currently running a mainline kernel. It would be better to report this bug upstream at http://bugzilla.kernel.org/ so that the upstream kernel developers are aware of the issue. If you'd still like to file a bug against the Ubuntu kernel, please boot with an official Ubuntu kernel and re-file.") + report['UnreportableReason'] = 'The running kernel is not an Ubuntu kernel' + return + + version_signature = report.get('ProcVersionSignature', '') + if not version_signature.startswith('Ubuntu '): + report['UnreportableReason'] = 'The running kernel is not an Ubuntu kernel' + return + + # Prevent reports against linux-meta + if report['SourcePackage'] == 'linux-meta': + report['SourcePackage'] = 'linux' + + tags = [] + + ui.information("As part of the bug reporting process, you'll be asked a series of questions to help provide a more descriptive bug report. Please answer the following questions to the best of your ability. Afterwards, a browser will be opened to finish filing this as a bug in the Launchpad bug tracking system.") + + # Try to tag bugs by category + category_tags = ["kernel-sound", + "kernel-fs", + "kernel-graphics", + "kernel-config", + "kernel-net", + "kernel-power hibernate resume", + "kernel-power suspend resume", + "kernel-uncat", ""] + + category = ui.choice("How would you categorize this issue?", + ["Audio", + "Filesystem", + "Graphics", + "Kernel Config", + "Networking", + "Hibernate/Resume", + "Suspend/Resume", + "Other", + "I don't know"], False) + + if category == None: #user cancelled + raise StopIteration + + tags.append(category_tags[category[0]]) + + response = ui.yesno("A bug is considered a regression if the issue did not exist on a previous kernel. Is this a regression?") + if response == None: #user cancelled + raise StopIteration + + report['Regression'] = "No" + if response == True: + report['Regression'] = "Yes" + regression_tags = ["regression-update", + "regression-release", "regression-proposed"] + + # add code to check if running dev release; if so, tag regression-potential and move on. + regression = ui.choice("How would you describe the regression?", + ["regression-update - A regression introduced by an updated package in the stable release.", + "regression-release - A regression in the development release or a new stable release.", + "regression-proposed - A regression introduced by a package in -proposed.", + "I don't know."], False) + + #Don't Know response defaults to regression-release + if regression[0] == 3: + tags.append('regression-release') + else: + tags.append(regression_tags[regression[0]]) + ui.information("After apport finishes collecting debug information, please note the most recent kernel version where this was not an issue when filling out the bug report.") + + response = ui.yesno("Can you recreate this bug with a specific series of steps?") + + if response == None: #user cancelled + raise StopIteration + + if response == True: + report['Reproducible'] = "Yes" + ui.information("After apport finishes collecting debug information, please document your steps to reproduce the issue when filling out the bug report.") + elif response == False: + report['Reproducible'] = "No" + frequency_options = ["Once a day.", + "Once every few days.", + "Once a week.", + "Once every few weeks.", + "Once a month.", + "Once every few months.", + "This has only happened once.", + "I don't know."] + + frequency = ui.choice("How often does this issue appear?", + frequency_options) + report['Frequency'] = frequency_options[frequency[0]] + + if 'apport-package' not in tags: + tags.append("needs-upstream-testing") + ui.information("Testing the upstream kernel can help isolate issues in Ubuntu kernel patches, discover a bug is fixed upstream, or confirm the issue exists upstream. It would be great if you could test with the upstream kernel and let us know your results by posting a comment in the bug report. For information on testing the upstream kernel, refer to https://wiki.ubuntu.com/KernelTeam/MainlineBuilds") + + report.setdefault('Tags', '') + report['Tags'] += ' ' + ' '.join(tags) + + attach_hardware(report) + attach_alsa(report) + attach_wifi(report) + report['AcpiTables'] = root_command_output(['/usr/share/apport/dump_acpi_tables.py']) + + staging_drivers = re.findall("(\w+): module is from the staging directory", report['BootDmesg']) + staging_drivers.extend(re.findall("(\w+): module is from the staging directory", report['CurrentDmesg'])) + if staging_drivers: + staging_drivers = list(set(staging_drivers)) + report['StagingDrivers'] = ' '.join(staging_drivers) + report['Tags'] += ' staging' + report['Title'] = '[STAGING] ' + report.get('Title', '') + + attach_file_if_exists(report, "/etc/initramfs-tools/conf.d/resume", + key="HibernationDevice") + + uname_release = os.uname()[2] + lrm_package_name = 'linux-restricted-modules-%s' % uname_release + lbm_package_name = 'linux-backports-modules-%s' % uname_release + + attach_related_packages(report, [lrm_package_name, lbm_package_name, 'linux-firmware']) + + if ('Failure' in report and report['Failure'] == 'oops' + and 'OopsText' in report and os.path.exists(SUBMIT_SCRIPT)): + #it's from kerneloops, ask the user whether to submit there as well + if ui is not None: + summary = report['OopsText'] + # Some OopsText begin with "--- [ cut here ] ---", so remove it + summary = re.sub("---.*\n","",summary) + first_line = re.match(".*\n", summary) + ip = re.search("IP\:.*\n", summary) + call_trace = re.search("Call Trace(.*\n){,10}",summary) + oops = '' + if first_line: + oops += first_line.group(0) + if ip: + oops += ip.group(0) + if call_trace: + oops += call_trace.group(0) + if ui.yesno("This report may also be submitted to " + "http://kerneloops.org/ in order to help collect aggregate " + "information about kernel problems. This aids in identifying " + "widespread issues and problematic areas. A condensed " + "summary of the Oops is shown below. Would you like to submit " + "information about this crash to kerneloops.org ?" + "\n\n%s" % oops): + text = report['OopsText'] + proc = subprocess.Popen(SUBMIT_SCRIPT, + stdin=subprocess.PIPE) + proc.communicate(text) + --- apport-1.18.orig/data/package-hooks/source_ubiquity.py +++ apport-1.18/data/package-hooks/source_ubiquity.py @@ -0,0 +1,23 @@ +'''Apport package hook for the ubiquity live CD installer. + +Copyright (C) 2009 Canonical Ltd. +Author: Colin Watson ''' + +import os.path + +def add_installation_log(report, ident, name): + if os.path.exists('/var/log/installer/%s' % name): + report[ident] = ('/var/log/installer/%s' % name,) + elif os.path.exists('/var/log/%s' % name): + report[ident] = ('/var/log/%s' % name,) + +def add_info(report): + add_installation_log(report, 'UbiquitySyslog', 'syslog') + add_installation_log(report, 'UbiquityPartman', 'partman') + if os.path.exists('/var/log/installer/debug'): + report['UbiquityDebug'] = ('/var/log/installer/debug',) + if os.path.exists('/var/log/installer/dm'): + report['UbiquityDm'] = ('/var/log/installer/dm',) + add_installation_log(report, 'Casper', 'casper.log') + if os.path.exists('/var/log/oem-config.log'): + report['OemConfigLog'] = ('/var/log/oem-config.log',) --- apport-1.18.orig/data/package-hooks/source_debian-installer.py +++ apport-1.18/data/package-hooks/source_debian-installer.py @@ -0,0 +1,35 @@ +'''Apport package hook for the Debian installer. + +Copyright (C) 2009 Canonical Ltd. +Author: Colin Watson ''' + +from apport.hookutils import attach_hardware, command_available, command_output + +def add_info(report): + attach_hardware(report) + + report['DiskUsage'] = command_output(['df']) + report['MemoryUsage'] = command_output(['free']) + + if command_available('dmraid'): + report['DmraidSets'] = command_output(['dmraid', '-s']) + report['DmraidDevices'] = command_output(['dmraid', '-r']) + if command_available('dmsetup'): + report['DeviceMapperTables'] = command_output(['dmsetup', 'table']) + + try: + installer_version = open('/var/log/installer/version') + for line in installer_version: + if line.startswith('ubiquity '): + # File these reports on the ubiquity package instead + report['SourcePackage'] = 'ubiquity' + break + installer_version.close() + except IOError: + pass + +if __name__ == '__main__': + report = {} + add_info(report) + for key in report: + print '%s: %s' % (key, report[key].split('\n', 1)[0]) --- apport-1.18.orig/debian/dh-apport.manpages +++ apport-1.18/debian/dh-apport.manpages @@ -0,0 +1 @@ +debhelper/dh_apport.1 --- apport-1.18.orig/debian/apport.links +++ apport-1.18/debian/apport.links @@ -0,0 +1,4 @@ +/usr/share/apport/package-hooks/source_linux.py /usr/share/apport/package-hooks/source_linux-meta.py +/usr/bin/apport-bug /usr/bin/ubuntu-bug +/usr/share/man/man1/apport-bug.1.gz /usr/share/man/man1/ubuntu-bug.1.gz +/usr/share/man/man1/apport-bug.1.gz /usr/share/man/man1/apport-collect.1.gz --- apport-1.18.orig/debian/pycompat +++ apport-1.18/debian/pycompat @@ -0,0 +1 @@ +2 --- apport-1.18.orig/debian/apport-kde.install +++ apport-1.18/debian/apport-kde.install @@ -0,0 +1,7 @@ +usr/share/apport/*kde* +usr/share/apport/progress.ui +usr/share/apport/error.ui +usr/share/apport/bugreport.ui +usr/share/apport/choices.ui +usr/share/applications/apport-kde-mime.desktop +usr/share/applications/apport-kde-mimelnk.desktop usr/share/mimelnk/text --- apport-1.18.orig/debian/watch +++ apport-1.18/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://launchpad.net/apport/+download .*/apport-([0-9.]+)\.tar\.gz --- apport-1.18.orig/debian/apport-gtk.install +++ apport-1.18/debian/apport-gtk.install @@ -0,0 +1,2 @@ +usr/share/apport/*gtk* +usr/share/applications/*gtk-mime* --- apport-1.18.orig/debian/clean +++ apport-1.18/debian/clean @@ -0,0 +1 @@ +debhelper/dh_apport.1 --- apport-1.18.orig/debian/python-apport.install +++ apport-1.18/debian/python-apport.install @@ -0,0 +1,3 @@ +usr/lib/python*/*-packages/apport/* +usr/lib/python*/*-packages/apport_python_hook.py +etc/apport/crashdb* --- apport-1.18.orig/debian/apport.logrotate +++ apport-1.18/debian/apport.logrotate @@ -0,0 +1,9 @@ +/var/log/apport.log { + daily + rotate 7 + delaycompress + compress + notifempty + missingok +} + --- apport-1.18.orig/debian/apport-retrace.install +++ apport-1.18/debian/apport-retrace.install @@ -0,0 +1,3 @@ +usr/bin/apport-retrace +usr/bin/dupdb-admin +../local/apport-chroot usr/bin --- apport-1.18.orig/debian/compat +++ apport-1.18/debian/compat @@ -0,0 +1 @@ +7 --- apport-1.18.orig/debian/rules +++ apport-1.18/debian/rules @@ -0,0 +1,22 @@ +#!/usr/bin/make -f + +DEB_PYTHON_SYSTEM := pycentral +export DH_PYCENTRAL := $(shell if dpkg --compare-versions `dpkg-query -W -f '$${Version}' python-central` gt 0.6.11; then echo include-links; else echo nomove; fi) + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/class/python-distutils.mk +include /usr/share/cdbs/1/rules/langpack.mk + +DEB_DH_INSTALL_SOURCEDIR := debian/tmp +ifneq (,$(findstring 2.5,$(shell python --version 2>&1))) +DEB_PYTHON_INSTALL_ARGS_ALL := --no-compile +else +DEB_PYTHON_INSTALL_ARGS_ALL := --no-compile --install-layout=deb +endif + +build/dh-apport:: + pod2man -c Debhelper -r "$(DEB_VERSION)" debhelper/dh_apport debhelper/dh_apport.1 + +clean:: + # remove backend copies + rm -f apport/packaging_impl.py --- apport-1.18.orig/debian/control +++ apport-1.18/debian/control @@ -0,0 +1,146 @@ +Source: apport +Section: utils +Priority: optional +Build-Depends: cdbs (>= 0.4.43), + debhelper (>= 7.3.15ubuntu2), + python-central (>= 0.5.6), + python-all +Build-Depends-Indep: python-distutils-extra (>= 2.24~), + python-apt (>= 0.7.9), + intltool, + default-jdk | java-sdk +Maintainer: Martin Pitt +Standards-Version: 3.9.1 +XS-Python-Version: all +Vcs-Bzr: https://code.launchpad.net/~ubuntu-core-dev/ubuntu/natty/apport/ubuntu +Homepage: https://wiki.ubuntu.com/Apport + +Package: apport +XB-Python-Version: ${python:Versions} +Architecture: all +Depends: python (>= 2.4), + python-apport (>= 0.120), + lsb-base (>= 3.0-6), + sysv-rc (>= 2.86.ds1-14.1ubuntu2), + ${misc:Depends} +Replaces: ubiquity, python-apport (<< 1.17.2-0ubuntu3) +Recommends: apport-symptoms +Suggests: apport-gtk | apport-kde +Description: automatically generate crash reports for debugging + apport automatically collects data from crashed processes and + compiles a problem report in /var/crash/. This utilizes the crashdump + helper hook provided by the Ubuntu kernel. + . + This package also provides a command line frontend for browsing and + handling the crash reports. For desktops, you should consider + installing the GTK+ or Qt user interface (apport-gtk or apport-kde). + +Package: python-problem-report +XB-Python-Version: ${python:Versions} +Section: python +Architecture: all +Depends: ${python:Depends}, + ${misc:Depends} +Description: Python library to handle problem reports + This Python library provides an interface for creating, modifying, + and accessing standardized problem reports for program and kernel + crashes and packaging bugs. + . + These problem reports use standard Debian control format syntax + (RFC822). + +Package: python-apport +XB-Python-Version: ${python:Versions} +Section: python +Architecture: all +Depends: ${python:Depends}, + python-apt (>= 0.7.9), + python-problem-report (>= 0.94), + python-launchpadlib (>= 1.5.7), + ${misc:Depends} +Description: apport crash report handling library + This Python package provides high-level functions for creating and + handling apport crash reports: + . + * Query available and new reports. + * Add OS, packaging, and process runtime information to a report. + * Various frontend utility functions. + * Python hook to generate crash reports when Python scripts fail. + +Package: apport-retrace +XB-Python-Version: ${python:Versions} +Section: devel +Architecture: all +Depends: python (>= 2.4), + python-apport (>= 0.124), + python-apt (>= 0.7.9), + apt, + binutils, + dpkg-dev, + ${misc:Depends} +Suggests: debootstrap (>= 0.3.3.2ubuntu2), fakeroot, fakechroot +Description: tools for reprocessing Apport crash reports + apport-retrace recombines an Apport crash report (either a file or a + Launchpad bug) and debug symbol packages (.ddebs) into fully symbolic + stack traces. + . + This package also ships apport-chroot. This tool can create and + manage chroots for usage with apport-retrace. If the fakeroot and + fakechroot libraries are available (either by installing the packages + or by merely putting their libraries somewhere and setting two + environment variables), the entire process of retracing crashes in + chroots can happen with normal user privileges. + +Package: apport-gtk +XB-Python-Version: ${python:Versions} +Section: gnome +Architecture: all +Depends: python (>= 2.4), + python-apport (>= 0.80), + python-gobject (>= 2.27), + gir1.2-gtk-2.0 (>= 2.23.90-0ubuntu3), + python-xdg, + apport (>= 0.41), + procps, + ${misc:Depends} +Recommends: update-notifier, gdb +Description: GTK+ frontend for the apport crash report system + apport automatically collects data from crashed processes and + compiles a problem report in /var/crash/. This utilizes the crashdump + helper hook provided by the Ubuntu kernel. + . + This package provides a GTK+ frontend for browsing and handling the + crash reports. + +Package: apport-kde +XB-Python-Version: ${python:Versions} +Section: kde +Architecture: all +Depends: python (>= 2.4), + python-apport (>= 0.80), + python-kde4, + python-xdg, + apport (>= 0.41), + procps, + ${misc:Depends} +Recommends: kubuntu-notification-helper, gdb +Description: KDE frontend for the apport crash report system + apport automatically collects data from crashed processes and + compiles a problem report in /var/crash/. This utilizes the crashdump + helper hook provided by the Ubuntu kernel. + . + This package provides a KDE frontend for browsing and handling the + crash reports. + +Package: dh-apport +Section: devel +Architecture: all +Depends: ${perl:Depends}, + ${misc:Depends} +Description: debhelper extension for the apport crash report system + apport automatically collects data from crashed processes and + compiles a problem report in /var/crash/. This utilizes the crashdump + helper hook provided by the Ubuntu kernel. + . + This package provides a debhelper extension to make it easier for other + packages to include apport hooks. --- apport-1.18.orig/debian/dh-apport.install +++ apport-1.18/debian/dh-apport.install @@ -0,0 +1,2 @@ +../../debhelper/dh_apport usr/bin +../../debhelper/apport.pm usr/share/perl5/Debian/Debhelper/Sequence --- apport-1.18.orig/debian/changelog +++ apport-1.18/debian/changelog @@ -0,0 +1,5139 @@ +apport (1.18-0ubuntu1) natty; urgency=low + + [ Martin Pitt ] + * New upstream release: + - Ensure that symptom scripts define a run() function, and don't show them + if not. + - Do not show symptom scripts which start with an underscore. These can be + used for private libraries for the actual symptom scripts. + - Update bash completion. Thanks Philip Muškovac. + - etc/default/apport: Remove obsolete "maxsize" setting. (LP: #719564) + - Remove explicit handling of KDE *.ui files in setup.py, as + python-distutils-extra 2.24 fixes this. Bump version check. + - hookutils.py: Add attach_root_command_outputs() to run several commands + at once. This avoids asking for the password several times. + (LP: #716595) + * debian/apport.postinst: Add missing debhelper token. + * debian/rules: Drop dump_acpi_tables.py chmod workaround, it's upstream now + and has the proper permissions. + * Add etc/apport/blacklist.d/apport and drop the creation of it in + /debian/rules. This is easier to maintain and more obvious. Also move + README.blacklist from python-apport to apport, it fits better there. + * etc/apport/blacklist.d/apport: Add the binaries of nspluginwrapper, as we + can't do anything about them anyway. (LP: #717468) + + [ Brian Murray ] + * data/package-hooks/source_linux.py: Properly set regression-release tag if + the reporter chooses "I do not know". + + -- Martin Pitt Wed, 16 Feb 2011 14:29:36 +0100 + +apport (1.17.2-0ubuntu2) natty; urgency=low + + * Merge from trunk: + - Ensure that symptom scripts define a run() function, and don't show them + if not. + - Do not show symptom scripts which start with an underscore. These can be + used for private libraries for the actual symptom scripts. + + -- Martin Pitt Mon, 07 Feb 2011 12:23:57 +0100 + +apport (1.17.2-0ubuntu1) natty; urgency=low + + * New upstream bug fix release: + - Be more Python 3 compatible (not fully working with Python 3 yet, + though). + - apt/dpkg backend: Drop support for pre-0.7.9 python-apt API. + - Add --tag option to add extra tags to reports. (LP: #572504) + - hookutils.py, attach_dmesg(): Do not overwrite already existing dmesg. + - hookutils.py: Be more robust against file permission errors. + (LP: #444678) + - ui.py: Do not show all the options in --help when invoked as *-bug. + (LP: #665953) + - launchpad.py: Adapt test cases to current standard_title() behaviour. + * debian/control: Bump python-apt dependency to >= 0.7.9 to ensure that we + have the current API. Trunk dropped support for the old API. + * data/general-hooks/ubuntu.py: Ignore obsolete packages when filing bugs + against update-manager. (LP: #397519) + * data/general-hooks/ubuntu.py: Do not file a package install failure if + DpkgTerminalLog doesn't have any data. (LP: #695887) + * Add debian/apport.postinst: Create /var/crash. This directory is required + for package failures even if apport is disabled and thus the upstart job + does not run. (LP: #683367) + + -- Martin Pitt Fri, 04 Feb 2011 15:46:40 +0100 + +apport (1.17.1-0ubuntu3) natty; urgency=low + + * data/general-hooks/ubuntu.py: Add some __main__ code for easy testing, + which will update a .crash file with that hook's data. + * data/general-hooks/ubuntu.py: Trim DpkgTerminaLog to the most recent + install session; not only is this much easier to read, but it also avoids + confusing the tests further down which check for particular strings in the + log. (LP: #580419) + + -- Martin Pitt Wed, 26 Jan 2011 11:44:00 +0100 + +apport (1.17.1-0ubuntu2) natty; urgency=low + + * Merge from trunk: + - hookutils.py, attach_dmesg(): Do not overwrite already existing dmesg. + * etc/default/apport: Enable Apport by default for Alpha-2. + + -- Martin Pitt Tue, 25 Jan 2011 07:28:48 +0100 + +apport (1.17.1-0ubuntu1) natty; urgency=low + + * New upstream release: + - Make the GTK frontend work with GTK 2.0 as well, and drop "3.0" + requirement. + * gtk/apport-gtk: Force GTK 2 for now, as we do not currently have a real + GTK 3 theme, and thus with GTK 3 the application looks very ugly. + * debian/control: Depend on gir1.2-gtk-2.0 instead of -3.0. + + -- Martin Pitt Mon, 10 Jan 2011 22:26:10 -0600 + +apport (1.17-0ubuntu2) natty; urgency=low + + [ Brian Murray ] + * data/package-hooks/source_linux.py: Prevent regression-release bugs from + being tagged regression-updates. (LP: #692344). Additionally, reorder the + regression tags in likelyhood of greatest usage and clarify that + 'regression-release' applies to the dev release and a stable release but + not an updated package in the stable release. + + -- Martin Pitt Wed, 05 Jan 2011 09:47:38 +0100 + +apport (1.17-0ubuntu1) natty; urgency=low + + * New upstream release: + - Better standard bug titles for Python crashes. Thanks Matt Zimmerman! + (LP: #681574) + - Add handler for uncaught Java exceptions. There is no integration for + automatically intercepting all Java crashes yet, see java/README. + Thanks Matt Zimmerman! (LP: #548877) + - GTK frontend: Require GTK 3.0. + - launchpad.py: Default to "production" instance, not "edge", since edge + is obsolete now. + - hookutils.py, attach_alsa(): Fix crash if /proc/asound/cards does not + exist. (LP: #626215) + - ui.py, format_filesize(): Fix to work with stricter locale.format() in + Python 2.7. (LP: #688535). While we are at it, also change it to use + base-10 units. + - hookutils.py, package_versions(): Always include all requested package + names even if they're unknown to us. Thanks Matt Zimmerman! + (LP: #695188) + - launchpad.py: When updating a bug, also add new tags. Thanks Brian + Murray! + * debian/apport.install: Install Java crash handler in + /usr/share/apport/apport.jar. + * debian/control: Add Java build dependency so that the Java crash handler + will be built. + + -- Martin Pitt Fri, 31 Dec 2010 16:15:06 +0100 + +apport (1.16-0ubuntu5) natty; urgency=low + + * data/general-hooks/ubuntu.py: Add tag "running-unity" if Unity is running. + + -- Martin Pitt Sat, 18 Dec 2010 20:50:20 +0100 + +apport (1.16-0ubuntu4) natty; urgency=low + + * Restore the python2.7 fix which was not in the vcs and dropped. + + -- Sebastien Bacher Thu, 16 Dec 2010 23:40:12 +0100 + +apport (1.16-0ubuntu3) natty; urgency=low + + * debian/control: + - Update Depends for gir abi change + + -- Michael Terry Thu, 16 Dec 2010 13:49:57 -0500 + +apport (1.16-0ubuntu2) natty; urgency=low + + * Cherrypick from trunk: + - ui.py, format_filesize(): Fix to work with stricter locale.format() in + Python 2.7. (LP: #688535). While we are at it, also change it to use + base-10 units. + * debian/rules: Fix python version check to also work with 2.7. + + -- Martin Pitt Tue, 14 Dec 2010 12:23:31 +0100 + +apport (1.16-0ubuntu1) natty; urgency=low + + * New upstream release: + - Port GTK frontend from pygtk2 to GTK+3.0 and gobject-introspection. + - Fix symptoms again. Version 1.15 broke the default symptom directory. + - Fix memory test case to work with current Python versions, where the + SQLite integrity check throws a different exception. + * debian/control: Replace python-gtk2 dependency with python-gobject and + gir1.0-gtk-3.0. + * debian/control: Drop obsolete Conflicts/Replaces. + * debian/control: Consistently wrap dependencies. + + -- Martin Pitt Fri, 19 Nov 2010 11:43:08 +0100 + +apport (1.15-0ubuntu1) natty; urgency=low + + [ Martin Pitt ] + * New upstream release. Changes since to our previous trunk snapshot: + - Order symptom descriptions alphabetically. Thanks to Javier Collado. + - Check $APPORT_SYMPTOMS_DIR environment variable for overriding the + system default path. Thanks to Javier Collado. + - testsuite: Check that crashdb.conf can have dynamic code to determine DB + names and options. + - ui.py test suite: Rewrite _gen_test_crash() to have the test process + core dump itself, instead of using gdb to do it. The latter fails in + ptrace restricted environments, such as Ubuntu 10.10. + - launchpad.py: Use launchpadlib to file a bug instead of screen scraping. + The latter was completely broken with current Launchpad, so this makes + the test suite actually work again. Thanks to Diogo Matsubara! + - launchpad.py: Change $APPORT_STAGING to $APPORT_LAUNCHPAD_INSTANCE, so + that you can now specify "staging", "edge", or "dev" (for a local + http://launchpad.dev installation). Thanks to Diogo Matsubara! + - backends/packaging-apt-dpkg.py: Fix crash on empty lines in ProcMaps + attachment. + - doc/symptoms.txt: Fix typo, thanks Philip Muskovac. (LP: #590521) + - apport/hookutils.py: rename ProcCmdLine to ProcKernelCmdLine to not wipe + wipe out /proc/$pid/cmdline information. (LP: #657091) + - apport/hookutils.py: attach_file() will not overwrite existing report + keys, instead appending "_" until the key is unique. + - Fix --save option to recognise ~, thanks Philip Muškovac. (LP: #657278) + - Remove escalation_subscription from Ubuntu bug DB definition, turned out + to not be useful; thanks Brian Murray. + - launchpad.py: Fix APPORT_LAUNCHPAD_INSTANCE values with a https:// + prefix. + - apt backend: Opportunistically try to install a -dbg package in addition + to -dbgsym, to increase the chance that at least one of it exists. + Thanks Daniel J Blueman! + * debian/control: Switch Vcs-Bzr: to natty branch. + + [ Brian Murray ] + * data/package-hooks/source_linux.py: Drop regression-potential tag. We are + moving away from using regression-potential as a tag in the management of + regression bug reports. Instead we will tag bugs regression-release and + then create series, release, tasks for the release affected if the bug is + in fact a regression. + + -- Martin Pitt Fri, 12 Nov 2010 14:59:01 +0100 + +apport (1.14.1-0ubuntu8) maverick; urgency=low + + * debian/local/ubuntu-fat-chroot: Divert gio-querymodules and + gdk-pixbuf-query-loaders, since they keep breaking the chroots. + * etc/default/apport: Disable Apport for final Maverick release. + + -- Martin Pitt Tue, 28 Sep 2010 09:31:59 +0200 + +apport (1.14.1-0ubuntu7) maverick; urgency=low + + * In kde/apport-kde use correct translation catalogue, LP: #633483 + + -- Jonathan Riddell Wed, 08 Sep 2010 20:53:13 +0100 + +apport (1.14.1-0ubuntu6) maverick; urgency=low + + * backends/packaging-apt-dpkg.py: fix handling of + /etc/apport/native-origins.d to actually work. LP: #627777. + + -- Steve Langasek Thu, 02 Sep 2010 22:28:48 +0000 + +apport (1.14.1-0ubuntu5) maverick; urgency=low + + * debian/control: Update Vcs-Bzr: to point to maverick branch. + * data/package-hooks/source_linux.py: Update to new-style kernel tags. + Patch by Brad Figg. + * debian/control: Bump Standards-Version to 3.9.1, no changes necessary. + * debian/compat: Bump to 7, since we are build depending on debhelper > 7.3 + anyway. + + -- Martin Pitt Wed, 25 Aug 2010 13:02:46 +0200 + +apport (1.14.1-0ubuntu4) maverick; urgency=low + + * debian/local/ubuntu-fat-chroot: Drop firefox and thunderbird, we will use + upstream crash reporting for those now. + * debian/rules: Make dump_acpi_tables.py executable. This is a workaround as + long as the script comes through the package diff.gz. + + -- Martin Pitt Wed, 21 Jul 2010 08:43:32 +0200 + +apport (1.14.1-0ubuntu3) maverick; urgency=low + + * Merge from trunk: + - Add dump_acpi_tables.py script. This can be called by package hooks + which need ACPI table information (in particular, kernel bug reports). + Thanks to Brad Figg for the script! + - Fix test suite to work under ptrace restricted kernel. + * data/package-hooks/source_linux.py: Call dump_acpi_tables.py and save + output into "AcpiTables" field. + + -- Martin Pitt Tue, 13 Jul 2010 08:14:10 +0200 + +apport (1.14.1-0ubuntu2) maverick; urgency=low + + * etc/apport/crashdb.conf: Add a new database "canonical-oem" which + checks for an Ubuntu Distribution Channel Descriptor (in + /var/lib/ubuntu_dist_channel), and parses out the OEM project name from + that. Now that we modify the file anyway, remove the Fedora stanza, which + is not relevant for Ubuntu and not working due to a nonexisting Bugzilla + backend. + * data/general-hooks/ubuntu.py: Report bug against the OEM project instead + of Ubuntu if we have a DCD and an OEM specific package version. + * etc/default/apport: Re-enable Apport by default for Maverick. + + -- Martin Pitt Mon, 05 Jul 2010 10:53:10 +0200 + +apport (1.14.1-0ubuntu1) maverick; urgency=low + + * New upstream bug fix release: + - hookutils.py, attach_drm_info(): Sanitize connector names. Thanks Chris + Halse Rogers. (LP: #597558) + - bash completion: Complete all path names, apport-bug can be invoked with + a path to a program. Thanks Philip Muskovac. + + -- Martin Pitt Thu, 24 Jun 2010 15:37:19 +0200 + +apport (1.14-0ubuntu1) maverick; urgency=low + + * New upstream release: + - hookutils.py: Add new method attach_drm_info() to read and format + /sys/class/drm/*. (desktop-maverick-xorg-gpu-freeze-reports) + - packaging-apt-dpkg.py: Fix deprecated python-apt variables, thanks David + Stansby. (LP: #591695) + - launchpad.py: Fix crash on attachments which are named *.gz, but + uncompressed. (LP: #574360) + - hookutils.py, attach_gconf(): Fix defaults parsing for boolean keys. + (LP: #583109) + * debian/control: Bump p-distutils-extra build-dependency to 2.19, to ensure + that we get a complete translation template. (LP: #533565) + + -- Martin Pitt Wed, 16 Jun 2010 15:50:55 +0200 + +apport (1.13.4-0ubuntu1) maverick; urgency=low + + * New upstream bug fix release: + - bash completion: Fix error message if /usr/share/apport/symptoms does + not exist. Thanks Philip Muškovac! (LP: #562118) + - general-hooks/parse_segv.py: Report stack exhaustion more clearly and + correctly handle register dereferencing calls. + - Save/restore environment when calling hooks, in case they change the + locale, etc. (LP: #564422) + - hookutils.py, command_output(): Do not set $LC_MESSAGES for the calling + process/hook, just for the command to be called. + - ui.py: When displaying strings from system exceptions, decode them into + an unicode string, to avoid crashing the KDE UI. (LP: #567253) + - apport-retrace: Fix crash for retracing kernel vmcores, which do not + have an ExecutablePath. + - apport-bug manpage: Clarify when apport-collect may be used. Thanks + Brian Murray! (LP: #537273) + - generic hook: Check ProcMaps for unpackaged libraries, and ask the user + if he really wants to continue. If he does, tag the report as + "local-libs" and add a "LocalLibraries" field to the report with a list + of them. (LP: #545227) + * debian/control: Drop the now obsolete apport-qt transitional package. + * debian/control: We do not need python-dev, just python-all. + * Add debian/source/format: We keep 1.0, since 3.0 is a pain for + bzr-maintained packages. + + -- Martin Pitt Sat, 08 May 2010 09:00:26 +0200 + +apport (1.13.3-0ubuntu2) lucid; urgency=low + + * etc/default/apport: Disable Apport for the final release. + + -- Martin Pitt Mon, 19 Apr 2010 10:33:43 +0200 + +apport (1.13.3-0ubuntu1) lucid; urgency=low + + * New upstream bug fix release: + - data/general-hooks/parse_segv.py: suggest segv-in-kernel possibility. + - ui.py: When running as root, only show system crash reports, to avoid + restarting user programs as root. (LP: #445017) + + -- Martin Pitt Wed, 14 Apr 2010 14:42:28 +0200 + +apport (1.13.2-0ubuntu1) lucid; urgency=low + + [ Martin Pitt ] + * New upstream bug fix release: + - packaging-apt-dpkg.py, _install_debug_kernel(): Do not crash on an + outdated kernel, just return that it is outdated. (LP: #532923) + - launchpad.py test suite: Add "Referer" HTTP header, now required by + launchpad. + - launchpad.py: Fix crash if configuration does not have an + "escalated_tag" option. + - launchpad.py: Port to launchpadlib 1.0 API, thanks Michael Bienia for + the initial patch! (LP: #545009) + - gtk/apport-gtk-mime.desktop.in, kde/apport-kde-mime.desktop.in: Change + categories so that these do not ever appear in menu editors. + (LP: #449215) + - launchpad.py: Some LP bugs have broken attachments (this is a bug in + Launchpad itself). Ignore those instead of crashing. + - apport-gtk: Turn http:// and https:// links into clickable hyperlinks in + information and error dialogs. (LP: #516323) + - apport-retrace: Fix crash when trying to rebuild package info for + reports without an ExecutablePath. (LP: #436157) + - ui.py: Fix crash when package information cannot be determined due to + broken apt status. (LP: #362743) + - ui.py: Fix crash when /etc/apport/crashdb.conf is damaged; print an + appropriate error message instead. (LP: #528327) + - data/kernel_crashdump: Fix crash if log file disappeared underneath us. + (LP: #510327) + - data/apport: Fix IOError when apport is called with invalid number of + arguments, and stderr is not a valid fd. (LP: #467363) + - hookutils.py: Factor out the DMI collection code from attach_hardware() + into attach_dmi(), and call that in attach_alsa() as well. Thanks to + Brad Figg for the patch! (LP: #552091) + - apport/ui.py: Fix the help output if Apport is invoked under an + alternative name (like apport-collect). (LP: #539427) + * debian/local/apport-chroot: Fix crash if $APPORT_CRASHDB_CONF is not set. + (LP: #487700) + * debian/control: Bump python-launchpadlib dependency, to ensure that we + have a current version (LP: #407091), and the "1.0" protocol available. + * data/package-hooks/source_linux.py: Drop _() i18n, it's not available in + the hook and causes crashes. (LP: #538368) + + [ Leann Ogasawara ] + * data/package-hooks/source_linux.py: + - Clean up some of the wording in the information dialogs for the + interactive kernel hook. Also add an additional "I don't know" option when + asked how frequently an issue occurs. (LP: #534638) + - Autodetect if running an upstream kernel. (LP: #532932) + - Attempt to categorize issue. Then add tag based on category. + (LP: #534745) + + -- Martin Pitt Wed, 31 Mar 2010 16:32:39 +0200 + +apport (1.13.1-0ubuntu2) lucid; urgency=low + + * Merge bug fixes from trunk: + - problem_report.py, write_mime(): Add new optional argument + "priority_fields" for ordering report keys. Patch by Brian Murray, + thanks! + - launchpad.py: Put some interesting fields first in the report, with the + new priority_fields argument. Patch by Brian Murray, thanks! + - packaging-apt-dpkg.py, _install_debug_kernel(): Do not crash on an + outdated kernel, just return that it is outdated. + + -- Martin Pitt Sat, 27 Mar 2010 11:48:34 +0100 + +apport (1.13.1-0ubuntu1) lucid; urgency=low + + [ Martin Pitt ] + * New upstream bug fix release: + - Update parse-segv to handle gdb 7.1 output. + - Enhance test suite to work with gdb 7.1 as well, and catch future + outputs. + - UI: Add exception string to the "network error" dialog, to better tell + what the problem is. + - UI: Add back -p option to apport-collect/apport-update-bug (regression + from 1.13). (LP: #538944) + - launchpad.py: Add yet another workaround for LP#336866. (LP: #516381) + - launchpad.py, download(): Ignore attachments with invalid key names. + - Fix regression from 1.10 which made it impossible for a package hook to + set a third-party crash database for non-native packages. (LP: #517272) + - apport-cli: Create the 'details' string only if user wants to view + details, and do not show files larger than 1MB. Thanks Scott Moser! + (LP: #486122) + - packaging-apt-dpkg.py: Silence apt.Cache() spewage to stdout with newer + python-apt versions. (LP: #531518) + - unkillable_shutdown: Add list of running processes and blacklisted pids + to report. (LP: #537262) + - Sort the report by key in the details view. (LP: #519416) + + [ Evan Dandrea ] + * Move ubiquity's package-hook into apport, so that it can be used + from the installed system to grab the logs in /var/log/installer. + + -- Martin Pitt Sat, 20 Mar 2010 22:28:44 +0100 + +apport (1.13-0ubuntu3) lucid; urgency=low + + * Merge fixes from trunk: + - Update parse-segv to handle gdb 7.1 output. + - Enhance test suite to work with gdb 7.1 as well, and catch future outputs. + - unkillable_shutdown: Add list of running processes, blacklisted pids, + and "initctl list" to report. (LP: #537262) + - launchpad.py: Preserve the bug title written to the description by + apport as OriginalTitle for pattern matching. Thanks to Brian Murray! + (LP: #511310) + + -- Martin Pitt Sat, 13 Mar 2010 15:55:47 +0100 + +apport (1.13-0ubuntu2) lucid; urgency=low + + * data/general-hooks/parse_segv.py: backport portion of upstream commit 1724 + to handle new Disassembly output from gdb 7.1. + + -- Kees Cook Thu, 11 Mar 2010 10:58:39 -0800 + +apport (1.13-0ubuntu1) lucid; urgency=low + + * New upstream release: + - Add "unkillable_shutdown" script to collect information about processes + which are still running after sending SIGTERM to them. This can be + hooked into e. g. /etc/init.d/sendsigs on Debian/Ubuntu systems. + - apport_python_hook.py: Directly check /etc/default/apport instead of + querying packaging.enabled(), to avoid importing lots of modules for + non-packaged scripts. Thanks Stuart Colville! (LP: #528355) + - Fix SegV parser to notice walking off the stack during "call" or "ret" + (LP: #531672). + - Fix --help output for bug updating mode (invocation as apport-collect or + apport-update-bug). (LP: #504116) + - Fix bug escalation tagging, thanks to Brian Murray. + - Fix option processing when being invoked as apport-bug. Thanks to Daniel + Hahler for the patch! (LP: #532944) + * debian/apport.install: Install unkillable_shutdown. + + -- Martin Pitt Thu, 11 Mar 2010 08:42:05 +0100 + +apport (1.12.1-0ubuntu5) lucid; urgency=low + + * launchpad.py: Do not escalate a bug if its already been escalated and + dealt with. + + -- Brian Murray Fri, 05 Mar 2010 13:05:10 -0800 + +apport (1.12.1-0ubuntu4) lucid; urgency=low + + [ Leann Ogasawara ] + * data/package-hooks/source_linux.py: When reporting a kernel oops the + reporter is presented with a dialog asking if they also want to report the + oops to kerneloops.org. Unfortunately there is no information regarding + the oops at the time this dialog is presented. Provide the reporter a + summary of the oops in question so they can make an educated decision + about reporting it to kerneloops.org. (LP: #528175) + + -- Martin Pitt Thu, 04 Mar 2010 13:08:22 +0100 + +apport (1.12.1-0ubuntu3) lucid; urgency=low + + * data/general-hooks/parse_segv.py: add "call" and "ret" to list of insns + that check the stack pointer for VMA sanity (LP: #531672), backport of + upstream commit 1715. + + -- Kees Cook Wed, 03 Mar 2010 18:07:46 -0800 + +apport (1.12.1-0ubuntu2) lucid; urgency=low + + [ Leann Ogasawara ] + * data/package-hooks/source_linux.py: Prevent filing bugs against + linux-meta. Use the linux package instead. (LP: #526787) + + [ Scott Moser ] + * data/general-hooks/ubuntu.py: Update "is ec2 instance" logic for lucid uec + images. (LP: #525003) + + -- Martin Pitt Thu, 25 Feb 2010 19:06:39 +0100 + +apport (1.12.1-0ubuntu1) lucid; urgency=low + + [ Martin Pitt ] + * New upstream bug fix release: + - launchpad.py: Do not keep escalating bugs, just escalate at the 10th + duplicate. + - Improve error message if a symptom script did not determine a package + name. (LP: #503834) + - general-hooks/generic.py: Fix crash on libGL check with empty + StacktraceTop. + - Review and clean up usage of chmod(). This fixes a small race condition + in the Python exception hook where a local attacker could read the + information from another user's crash report. (LP: #516029) + - hookutils, package_versions(): Ignore "None" packages, for more robust + package hooks. (LP: #518295) + * debian/apport.install: Actually install the bash completion file. + (LP: #218933) + * Bump Standards-Version to 3.8.4 (no changes necessary). + + [ Leann Ogasawara ] + * source_linux.py: Tag kernel bugs which utilize a driver from staging. Also + provide the list of staging drivers in use. Prefix suspend/resume bug + titles with "[STAGING]" if a staging driver was being used. + (LP: #524174, #524167) + + -- Martin Pitt Mon, 22 Feb 2010 21:58:16 +0100 + +apport (1.12-0ubuntu5) lucid; urgency=low + + * Add a dh_apport debhelper program, and a sequence addon making it + possible to use 'dh --with apport'. + + -- Colin Watson Wed, 10 Feb 2010 18:12:30 +0100 + +apport (1.12-0ubuntu4) lucid; urgency=low + + [ Martin Pitt ] + * Add X-Ubuntu-Gettext-Domain: to desktop files, thanks Sebastien Bacher for + spotting this. + + [ Jonathan Thomas ] + * Make apport-kde recommend the new kubuntu-notification-helper package + rather than update-notifier-kde to prevent the latter, depreciated tool + from getting on the Live CD + + -- Martin Pitt Mon, 01 Feb 2010 07:40:11 -0800 + +apport (1.12-0ubuntu3) lucid; urgency=low + + * data/general-hooks/ubuntu.py: also attach byte compilation logs for + xemacs21 + + -- Reinhard Tartler Sun, 24 Jan 2010 19:51:04 +0100 + +apport (1.12-0ubuntu2) lucid; urgency=low + + * launchpad.py: Do not keep escalating bugs, just escalate at the 10th + duplicate. (Merged from trunk) + + -- Martin Pitt Fri, 22 Jan 2010 16:51:35 +0100 + +apport (1.12-0ubuntu1) lucid; urgency=low + + * New upstream release: + - launchpad.py: Add options 'escalation_subscription' and 'escalation_tag' + for handling bugs with more than 10 duplicates. + - crashdb.conf: For Ubuntu, escalate bugs with >= 10 duplicates to + "ubuntu-bugcontrol" and tag them with "bugpattern-needed". + (LP: #487900) + - general-hooks/generic.py: Filter out crashes on missing GLX + (LP: #327673) + - Add bash completion script. Thanks to Philip Muškovac. (LP: #218933) + - launchpad.py: Drop APPORT_FILES whitelist for download() and instead + just filter out file extensions that we know about (*.txt and *.gz). + (LP: #444975) + - launchpad.py: Do not put the Tags: field into the bug description, since + they are already proper tags. In download(), convert the real tags back + to the Tags: field. (LP: #505671) + - test/crash: Update expected core dump flags for changed rlimit behaviour + in Linux 2.6.32. + - launchpad.py: Fix marking of 'checked for duplicate' for bugs with + upstream tasks. + - launchpad.py, get_fixed_version(): Do not consider a bug as invalid just + because it has any invalid distro package task. + * debian/local/setup-apport-retracer: Switch to lucid. + * debian/local/setup-apport-retracer: Do not locally install python-apt and + friends, users can run apt-get install in DC dchroots now. + * debian/local/setup-apport-retracer: Don't add the retracer PPA for now, + everything we need is in lucid. + + -- Martin Pitt Wed, 20 Jan 2010 13:51:15 +0100 + +apport (1.11-0ubuntu5) lucid; urgency=low + + * ubuntu.py: Avoid errors when running on ramdiskless EC2 images, by only + attaching available EC2 information. Patch from Scott Moser (LP: #494615) + + -- Thierry Carrez Tue, 12 Jan 2010 12:19:32 +0100 + +apport (1.11-0ubuntu4) lucid; urgency=low + + * Merge from trunk: + - launchpad.py: Add options 'escalation_subscription' and 'escalation_tag' + for handling bugs with more than 10 duplicates. + - crashdb.conf: For Ubuntu, escalate bugs with >= 10 duplicates to + "ubuntu-bugcontrol" and tag them with "bugpattern-needed". (LP: #487900) + - launchpad.py: Drop APPORT_FILES whitelist for download() and instead + just filter out file extensions that we know about (*.txt and *.gz). + (LP: #444975) + + -- Martin Pitt Mon, 11 Jan 2010 23:53:10 +0100 + +apport (1.11-0ubuntu3) lucid; urgency=low + + * Attach emacs compilation logs in order to assist bug triaging. + LP: #413110 + + -- Reinhard Tartler Thu, 07 Jan 2010 22:14:45 +0100 + +apport (1.11-0ubuntu2) lucid; urgency=low + + * launchpad.py: Remove a snippet of redundant code. + * Merge bug fixes from trunk: + - launchpad.py: Drop APPORT_FILES whitelist for download() and instead + just filter out file extensions that we know about (*.txt and *.gz). + (LP: #444975) + * Enable Apport by default again. + + -- Martin Pitt Tue, 05 Jan 2010 18:30:19 +0100 + +apport (1.11-0ubuntu1) lucid; urgency=low + + * New upstream release: + - Add "--save" UI option to store the collected information into an + .apport file instead of sending it right away. The file can then later + be sent through apport-bug. Update manpages accordingly. + - Update all copyright and description headers and consistently format + them. + - Rename all TestCase classes to "_T", which makes it much easier to run + individual tests from the command line. + - Testsuite: Verify that report details are/are not shown. This uncovered + that details about package installation failures were not shown before + sending them, which is fixed now. + - test/hooks: Do not try to add hook information to kernel_crashdump test + case, since we do not have an UI here. This test case broke when the + system had an interactive package hook for the kernel. + - When reporting a bug from a saved .apport file, let the user + review/confirm the content before sending. + + -- Martin Pitt Wed, 23 Dec 2009 13:09:55 +0100 + +apport (1.10.1-0ubuntu1) lucid; urgency=low + + * New upstream release: + - Install apport-collect symlink. + - Update translations from Launchpad. + - Move all remaining option/argument parsing from apport-bug into ui.py. + This allows the user to add options to apport-bug/apport-collect, and + also avoids unwieldy dissection of options/arguments in shell. + * debian/apport.links: Do not create apport-collect symlink, now done by + upstream build system. Install that in debian/apport.install. + * debian/local/setup-apport-retracer: Set up lazr.restfulclient. + * debian/control: Bump python-distutils-extra build dependency to >= 2.14 to + ensure correct symlink handling. + + -- Martin Pitt Wed, 23 Dec 2009 00:54:37 +0100 + +apport (1.10-0ubuntu1) lucid; urgency=low + + * New upstream release: + - Add a mode for updating an existing problem report to ui.py + (-u/--update). This is similar to the Ubuntu specific "apport-collect" + tool, but implemented the right way now: In particular, this has access + to the UI and thus can use interactive hooks (LP: #385811) and show you + what is being sent for confirmation/cancelling (LP: #371827) + + - apport-bug: If invoked as "apport-collect" or "apport-update-bug" (i. e. + through a symlink), run apport in update mode (-u ). This + provides a convenient no-options command line program. Please note that + setup.py does not currently install such a symlink. Update the + apport-bug manpage accordingly. + + - launchpad.py: Use new login_with() to clean up code, and specify allowed + access levels (WRITE_PRIVATE is the only sensible one anyway). + (LP: #410205) + + - New hookutils functions: + + xsession_errors (match lines from ~/.xsession-errors) + + shared_libraries (determine which libraries a binary links with) + + links_with_shared_library (test if a binary links with a particular + library) + + - New CrashDatabase API: get_affected_packages(), can_update(), is_reporter() + + - Rename CrashDatabase.update() to update_traces(). + + - Add CrashDatabase.update() for adding all new fields of a report. This is + primarily useful for collecting local standard and package hook data for an + already existing bug report which was not filed through Apport. This checks + can_update()/is_reporter() if the user is eligible for updating that + particular bug. (LP: #485880) + + - Ignore SIGXCPU and SIGXFSZ; thanks to Kees Cook. (LP: #498074) + + - launchpad.py: Do not mark non-Ubuntu bugs as needs-retrace, since there is + no retracer right now. (LP: #489794) + + - packaging-apt-dpkg.py, install_retracing_packages(): Do not crash on + malformed Dependencies.txt lines. (LP: #441709) + + - use-local: Fix for new source tree location of "apport" binary. + + * Drop debian/local/apport-collect{,.1} and install symlinks for apport-bug + instead. + * data/general-hooks/ubuntu.py: Do not report "corrupted filesystem tarfile" + package errors. (LP: #320743) + * data/general-hooks/ubuntu.py: Report "package ... is already installed and + configured" errors against dpkg, not the package that failed. (LP: #467688) + + -- Martin Pitt Sat, 19 Dec 2009 16:48:48 +0100 + +apport (1.9.6-0ubuntu2) lucid; urgency=low + + * Bump python-launchpadlib dependency to ensure that we have login_with() + with credentials_file argument. + * debian/local/apport-collect: Add short infos to description if the calling + person is the bug reporter. (LP: #348948) + * debian/local/apport-collect: Intercept lazr.restfulclient.errors.HTTPError + as well, and also cover the login process. + * debian/local/apport-collect: Improve error messages. + * debian/local/ubuntu-fat-chroot: Disable update-alternatives, it causes too + much breakage with fakechroot. + + -- Martin Pitt Fri, 18 Dec 2009 13:09:26 +0100 + +apport (1.9.6-0ubuntu1) lucid; urgency=low + + [ Brian Murray ] + * debian/local/apport-collect: Strongly encourage collectors who are not + the bug reporter to file a new bug report. + + [ Marco Rodrigues ] + * debian/control: Fix lintian warnings. Move python-distutils-extra + to b-d-i and add misc:Depends to apport-qt. + + [ Martin Pitt ] + * New upstream version 1.9.5 and 1.9.6: + - apport-retrace: Fix crash if InterpreterPath/ExecutablePath do not + exist. + - hookutils.py, attach_alsa(): Attach /proc/cpuinfo too, for CPU flags. + - Fix crash if InterpreterPath does not exist any more at the time of + reporting. (LP: #428289) + - apport-gtk: Connect signals properly, to repair cancel/window close + buttons. (LP: #427814) + - Update German translations and fix "konnre" typo. (LP: #484119) + - launchpad.py: Ensure that text attachments on initial bug filing are + valid UTF-8. (LP: #453203) + - man/apport-retrace.1: Document -R option. + - Add pm-utils hook to record current operation, so that apportcheckresume + can check it. Before this was kept in Ubuntu's pm-utils package. + - general-hooks/generic.py: Check if using ecryptfs, and which directory. + (LP: #444656) + * data/general-hooks/ubuntu.py: Add distro release codename tag. + (LP: #404250) + * debian/local/apport-chroot: Fix last occurrence of "--no-dpkg" to be + "--no-pkg". (LP: #487056) + * debian/local/apport-collect: Use "apport-collect data" as comment for the + apport-collect attachments to enable bug mail filtering. Thanks to Bryce + Harrington for the suggestion. + + -- Martin Pitt Wed, 02 Dec 2009 00:01:06 +0100 + +apport (1.9.4-0ubuntu1) lucid; urgency=low + + [ Marco Rodrigues ] + * etc/default/apport: Replace the old init.d force_start command by + the Upstart one. + * debian/apport.upstart: If $force_start=1 is given then run the job. + * debian/local/apport-collect: Don't collect information if bug is a + duplicate. (LP: #471429) + + [ Martin Pitt ] + * New upstream bug fix release: + - Fix crash when ExecutablePath isn't part of a package. (LP: #424965) + - hookutils.py, attach_hardware(): Anonymize disk labels. Thanks to Marco + Rodrigues. (LP: #394411) + - hookutils.py, attach_wifi(): Anonymize encryption key (which appeared in + hex when being called as root). Thanks to Marco Rodrigues. (LP: #446299) + - launchpad.py: If unset, set bug task source package also for interpreter + crashes. + - apport-gtk: Give details window a minimize/maximize button, which were + missing in some window managers. Thanks to Marien Zwart. (LP: #447749) + - apport-kde: Properly terminate program after closing the last dialog. + (LP: #458662) + - hookutils.py, attach_alsa(): Attach /proc/asound/version. (LP: #467233) + - general-hooks/generic.py: Only collect ~/.xsession-errors bits when we + have an ExecutablePath linked to libgtk. + * debian/control: Update Vcs-Bzr: for lucid branch. + * data/package-hooks/source_linux.py: Add interactive questionaire, thanks + Leann Ogasawara! (LP: #444672) + + -- Martin Pitt Fri, 06 Nov 2009 14:06:52 +0100 + +apport (1.9.3-0ubuntu4) karmic; urgency=low + + * etc/default/apport: Disable Apport for final Karmic. + + -- Martin Pitt Thu, 22 Oct 2009 22:41:34 +0200 + +apport (1.9.3-0ubuntu3) karmic; urgency=low + + * apport/crash_db/launchpad.py: Increase the number of files available + for searching with bug patterns. + + -- Brian Murray Sun, 18 Oct 2009 12:38:38 +0200 + +apport (1.9.3-0ubuntu2) karmic; urgency=low + + * debian/local/apport-collect: Instantiate Launchpad crash database with + "distro = ubuntu", to satisfy an assertion introduced in the previous + release. (LP: #451838) + + -- Martin Pitt Thu, 15 Oct 2009 21:12:21 +0200 + +apport (1.9.3-0ubuntu1) karmic; urgency=low + + * New upstream bug fix release: + - hookutils.py: Fix error codes from "comm", thanks to Brian Murray. + (LP: #414194) + - general-hooks/generic.py: Catch xkbcomp error messages. (LP: #431807) + - launchpad.py: Assert that we have exactly one of "distro" or "project" + option. + - doc/crashdb-conf.txt: Improve documentation of crash database options. + - apport-gtk: Make Cancel/Send buttons focusable. Thanks to Marco + Rodrigues. (LP: #447780) + - Drop handling of the APPORT_REPORT_THIRDPARTY environment variable and + "thirdparty" configuration file option. This has never been documented, + and conceptually does not work. There is a proper mechanism for this in + place now, e. g. launchpad.py's "project" option. + * bin/apport-bug: Show deprecation warning for -p/-P. (LP: #431942) + + -- Martin Pitt Wed, 14 Oct 2009 23:28:24 +0200 + +apport (1.9.2-0ubuntu2) karmic; urgency=low + + [ Matt Zimmerman ] + * general-hooks/ubuntu.py: Include in Ubuntu bug reports the version number + of the installation media used to install the system, via + /var/log/installer/media-info (cf. #364649) + + [ Martin Pitt ] + * debian/local/apport-collect.1: Clarify that the launchpad.credentials + files needs to be removed in order to ask for privileges again. + * Merge bug fixes from trunk: + - general-hooks/generic.py: Catch xkbcomp error messages, too. (LP: #431807) + - apport-bug: Consider -h as "output help", too. (Marco Rodrigues) + + [ Brian Murray ] + * debian/local/apport-collect: + - Resolve bug with specifying package for adding information. + - Let collector know if bug was not reported by them. + - Clarify potential failure causes. + + -- Martin Pitt Thu, 08 Oct 2009 09:37:35 +0200 + +apport (1.9.2-0ubuntu1) karmic; urgency=low + + * New upstream bug fix release: + - apport-cli: Print the URL and ask whether to open a browser. In many + situations (such as usage on a server through ssh), it's preferable to not + open the browser on the reporting computer. Thanks to Matt Zimmerman for the + initial patch! (LP: #286415) + - general-hooks/generic.py: Collect important glib errors/assertions (which + should not have private data) from ~/.xsession-errors (LP: #431807) + - launchpad.py: Link hardware data submission key if it exists. (LP: #424382) + - apport-cli: Fix crash with non-ASCII characters in prompts. + - Fix "apport-bug symptomname" to actually work. + - launchpad.py: Fix crash on invalid credentials file. Thanks to Marco + Rodrigues for the initial patch! (LP: #414055) + * man/apport-bug.1: Document APPORT_IGNORE_OBSOLETE_PACKAGES (cherrypicked + from trunk), and APPORT_STAGING (Ubuntu specific change, since it's a + launchpad backend specific variable). + * bin/apport-bug: Ignore -p option when giving two arguments, to keep + compatibility with current bug filing instructions. (LP: #356755) + * debian/copyright: Update copyright year and fix GPL link, thanks Marco + Rodrigues! + + -- Martin Pitt Fri, 02 Oct 2009 13:25:58 +0200 + +apport (1.9.1-0ubuntu3) karmic; urgency=low + + * Merge bug fixes from trunk: + - apport-cli: Print the URL and ask whether to open a browser. This makes + ubuntu-bug work much better for servers, now that ubuntu-bug is by and + large mandatory. (LP: #286415) + - launchpad.py: Consistently respect $APPORT_STAGING, so that it works + for bug filing as well. (LP: #435112) + + [ Matt Zimmerman ] + * data/general-hooks/ubuntu.py: Add metadata and tags for bugs reported from + EC2 and UEC instances. + + -- Martin Pitt Fri, 25 Sep 2009 18:51:44 +0200 + +apport (1.9.1-0ubuntu2) karmic; urgency=low + + * kde/bugreport.ui: Select "complete report" option by default, to actually + be able to file bugs if the options are not shown. Thanks to Yuriy Kozlov! + Fix cherrypicked from trunk. (LP: #405378) + + -- Martin Pitt Wed, 23 Sep 2009 10:18:28 +0200 + +apport (1.9.1-0ubuntu1) karmic; urgency=low + + [ Martin Pitt ] + * New upstream bug fix release: + - hookutils.py, attach_hardware(): Do not attach empty Pccardctl*. + - apport/report.py, add_gdb_info(): Do not throw away stderr from gdb. + - data/general-hooks/parse_segv.py: + + Handle arithmetic wrapping correctly. + + Handle empty base, scale, or index registers in disassembly. + + Handle in/out ioport faults. + - Various improvements to user-visible strings, thanks to Marco Rodrigues! + (LP: #178507) + - Various apport-retrace robustifications. + - setup.py: Fix DistUtilsExtra version check. (LP: #428337) + - hookutils.py, attach_gconf(): Do not overwrite previous values from + other packages, thanks Loïc Minier! + - hookutils.py, attach_gconf(): Fix crash with nonexisting tags. + + [ Loïc Minier ] + * Upstream source is at https://launchpad.net/apport/+download not + archive.ubuntu.com. + + -- Martin Pitt Tue, 22 Sep 2009 12:51:38 +0200 + +apport (1.9-0ubuntu6) karmic; urgency=low + + * debian/apport.upstart: + - Use "exit" in Upstart script rather than "return". + - Fix post-stop script to write to the correct file. LP: #430895. + + -- Scott James Remnant Wed, 16 Sep 2009 20:33:49 +0100 + +apport (1.9-0ubuntu5) karmic; urgency=low + + * Merge bug fixes from trunk: + - hookutils.py, attach_hardware(): Do not attach empty Pccardctl*. + - apport/ui.py: Show a better message when failed connection to crash + database. Thanks to Marco Rodrigues! (LP: #178507) + - Do not throw away stderr from gdb. + - data/general-hooks/parse_segv.py: Handle arithmetic wrapping correctly. + - backends/packaging-apt-dpkg.py: More robust of missing ExecutablePath + due to outdated packages. + - setup.py: Fix DistUtilsExtra version check. (LP: #428337) + * data/general-hooks/ubuntu.py: Add distribution channel descriptor, as per + https://wiki.ubuntu.com/FoundationsTeam/Specs/OemTrackingId . + * data/general-hooks/ubuntu.py: Do not allow users to file bugs against + upgrade-system if the package isn't actually installed. Way too many + upgrade failures get wrongly reported against this. (LP: #404727) + * debian/rules: Entirely drop obsolete dh_installinit call. + + -- Martin Pitt Tue, 15 Sep 2009 17:31:26 +0200 + +apport (1.9-0ubuntu4) karmic; urgency=low + + FFE LP: #427356. + + * Replace init script with Upstart job. + * debian/control: + - Bump build-dependency on debhelper for Upstart-aware dh_installinit + + -- Scott James Remnant Tue, 15 Sep 2009 03:33:57 +0100 + +apport (1.9-0ubuntu3) karmic; urgency=low + + * apport/report.py: add upstream bzr commit 1591: + - include stderr in gdb command output + + -- Kees Cook Wed, 09 Sep 2009 19:32:05 -0700 + +apport (1.9-0ubuntu2) karmic; urgency=low + + * Add missing python-apt build dependency. + + -- Martin Pitt Tue, 08 Sep 2009 17:41:04 +0200 + +apport (1.9-0ubuntu1) karmic; urgency=low + + * New upstream release: + - Add "do what I mean" mode to command line argument parsing (applies to + all interfaces: -cli, -gtk, -kde). When giving a single argument and no + options, determine the most likely mode, like reporting a bug against a + symptom, package, executable name, or PID. + - Add program "apport-bug" which determines the most appropriate user + interface (GTK, KDE, CLI) and files a bug through it, using the single + argument "do what I mean" mode. This is an improved version of Ubuntu's + "ubuntu-bug" script. + - Update apport-cli manpage to current set of options and behaviour. Also + point out that apport-gtk and apport-kde share the same CLI. + - setup.py now installs apport-{gtk,kde} into $prefix/share/apport/, they + are not supposed to be called directly. This also reflects the path + which the .desktop files expect. + - setup.py now installs the internal helper scripts like + "kernel_crashdump", "apport", or "apportcheckresume" into + $prefix/share/apport instead of $prefix/bin. + - Update usage of gettext to work around Python bug of gettext() not + returning unicodes, but str. Fixes UnicodeDecodeErrors on translated + --help output. + - Add missing gettext wrapping for user-visible strings in + apport-{retrace,unpack} and ui.py; thanks to Marco Rodrigues! + - backends/packaging-apt-dpkg.py: Robustify get_{source,architecture} for + uninstalled packages + - ui.py: Add --version option. Thanks Marco Rodrigues! (LP: #383694) + * debian/local/apport-collect: Fix KeyError crash on nonexisting LP bug + number. Thanks Marco Rodrigues! (LP: #424273) + * debian/control: Bump Standards-Version to 3.8.3 (no changes necessary). + * debian/local/apport-collect: Point out that you need to select "Change + anything" privileges. (LP: #373700) + * debian/control: Drop obsolete texlive-latex-recommended build dependency. + * debian/rules: Drop --install-scripts, upstream now installs the files and + binaries into the right place. Adapt debian/*.install accordingly. + * Drop debian/local/ubuntu-bug{,.1} and replace them with symlinks to + apport-bug{,.1}, which is a more robust version of ubuntu-bug. + + -- Martin Pitt Tue, 08 Sep 2009 15:53:33 +0200 + +apport (1.8.2-0ubuntu1) karmic; urgency=low + + [ Martin Pitt ] + * New upstream bug fix release: + - crashdb.py: Fix handling of non-ASCII crash signatures + - packaging-apt-dpkg.py: Run ExecutablePath/InterpreterPath check later, + so that it does not always have to be done + - crashdb.py: Never mark a bug as a duplicate of itself. + - launchpad.py, close_duplicate(): Add duplicate assertion + - Update Ubuntu bug pattern URL + - launchpad.py: Add "cache_dir" option and $APPORT_LAUNCHPAD_CACHE + environment variable to specify a non-temporary cache directory. + (LP: #416804) + - packaging-apt-dpkg.py, get_architecture(): Only use installed + architecture if package is actually installed + - launchpad.py: Drop explicit temporary cache dir, launchpadlib does that + automatically now. Thanks to Marco Rodriguez! + + [ Marco Rodrigues ] + * debian/local/setup-apport-retracer: Switch to karmic. + + -- Martin Pitt Sat, 05 Sep 2009 13:04:16 +0200 + +apport (1.8.1-0ubuntu1) karmic; urgency=low + + * New upstream bug fix release: + - data/general-hooks/generic.py: Check $HOME, not /home for enough space. + (LP: #422658) + - launchpad.py: Intercept httplib2.ServerNotFoundError as well, to avoid + crashes when being offline. (LP: #396276) + - apport-cli: Save reports with .apport extension instead of .txt. Thanks + to Steve Beattie! (LP: #401983) + - fileutils.py, likely_packaged(): Ignored crashes in /var, packages don't + ship executables there, and it creates false positives. (LP: #414368) + - packaging-apt-dpkg.py, get_modified_files(): Fix crash with empty lines. + (LP: #408280) + - packaging-apt-dpkg.py: Use installed version instead of candidate + version where appropriate. This also fixes a crash where an obsolete + package is not available any more. (LP: #423511) + - hookutils.py, attach_gconf(): Fix crash with keys which do not have a + schema default. (LP: #422277) + - launchpad.py: Remove LP #353805 workaround, seems fixed now. + - launchpad.py: Talk to staging if $APPORT_STAGING is set. + - launchpad.py: Explicitly supply content_type for addAttachment, current + wadllib requires it now. + - apport_python_hook.py: Paper over inexplicable import error. + (LP: #348250) + - apport_python_hook.py: Protect against nonexisting sys.argv. + (LP: #418051) + - apport/ui.py, load_report(): Check that report has ProblemType field. + (LP: #198543) + - ui.py: Fix handling of complete vs. reduced report size. (LP: #92653). + This also fixes a race condition crash with os.path.getsize(). + (LP: #348137) + - fi.po: Fix mistranslation of "&Cancel". (LP: #355303) + - apport-{gtk,kde}: Check for having $DISPLAY at startup to avoid crashes. + (LP: #411276) + - report.py, add_gdb_info(): Fix race condition in unlink_core, thanks to + Tommi Komulainen! (LP: #397945) + - ui.py, load_report(): Robustify check whether program is still + installed. (LP: #329184) + - packaging-apt-dpkg.py, install_retracing_packages(): Install package for + ExecutablePath/InterpreterPath if missing; this can happen with package + hooks which reassing package + - launchpad.py: Add a comment when marking a bug as a duplicate. + (LP: #418871) + * Move gdb dependency from apport to GUI packages to avoid pulling in gdb on + Ubuntu server. Thanks to Steve Beattie! (LP: #354172) + * ubuntu-bug: Fix handling of .crash file arguments, thanks to Marco + Rodrigues for pointing this out! (LP: #422881) + * debian/local/apport-collect: Set content_type and description, wadllib + requires them now. (LP: #423512) Also drop the ASCII reencoding + workaround, this doesn't seem to be necessary any more. + * apport/hookutils.py, attach_conffiles(): Fix crash with obsolete + conffiles. (LP: #412132) + * debian/local/apport-collect: Do not upload data if the affected package + isn't installed and there is no source package hook available either. + (LP: #417277) + * debian/local/ubuntu-bug: Accept .apport extension, too; thanks to Steve + Beattie! (LP: #401983) + * debian/local/apport-collect: Drop $APPORT_STAGING check, it's done by + launchpad.py itself now. + + -- Martin Pitt Thu, 03 Sep 2009 21:08:31 +0200 + +apport (1.8-0ubuntu2) karmic; urgency=low + + * apport/report.py: add upstream bzr 1538 commit: + - change to upstream glibc's __abort_msg variable name. + - filter out memory addresses when matching assert-bug duplicates. + + -- Kees Cook Fri, 28 Aug 2009 12:47:14 -0700 + +apport (1.8-0ubuntu1) karmic; urgency=low + + * New upstream release: + - Do not generally ignore SIGABRT any more. Try to extract the assertion + message from the core dump, and add it as "AssertionMessage" field. Mark + reports as unreportable if they do not have an assertion message and crashed + with SIGABRT. This implements UbuntuSpec:security-karmic-apport-abort. + - report.py, add_hooks_info(): Add optional package/srcpackage argument. Hooks + can use that to change the affected package or call hooks from different + packages. + - KDE frontend implementation of ui_question_userpass(), for crash databases + which need to ask for credentials. + - hookutils.py: New funtion attach_wifi() to add wireless network related + information to reports. + - Fix the test suite on current kernels; test/crash previously often failed + with python segfaults, since it killed the test processes too early. + + -- Martin Pitt Wed, 26 Aug 2009 13:19:51 +0200 + +apport (1.7-0ubuntu4) karmic; urgency=low + + [ Colin Watson ] + * data/package-hooks/source_debian-installer.py: Report Ubiquity bugs + against the ubiquity source package, rather than rejecting them. + + [ James Westby ] + * data/package-hooks/source_linux.py: submit oopses back if the user + accepts. Use the new kerneloops-submit to do it. + * bin/kernel_oops: kerneloops will now pass the checksum, so if it does + then base the report path on that to uniquify the reports. + * apport/fileutils.py: allow uid to be a string so that we can use + the checksum in place of the uid. + + -- James Westby Tue, 25 Aug 2009 21:15:24 +0100 + +apport (1.7-0ubuntu3) karmic; urgency=low + + [ Colin Watson ] + * data/general-hooks/ubuntu.py: File update-grub bugs on grub2 instead of + grub if appropriate. + * apport/hookutils.py: Add command_available method, and use it to add + prtconf and pccardctl output if those commands are available. + * data/package-hooks/source_debian-installer.py: New hook, providing + roughly the same information as is provided by the 'report-hw' tool in + installation-report. + + [ Matt Zimmerman ] + * apport/hookutils.py: Include modem-manager syslog messages in WifiSyslog + * data/general-hooks/ubuntu.py: Exclude bugs already aimed at grub2 from the + update-grub test (in support of Colin's change above) + * data/general-hooks/ubuntu.py: Redirect failures in /etc/kernel/*.d to the + package owning the file which failed + * Make sure that kernel crash dumps are marked as private in Launchpad + (LP: #417059) + + -- Kees Cook Fri, 21 Aug 2009 11:32:06 -0700 + +apport (1.7-0ubuntu2) karmic; urgency=low + + [ Matt Zimmerman ] + * data/general-hooks/ubuntu.py: Detect when a kernel upgrade failure is + caused by update-grub failing, and file the bug on grub instead of linux + * data/general-hooks/ubuntu.py: Detect when a kernel upgrade failure is + caused by update-initramfs failing, and file the bug on initramfs-tools + instead of linux + * data/package-hooks/source_linux.py: Per discussion with ogasawara, attach + ALSA details on kernel bug reports by default. About 9% of sampled kernel + bugs are audio-related. + * data/package-hooks/source_linux.py: Add linux-firmware version to kernel + bug reports + * apport/hookutils.py: Add attach_wifi function with wifi-related debug info + * data/package-hooks/source_linux.py: Attach wifi info by default to kernel + bugs + + [ Martin Pitt ] + * Merge trunk: + - report.py, add_hooks_info(): Add optional package/srcpackage argument. + - Implemented ui_question_userpass [Caio Romão]. + + -- Martin Pitt Sat, 08 Aug 2009 12:20:39 +0200 + +apport (1.7-0ubuntu1) karmic; urgency=low + + * New upstream release: + - Add support for symptoms. + * debian/control: Recommend apport-symptoms. + * debian/local/ubuntu-bug: When called without arguments, run in "show + available symptoms" mode. + + -- Martin Pitt Wed, 05 Aug 2009 19:32:39 +0100 + +apport (1.6-0ubuntu3) karmic; urgency=low + + * Merge trunk: + - apport-gtk: Fix ordering of choices + - bin/package_hook: Fix crash for subdirectories in log dir. (LP: #332350) + - doc/package-hooks.txt: Document allowed chars in report keys. + - Show precise error message for damaged reports. + * ubuntu-bug: Call apport-kde instead of apport-qt. + + -- Martin Pitt Tue, 04 Aug 2009 18:50:26 +0100 + +apport (1.6-0ubuntu2) karmic; urgency=low + + * Re-enable Apport by default, for the alpha-3 release. + + -- Martin Pitt Tue, 21 Jul 2009 00:44:50 +0200 + +apport (1.6-0ubuntu1) karmic; urgency=low + + * New upstream release: + - Add support for kernel crashes, thanks to Michael Vogt! + - apport/ui.py, run_crash(): Do not re-collect information if we already + have a Dependencies field. This happens when calling apport on an already + pre-processed .crash file with -c. (LP: #394497) + - apport/hookutils.py, pci_devices(): Deliver all matching devices, not + just the last one. (LP: #398906) + - hookutils.py, _get_module_license(): Return "invalid" if modinfo fails, + so that they do not count as "free". (LP: #341720) + - packaging-apt-dpkg.py: Support additional custom native origins in + /etc/apport/native-origins.d/ . (LP: #386052) + - packaging-apt-dpkg.py: Drop PPA origin hack, launchpad behaves properly + now + - apport-gtk: Avoid focus stealing when being called without arguments (i. + e. auto-launched). LP: #396243) + - apport-kde: Use standard gettext again + - Fix handling of PC lacking disassembly due to invalid memory location. + * debian/local/apport-collect: Tag bugs with "apport-collected" on success. + (LP: #391392) + + -- Martin Pitt Wed, 15 Jul 2009 18:02:59 +0200 + +apport (1.5-0ubuntu2) karmic; urgency=low + + * Merge fixes from trunk: + - packaging-apt-dpkg.py: Fix install_retracing_packages() for pre-0.7.9 + python-apt API. + - Sort the list of dependencies so it's easier to scan (LP: #391021) + + -- Martin Pitt Tue, 30 Jun 2009 22:39:18 +0200 + +apport (1.5-0ubuntu1) karmic; urgency=low + + * New upstream release: + - Drop all Makefiles, po/POTFILES.in, and most code from setup.py, and use + DistUtilsExtras.auto which "just does the right thing" for most build + system tasks. This requires python-distutils-extra >= 2.2, see + https://launchpad.net/python-distutils-extra + - Move all test scripts into test/, to unclutter source tree. + - setup.py now auto-detects the required packaging backend if + apport/packaging_impl.py is not manually installed. + * debian/control: Add python-distutils-extra build dependency. + * debian/rules: Drop stuff which is now properly done by the upstream build + system. + * Drop debian/apport.examples, preloadlib died long ago. + * Adapt debian/apport-{gtk,kde}.install to new upstream build system, which + now installs the .desktop files itself. + + -- Martin Pitt Mon, 29 Jun 2009 12:00:21 +0200 + +apport (1.4-0ubuntu1) karmic; urgency=low + + * New upstream release. Compared to our previous snapshot, this changes: + - Replace Qt4 frontend with KDE frontend, thanks to Richard Johnson! + - apport/ui.py, run_report_bug(): Clean up PID information collection. + - gtk/apport-gtk.ui: Drop invalid icon reference. (LP: #389064) + - ui.py: Do not reject non-distro package reports if report sets CrashDB + (for third-party destination). (LP: #391015) + - bin/kernel_crashdump: Use packaging API properly. + - apport-gtk.ui: Drop erroneous translatable flag from stock buttons. + - Update German translations. + * debian/*: qt → kde, add transitional package for apport-qt. + * Drop backends/packaging_rpm.py. We don't use it in the Ubuntu package at + all, and it's still in trunk. + * debian/rules: Drop some deprecated dh_* calls, cdbs's debhelper.mk has + done them for a long time. + * debian/control: Bump Standards-Version to 3.8.2 (no changes necessary). + * debian/control: Replace URLs in descriptions with proper Homepage: field. + + -- Martin Pitt Fri, 26 Jun 2009 10:44:54 +0200 + +apport (1.3-0ubuntu2) karmic; urgency=low + + * debian/local/apport-collect: Pass None as HookUI object. This will crash + with interactive hooks, but is a good enough immediate bandaid. + (LP: #385811) + * Merge fixes from trunk: + - packaging-apt-dpkg.py: Add backwards compatibility code for python-apt < + 0.7.9 to not break backportability. + - hookutils.py, command_output(): Force LC_MESSAGES=C, to avoid translated + output in bug reports. (LP: #383230) + - apport-gtk.ui: Make details window resizable, and lower default size, so + that it will fit on small screens. (LP: #365517) + + -- Martin Pitt Fri, 12 Jun 2009 12:47:59 +0200 + +apport (1.3-0ubuntu1) karmic; urgency=low + + * New upstream release. Compared to our bzr snapshot, this has: + - Interactive package hooks: + + Add apport.ui.HookUI class which provides GUI functionality such as + yes/no + questions or file dialogs to hooks. + + add_info() in package hooks now can (optionally) take a second argument + which is the HookUI instance. + + See doc/package-hooks.txt for details. + + See UbuntuSpec:desktop-karmic-symptom-based-bug-reporting + - New function apport.hookutils.root_command_output() to run a command as root, + through gksu/kdesudo/sudo, depending on the desktop environment. + + -- Martin Pitt Wed, 10 Jun 2009 16:49:13 +0200 + +apport (1.2.1-0ubuntu3) karmic; urgency=low + + * debian/control: Bump Standards-Version to 3.8.1 (no changes necessary). + * debian/control: Bump debhelper dependency for dh_icons, to satisfy + lintian. + * general-hooks/ubuntu.py: Fix IndexError crash if report does not have a + Package field. Check whether we actually have attach_conffiles() (which is + not the case when running the upstream version). + * Merge trunk: + - launchpad.py: Fix crash for unset titles. + - Add segfault analysis hook for quick segv reviews. Thanks to Kees Cook! + - run-tests: Replace hardcoded Python path with dynamically detected path. + + -- Martin Pitt Wed, 03 Jun 2009 09:52:03 +0200 + +apport (1.2.1-0ubuntu2) karmic; urgency=low + + * debian/control: Update Vcs-Bzr: for new location (moved from project + branch to package branch). + * Merge bug fixes from trunk: + - apport-cli: Fix report saving in "bug report" mode. (LP: #353253) + - Drop "UnsupportableReason" field, it is too similar to + UnreportableReason and just confusing. + - ui.py: Check UnreportableReason for run_report_bug() as well. + (LP: #361359) + - general-hooks/generic.py: Do not report problems with low free space on + / or /home. (LP: #381047) + - launchpad.py: Do not overwrite report['Title']. + - launchpad.py: Repair support for extra tags. + - New function apport.hookutils.root_command_output() to run a command as + root, through gksu/kdesudo/sudo, depending on the desktop environment. + (Part of UbuntuSpec:desktop-karmic-symptom-based-bug-reporting) + - launchpad.py: Fetch DpkgTerminalLog. (LP: #382589) + - launchpad.py: More robust download(), fixes other part of (LP: #382589) + - problem_report.py: Allow dashes and underscores in key names. Update + doc/data-format.tex accordingly. (LP: #380811) + + -- Martin Pitt Tue, 02 Jun 2009 11:59:41 +0200 + +apport (1.2.1-0ubuntu1) karmic; urgency=low + + * New upstream release: + - Moving away from deprecated APIs: + + packaging-apt-dpkg.py: Use python-apt >= 0.7.9 official API and drop + usage of internal symbols. + + hookutils.py: Drop hal related functions and queries, replace with + udev database, udev log file, and DMI information from sysfs. + + gtk UI: Convert from libglade to gtk.Builder. + - Bug fixes: + + hookutils.py: Drop /proc/version_signature collection, it is Ubuntu + specific. + + apportcheckresume: Fix log collection from pm-utils. + + Fix various crashes and report properties for reporting against + uninstalled packages. + * debian/control: Drop python-glade2 dependency, bump python-gtk2 dependency + to ensure availability of gtk.Builder. + * hookutils, attach_conffiles(): Remove leftover debugging spew. + * debian/apport-qt.install: Install the individual Qt .ui files instead of + *.ui, since GTK's are now also called *.ui. + + -- Martin Pitt Fri, 15 May 2009 11:28:34 +0200 + +apport (1.1.1-0ubuntu2) karmic; urgency=low + + [ Martin Pitt ] + * hookutils.py: Do not attach /proc/version_signature, it's Ubuntu specific. + (Merged from trunk). Instead, attach it in general-hooks/ubuntu.py. + * general-hooks/ubuntu.py: Attach package conffile information. + * debian/local/apport-collect: Add workaround for launchpadlib bug + LP#353805, to avoid crashing with non-UTF8 attachments. (LP: #368004) + * debian/local/apport-collect: Fix import of launchpadlib's HTTPError. + * apport/hookutils.py, attach_conffiles(): Ignore empty lines from + dpkg-query output. + * general-hooks/ubuntu.py: Strip off '/target' prefix from ExecutablePath + and InterpreterPath, to correctly process crash reports from the live + system installer. + * apport/hookutils.py, attach_conffiles(): Do not use command_output(), + since that causes error messages to get parsed as conffiles. Use + subprocess properly. + * backends/packaging-apt-dpkg.py: Replace deprecated python-apt properties + with current ones (merged from trunk). Update python-apt dependency to + >= 0.7.9. + * packaging-apt-dpkg.py, get_modified_files(): Do not show package list file + as modified if the package is not installed (merged from trunk). + (LP: #364533) + * backends/packaging-apt-dpkg.py, install_retracing_packages(): Fix syntax + error which broke the retracers. + + [ Andy Whitcroft ] + * bin/apportcheckresume: the suspend _and_ hibernate logs are both in + pm-suspend.log. + * bin/apportcheckresume: remove redunant check for file before attaching + stress log. + + -- Martin Pitt Wed, 13 May 2009 15:22:53 +0200 + +apport (1.1.1-0ubuntu1) karmic; urgency=low + + [ Martin Pitt ] + * New upstream security update: + - etc/cron.daily/apport: Only attempt to remove files and symlinks, do not + descend into subdirectories of /var/crash/. Doing so might be exploited by + a race condition between find traversing a huge directory tree, changing + an existing subdir into a symlink to e. g. /etc/, and finally getting + that piped to rm. This also changes the find command to not use GNU + extensions. Thanks to Stephane Chazelas for discovering this! + (LP: #357024, CVE-2009-1295) + - Other fixes were already cherrypicked in the previous upload. + + [ Matt Zimmerman ] + * package-hooks/source_linux.py: Attach info for linux-restricted-modules + and linux-backports-modules + + -- Martin Pitt Thu, 30 Apr 2009 09:08:29 +0200 + +apport (1.1-0ubuntu1) karmic; urgency=low + + * New upstream release: + - Drop some remaining distro specific pieces of code from non-backends. + - Add hookutils methods for attaching relevant packages, greatly improve + attach_alsa() for sound problem debugging. + - Move launchpad crash database implementation from ever-breaking + python-launchpad-bugs (screenscraping) to launchpadlib (official and + stable Launchpad API). (LP: #353879) + - Add new field Report.pid which gets set on add_proc_info() and can be + used by hooks. + - setup.py: Properly clean up all generated files, install missing + mimetypes/text-x-apport.svg icon symlink. + - Add README file. + - Add translations from Launchpad. + - Remove preloadlib/*; it's undermaintained, and not really useful any + more these days. + - Various bug fixes; most visible being the misnamed + etc/default/apport.default file (which should just be + etc/default/apport). + * Merge some bug fixes from trunk: + - launchpad.py: Send and read Date: field again, reverting r1128; it is + useful after all. (LP: #349139) + - report.py, add_proc_info(): Only add ProcAttrCurrent if it is not + "unconfined". + - ui.py: Detect invalid PIDs (such as for kernel processes) and give a + friendly error message. (LP: #360608) + - report.py, add_hooks_info(): Always run common hooks, and run source + package hooks if we do not have a binary package name. (LP: #350131) + - launchpad.py: Consider socket errors when connecting as transient, so + that crash-digger doesn't stop completely on them. + * Drop debian/apport.README.Debian, superseded by upstream README. + * Drop debian/apport.links, done by upstream setup.py now. + * debian/rules, debian/apport.preinst: Drop upgrade fix for misnamed default + file again, was only necessary for intra-Jaunty upgrades. + * debian/control: python-launchpad-bugs → python-launchpadlib dependencies. + * debian/local/apport-collect: Drop launchpadlib login code, just use the + CrashDatabase implementation from apport/crashdb_impl/launchpad.py. + * Make package backportable to hardy and intrepid: + - debian/control: Relax python-central buil-dependency to 0.5.6. + - debian/rules: Determine DH_PYCENTRAL value ("include-links" vs. + "nomove") based on the installed pycentral version. + - debian/rules: Only supply --install-layout=deb when Python version is + 2.6. + * apport/hookutils.py: Add docstring for attach_hardware, thanks Matt + Zimmerman! (Merged from lp:~mdz/apport/hookutils) + * apport/crashdb_impl/launchpad.py: Support older wadllib API + where bug.date_created was a string instead of a datetime object. + (Cherrypicked from trunk). + * debian/control: Drop apport dependency to python-xdg, it's not required. + (LP: #354172) + * debian/control: Drop gdb from Depends: to Recommends:. (LP: #354172) + * debian/local/apport-collect: Print a friendly error message instead of + crashing if the bug number is not an integer. (LP: #351050) + * debian/local/apport-collect: Change incomplete tasks back to "New" after + data collection. (LP: #363126) + * debian/apport.links: source_linux-meta.py -> source_linux.py package hook, + so that apport-collect works on "linux" source bug tasks. These get + opportunistically translated into binary packages, but the binary "linux" + is built by the source "linux-meta". (LP: #350131) + * debian/local/setup-apport-retracer: + - Use ports.ubuntu.com for non-{i386,amd64,lpia}. + - Set up Jaunty by default. + - Fix test for being in local unpackaged apport source tree. + - Drop installation of python-launchpad-bugs. + - Install bzr branches/packages necessary for launchpad, in a shared + ~/launchpadlib/ tree: launchpadlib, wadllib, oauth, lazr.uri, httplib2, + simplejson. + - Clean up apport-chroot calling for extra packages. + + -- Martin Pitt Tue, 28 Apr 2009 10:50:49 +0200 + +apport (1.0-0ubuntu5) jaunty; urgency=low + + [ Martin Pitt ] + * Rename etc/default/apport.default to etc/default/apport (brown paperbag), + and add debian/apport.preinst to remove the apport.default file on + upgrades. (LP: #361543) + * debian/rules: Call dh_installinit with --onlyscripts, so that the package + calls update-rc.d again. This fixes the calling of init script again, + which got broken in 1.0-0ubuntu1. (LP: #361579) + + [ Matt Zimmerman ] + * package-hooks/source_linux.py: Attach /etc/initramfs-tools/conf.d/resume to + show the resume device for hibernation + + -- Martin Pitt Wed, 15 Apr 2009 22:36:33 +0200 + +apport (1.0-0ubuntu4) jaunty; urgency=low + + * etc/default/apport.default: Disable Apport by default for the final + release. + + -- Martin Pitt Tue, 14 Apr 2009 11:47:29 +0200 + +apport (1.0-0ubuntu3) jaunty; urgency=low + + * apport/hookutils.py: Factor out package_versions() to generate a simple + text listing of relevant package versions and use it in attach_printing() + * apport/hookutils.py: Add new function attach_relevant_packages() to attach + version information (and perhaps eventually run hooks?) for related + packages + * apport/hookutils.py: Add glob matching to package_versions() + * apport/hookutils.py: Add fuser info and dmesg to attach_alsa + * apport/hookutils.py: Add codec info to attach_alsa + + -- Matt Zimmerman Thu, 09 Apr 2009 07:36:45 -0700 + +apport (1.0-0ubuntu2) jaunty; urgency=low + + * backends/packaging-apt-dpkg.py: Add missing shutil import. + * debian/local/ubuntu-bug: Filter out -p and -P, for backwards calling + compatibility. (LP: #356755) + + -- Martin Pitt Mon, 06 Apr 2009 23:04:39 -0700 + +apport (1.0-0ubuntu1) jaunty; urgency=low + + * Apport has a proper upstream trunk now (lp:apport) and made an 1.0 + upstream release. Use this as an orig.tar.gz. This does not change any + code for Jaunty, just removes the Fedora/OpenSUSE specific .spec and init + scripts. + * Add bzr-builddeb configuration (merge mode). + * Add debian/watch for upstream releases on Launchpad. + * Drop debian/python-apport.postinst, obsolete for a long time. + + -- Martin Pitt Mon, 06 Apr 2009 17:37:48 -0700 + +apport (0.149) jaunty; urgency=low + + Do some internal cleanup of distribution specific stuff: + + * problem_report.py, man/apport-unpack.1: Fix description of .crash file + syntax (RFC822, not "Debian control"). + * Move cron.daily, init script, and default file from debian/ to etc/, and + install them in setup.py. These files are appropriate for upstream + installation. + * Move crashdb.conf and doc/README.blacklist to etc/, to simplify setup.py. + * setup.py: Move *.mo generation/installation into my_install_data class, + for cleanliness. + * Move installation of missing packages for retracing from + bin/apport-retrace to new abstract interface apport/packaging.py, + install_retracing_packages() and remove_packages(), and move the apt/dpkg + code to backends/packaging-apt-dpkg.py. This removes a major piece of + apt/dpkg specific code from non-backends. + * bin/apport-retrace: Rename option --no-dpkg to --no-pkg and update + bin/apport-chroot accordingly. + * Move bin/apport-chroot and man/apport-chroot.1 to debian/local, since they + are totally Debian/Ubuntu specific. + * debian/local/setup-apport-retracer: Update apport-chroot and crashdb.conf + paths for above changes. + * apport/hookutils.py, files_in_package(): Replace dpkg-query call with + packaging.get_files(), to avoid Debianism. + * man/apport-retrace.1: Drop reference to "apt", simply talk about package + installation. + + Bug fixes: + + * setup.py: Fix homepage URL. + * debian/local/apport-chroot: If multiple distro IDs point to the same + chroot, do not upgrade them more than once with "upgrade all". + + -- Martin Pitt Mon, 06 Apr 2009 16:06:33 -0700 + +apport (0.148) jaunty; urgency=low + + [ Matt Zimmerman ] + * apport/hookutils.py: add attach_media_build to include information about + the build of installation media in use (i.e. in a casper live CD + environment) + * general-hooks/ubuntu.py: use attach_media_build (LP: #351781) + * bin/apportcheckresume: Use attach_file_if_exists rather than attach_file to + avoid spurious error messages about non-existent log files (LP: #351973) + + [ Martin Pitt ] + * debian/local/ubuntu-bug: Drop generic passthrough of apport-{cli,gtk,kde} + options since this leads to too much confusion. Instead just support a + single argument and check whether it is a pid, a package name, a .crash + file, or a program path. This does the right thing when calling it with a + .crash file (LP: #347392) and fixes the help output (LP: #344923) Update + manpage accordingly. + * apport/hookutils.py: Move attach_media_build() to + general-hooks/ubuntu.py, since it is Ubuntu specific. + * bin/apport-retrace: Fix KeyError crash on bugs with an ExecutablePath + which does not exist any more. Close the bug as invalid instead. + (LP: #352331) + * bin/kernel_oops: Add "kernel-oops" tag. Since both bin/kernel_oops and + bin/apportcheckresume use the "kerneloops" bug class, it previously was + hard to filter out the bug reports which were real oopses. (LP: #349621) + + -- Martin Pitt Wed, 01 Apr 2009 18:10:01 +0200 + +apport (0.147) jaunty; urgency=low + + * bin/apportcheckresume: report the pm-suspend.log/pm-hibernate.log + from /var/lib. + * bin/apportcheckresume: only attempt to attach the stress log if its is + present. + * bin/apportcheckresume, debian/apport.init: add detection for late + resume hangs, those where the user thinks the system was working. + (LP: #335323) + + -- Andy Whitcroft Mon, 30 Mar 2009 09:47:28 +0200 + +apport (0.146) jaunty; urgency=low + + * apport/report.py, _generate_sigsegv_report(): Turn into a class method, so + that it can be used by test cases in other modules as well. Also add + missing Signal field. + * apport/crashdb_impl/launchpad.py: Fully enable operation with + staging.launchpad.net. + * apport/crashdb_impl/launchpad.py: Add initial test suite, performing data + upload, Python and SEGV bug reporting, report download, report updating, + tag and duplicate handling. This happens on staging.launchpad.net. + * apport/crashdb.py: Add new interface duplicate_of(id) to return the master + bug of a duplicate. Also document that close_duplicate() with "None" + master bug will un-duplicate the bug. + * apport/crashdb_impl/{launchpad,memory}.py: Implement duplicate_of() and + add test cases. The Launchpad test case reproduces the + "duplicate-of-a-duplicate" regression, which now got fixed in + python-launchpad-bugs bzr head. + * apport/ui.py, open_url(): Also consider a sesssion as "GNOME" if gconfd-2 + is running; some variants such as UNR do not have gnome-panel; this fixes + using the preferred browser for them. (LP: #322386) + * debian/local/apport-collect: Add new option -p to explicitly specify a + (binary) package name instead of guesstimating it from the bug's source + package tasks. Document new option in debian/local/apport-collect.1. + (LP: #333875) + * apport/crashdb.py, duplicate_db_consolidate(): Add logging about removing + invalidated bugs from the duplicate database, now that this actually + works. + * debian/local/ubuntu-bug.1: Update for the possibility to specify a package + name or PID without any options. Also document the "ubuntu-bug linux" + special case. (LP: #348985) + * debian/local/ubuntu-bug.1: Add missing documentation of the case of + specifying a path name. + * backends/packaging-apt-dpkg.py: When unpacking source trees, try + "debian/rules setup" last, since it is the least common variant. + * debian/local/ubuntu-fat-chroot: Divert away + /usr/lib/xulrunner-1.9.1b3/xulrunner-bin. It is called on debian/rules + patch in xulrunner-1.9.1 and hangs eternally in the fakechroots. This is + only a temporary kludge, though, until the next xulrunner version lands. + * apport/crashdb_impl/launchpad.py: Add test case: Update a bug report which + got marked as a duplicate during processing. This reproduces #349407. + * apport/crashdb_impl/launchpad.py, update(): Intercept and ignore IOErrors + when changing the bug priority. This happens if a bug gets duplicated + underneath us. (LP: #349407) + * apport/crashdb.py, get_crashdb(): Print syntax errors from parsing + conf.d/*.conf to stderr. + * apport/crashdb_impl/launchpad.py: Support new CrashDB option "project" + which can be set to a LP project name to file bugs against that project + instead of the distribution. Add test case for filing crash bug against a + project, updating it, duplicating/unduplicating it, and determining fixed + version. (LP: #338835) + * bin/crash-digger: If apport-retrace exits with 99, consider it a transient + error and just stop the retracer, but don't leave the lock file behind. + Add appropriate test case to test-crash-digger. + * bin/apport-retrace: If apt update fails due to a "hash sum mismatch", exit + with a "transient error" code, to stop (but not break) the retracing + cycle. + + -- Martin Pitt Fri, 27 Mar 2009 17:01:08 +0100 + +apport (0.145) jaunty; urgency=low + + * apport/crashdb_impl/launchpad.py: Fix typo in previous upload. + * debian/local/apport-collect: Do not crash on + launchpadlib.errors.HTTPError, but give a proper error message and point + out that this script needs "change anything" privileges. (LP: #338201) + * apport_python_hook.py: Fix crash for already existing reports, and make + behaviour equivalent to bin/apport: Silently exit for existing unseen + crash report, and overwrite existing seen crash report. Add test cases. + (LP: #323714) + * general-hooks/automatix.py: Refuse to send bug reports when ultamatix is + installed. + + -- Martin Pitt Tue, 10 Mar 2009 18:45:34 +0100 + +apport (0.144) jaunty; urgency=low + + * apport/crashdb_impl/launchpad.py, mark_retrace_failed(): If report is + invalid, remove CoreDump.gz and other attachments. + * bin/apport-retrace: If we didn't find the ExecutablePath on the system + because the package is out of date, don't crash, but close the bug as + invalid. + + -- Martin Pitt Tue, 10 Mar 2009 10:45:56 +0100 + +apport (0.143) jaunty; urgency=low + + * debian/apport.README.Debian: Document how to temporarily and permanently + enable crash interception. + * backends/packaging-apt-dpkg.py, is_distro_package(): Do not consider a + package a native distro one if installed version is "None". This happens + with some PPA packages. (LP: #252734) + * apport/report.py, anonymize(): Move user name anonymization into the + "non-root" case as well; fixes uninitialized variable. (LP: #338847) + + -- Martin Pitt Mon, 09 Mar 2009 12:16:49 +0100 + +apport (0.142) jaunty; urgency=low + + * apport/report.py: Do not include lsb_release's stderr in the + DistroRelease: output. + * apport/hookutils.py: Fix attach_printing(): + - Correct spelling or "error_log". + - Do not call fgrep with no file names (if /etc/cups/ppd/ is empty), since + that hangs forever. + * apport/report.py, _gen_stacktrace_top(): Fix parsing of stacktraces + with some addresses missing. Add test cases. (LP: #269133) + * apport/ui.py, run_report_bug(): Show details of collected information and + give the user a chance to cancel. Previously, collected data was sent + directly to Launchpad. Nowadays lots of packages have hooks, so we cannot + guarantee any more that bug reports only have non-sensitive information. + (LP: #195514) This also allows the user to cancel if (s)he inadvertedly + clicked on "Report a problem". (LP: #279033) + * apport/ui.py: Fix crash in get_complete_size() for reports that are + constructed on the fly instead of loaded from a file (i. e. for bug + reports). Fixes displaying of report in apport-cli. + * apport/report.py: Slight robustification of test_add_gdb_info_script() + test case. + * debian/local/ubuntu-bug: Fix invocation with "--help". (LP: #305841) + * apport/ui.py, load_report(): Clearer error message if report file does not + exist. (LP: #204198) + * Remove redundant verbiage from test suite docstrings. + * apport/report.py, anonymize(): Fix crash when processing root-owned + reports. (LP: #338033) + * apport/report.py, anonymize(): Do not anonymize single-character user and + host names, since they create an utter mess in bug reports, and also are + very low-sensitive. + * debian/apport.init: Also start apport if force_start=1 is given. This + provides a convenient method of starting apport just for a session without + changing the default file. Add a comment to debian/apport.default about + this possibility. Thanks to Milan for the suggestion and the initial + patch! (LP: #320467) + * backends/packaging-apt-dpkg.py, _get_mirror(): Only consider http:// + mirrors for fetching Contents.gz. (LP: #315797) + + -- Martin Pitt Thu, 05 Mar 2009 17:01:05 +0100 + +apport (0.141) jaunty; urgency=low + + * apport/hookutils.py: Add cups error log to attach_printing() + + -- Brian Murray Mon, 02 Mar 2009 10:55:53 -0800 + +apport (0.140) jaunty; urgency=low + + * debian/python-{apport,problem-report}.install: Fix site-packages → + *-packages. + * run-tests: Only check for local packaging_impl.py if running local tests. + This unbreaks running tests from /usr/share/apport/testsuite/. + + -- Martin Pitt Mon, 02 Mar 2009 11:56:59 +0100 + +apport (0.139) jaunty; urgency=low + + * apport/report.py, anonymize(): Do not anonymize "root". (Side + issue in LP #333542) + * debian/rules: Supply --install-layout=deb to setup.py. + * debian/local/apport-collect: Attach new info to + staging.launchpad.net if $APPORT_STAGING is defined. This makes + testing easier. Describe in debian/local/apport-collect.1. + * debian/local/apport-collect: Ignore ValueErrors from + add_package_info(), which happens if the bug has a source package + task which does not have an identically named binary package name. + Slightly ugly, but it's nontrivial to do that in a sensible + manner; let's just fix the crash for now, since the focus of this + tool is to collect information from hooks. (LP: #334823) + * apport/hookutils.py, hal_dump_udi(): Filter out serial numbers. + (Mentioned in LP #107103) + + -- Martin Pitt Mon, 02 Mar 2009 11:36:18 +0100 + +apport (0.138) jaunty; urgency=low + + * apport/crashdb_impl/launchpad.py: Consider an useful stack trace + sufficient for automatically removing the core dump, it doesn't + need to be perfect. This is in accordance with not setting the + apport-failed-retrace tag for useful, but non-perfect retraces any + more. + * apport/hookutils.py, backends/packaging_rpm.py: Convert usage of + md5 module (which is deprecated in 2.6) to hashlib. + * Replace all instances of using an exception's .message attribute + with str(exception), since message is deprecated in Python 2.6. + * apport/hookutils.py: Add attach_printing(). Thanks to Brian Murray + for the initial patch! (LP: #333582) + + -- Martin Pitt Tue, 24 Feb 2009 22:24:31 +0100 + +apport (0.137) jaunty; urgency=low + + * Set python-version to all, include symlinks in the package. + + -- Matthias Klose Tue, 24 Feb 2009 21:22:36 +0100 + +apport (0.136) jaunty; urgency=low + + [ Andy Whitcroft ] + * bin/apportcheckresume: remove originator in suspend/hibernate/resume + reporting. This was intended for debugging only and is now redundant. + * bin/apportcheckresume, apport/report.py: when collecting resume failures + in very early boot hal may not be running and we thus unable to obtain + the machine type information. Move title generation to the reporting + engine. + + [ Martin Pitt ] + * debian/local/apport-collect: Add user environment information, too + (LANG, PATH, SHELL). (LP: #332578) + + -- Martin Pitt Tue, 24 Feb 2009 14:25:21 +0100 + +apport (0.135) jaunty; urgency=low + + * problem_report.py, test_write_mime_text(): Add test cases for + single-line and two-line UTF-8 values, single-line and two-line + Unicode values and a single-line LF-terminated value. Fix handling + of the latter two. + * problem_report.py, test_write(): Add test cases for single-line + and two-line UTF-8 and Unicode values, and fix handling of these + in write(). + * debian/local/apport-collect: Collect package, OS, and user + information as well. (LP: #332578) + * package-hooks/source_apport.py: Robustify by using hookutils, and + avoid stat errors if /var/crash/* does not exist. + * test-hooks: Update dodgy test for uninstalled package, + libdb4.3-tcl is not available in Jaunty any more. + + -- Martin Pitt Mon, 23 Feb 2009 13:14:24 +0100 + +apport (0.134) jaunty; urgency=low + + * debian/local/apport-collect: Do not collect information for closed + tasks. Thanks for Brian Murray for the initial patch! (LP: #331839) + * apport/crashdb_impl/launchpad.py, download(): Download + DpkgTerminalLog.txt attachment as well. + * apport/report.py: If downloading a nonexisting bug pattern file + name succeeds and returns a HTML snippet with "404 Not Found", + consider this as failure. This repairs falling back to source + package names. (LP: #328751) + * apport/hookutils.py: Replace tabs with spaces. + + -- Martin Pitt Fri, 20 Feb 2009 11:22:15 +0100 + +apport (0.133) jaunty; urgency=low + + [ Andy Whitcroft ] + * apport/hookutils.py: define and include a machine type from the hardware + information in the report, using HAL information where available. + * bin/apportcheckresume: include the machine type in the suspend/hibernate + report title. They are generally machine specific. + + -- Martin Pitt Thu, 19 Feb 2009 17:49:03 +0100 + +apport (0.132) jaunty; urgency=low + + [ Martin Pitt ] + * Add debian/local/apport-collect: Download a Launchpad bug report, + get its source package, check if it has apport hooks, and if so, + run and upload them. Add manpage, too. (LP: #124338) + * debian/control: Add Suggests: python-launchpadlib; this is only + needed by apport-collect, thus we don't need to pull that into + every default installation; if it's not installed apport-collect + will detect and point this out. + * debian/control: Add ${misc:Depends} dependencies. + + [ Jonathan Riddell ] + * Set window icon in apport-qt + + -- Martin Pitt Thu, 19 Feb 2009 13:50:34 +0100 + +apport (0.131) jaunty; urgency=low + + [ Andy Whitcroft ] + * bin/apportcheckresume, bin/kernel_oops, cli/apport-cli, gtk/apport-gtk, + gtk/apport-gtk.glade, qt4/apport-qt: generalised the KernelOops + dialog and handling to allow suspend and hibernate failures present + more accurate reasons for the report. Also commonises all messages + in the three implementations to simplify internationalisation. + + [ Martin Pitt ] + * po/Makefile: Fix merge-po rule to actually work again. + * cli/apport-cli, qt4/apport-qt: Unify string with apport-gtk. + * apport/ui.py: Drop some bogus translatable strings. + * Update German translations. + + -- Martin Pitt Mon, 16 Feb 2009 19:31:41 +0100 + +apport (0.130) jaunty; urgency=low + + [ Martin Pitt ] + * bin/kernel_crashdump: Don't crash if vmcore.log does not exist. + * crashdb_impl/launchpad.py: Tag bugs with the architecture they are + being reported on. + * bin/crash-digger: Revert catching "database is locked" errors + during consolidation, since it just hides more fundamental errors. + * apport/crashdb_impl/memory.py: Improve docstrings of test suite. + * bin/apport-retrace: Do not try to install -dbgsym packages with + nonmatching versions, unless --unpack-only is used. Thanks to + hggdh for the initial patch! (LP: #309208) + + [ Andy Whitcroft ] + * bin/apportcheckresume: modify the oops title and thereby the launchpad + bug title to say suspend or hibernate. + * bin/apportcheckresume: modify the tags to bin/apportcheckresume: + modify the oops title and thereby the launchpad be resume+suspend or + resume+hibernate as appropriate. + * bin/apportcheckresume: include any non-free modules in the bug title. + + -- Martin Pitt Thu, 12 Feb 2009 22:09:35 +0100 + +apport (0.129) jaunty; urgency=low + + * bin/apport-retrace: Log broken reports. + * bin/apport-retrace: Do not mark bugs as invalid after they are + already marked as a duplicate, since that does not work in + Launchpad. + * debian/local/ubuntu-fat-chroot: Symlink /target -> /, to work + for crashes which appear in /target during installation. + * bin/apport: Move argv length/usage help before lock check, so that + it works if the user cannot lock /var/crash/.lock. Thanks to Kees + Cook! + * doc/package-hooks.txt: Point out apport.hookutils. + * apport/ui.py: Check environment variable APPORT_REPORT_THIRDPARTY + in addition to the 'thirdparty' configuration file option for + overriding the "genuine distro package" check. Thanks to Oumar + Aziz OUATTARA! + * apport/crashdb_impl/launchpad.py: In third-party mode, report bugs + against Launchpad projects. Thanks to Oumar + Aziz OUATTARA for his branch! (LP: #213454) + * bin/apportcheckresume: Include /var/lib/pm-utils/stress.log, too. + Thanks to Andy Whitcroft for the initial patch, rewrote to use + apport.hookutils. + * apport/crashdb.py, init_duplicate_db(): Run an integrity check and + raise exception if it fails, to avoid running the retracers on a + corrupt duplicate db. Add test case to + apport/crashdb_impl/memory.py. + * bin/crash-digger: Create a backup of the duplicates database right + after initializing it (which verifies integrity). + * dupdb-admin: Add new command "consolidate". + * apport/crashdb_impl/launchpad.py: Request bug lists with batch + size 300, for slight speedup of consolidation. + * apport/crashdb.py, duplicate_db_consolidate(): Warn about a bug + which is not yet fixed, but does not appear in get_unfixed(). In + Launchpad, this means that the bug does not have the + 'apport-crash' tag any more; if there are many, those would be a + huge time/bandwidth waste. + + -- Martin Pitt Mon, 26 Jan 2009 16:04:16 +0100 + +apport (0.128) jaunty; urgency=low + + * apport/ui.py: Introduce new configuration option "thirdparty" and + ignore the is_distro_package() check if it is set to true. + * bin/apport-retrace: Call Cache.open() after Cache.update(). + * bin/apport-retrace: If downloading a report fails (e. g. the + description was invalidly modified), mark the bug as invalid with + a proper explanation instead of crashing, unless we are in + "stdout" or "output file" mode. + * apport/crashdb_impl/launchpad.py: Apply some heuristics to attempt + recovering broken descriptions as in LP #315728 (intermediate + blank lines, and non-apport data append). + + -- Martin Pitt Mon, 19 Jan 2009 17:49:55 +0100 + +apport (0.127) jaunty; urgency=low + + * bin/apportcheckresume, debian/apport.init: integrate with pm-utils to + detect suspend/resume failures. Thanks to Steve Conklin and Andy + Whitcroft. LP: #316419. + + -- Steve Langasek Tue, 13 Jan 2009 12:54:12 -0800 + +apport (0.126) jaunty; urgency=low + + * bin/apport-chroot: If --auth is specified in "login" mode, symlink + the file into /tmp/auth in the fakechroot. This makes it much + easier to interactively debug retracing. + * bin/apport-retrace: Exit with zero for bugs which do not have a + core dump, so that it does not completely stop the retracers. + + -- Martin Pitt Fri, 09 Jan 2009 22:49:48 +0100 + +apport (0.125) jaunty; urgency=low + + * bin/apport-chroot: Exit with apport-retraces' exit status, to + propagate errors upwards to crash-digger. + * bin/apport-retrace: Do not put outdated -dbgsym comments into the + bug comments. + * Rewrite bin/crash-digger to become much more robust and easier for + retracer maintainers: + - Now designed around cron-based maintenance: start, process all + pending bugs, exit. This makes memory leaks irrelevant, and gets + rid of all the logging, daemonizing, and looping code. + - Adapt stdout/stderr reporting to be suitable for cron and + redirecting stdout to a log file. + - Use lock files to avoid overlapping instances and avoid damaging + bugs with broken retracers after crash-digger failed. + - Handle chroot upgrading, so that this does not need separate + cronjobs any more. + - Drop old -i option, replace with -D/--dupcheck which is a mode + which *only* checks duplicates of Python crashes (no fakechroot + handling). + - Mark bug as retraced after apport-chroot retrace finished + successfully; the process is robust enough now to avoid enless + loops even if retracing fails. + - Adapt test-crash-digger accordingly. + - UbuntuSpec:apport-retracer-maintenance + + -- Martin Pitt Fri, 09 Jan 2009 12:14:44 +0100 + +apport (0.124) jaunty; urgency=low + + * debian/local/ubuntu-fat-chroot: Divert touch to touch.real and + wrap it into a shell wrapper which ignores failures. Some packages + use "touch -m" which fails with EPERM on directories under + fakechroot. Also disable gconf-schemas and polkit-auth, since they + do not work in fakechroots. + * apport/crashdb_impl/launchpad.py: Allow using staging for testing. + * apport/crashdb.py, mark_retrace_failed(): Add new optional + argument "invalid_msg", intended for crashes which cannot be + retraced properly (e. g. due to outdated packages). Implement this + in apport/crashdb_impl/launchpad.py. + * bin/apport-retrace: If we do not have an usable stack trace, and + encounter outdated package versions in the crash, close the report + as invalid with an appropriate comment. (LP: #308917) + * bin/apport-retrace: Update the apt cache before looking for, and + installing packages. (Part of UbuntuSpec:apport-retracer-maintenance) + * debian/apport.default: Enable by default again for Jaunty. Let the + flood begin! + + -- Martin Pitt Thu, 08 Jan 2009 14:05:07 +0100 + +apport (0.123) jaunty; urgency=low + + * bin/apport: Do not write the report into the log file if opening + the report file failed; just log the error. + * bin/apport: Remove a previously seen report file, so that the + following creation with O_EXCL actually works. + * apport/report.py, add_proc_info(): Only try to attach + /proc/pid/attr/current if we are root. This works around Python + segfaulting regression when encountering EPERM on read() (see + LP #314065). + * apport/report.py testsuite: Use "isofs" for module license check + testing instead of "usbcore", since the latter is more likely to + get built into the kernel. + * apport/report.py, add_proc_environ(): Use "PATH=(...)" instead of + "PATH: ..." notation, to be consistent with other environment + variables. Unbreaks the apport test suite. + + -- Martin Pitt Mon, 05 Jan 2009 18:05:38 +0100 + +apport (0.122) jaunty; urgency=low + + * apport/crashdb_impl/launchpad.py: Support extra tags in the + report's "Tags:" field, and set them in the Launchpad bug. + Document this in doc/data-format.tex. Thanks to Steve Conklin for + the patch! + + -- Martin Pitt Mon, 05 Jan 2009 10:06:49 +0100 + +apport (0.121) jaunty; urgency=low + + * debian/apport.init: Drop long obsolete setting of + /proc/sys/kernel/crashdump-size. + * debian/apport.init: Make restart actually work if the default file was + changed. (LP: #292402) + * apport/report.py, add_proc_environ(): Do not include verbatim $PATH, only + classify it as "default" (does not appear at all then), "custom, + user" (/home or /tmp in $PATH), or "custom, no user". Add appropriate test + case. Update the data format documentation accordingly. (LP: #245263) + + -- Martin Pitt Mon, 08 Dec 2008 19:37:53 -0800 + +apport (0.120) jaunty; urgency=low + + * man/apport-cli.1: Fix "sytem" typo. (LP: #288977) + * apport/fileutils.py: Add new function get_options() to read + ~/.config/apport/settings. In the future, the apport-ignore.xml file will + move to this directory, too. Based on idea and initial patch from Nikolay + Derkach. + * bin/apport: Check config option "unpackaged", and if it is set to True, + create a crash dump for unpackaged programs, too. Bump apport package + dependency to python-apport for this. + * apport/ui.py: Fix regression introduced in in 0.115 for checking + successful package name determination. + * apport/report.py: Some distro portability fixes in the test suite, thanks + to Nikolay Derkach! + * Add OpenSUSE spec file, init script, and RPM packaging backend. Thanks to + Nikolay Derkach! + * apport_python_hook.py, bin/apport: Create files in a race free way to + avoid symlink attacks. Thanks to Sebastian Kramer for + finding them! + * problem_report.py test suite: Create debugging leftover which left /tmp/r + behind. + * apport/crashdb_impl/memory.py: Use example.com, not bug.net, since the + latter actually exists now. + * apport/hookutils.py: Add attach_network(), attach_alsa(), and + attach_hardware(), and add proper docstrings. Thanks to Matt Zimmerman for + the branch! + * source_linux.py hook: Use above tool functions, which greatly simplifies + the hook. + * apport/report.py: Also print exceptions from binary and source package + hooks, not just from common ones. + * apport/report.py, add_hooks_info(): Do not print an error if a source + package hook does not exist. + * apport/hookutils.py, _parse_gconf_schema(): Correctly handle bool values. + + -- Martin Pitt Wed, 26 Nov 2008 19:24:23 +0100 + +apport (0.119) intrepid; urgency=low + + * debian/apport.default: Disable Apport by default for the final release. + + -- Martin Pitt Thu, 23 Oct 2008 09:34:41 +0200 + +apport (0.118) intrepid; urgency=low + + * apport/hookutils.py: add attach_gconf() function to add non-default gconf + settings to a report + + -- Matt Zimmerman Mon, 13 Oct 2008 20:10:33 +0100 + +apport (0.117) intrepid; urgency=low + + * backends/packaging-apt-dpkg.py, is_distro_package(): Fix crash if + apt.Cache()[pkg].origins is None. (LP: #279353) + * bin/apport: Log that we are ignoring SIGABRT, since it is a common cause + of confusion. + * test-apport, create_test_process(): Fix race condition: wait until the + child process has fully execve()ed, to avoid coredumping it while it is + still running as test-apport process. + * apport/crashdb_impl/launchpad.py, update(): Set source package of a bug if + the reporter removed it and the task is against 'Ubuntu'. (LP: #269045) + + -- Martin Pitt Tue, 07 Oct 2008 16:38:06 +0200 + +apport (0.116) intrepid; urgency=low + + * Update AUTHORS and debian/copyright, Michael and Troy released their + copyright to Canonical. Properly attribute them as authors in the + respective files. + * debian/local/ubuntu-bug: Fix quoting of the command line arguments, so + that several options do not end up as one big argument when being passed + to apport-{cli,gtk,qt}. This also repairs launchpad-integration. + (LP: #260242) + + -- Martin Pitt Fri, 26 Sep 2008 10:32:45 +0200 + +apport (0.115) intrepid; urgency=low + + [ Matt Zimmerman ] + * Add apport/hookutils.py with some convenience functions for writing hook + scripts (work in progress) + * Extend ubuntu-bug to accept a path as an argument and look up the package + name + * Rename kernel_hook to kernel_crashdump (there are other kernel hooks) + * Change kernel crash report type to KernelCrash + * Fix automatix.py to not crash when automatix isn't installed (LP: #267004) + * Add bin/kernel_oops hook to capture a kernel oops (eg. via kerneloops) + + [ Martin Pitt ] + * Add AUTHORS file for collecting the list of major contributors and + copyright holders. + * apport/report.py: If we do not find a bug pattern file for the binary + package, fall back to looking for one with the source package name. + * run-tests: Provide a better error message if apport/packaging_impl.py does + not exist. + + [ Brian Murray ] + * apport/crashdb_impl/launchpad.py: Add regression-retracer tag to bugs + which seem to be a regression (duplicate, and crash happens in a later + version than the fix). (LP: #271876) + + -- Martin Pitt Thu, 18 Sep 2008 18:18:03 -0700 + +apport (0.114) intrepid; urgency=low + + [ Fabien Tassin ] + * apport/ui.py: Use preferred browser when it's recognized as a + Mozilla browser (firefox, seamonkey, flock) or Epiphany (LP: #131350) + + [ Oumar Aziz OUATTARA ] + * apport/crashdb.py: Add support for /etc/apport/crashdb.conf.d/*.conf crash + database configuration files. Document it in doc/crashdb-conf.txt. + * apport/ui.py: Support a new field "CrashDB" in apport reports which select + a non-default crash database. Document this in doc/package-hooks.txt. + + [ Martin Pitt ] + * apport/report.py: If a hook crashes with an exception, print it to + stderr, for easier debugging of hooks. + * apport/crashdb_impl/launchpad.py: If PackageArchitecture is 'all', fall + back to looking at Architecture instead of not adding a + needs-$ARCH-retrace tag at all. This prevented signal crashes originating + from e. g. Python packages from being automatically retraced. + + -- Martin Pitt Thu, 04 Sep 2008 10:51:24 +0200 + +apport (0.113) intrepid; urgency=low + + * apport-qt recommends update-notifier-kde instead of adept-notifier + + -- Anthony Mercatante Thu, 28 Aug 2008 15:02:20 +0200 + +apport (0.112) intrepid; urgency=low + + * apport/crashdb_impl/launchpad.py: Update attachment handling to current + python-launchpad-bugs API, thanks Markus Korn! + * apport/ui.py: Use gnome-panel as indicator for a running GNOME session; + 'gnome-session' now calls itself x-session-manager, which isn't useful + to tell apart session types. + + -- Martin Pitt Thu, 07 Aug 2008 17:09:49 +0200 + +apport (0.111) intrepid; urgency=low + + The "(Kernel) OOPS, I dumped it again!" release. + + * apport/ui.py: Fix test_run_report_bug_unpackaged_pid() to work with the + installed run-tests from the package as well. + * apport/crashdb_impl/launchpad.py: Ignore broken LP bug tasks instead of + crashing on them. + * apport/report.py, add_proc_info(): Report the AppArmor or SELinux context + in a new ProcAttrCurrent field, read from /proc/pid/attr/current. + Document it in doc/data-format.tex. The field will not be added if the + proc attribute cannot be read or isn't present. Thanks to Steve Beattie + for the patch and the suggestion! + * debian/local/setup-apport-retracer: Switch to intrepid. + * debian/local/setup-apport-retracer: Fix installation of python-apt. Also + install apt, to avoid library version mismatches to python-apt. + * debian/apport.default: Enable apport by default again, now that we have + working retracers. + * apport/report.py, test_add_gdb_info_script(): Use bash, not dash as test + program for core dumping; stack trace is awkwardly bad with dash, so that + the test case cannot really work any more. + * Add package-hooks/source_linux.py: Package hook for collecting kernel + related information. By Matt Zimmerman, thank you! (LP: #251441) + * debian/local/ubuntu-bug.1: Fix documentation of -p, it specifies the + binary package name, not the source. + * apport/packaging.py: Add get_kernel_package() to return the actual Linux + kernel package name; useful if the user reports a bug against just + "linux". Implement it in backends/packaging-apt-dpkg.py. + * apport/ui.py: "Do what I mean" when filing a bug against "linux" and + report it against the actual kernel package. + * debian/local/ubuntu-bug: If just one argument is given, infer -p/-P from + the type of the argument. + * apport/ui.py: Drop the PackageArchitecture field for the uploaded report + if it is equal to Architecture. Adapt apport/crashdb_impl/launchpad.py to + fall back to Architecture, and mention the change in doc/data-format.tex. + * problem_report.py, write_mime(): Add new "skip_keys" argument to filter + out keys. Add test cases. + * apport/crashdb_impl/launchpad.py: Do not write the "Date:" field on + upload(), and fetch it from the bug metadata in download(). + * apport/crashdb_impl/launchpad.py, download(): Support reading bugs with + the "--- " separator instead of "ProblemType: ". Launchpad doesn't create + bugs that way ATM, but at least we have the reading part implemented now. + * package-hooks/source_linux.py: Drop Uname, ProcVersion, and + RunningKernelVersion fields, since they are all subsumed in the + ProcVersionSignature field. + * apport/ui.py, run_report_bug(): Strip spaces from package argument. + * apport/ui.py, add_hooks_info(): Collect OS info first, then call the + package hooks, so that the linux hook actually has a chance to delete the + Uname field. + * bin/kernel_hook, test-hooks: Throw away the original kernel hook which + we never used (and got superseded by the proper source_linux.py package + hook now). Replace it with the new logic of looking for + /var/crash/vmcore{,.log} and turning that into an apport report. + * debian/apport.init: Call kernel_hook if /var/crash/vmcore exists. + (LP: #241322) + * apport/ui.py: Collect information for "ProblemType: Kernel" as well, so + that we run the package hook. Adapt test suite to cover this. + * debian/control: Bump Standards-Version (no required changes). + * gtk/apport-gtk.glade, qt4/apport-qt: Generalize notification of kernel + crash, since it now happens after a boot, not right after the BUG/OOPS. + But in the future we want to cover both cases. + + -- Martin Pitt Tue, 05 Aug 2008 18:13:24 +0200 + +apport (0.110) intrepid; urgency=low + + * apport/chroot.py: In the test suite, copy some system binaries/libraries + into a fakechroot and exercise a lot of standard shell commands (cp, ln + -s, rm, rm -r, mkdir, echo, chmod, chown, etc.) with absolute/relative + paths. This reproduces the total breakage of rm'ing, chmod'ing, and + chown'ing absolute paths in hardy fakechroots. + * bin/crash-digger: Intercept exceptions when downloading crash reports for + duplicate checking, so that the retracer does not crash on malformed bug + reports. (LP: #205178) + * apport/packaging.py: Introduce a new function enabled() which reports + whether Apport should create crash reports. Signal crashes are controlled + by /proc/sys/kernel/core_pattern, but we need that to control whether + reports for Python, package, or kernel crashes are generated. + * backends/packaging-apt-dpkg.py: Provide implementation for + PackageInfo.enabled() for Debian/Ubuntu by evaluating /etc/default/apport. + Add various test cases for different configuration files and absent files. + * apport_python_hook.py: Do not create reports if Apport is disabled (in + /etc/default/apport). (LP: #222260) + + -- Martin Pitt Sat, 17 May 2008 12:44:21 +0200 + +apport (0.109) intrepid; urgency=low + + [ Martin Pitt ] + * debian/local/setup-apport-retracer: Update for some changes in Hardy. + + [ Loic Minier ] + * apport/report.py, add_proc_info(): also strip pathnames starting with + 'cow', 'squashmnt', and 'persistmnt' to allow apport to locate the + executable pathname, additionally to 'rofs' added in 0.75. This fixes + apport for packages installed on the read-write part of the unionfs mounts + and under UME which uses different names for the mount points. Proper fix + is to rewrite the pathnames in the kernel. (LP: #224168) + + -- Martin Pitt Wed, 23 Apr 2008 14:30:03 +0200 + +apport (0.108) hardy; urgency=low + + [ Martin Pitt ] + * apport-{gtk,qt,cli}: Fix handling of file references added by package + hooks. (LP: #205163) + * backends/packaging_rpm.py: Fix dependency resolution of uname(*) in the + RPM backend. Thanks to Patryk Zawadzki! (LP: #213018) + * backends/packaging_rpm.py: Fix RPM platform parsing, thanks to Patryk + Zawadzki! (LP: #213015) + * po/de.po: Fix typo (missing space). + * debian/apport.default: Disable Apport for the final Hardy release, since + it is less useful in stable releases, and drains a lot of CPU and I/O + power on crashes. Disabling it here instead of in update-notifier/adept is + more discoverable and more centralized. + + [ Daniel Hahler ] + * bin/apport-retrace: catch the same exceptions from Report.load() like + ui.load_report() does (LP: #211899) + * Fix uncaught exceptions in apport itself (LP: #215929): + - apport/REThread.py: check if "sys" exists in the except block of + REThread.run() + - apport_python_hook.py: check if "sys" exists in the finally block of + apport_excepthook + * cli/apport-cli: Fix UnboundLocalError in ui_present_crash, which rendered + apport-cli useless (for reporting crashes) (LP: #216151) + + -- Martin Pitt Wed, 16 Apr 2008 12:24:32 +0200 + +apport (0.107) hardy; urgency=low + + * cli/apport-cli: Add translator comment for difficult string. (LP: #210948) + * Update German translations. + * po/Make{vars,file}: Remove the --language=python option again, since it + breaks extracting strings from the glade. intltool-update currently does + not seem to have a way to tag a file as "language python", so add an ugly + workaround: Create temporary .py symlinks for gtk/apport-gtk & friends, + and have intltool extract them. + * apport/ui.py: Disallow filing a bug without specifying a package or a PID. + Update debian/local/ubuntu-bug.1 accordingly (apport-cli manpage was + already correct). (LP: #210348) + + -- Martin Pitt Sun, 06 Apr 2008 11:44:38 -0600 + +apport (0.106) hardy; urgency=low + + [ Martin Pitt ] + * apport/crashdb_impl/launchpad.py: Fix spelling mistake in p-lp-bugs API + (now corrected there). + * apport_python_hook.py: Catch IndexError for invalid sys.argv[0], too. + (LP: #204940) + * apport/ui.py: Add test_run_report_bug_unpackaged_pid() test case which + reports a bug against a pid which belongs to an unpackaged program. This + reproduces LP #203764. + * apport/report.py: Drop add_hooks_info() assertion on nonexisting Package + field, return silently instead. This conforms to the behaviour of the + other add_*_info() functions and avoids nasty error handling. + * apport/ui.py: Generate proper error message when calling with -f -p PID + and PID belongs to an unpackaged program. (LP: #203764). + + [ Sebastien Bacher ] + * po/Makevars: add the --language=python xgettext option so the translations + template is correctly updated on build since cdbs is using intltool-update + directly and not the corresponding makefile target + + -- Martin Pitt Tue, 01 Apr 2008 16:02:46 +0200 + +apport (0.105) hardy; urgency=low + + * apport/crashdb_impl/launchpad.py: Ignore ValueErrors when subscribing a + team, since these are usually due to the team already being subscribed. + * apport/report.py, anonymize(): Be robust against empty user names and only + anonymize fields which can potentially contain user specific data. + (LP: #195706) + * backends/packaging-apt-dpkg.py, get_architecture(): Return 'unknown' + instead of None if package architecture cannot be determined. + (LP: #198548) + * apport/ui.py, run_crash(): Intercept other IOErrors, too (such as EISDIR) + and print out proper error message instead of crashing. (LP: #201819) + * apport_python_hook.py: If the Python script has mutilated sys.argv so that + even sys.argv[0] does not exist any more, fall back into readlink()ing + /proc/pid/exe and gracefully handle the failure of that, instead of + crashing in the crash handler (ugh). Add test case. (LP: #198183) + + -- Martin Pitt Tue, 18 Mar 2008 23:04:57 +0100 + +apport (0.104) hardy; urgency=low + + [ Martin Pitt ] + * apport/crashdb_impl/launchpad.py, get_source_version(): re-escape the + package name so that it doesn't stumble over '+' and similar characters. + * apport/ui.py tests: assert that ProcEnviron is also included into bug + reports where we do not have a PID, since having the local information is + interesting and important (and acceptable in terms of personal + information). + * apport/report.py: Split out method add_proc_environ() for getting + ProcEnviron, so that we can call it separately. + * apport/ui.py, run_report_bug(): Add ProcEnviron if we do not have a pid to + file a bug against. This way, bugs filed against packages or distro also + get locale information. (LP: #198514) + * apport/fileutils.py, mark_report_seen(): Do not crash if the file does not + exist any more, because it was removed underneath us. (LP: #199932) + * apport/ui.py, test_collect_info_exepath(): Add a tuple argument and a + CompressedValue to the test report. This reproduces LP #199349. + * apport/report.py, anonymize(): Only work on string values. (LP: #199349) + * apport/ui.py: If a report has a field "Ignore", entirely ignore the report + without even presenting an explanatory error dialog (as + "UnsupportableReason" does). Document this in doc/package-hooks.txt. + (LP: #198863) + * debian/control: Bump Standards-Version (no changes necessary). + * debian/control: Fix wrongly spelt project names (Python and GTK+). Thanks + to lintian's scrutiny. + * gtk/apport-gtk-mime.desktop.in, qt4/apport-qt-mime.desktop.in: Add a main + category. + + [ Kees Cook ] + * apport/report.py: fix module license checking logic (LP: #199927). + - nonfree_modules: being unable to find a module should not mean the + module is non-free. + - test_module_license_evaluation: check modinfo reporting. + * problem_report.py: Skip atime test case if file system is mounted noatime. + + -- Martin Pitt Thu, 13 Mar 2008 14:01:30 +0100 + +apport (0.103) hardy; urgency=low + + * bin/apport-unpack: Print error messages instead of crashing for problems + like nonexisting file names passed as arguments. (LP: #185273) + * backends/packaging-apt-dpkg.py, is_distro_package(): Explicitly check site + for "ppa", so that we do not automatically file bugs for PPA packages. + This works around Soyuz bug LP #140412 for the time being. + * apport/report.py: Add standard_title() test cases for Python crashes with + a custom message, and a custom message with newlines. The latter + reproduces LP #190947. + * apport/report.py, standard_title(): Do not rely on a fixed position of the + topmost function; use iteration and regular expression matching instead. + (LP: #190947) + * apport/ui.py, parse_argv(): Specify that --pid/-P argument must be an + integer, to avoid exceptions when it's not. (LP: #193494) + * apport/report.py: Use uname -srm, not -a, to hide the hostname. (part of + LP #192786); also use os.uname() instead of calling the system program. + * problem_report.py(): Make write() work for reports with CompressedValues. + Add test case. + * apport/ui.py: Add test case test_run_crash_anonymity() which asserts that + the crash dump does not contain strings which can identify the user, such + as the user name, login name, host name, and current directory. + * apport/report.py: Add method anonymize() which replaces user specific + strings with generic ones. + * apport/ui.py, thread_collect_info(): Call anonymize() on the report. + (LP: #192786) + * bin/apport-retrace: Only update a bug report with new attachments if it is + not a duplicate. (LP: #172792) + * bin/apport-retrace: Print out proper error message instead of an exception + if trying to do write operations to the bug tracker without specifying + a cookie file. (LP: #146423) + + -- Martin Pitt Mon, 25 Feb 2008 17:47:13 +0100 + +apport (0.102) hardy; urgency=low + + [ Martin Pitt ] + * problem_report.py: Support reading reports with legacy zlib + compression in 'retain compressed values' mode (as used nowadays by + apport when reporting a crash). Add a test case, too. (LP: #129616) + * debian/control, debian/rules: Switch from python-support to + python-central, and use 'nomove' option so that apport works during + upgrades, too. (LP: #121341) + * debian/rules: Use dh_icons instead of dh_iconcache. + * debian/apport.init: Do not stop apport in any runlevel (LSB header). + * apport/ui.py, run_crash(): Catch zlib.error on invalidly compressed core + dumps. (LP: #176977) + * apport/ui.py: Give a meaningful error message instead of crashing if the + package for a crash report is not installed any more. (LP: #149739) + * apport/ui.py: Do not include ProcCmdline in bug reports, since these are + not ack'ed by the user and might contain sensitive data. (LP: #132800) + * apport/ui.py: Add various test cases for crash reports whose packages have + been uninstalled between the crash and the report. This reproduces + LP #186684. + * apport/ui.py, load_report(): Produce proper error message if + executable/interpreter path do not exist any more. (LP: #186684) + * cli/apport-cli: Intercept SIGPIPE when calling sensible-pager, to avoid + crash when quitting it prematurely. (LP: #153872) + * bin/apport-checkreports: Print out a list of program names/packages which + have a pending crash report. (LP: #145117) + * apport/ui.py, run_argv(): Add return code which indicates whether any + report has been processed. + * cli/apport-cli: If no pending crash reports are present, say so and refer + to --help. (LP: #182985) + * apport/ui.py: Waive check for obsolete packages if environment defines + $APPORT_IGNORE_OBSOLETE_PACKAGES. Document this in the apport-cli manpage. + (LP: #148064) + + [ Daniel Hahler ] + * .crash file integration for KDE3 (LP: #177055) + - debian/apport-qt.install: install added files qt4/apport-qt-mime.desktop + and qt4/apport-qt-mimelnk.desktop + * Fixed minor warnings/errors from desktop-file-validate in + gtk/apport-gtk-mime.desktop.in and qt4/apport-qt.desktop.in (LP: #146957) + + -- Martin Pitt Wed, 06 Feb 2008 12:55:53 +0100 + +apport (0.101) hardy; urgency=low + + * debian/control: Add python-xdg dependency to apport, since apport-cli + needs it. (LP: #177095) + * apport/ui.py: Add test case for reporting a report which has been + preprocessed by apport-retrace, i. e. has a stack trace, but no core dump + any more (reproducing LP #185084). + * apport/ui.py, run_crash(): Do not reject reports which have a stack trace, + but no core dump. (LP: #185084) + * apport/report.py: Fix test_add_gdb_info_load() test case, the temporary + executable was already deleted when gdb ran the second time. + + -- Martin Pitt Wed, 23 Jan 2008 17:48:06 +0000 + +apport (0.100) hardy; urgency=low + + * bin/crash-digger: Add option --log for logging to a file, and + --pidfile/--stop for daemonization. Add test cases to test-crash-digger. + * bin/apport: Do not re-raise exceptions about failure to create the lock + file, to avoid crashing in the case that another apport instance tries to + lock at exactly the same moment. (LP: #147237) + * apport/report.py testsuite: Check that our methods get along with binary + data which turn into CompressedValue objects after loading them from a + file. This reproduces LP #148305. + * problem_report.py, CompressedValue: Add method splitlines() since we need + it very often. Add test case to test_compressed_values(). (LP: #148305) + * problem_report.py: Add test case to check that update() works and does the + right thing with binary values and overwriting. This confirms that + importing a dictionary works. + * debian/local/setup-apport-retracer: Update for hardy. + * apport/crashdb_impl/launchpad.py: get_source_info() does not work any more + due to HTML changes in Launchpad, and not showing the component any more + on /distro/+source/package. Since we do not actually need component and + release name any more, rename it to get_source_version(), fix the regular + expression to just get the version, and adapt get_fixed_version() + accordingly. + * debian/local/setup-apport-retracer: Update default apt sources to + http://ddebs.ubuntu.com. + * apport/ui.py: Robostify cleanup of forked test processes. + * apport/ui.py: Sleep for 0.5 seconds after creating the test process in the + test suite to give /proc some time to settle down. + * bin/apport: Drop evaluation of CORE_* environment variables and mandate + calling with . Drop the now obsolete + apport/elfcore.py. Adapt test-apport accordingly. + * debian/apport.init, use-local: Now call apport with %p, %s, and %c kernel + macros (since 2.6.24). Drop Edgy support from init script. + + -- Martin Pitt Fri, 21 Dec 2007 02:18:48 +0100 + +apport (0.99) hardy; urgency=low + + * cli/apport-cli, qt4/apport-qt: Fix typo 'send' -> 'sent'. + (LP: #139288) + * apport_python_hook.py: Add user info, too. Also add check for this to the + test suite. (LP: #145109) + * apport/ui.py, run_crash(): Show a proper UI error message instead of just + crashing with an exception if the crash report is inaccessible for the + invoking user. (LP: #146464) + * apport/crashdb_impl/memory.py: Implement mark_retraced(), + get_unretraced(), and get_dup_unchecked() for completeness, and define + _MemoryCrashDBTest also when not running file as __main__. This makes the + class useful for higher-level test suites. Add test cases for the new + functions. + * apport/crashdb_impl/memory.py: Support 'dummy_data' option which adds a + few dummy crashes by default. This is useful for external test suites + which cannot otherwise pre-fill the in-memory db. Add checks that this + works properly. + * bin/crash-digger: Use self.log() more consistently, and flush stdout in + log(), so that we do not lose logs on output redirection. + * Add test-crash-digger: Initial test suite for bin/crash-digger. + * apport/ui.py, run_crash(): Intercept CRC errors from the info collection + thread, which happens on broken core dumps. (LP: #132212) + * cli/apport-cli, ui_present_package_error(): Fix running of dialog, so that + reporting package problems with apport-cli actually works. (LP: #136369) + * apport/ui.py, run_crash(): Intercept ENOSPC and present a proper error + message. (LP: #145100) + * gtk/apport-gtk.glade: Fix title of upload progress window to comply to + HIG. Thanks, Bruce Cowan. (LP: #144782) + * qt4/apport-qt: Fix Unicode <-> UTF-8 conversion. Thanks, Daniel Hahler! + (LP: #148177) + * apport/ui.py: Only import xdg.DesktopEntry when a .desktop file has been + found in the affected package. This avoids the dependency on servers with + just apport-cli. Thanks, Matthias Gug! (LP: #130013) + * apport/fileutils.py: Do not fail if there are no packages installed which + have one or several .desktop files. Thanks, Matthias Gug! + + -- Martin Pitt Sun, 28 Oct 2007 18:32:07 -0400 + +apport (0.98) gutsy; urgency=low + + [ Martin Pitt ] + * debian/local/setup-apport-retracer: launchpadBugs -> launchpadbugs + (recently renamed Python package in python-launchpad-bugs). + * apport/crashdb_impl/launchpad.py, test examples: Do not duplicate to bug + #1, that generates a huge amount of spam. Use another test bug. + * apport/crashdb_impl/launchpad.py, download(): Use Bug.description_raw, + since LP mangles spaces in .description. Bump p-lp-bugs dependency. + * apport/crashdb_impl/launchpad.py, close_duplicate(): Explicitly set the + duplicate after removing attachments, since the new LP does not allow any + modification of duplicate bugs. + * bin/crash-digger: Only consolidate the duplicate DB when -i is given (i. + e. usually only on one running instance). + + [ Colin Watson ] + * Use bugs.launchpad.net for +filebug and +bugs requests. (LP: #138090) + + -- Martin Pitt Mon, 01 Oct 2007 14:35:07 +0200 + +apport (0.97) gutsy; urgency=low + + [Martin Pitt] + * problem_report.py: Coerce CompressedValue.__len__() to return an int to + work on Python 2.4, too. + * debian/local/setup-apport-retracer: Adapt ddeb apt source for the move + from ~pitti to ~ubuntu-archive. + + [Markus Korn] + * port to new python-launchpad-bugs API. + + [Daniel Holbach] + * small fixes to the port. + * debian/control: bumped python-launchpad-bugs Depends to >= 0.2.2. + + -- Daniel Holbach Tue, 04 Sep 2007 11:24:28 +0200 + +apport (0.96) gutsy; urgency=low + + * Create man pages for apport-cli, apport-chroot, and dupdb-admin. + * apport/fileutils.py, find_file_package(): Try to resolve symlinks in the + directory path. (LP: #125551) + * apport/crashdb_impl/launchpad.py, debian/local/setup-apport-retracer: Use + packaging.get_system_architecture() (which is dpkg --print-architecture on + Debian/Ubuntu) instead of uname, so that this does the right thing on lpia. + * problem_report.py, write_mime(): Use base64 encoding for gzipped + attachments, to not screw up mail servers. Thanks to Tim Yamin for this + patch! + * apport/crashdb.py: Drop the last argument (-1), since it is the default + anyway and did not yet exist on Python 2.4. + + -- Martin Pitt Tue, 21 Aug 2007 14:11:48 +0200 + +apport (0.95) gutsy; urgency=low + + * general-hooks/automatix.py: Remove hashbang, it's not an executable + script. + * apport/report.py: Support system-wide blacklisting: + /etc/apport/blacklist.d/. Add test cases. + * Add doc/README.blacklist: Document blacklist.d/, install it there in + setup.py. + * debian/rules: Blacklist wine-preloader, so that we ignore wine crashes + until an appropriate way is found to deal with them. (Point 6 of + apport-better-retracing spec.) + + -- Martin Pitt Sat, 11 Aug 2007 18:10:54 +0200 + +apport (0.94) gutsy; urgency=low + + * doc/data-format.tex: Some updates to incorporate feedback from Gnome + upstream: + - Do not talk about "Distributions" any more, but "Operating systems". + Gnome is used on non-Linux OSs, too. + - Split "DistroRelease:" field into "OS:" and "OSRelease:". + - Explicitly mention that CoreDump, StackTrace etc. can also contain + minidump output. + - Increase document version to 0.2. + * apport/report.py, obsolete_packages(): Fix crash when apt does not know an + available version of a package. (LP: #128176) + * test-apport: Add check that apport aborts immediately if another apport + instance is already running. Also test that a symlink attack on the lock + file is not possible. + * bin/apport: Abort running several apport instances at the same time, by + lockf()'ing /var/crashes/.lock and aborting on failure. (LP: #119622) + * Add bin/gcc_ice_hook: Script to create an apport report for a gcc ICE + (internal compiler exception). Add test cases to test-hooks, and ship it + in the 'apport' package. (LP: #125551) + * run-tests: In 'local' mode, only explicitly run the apt/dpkg + implementation instead of backends/*, since the RPM ones don't have tests + yet. + * apport/crashdb.py: Add a second optional parameter to upload() to specify + an upload progress callback function. Adapt the declarations in the + Launchpad and Memory implementations, too. + * apport/crashdb_impl/launchpad.py, upload(): Pass upload progress callback + handler to launchpadBugs.storeblob.upload(), which supports this since + version 0.2~39. Bump dependency to it accordingly. + * apport/ui.py, file_report(): Define an upload progress callback handler, + pass it to the crashdb upload(), and feed ui_set_upload_progress() with + some actual data. (LP: #91521) + * problem_report.py: Remove support for reading bz2 compressed binary data. + That was only relevant during edgy's development cycle. + * apport/report.py, test_add_proc_info(): Fix determination of /bin/zgrep + interpreter. + * problem_report.py: Switch encoding of binary values from bare zlib to + proper gzip format, since this is much more useful when reusing the + compressed value. Retain support for zlib-only reports. Add test cases for + both old and new encodings, and adapt the other test cases for the new + format. Update doc/data-format.tex accordingly. + * problem_report.py, write(): Add new permitted 'binary' argument value + 'compressed', which retains gzip compressed binary values instead of + unpacking them transparently. Add test cases. + * problem_report, write_mime(): Eliminate unnecessary usage of StringIO. + * problem_report, write_mime(): Make function work for compressed binary + values. Add test case. + * apport/report.py, add_gdb_info(): Make function work if CoreDump is a + compressed value. + * apport/ui.py: Load crash report with keeping compressed binaries. This + avoids loading the entire uncompressed core dump into memory, and avoids + recompressing it all over again for generating the crash database upload + MIME document. This greatly speeds up crash reporting, too. (LP: #98562) + + -- Martin Pitt Tue, 31 Jul 2007 21:32:00 +0200 + +apport (0.93) gutsy; urgency=low + + * apport/crashdb.py: Set sqlite connect timeout to two hours, instead of the + default 5 seconds. Previously, one retracer always crashed when the other + was consolidating the database. + * bin/dupdb-admin, command_dump(): Correctly interpret empty version strings + as 'fixed in unknown verrsion', not 'unfixed'. + * apport/crashdb_impl/launchpad.py: Fix typo in bug comment string. + * apport/crashdb_impl/launchpad.py: Add function get_source_info() which + parses out release, version, and component from + https://launchpad.net/$DISTRO/+source/$PACKAGE. + * apport/crashdb_impl/launchpad.py, get_fixed_version(): If a bug is fixed, + return the current version (as approximation of the version where the bug + was fixed), instead of an empty string (which meant 'fixed in unknown + version'). [apport-crash-duplicates spec] + + -- Martin Pitt Wed, 25 Jul 2007 17:04:27 +0200 + +apport (0.92) gutsy; urgency=low + + * bin/crash-digger: Do not crash if duplicate db is locked when attempting + to consolidate it. This happens often because in the DC we have two + parallel instances (for amd64 and i386). + * Move ubuntu-fat-chroot from bin/ to debian/local/, since it is so heavily + Ubuntu specific. + * debian/local/ubuntu-fat-chroot: Use diversions for the binaries we want to + disable, so that chroot upgrades do not trash the modifications. + * debian/local/setup-apport-retracer: launchpad-crash-digger -> + crash-digger. + * bin/crash-digger: Add option -i/--arch-indep-dupcheck to explicitly enable + duplicate checking of arch-independent crashes like Python exceptions. We + only want to process them on one architecture to avoid scattering the + duplicate database. + * apport/crashdb_impl/launchpad.py, get_unfixed(): Search for 'apport-crash' + tag, not 'apport'. + * bin/apport-unpack: Fix format string in error message. + * apport/ui.py, __init__(): Intercept ImportError, which can happen for + crashes during system upgrades. (LP: #124354) + * Add general-hooks/automatix.py: Refuse to send problem reports if + automatix is installed. + * doc/package-hooks.txt: Do not document UnsupportableReason, since it does + not make sense to set it in package hooks (it is checked before calling + the hooks). Hooks should use UnreportableReason only. + * apport/ui.py, test_run_crash_package(): Check that 'Package' problem + reports collect additional information, too. + * apport/ui.py, collect_info(): Collect additional information for 'Package' + problem reports, too. + * Revive preloadlib/: + - Remove PIPE_CORE #ifdefs and make them the default. We do not need to + support the Edgy kernel patches in this version any more. + - Install signal handler for SIGABRT, too. + - Read core ulimit, pass it to apport in CORE_REAL_RLIM, and set it to + zero for the program, since we do not actually want the kernel to write + core files when we pipe the core dump to apport. + - test-apport: Pass APPORT_REPORT_DIR to the manually called apport + instance in the memory clipping test; otherwise it'll write into + /var/crash/, which we do not consider in library mode. + * apport/crashdb_impl/launchpad.py, __init__(): Only do the "download bug + #2" hack if we actually have an authentication cookie. Thus, do it only on + the retracing servers, not on the client side. (LP: #125142) + * apport/report.py, crash_signature(): Generate a signature for one-line + Python tracebacks, too. This sometimes seems to happen, e. g. LP#124588. + (LP: #125020) + * apport/crashdb_impl/launchpad.py, update(): Set bug importance to Medium + if retracing was successful. (LP: #106379) + + -- Martin Pitt Tue, 24 Jul 2007 21:50:34 +0200 + +apport (0.91) gutsy; urgency=low + + * bin/apport: Remove code that supported the Edgy kernel way of core dump + passing. Also factorize the CORE_REAL_RLIM evaluation, since it is likely + to change in the near future. + * apport/crashdb_impl/launchpad.py, close_duplicate(): Delete some + attachments, as specified in apport-crash-duplicates spec, and make the + bug public afterwards. + * apport/crashdb_impl/launchpad.py, close_duplicate(): If the master bug is + already duped to yet another bug, mark the bug to that one instead of the + master. + * apport/crashdb.py: Split out duplicate_db_last_consolidation() for getting + the date (or seconds since) the last consolidation, so that we can use it + externally. + * apport/crashdb.py: Add duplicate_db_change_master_id() to change the + master ID of a crash. Add test case to apport/crashdb_impl/memory.py. + * Add bin/dupdb-admin: Initial version of duplicate db CLI app; can dump the + db, display consolidation state, and change master bug IDs for now. Ship + it in apport-retrace. + * apport/crashdb.py, duplicate_db_last_consolidation(): Fix timedelta + seconds calculation to actually take the days into account, too. + * bin/crash-digger: Fix dumping of dup db after consolidation. + * apport/ui.py: + - test_run_report_bug_package(): Add test case for calling the UI in bug + filing mode with an invalid package name. + - run_report_bug(): Do not crash on invalid package name, generate an + error message instead. (LP: #123644) + * apport/fileutils.py, mark_report_seen(): Do not crash if the file has + already been deleted underneath us. (LP: #122347) + * apport/ui.py, run_report_bug(): Do not crash if the target process runs as + a different user. Print a proper error message instead. Add test case + test_run_report_bug_noperm_pid(). (LP: #121121) + * apport/fileutils.py, likely_packaged(): Ignore /var/lib/schroot. Add test + case. (LP: #122859) + * apport/ui.py, open_url(): Intercept weird race condition for os.close() + trying to close an already invalidated fd. (LP: #123180) + + Merge the fedora branch, thanks to Will Woods : + + * Add apport.init.fedora: Fedora specific init script. + * Add apport.spec: RPM build recipe. + * Add backends/packaging_rpm.py: Partial implementation of the packaging + backend for RPM which applies to all RPM-based distros. + * Add backends/packaging_fedora.py: Concrete packaging backend + implementation for Fedora. + * apport/elfcore.py: Classes for parsing general ELF files, and information + from core dumps. + * bin/apport: Fall back to reading signal number and PID directly from the + core file (via elfcore.py) if CORE_SIGNAL and CORE_PID are not defined (i. + e. when running on a non-Ubuntu kernel). + * crashdb.conf: Add stanzas for Fedora and a 'debug' database which uses the + 'memory' crashdb implementation. + + -- Martin Pitt Sat, 14 Jul 2007 15:08:35 +0200 + +apport (0.90) gutsy; urgency=low + + * apport/ui.py, load_report(): Catch IOError, too. LP: #118827 + * Merge apport-cli package into apport itself. The program itself is just 3 + kB compressed, and it's not worth wasting another 34 kB compressed + changelog for this tiny bit. + * apport/report.py, obsolete_packages(): Use the version comparison from the + packaging system instead of just testing for inequality. This catches zero + epochs. Thanks to Will Woods ! + * apport/ui.py: Add option -c/--crash-file to run the UI with a particular + crash file (which can be anywhere) instead of all pending crashes in + /var/crash/. + * Add xdg-mime/apport.xml: XDG MIME type definition for .crash files. + * Add gtk/apport-gtk-mime.desktop.in: Link text/x-apport MIME type to + apport-gtk -c, so that .crash files can be reported with Gnome. + * Add debian/apport.links: Install an icon symlink for the MIME type. + * apport/ui.py: Do not ask the initial "Do you want to report this?" + question when being invoked with --crash-file. + * po/POTFILES.in: Add missing cli/apport-cli. + * po/de.po: Updated for apport-cli. + * cli/apport-cli: Add option for keeping the report file without sending it, + and to display its path. This is for sending the report later, copying + it from a server to a workstation with internet connection, etc. + * apport/crashdb_impl/launchpad.py: Simplify _subscribe_triaging_team(), now + that we do not differ between main and universe policies any more. + * apport/report.py: Support another hook directory + /usr/share/apport/general-hooks/ for scripts which are run for every + problem report. This was requested for adding e. g. AppArmor logs, etc. + Add test cases. + * Add debian/apport.dirs again to ship that hook directory. + * doc/package-hooks.txt: Document the general hooks. + + -- Martin Pitt Tue, 10 Jul 2007 21:10:19 +0100 + +apport (0.89) gutsy; urgency=low + + Implement private crash bug handling, according to + https://wiki.ubuntu.com/CrashReporting: + + * apport/crashdb_impl/launchpad.py: + - upload(): If we have an Ubuntu bug, mark it as private and only + subscribe 'apport' (the 'Apport retracing service' user). + - Add function _subscribe_triaging_team() which subscribes + ubuntu-crashes-main for source packages in Ubuntu main or restricted, or + ubuntu-crashes-universe for other packages. It does not touch non-Ubuntu + bugs, since these are not marked private by default and are outside of + the scope of this spec. + - update(), _mark_dup_checked(): Call _subscribe_triaging_team(). + - Note: This entire spec is a gross hack, and Ubuntu derivatives do not + benefit from it at all. We have to live with this until LP grows a real + crash database. + - get_distro_release(): Make this function work with private bugs, too, by + using p-lp-bugs' safe_urlopen(). + + Bug fixes: + + * apport/crashdb_impl/launchpad.py: Revert simplification change of 0.85: + BugList returns a set of strings, not integers; due to non-identity they + do not work with the usual set operations. + * apport/crashdb_impl/launchpad.py: Add function get_source_component() to + query Launchpad for the component of a given distribution and source + package. (This will be required for implementing crash-reporting). + * backends/packaging-apt-dpkg.py, _search_contents(): Package list is + actually comma separated, only take the first item. This fixes retracing + of e. g. #124139. + * backends/packaging-apt-dpkg.py, _search_contents(): Fix package name + parsing for non-main components. This fixes retracing of e. g. #124111. + * apport/report.py, _read_maps(): Revert ptrace hack when maps cannot be + read. maps file is now protected based on process ownership, not ptracing. + * apport/crashdb.py, apport/crashdb_impl/launchpad.py, + apport/crashdb_impl/memory.py: Remove official interface + mark_dup_checked(), as it should only be an internally used function. Add + report parameter, since we will need it there in the future. Remove + explicit call from bin/crash-digger and instead change check_duplicate() + to call it on its own. + * apport/crashdb_impl/launchpad.py, download(): Replace dodgy parsing of + fields from the description with proper code, so that multi-line fields + are read correctly, too. + + -- Martin Pitt Fri, 06 Jul 2007 11:19:22 +0200 + +apport (0.88) gutsy; urgency=low + + * po/de.po: Update. + * backends/packaging-apt-dpkg.py, _search_contents(): Do not check the + return value of zgrep. It usually errors out with 'stdout: broken pipe' + when called with -m1. + * bin/crash-digger: Mark a bug as retraced if DistroRelease: cannot be + determined. Those are bugs apport cannot handle. + * backends/packaging-apt-dpkg.py, get_source_tree(): Call apt-get source + with --assume-yes to not block on VCS confirmations. + * apport/crashdb.py: Add interface mark_retrace_failed(). Implement it in + apport/crashdb_impl/launchpad.py. + * bin/apport-retrace: If retraced report does not have a crash signature, + mark it as failed with above new function. Bump python-apport dependency + for this. + * apport/crashdb_impl/launchpad.py, update(): Delete CoreDump.gz attachment + if the retrace was successful (i. e. if the report has a crash signature). + * apport/ui.py, test_run_crash(): Set the message box title, text, and + severity as assertion message if the run_crash() test fails, so that you + know why it fails. This usually happens if libc6 or another dependency of + the test crash is out of date. + * gtk/apport-gtk.glade: Mark string as translatable. LP: #119621 + + -- Martin Pitt Tue, 03 Jul 2007 21:38:05 +0200 + +apport (0.87) gutsy; urgency=low + + * apport/report.py: + - test_gen_stacktrace_top(): Add test case for unwinding a Gnome assertion + (g_logv(), g_assert_warning() and similar), see LP #123462. + - _gen_stacktrace_top(): Generalize for unwinding multiple functions and a + set of function names, and add the Gnome assertion ones. + + -- Martin Pitt Mon, 02 Jul 2007 11:00:44 +0200 + +apport (0.86) gutsy; urgency=low + + * test-apport: Check that apport does not create reports for emtpy core + dumps. + * problem_report.py: Introduce a fourth optional parameter "fail_on_empty" + to file pointer tuples which causes write() to raise an IOError if no data + was read. Add test cases. + * bin/apport: Enforce non-emptyness of CoreDump. + * problem_report.py: Add test case for delayed piping of data passed as file + object pointers. This was supposed to explain the reason for getting bugs + with zero-byte core dumps, but already works correctly. + * apport/report.py, check_ignored(): round the mtime to an int (just like + mark_ignore() does), to not get wrong results on file systems that support + subsecond file timestamps. This fixes running the test suite on the live + CD. + * test-apport: Clarify assertion message if /var/crash is not empty. + + -- Martin Pitt Thu, 28 Jun 2007 19:14:36 +0200 + +apport (0.85) gutsy; urgency=low + + * apport/crashdb_impl/launchpad.py: BugList.bugs is already a set, simplify + code a bit. + * debian/control: Add dpkg-dev dependency to apport-retrace, for getting + dpkg-source. + * apport/report.py, crash_signature(): Allow ':' and '~' as part of function + names to cover C++. Adapt test case to cover this. + * apport/report.py test suite: Do not assume that /bin/zgrep uses /bin/sh, + it was recently changed to use bash. Directly read the interpreter from + the shebang line. + * bin/apport-chroot, command_upgrade(): Supply -y to 'apt-get upgrade' also + in verbose mode. + * bin/apport-chroot, command_upgrade(): Run 'apt-get clean' before + regenerating the chroot tarball. + * backends/packaging-apt-dpkg.py, get_dependencies(): Fix crash when + encountering a virtual package. LP: #122274 + * apport/report.py, obsolete_packages(): Do not consider virtual packages as + obsolete. + * apport/crashdb_impl/launchpad.py: Do a bogus call to Bug() in the ctor. + This initializes python-launchpad-bugs to use a cookie for the urlopen in + BugList, so that get_unretraced() and get_dup_unchecked() return private + bugs, too. This works around LP #122126. + + -- Martin Pitt Mon, 25 Jun 2007 16:38:43 +0200 + +apport (0.84) gutsy; urgency=low + + * apport/crashdb.py: Add new abstract methods: + - get_unretraced() and mark_retraced(id) to get a list of crashes that + need to be retraced and chalk them off. + - get_dup_unchecked() and mark_dup_checked() to get a list of crashes that + need to be checked for being a duplicate and chalk them off. This is + aimed at crashes which do not need retracing, such as unhandled Python + exceptions. + * apport/crashdb_impl/launchpad.py: Implement above methods for launchpad + (moving the code from bin/launchpad-crash-digger). + * apport/crashdb_impl/launchpad.py: Set "need-duplicate-check" tag for + Python crashes. + * apport/crashdb_impl/launchpad.py, download(): Fetch Traceback.txt, too, so + that we can do duplicate checking for Python crashes. + * bin/launchpad-crash-digger: Drop Launchpad specific code and replace it + with calls to above new functions. Rename to bin/crash-digger. Also rename + all 'cookie' to 'auth' (as happened with the other applications earlier). + * bin/crash-digger: Do duplicate checking for needs-duplicate-check crash + bugs (such as Python crashes). + * bin/apport-retrace, bin/crash-digger: More language cleanup; we should + stop talking about 'bugs' and use 'crash' consistently. + + -- Martin Pitt Thu, 14 Jun 2007 19:50:24 +0200 + +apport (0.83) gutsy; urgency=low + + * apport/crashdb.py: Separate abstract from implemented functions. + * apport/crashdb.py, apport/packaging.py, apport/ui.py: Use + NotImplementedError instead of Exception in the abstract methods. + * apport/packaging.py: Add interface compare_versions() for comparing + package version numbers. + * backends/packaging-apt-dpkg.py: Implement compare_versions() using + apt.VersionCompare(), add some test cases. + * apport/report.py: Fix typo: 'none' -> 'None'. + * apport/chroot.py: Do not include /usr/local/lib and /usr/lib in + LD_LIBRARY_PATH, just /lib, so that we still use the libc from outside, + but e. g. libxml2 from inside the chroot. + + https://blueprints.launchpad.net/ubuntu/+spec/apport-crash-duplicates: Merge + crash-dups branch, which implements automatic crash duplicate detection: + + * apport/crashdb.py: Add methods for crash duplicate detection. + * apport/crashdb_impl/memory.py: Change internal data management to track + fixed version and duplicates. + * apport/crashdb_impl/memory.py: Add a test suite for all methods, including + the duplicate detection API of the base CrashDatabase (since it is + much easier to test it here, on an actual implementation). + * debian/pyversions: Bump minimal Python version to 2.5, since this starts + providing the sqlite3 module. + * apport/crashdb_impl/launchpad.py: Implement new methods required for crash + duplicate detection. get_fixed_version() does not approximate version + tracking yet; it just returns '' for fixed bugs (which means 'fixed, but + unknown version'). Bump python-launchpad-bugs dependency for this to + ensure the availability of Bug.mark_duplicate(). + * bin/apport-retrace: Add option --duplicate-db which specifies the path to + the duplicate sqlite database and enables duplicate detection. + * Abin/apport-chroot: Add option --duplicate-db. If a file is given, symlink + it into the chroot and pass --duplicate-db to apport-retrace. + * bin/launchpad-crash-digger: Add --duplicate-db and pass it to + apport-chroot. + * apport/crashdb.py: Track last run of duplicate_db_consolidate() in an + extra table and add a method duplicate_db_needs_consolidation() which + returns True if the last run was more than a given number of seconds ago. + Add test cases to apport/crashdb_impl/memory.py. + * bin/launchpad-crash-digger, fill_pool(): Check whether the duplicate + database needs consolidation (i. e. updating the bug states to the reality + in the bug tracker) and if so, trigger it. + + -- Martin Pitt Wed, 13 Jun 2007 13:09:57 +0200 + +apport (0.82) gutsy; urgency=low + + * Add bin/ubuntu-fat-chroot: Script to install a set of commonly needed + packages into a minimal Ubuntu chroot (as created by apport-chroot). This + requires some hacking of postinst and /usr/sbin/ files in between the + installation stages and thus deserves a script on its own. + * apport/packaging.py: + - Add "uninstalled" option to get_file_package(). If set to True, this + will do an expensive search of files/packages which are not installed. + - Add interface "set_mirror(URL)" for functions which need to retrieve + packages and data from distribution mirrors. + * backends/packaging-apt-dpkg.py: Implement "uninstalled" option and + "set_mirror(URL)", add test cases. + * bin/apport-retrace: Use "uninstalled" option now to install packages and + corresponding -dbgsyms for uninstalled files mentioned in ProcMaps + (Point 1 of apport-better-retracing spec). Bump python-apport dependency. + * apport/packaging.py: Add interface get_available_version(package). + * backends/packaging-apt-dpkg.py: Implement get_available_version(), add + shallow test case. + * apport/report.py: Add function obsolete_packages() to return packages in + Package: and Depends: which are not up to date. Add test cases. + * apport/ui.py, thread_collect_info(): For crashes, call obsolete_packages() + and set UnreportableReason: if there are any (Point 2 of + apport-better-retracing spec). + * apport/ui.py, thread_collect_info(): call standard_title() and add it to + the report as 'Title' field. This is useful if reporters modify the + default title (per request of Brian Murray, thanks). Add test case. + * apport/ui.py: Fix declaration of the test suite's + ui_set_upload_progress(). Funny that this has never been triggered before. + * apport/report.py, add_gdb_info(): Split out StacktraceTop generation into + separate funtion _gen_stacktrace_top(), so that we can test it separately. + * apport/report.py, _gen_stacktrace_top(): Step back from the crashed + program's own signal handlers, since those are generally not useful for + the purposes of StacktraceTop and only impede duplicate matching + (Point 4 of apport-better-retracing spec). Add various test cases. + * apport/report.py: Add method crash_signature() to calculate an unique + identifier of a signal or Python crash, to be used for duplicate + detection. Add various test cases. + * apport/packaging.py: Add interface get_source_tree() to fetch and unpack a + source package to a given directory, optionally specifying a particular + version. + * backends/packaging-apt-dpkg.py: Implement get_source_tree(). This has a + rather crude 'call apt-get source and guess about directories' + implementation until python-apt learns about doing this directly and more + elegantly (see LP #118788). + * bin/apport-retrace: Add gen_source_stacktrace() and a few helper functions + to construct a field 'StacktraceSource' with the source code around the + affected lines in the stack trace (as available). (Point 5 of + apport-better-retracing spec). + * apport/crashdb_impl/launchpad.py, update(): Attach StacktraceSource to the + bug if it exists. + * apport/crashdb_impl/launchpad.py: Check PackageArchitecture for 'all', to + not set a retracer tag 'need-all-retrace'. + * test-apport: Clarify assertion failure message when an unexpected core + dump is present. + * apport/report.py, get_module_license(): Do not iterate over Popen.stdout, + use communicate() instead. The latter is already fixed to not trip over + SIGINTR. (LP: #118965) + + -- Martin Pitt Fri, 08 Jun 2007 07:47:04 +0200 + +apport (0.81) gutsy; urgency=low + + * apport/report.py: Remove '[apport]' default bug title prefix. (LP: #94819) + * apport/crashdb_impl/launchpad.py: Tag new bugs with + 'apport-'. This replaces the former '[apport]' prefixing. + * debian/local/setup-apport-retracer: Specify a path in '.' command and + use sh again. Yay for me needing three attempts before actually RTFMing + how '.' works (which is really nasty and strange IMHO). + * bin/apport-chroot: Fix symlinks before repackaging the chroot tarball in + 'install' and 'installdeb' modes. + * debian/local/setup-apport-retracer: Install python-libxml2 and python-apt. + * bin/launchpad-crash-digger: Supply --auth instead of the deprecated + --cookie to apport-chroot. + * bin/apport-chroot: Fix identifier name in command_retrace(). + * debian/local/setup-apport-retracer: Set APPORT_CRASHDB_CONF to the local + crashdb.conf. + * bin/apport-chroot: Unset APPORT_CRASHDB_CONF for login and retrace. + * bin/launchpad-crash-digger: Check the release of a bug and whether we have + a chroot for it before untagging it. This avoids loosing tags for bugs we + do not yet have a working retracer chroot for. + * bin/apport-retrace: Do not abort with an exception if package installation + fails. Give a proper error message instead and point to -u. (LP: #115681) + * apport/crashdb_impl/launchpad.py, update(): Create a temporary directory + and use proper file names for the new attachments. With TemporaryFile(), + attachment file names ended up as ''. (LP: #115347) + * apport/report.py, add_os_info(): Add field 'NonfreeKernelModules' which + lists loaded kernel modules which do not have a FOSS license. This is + particularly helpful for quickly checking for restricted graphics drivers. + (LP: #103239) + * apport_python_hook.py: Move the apport.* imports into the try: block and + move the likely_packaged() test to the top, to avoid importing + apport.report and creating a Report object for non-packaged scripts. This + makes the entire code more efficient and robust against errors in the + apport modules. (LP: #109955) + * apport/report.py, add_gdb_info(): Intercept OSError from gdb invocation + (which might be segfaulting itself) and just do not put any gdb output + into the report. The automatic retracers can try their luck again. + (LP: #112501) + * bin/apport-retrace: Fix handling of packages which are still known to + /var/lib/dpkg/status, but do not have an apt record any more; treat them + like virtual packages and just issue a warning instead of falling over. + (LP: #107474) + * Add doc/data-format.tex: Documentation of the structure, encoding, and + standard keys of the Apport report file format. [apport-for-upstreams + blueprint] + * Add doc/Makefile: Build and clean rules for generating data-format.pdf. + * debian/rules, setup.py: Call doc/Makefile and install the PDF + documentation. Add texlive-latex-recommended build dependency for that. + + -- Martin Pitt Thu, 24 May 2007 19:39:12 +0200 + +apport (0.80) gutsy; urgency=low + + Collect all Launchpad specific bits in a separate class and provide an + abstract base class. This will greatly help for getting upstream acceptance + and the possibility of automatically forwarding crashes upstream + (apport-for-upstreams specification): + + * Add apport/crashdb.py: Abstract crash database interface. This also offers + a factory function get_crashdb() which reads a configuration file to find + the default crash database to be used. + * Add ./crashdb.conf: Crash database configuration file, for Ubuntu on + Launchpad. Modify setup.py and debian/python-apport.install to ship it in + python-apport. + * Add apport/crashdb_impl/memory.py: Simple in-memory implementation of + crash database interface for testing. + * Add apport/crashdb_impl/launchpad.py: Launchpad implementation of crash + database interface. + * apport/ui.py: Drop LP specific bits and move towards new CrashDatabase + interface. + * apport/ui.py, test suite: Do not overwrite file_report() any more, but + use the memory CrashDatabase. This will test the actual file_report() + implementation and allows the test suite to check the precise value of + opened URLs. + * apport/{report,ui}.py: Move UserInterface.create_crash_bug_title() and its + test cases to Report.standard_title(). It is much more appropriate there + and can be used in the retracer as well. + * bin/apport-retrace: Drop LP specific bits and move to CrashDatabase + interface. Remove the --remove-tag option, we really should not have it + here; remove it from man/apport-retrace.1 as well. + * bin/apport-chroot: Drop --remove-tag option here, too. + * bin/apport-chroot: Drop LP specific bits and move to CrashDatabase + interface. + * bin/launchpad-crash-digger: Remove retracing tag directly instead of + passing --remove-tag to apport-chroot. This is a much cleaner design and + avoids infinitely looping on some weirdly failing retraces. + * debian/control: Bump some python-apport dependencies for the API changes. + + Some debranding: + + * setup.py: Use apport wiki home page for 'url'. + * Remove 'X-Ubuntu-Gettext-Domain' from *.desktop.in, since langpack.mk will + add it automatically now. + * *.desktop.in: Remove 'in Ubuntu' from comment. + * cli/apport-cli, qt4/apport-qt: Generalize window titles. + + Other fixes: + * po/de.po: Update. + * debian/local/setup-apport-retracer: Revert back 'source' to '.' and use + bash instead of sh. POSIX sh does not seem to have a 'source' command. + + -- Martin Pitt Mon, 21 May 2007 19:25:31 +0200 + +apport (0.79) gutsy; urgency=low + + * debian/local/setup-apport-retracer: Fix '.' bashism, replace it with + 'source'. + * problem_report.py, write_mime(): Drop preamble argument, replace it with + an extra_headers dictionary. This is much easier to evaluate on clients. + * apport/ui.py: Convert to new write_mime() interface from above. This + finally automatically tags bugs with need-$ARCH-retrace. Bump + p-problem-report dependency of python-apport for this. + * apport/report.py: Change example URLs in the testsuite from launchpad to + an artificial ones to avoid the impression that it is LP specific. + * backends/packaging-apt-dpkg.py: Formally make this a subclass of + apport.packaging.PackageInfo. + * debian/control: Use code.lp.net instead of bazaar.lp.net VCS URL. + * bin/kernel_hook: Fix/improve the collected information: + - Read /proc/modules instead of lsmod. + - Fix lspci argument: -n instead of -m. + - Add /proc/cmdline. + * debian/rules: Use langpack.mk for updating the .desktop files. + * Add po/Makevars to specify the domain, to make intltool figure out the + gettext domain automatically. + * bin/kernel_hook, ./test-hooks: Do not rely on /proc/version_signature any + more, it's gone in the gutsy kernel. + + -- Martin Pitt Mon, 21 May 2007 15:55:10 +0200 + +apport (0.78) gutsy; urgency=low + + * apport/packaging.py, backends/packaging-dpkg.py: Add new interface + is_distro_package(package) which verifies the origin of a given package. + Move the dodgy hack from apport/ui.py to the backend, where it belongs to. + Also add a test case. + * debian/control: Add python-apt dependency to python-apport. + * debian/control: Remove debianutils dependency, it's essential. + * Drop backends/packaging-dpkg.py. It had some hackish usage of python-apt + anyway, since some things just cannot be figured out with dpkg alone. + Since we have to give up on that idea, implement a new clean packaging + backend 'packaging-apt-dpkg.py' which now uses python-apt and dpkg in a + clean way. + * apport/report.py, add_gdb_info(): Fix crash when Stacktrace could not be + created. (LP: #107853) + * ./test-apport: Check that crashes create a core dump (with proper ulimits) + when an unseen crash report exists already. This reproduces LP #105976. + * bin/apport: Create core dump file if aborting because an unseen crash + report already exists. (LP: #105976) + * apport/ui.py: Add a comment for translators. (LP: #104703) + * apport/ui.py, load_report(): Also catch zlib.error on invalid reports. + (LP: #103547) + * apport/report.py: Add method has_useful_stacktrace() to determine whether + the stack trace can be considered useful. The current heuristic is to + consider it useless if it either is shorter than three lines and has any + unknown function, or for longer traces, a minority of known functions. Add + test cases. + * gtk/apport-gtk, qt4/apport-qt, cli/apport-cli: Do not offer 'reduced + report' option if the stack trace is useless. (LP: #87430) Bump the + python-apport dependencies of the frontend packages to ensure that we have + has_useful_stacktrace(). + + -- Martin Pitt Sat, 5 May 2007 17:53:42 +0200 + +apport (0.77) gutsy; urgency=low + + * apport/report.py: Replace any() call with a list comprehension to work + with Python < 2.5. (LP: #104864) + * apport/report.py: Move the ctypes import to the one place where we + actually need it, and do not entirely fail if they do not exist (such as + in Python 2.4). It is only required for non-default Feisty kernels anyway. + (LP: #107662) + * apport/chroot.py: Fix test suite to work with Python 2.4's tarfile module + output format. + * debian/local/setup-apport-retracer: Generalized some feisty specific + bits, set default release to gutsy. + + -- Martin Pitt Mon, 23 Apr 2007 12:22:17 +0200 + +apport (0.76) feisty; urgency=low + + * Move python_hook.py out of the apport module to apport_python_hook.py, so + that it does not inflict the expensive import of all apport related + modules to every python program. Adapt module prefixes accordingly. + (LP: #105764) + * setup.py, debian/python-apport.install: Install apport_python_hook.py into + the python-apport binary package. + * apport/ui.py test suite: Unset locale related environment variables so + that the tests which check strings are not invalidated by translations. + + -- Martin Pitt Thu, 12 Apr 2007 11:47:50 +0200 + +apport (0.75) feisty; urgency=low + + * apport/report.py, add_proc_info(): Chop off /rofs/ prefix from + ExecutablePath, so that crashes work on the live system, too. Arguably a + kernel bug, but probably too hard to fix at this time. (LP: #102909) + * backends/packaging-dpkg.py, get_modified_files(): Ignore empty lines in + broken .md5sums file rather than crashing on them. (LP: #102906) + + -- Martin Pitt Wed, 4 Apr 2007 21:51:28 +0200 + +apport (0.74) feisty; urgency=low + + * debian/apport-{gtk,qt}.install: Do not install .desktop files for now, + until we get a proper guided bug reporting. + * problem_report.py, write_mime(): Do not re-compress keys which already end + in .gz. Add test cases. + * test-hooks: Add a (dodgy) test case for calling package_hook on an + uninstalled package. After all, this is very likely to happen for + installation errors. This reproduces #97636. + * backends/packaging-dpkg.py, get_source(): Add a similarly dodgy fallback + to apt if the queried package is not installed. This needs to be + generalized and cleaned up later, but now is the time for unintrusive + small patches. (LP: #97636) + * test-apport: Do not fail on non-empty gdb stderr if it only consists of a + single warning (as happens on powerpc). + * apport/report.py, test_check_interpreted(): Run gedit test on an actually + existing file, reproducing the interpreter confusion reported in #102056. + * apport/report.py, _check_interpreted(): Add a whitelist of common + interpreters and check ExecutablePath against it. (LP: #102056) + * apport/ui.py: Ignore SystemError exceptions from apt, which happen on + badly formatted source.list entries. (LP: #98901) + * apport/ui.py: Fix crash on None candiateOrigin from the apt cache object. + (LP: #98961) + * gtk/apport-gtk.glade: Add window titles to progress and details dialogs. + (LP: #97640) + + -- Martin Pitt Wed, 4 Apr 2007 14:44:08 +0200 + +apport (0.73) feisty; urgency=low + + * problem_report.py, write(): Allow a third optional argument in tuple + values, which specify a maximum file size. Above it, the entire key gets + removed. Add testsuite checks for all boundary cases. + * bin/apport: Limit core dump size to 75% of usable RAM + (MemFree+Cached-Writeback). This should avoid trashing people's boxes hard + on huge core dumps. Bump dependencies on python-problem-report. Create an + expensive, but realistic check for this in test-apport. + (LP: #71560) + * apport/ui.py, run_crash(): If a signal crash report does not have a core + dump, explain that the computer has too little memory for an automatic + analysis/report of the crash. Add test suite check. + + -- Martin Pitt Thu, 29 Mar 2007 23:38:23 +0200 + +apport (0.72) feisty; urgency=low + + [ Martin Pitt ] + * bin/apport-chroot, command_create(): Install gpgv. + * bin/apport-retrace: Fix error handling in fetch_unpack(). + * Move apport-retrace.1 manpage from package apport to apport-retrace. Bump + Conflicts/Replaces accordingly. + * bin/launchpad-crash-digger, apport/ui.py: Remove the special case + 'powerpc'->'ppc' and use need-powerpc-retrace uniformly. + * debian/control: Add XS-Vcs-Bzr: header. + * apport/ui.py: Fix wrong parameter name in help message. + * Another grammar fix, thanks to Brian Murray! + + [ Michael Hofmann ] + * debian/local/ubuntu-bug: Try to use apport-cli, if we do not have a + $DISPLAY, or neither Gnome nor KDE are running. + * debian/control: Recommend elinks, since it is the only text browser so far + that works with Launchpad (see #59510) + * Add debian/apport-cli.README.Debian: Describe how to integrate + apport-checkreports and apport-cli into .bashrc for crash notification on + servers. + * qt4/apport-qt: Fix undefined symbol in ui_present_package_error(). + (LP: #97282) + + -- Martin Pitt Thu, 29 Mar 2007 11:41:39 +0200 + +apport (0.71) feisty; urgency=low + + * cli/apport-cli, qt4/apport-qt: Fix bad grammar 'some minutes'. + (LP: #95296) + * problem_report.py, write_mime(): Add optional 'preamble' parameter. Add + test case. + * apport/ui.py, upload_launchpad_blob(): Set need-$ARCH-retrace tag in MIME + preamble. Bump p-problem-report dependency. (LP: #94790) + * bin/apport-retrace: In verbose mode, display the path of currently + extracting deb. + * bin/apport-retrace: Do not fall over errors of dpkg -x (which happens e. + g. on udev, where it cannot unpack /dev, since this is a symlink to the + real /dev). Merely print out a warning about it. + * apport/ui.py, run_report_bug(): Ignore ENOENT from add_proc_info(). This + happens if the user closes the application prematurely, so that /proc/pid + does not exist any more. Add test case. (LP: #95954) + * backends/packaging-dpkg.py, get_modified_files(): Ignore lines in .md5sums + files which contain a NUL byte. This Should Not Happen™, but nevertheless + did. (LP: #96050) + * apport/ui.py, doc/package-hooks.txt: Check for a field + "UnreportableReason: " and display an information box that the + current crash cannot be reported because of . Add test case. + Document the new field. + * apport/ui.py: Check package origin, compare it to DistroRelease:, and + report crash as unreportable if they do not match. This particularly saves + the user from uploading large reports for e. g. opera crashes, and avoids + filing Ubuntu bugs from Debian installations. (LP: #75513) + + -- Martin Pitt Mon, 26 Mar 2007 18:01:24 +0200 + +apport (0.70) feisty; urgency=low + + [ Martin Pitt ] + * bin/apport-retrace: Add option --remove-tag to remove a Launchpad bug + tag. This is intended for an automatic Malone crash retracing system. + * debian/control: Bump python-launchpad-bugs dependency to ensure that we + have Bug.[gs]et_metadata(). + * man/apport-retrace.1: Add documentation for --confirm and --remove-tag. + * bin/apport-chroot: Add option --remove-tag and pass it to apport-retrace. + * apport/chroot.py, fix_symlinks(): Convert chroot path prefixed absolute + symlinks to relative symlinks to avoid fakechroot's weird handling of + absolute symlinks. + * Add bin/launchpad-crash-digger: Daemon for watching out for + need-$ARCH-retrace tagged Ubuntu bugs in Launchpad and calling + apport-retrace on them. + * bin/apport-retrace: Mangle bug comment with StacktraceTop to not contain + invalid UTF-8, to avoid getting Internal Server Errors from LP. + * debian/local/setup-apport-retracer: Install libc6-i686{,-dbgsym} into an + x86 chroot, to get sane x86 backtraces for crashes in libc. + * debian/local/setup-apport-retracer: + - Unpack and install python-launchpad-bugs locally if the package is not + installed. + - Link launchpad-crash-digger into the retracer's bin/ dir. + * run-tests: Run tests with python's -tt flag to catch whitespace errors. + * Replace tabs with spaces in all Python files. (LP: #93561) + * Remove trailing white space in all Python files. + * apport/report.py, add_proc_info(): Do not regard symlinks to executables + as interpreted scripts any more (such as Debian alternatives). Add test + case. (LP: #94732) + * problem_report.py: Add new method get_new() which returns a set of all + keys which have been added since load() or construction. Add test cases. + * problem_report.py: Add optional parameter only_new to write(), which + writes only the get_new() keys. Add test case. + * apport/ui.py: Remember currently processed report file and update it with + the added information, so that it becomes useful for local evaluation, + too. Bump python-problem-report dependency to ensure write()'s only_new + availability. (LP: #94678) + * apport-chroot: Add forgotten sys.exit(1) after printing the error message + about an invalid chroot specification. + * apport/ui.py, run_crash(): Check for a field "UnsupportableReason: " + and display an information box that the current configuration cannot be + supported because of , instead of processing and reporting the + crash. Add test case for this workflow. With special regards to our + Firefox crash triagers who want to get rid of the hundreds of + flash-related crashes. :) + * apport/report.py, add_hooks_info(): Use execfile() instead of + __import__(), since package names might conflict with module names already + imported into apport's namespace. Also search for hook named after the + source package name (prefixed with 'source_'). Add test cases. + * bin/apport-chroot: When specifying --save for login, only save the tarball + if the exit status is 0. + * bin/apport-chroot, create: Install /usr/sbin/policy-rc.d to disable init + scripts. + * bin/apport-chroot: Fixed command function selection to not abort with + 'unknown command' if the DistroRelease: was unknown. + * bin/apport-retrace: Replace --no-purge with --no-dpkg. With this option, + do not call dpkg --unpack any more, but dpkg -x, to avoid any fchmod() and + other calls which cause problems in fakechroots. + * bin/apport-retrace: Fix ordering of version numbers in warning message. + * doc/package-hooks.txt: Add some examples, document source package hook. + + [ Kees Cook ] + * apport/report.py, add_proc_info(): If reading /proc/pid/maps fails, + ptrace() the target process to make it readable (proposed security + improvement in future kernels). + * bin/apport-retrace: Fix crash for packages unknown to the apt cache. + * apport/report.py, add_gdb_info(): Limit maximum backtrace depth to 2000 to + avoid infinitely looped stacks and gdb crashes. (LP: #94455) + This also caps the maximum size of information that we add to reports. + (LP: #92653) + * bin/apport-retrace: Add option -R/--rebuild-package-info, so that + apport-retrace works on unprocessed crash dumps in /var/crash. + * Some grammar corrections. + * Add package-hooks/source_apport.py: Package hook for apport itself. + Include /var/log/apport.log and the status of files in /var/crash. + + [ Michael Hofmann ] + * Add cli/apport-cli, setup.py, debian/apport-cli.install, debian/control: + Add command line user interface. + * apport/ui.py, format_filesize(): Use MiB and GiB instead of MB and GB; + these are the official units. Adapt test cases. + * apport/ui.py, collect_info()/file_report(): Do not raise an exception on + KeyboardInterrupt in the subthreads. + * apport/ui.py, open_url(): Do not use gtk.MessageDialog(), but + ui_error_message(), and fix error passing so that the message is + displayed in the parent thread. + * apport/ui.py, open_url(): Check that $DISPLAY is set before considering + the KDE/Gnome web browsers. + + -- Martin Pitt Mon, 26 Mar 2007 09:41:03 +0200 + +apport (0.69) feisty; urgency=low + + * apport-chroot: Add command 'installdeb' to conveniently install a bunch of + .debs into a chroot. + * apport-chroot: Fix 'login' and 'upgrade' commands to not require + specifying a chroot map when giving a chroot tarball path as argument. + * test-apport: Check that core dumps are written for packaged programs as + well, if ulimits want them. (Test for #92029) + * bin/apport: Call write_user_coredump() for packaged program crashes and + SIGABRT as well. (LP: #92029) + + -- Martin Pitt Mon, 19 Mar 2007 17:37:23 +0100 + +apport (0.68) feisty; urgency=low + + [ Michael Hofmann ] + * qt4/apport-qt: Fix taskbar entry, remove an unused method. + * qt4/error.ui: Fix icon spacing. + + [ Martin Pitt ] + * apport-retrace: Add option --confirm to display the retraced stack traces + and ask for confirmation before uploading them as LP bug attachments. + (LP: #91878) + * apport-chroot: Add option --confirm-attach; if given, call apport-retrace + with --confirm. + + -- Martin Pitt Thu, 15 Mar 2007 00:05:18 +0100 + +apport (0.67) feisty; urgency=low + + * debian/local/setup-apport-retracer: Add apt sources for restricted, + universe, and multiverse, too. + * po/de.po: Update from Rosetta. + * apport/report.py: Remove undefined call to error_log() in + _command_output(), replace it with raising proper exceptions. + * bin/apport-retrace: Fix 'numer' typo. (LP: #91680) + * test-apport: Check that non-packaged executables generate a core dump on + SIGABRT, too (test case for bug #92029). + * bin/apport: Move check for ignoring SIGABRT below the core dump file + writing for non-packaged binaries. (LP: #92029) + * gtk/apport-gtk.glade: + - Remove titles from the progress windows to comply with Gnome HIG and not + repeat the text content. + - Improve wording a bit. + - LP: #92114 + * gtk/apport-gtk{,.glade}: Fix signal handler name of the Cancel button in + the upload progress dialog, so that it actually works. (LP: #92115) + + -- Martin Pitt Wed, 14 Mar 2007 17:34:57 +0100 + +apport (0.66) feisty; urgency=low + + * Remove apport/MultipartPostHandler.py, this functionality moved to + python-launchpad-bugs now. Add a dependency to that package. + * apport/ui.py, upload_launchpad_blob(): Use the shiny new + launchpadBugs.storeblob.upload(). + * bin/apport-retrace: Attach retraced stack traces back to the Launchpad bug + report if no other output option is given (This corresponds to the + in-place editing when a report file is specified). Add option --cookie to + specify a Mozilla-style cookie file for the necessary Launchpad + authentication. + * man/apport-retrace.1: Document above apport-retrace changes. + * bin/apport-chroot: Add --cookie option: temporarily symlink cookie into + the chroot and pass it to apport-retrace in retrace mode. + + -- Martin Pitt Sat, 10 Mar 2007 15:01:57 +0100 + +apport (0.65) feisty; urgency=low + + * debian/local/setup-apport-retracer: + - Replace grep-dctrl with grep call, since grep-dctrl is not installed in + all the DC chroots. + - Do not download apport source from archive.u.c., instead require that + this script lives in the unpacked apport source tree. + * bin/apport-chroot: Use apt-get options -y and --allow-unauthenticated when + installing additional packages. + * bin/apport-chroot: Handle --extra-package for 'upgrade', too, to provide a + simple way of adding a package to an existing chroot tarball. + * debian/local/setup-apport-retracer: Create tarball chroots by default. + It only imposes a negligible overhead, and sharing unpacked directories + with multiple people is just too brittle. + * bin/apport-retrace: Add option --no-purge to not purge unpacked packages + after retracing. This is (only) useful with temporarily unpacked chroots, + since it's only a waste of time there. + * bin/apport-chroot: Call apport-retrace with --no-purge when retracing in a + chroot tarball. + * apport/chroot.py: Add fix_symlinks() method to remove the chroot root + directory prefix from symbolic links; they prevent function of tarball + chroots and moving around directory chroots. Add test case. + * bin/apport: Fix symlinks after creating and upgrading a chroot. + * bin/apport-chroot: Add option --save to update a tarball after logging + in to it. + + -- Martin Pitt Sat, 10 Mar 2007 21:21:25 +0100 + +apport (0.64) feisty; urgency=low + + * bin/apport-chroot: Add 'login' command. + * bin/apport-chroot: Install apport-retrace into a newly created chroot. + * Add debian/local/setup-apport-retracer: Script to install local versions + of apport, debootstrap, fake{,ch}root libraries, and a feisty apport + fakechroot. This works OOTB on ronne's amd64 and i386 feisty chroots. The + script is not shipped in any package yet, but it's convenient to ship it + in revision control and in the source. + * apport/report.py, _check_interpreted(): When calling an interpreter with a + script name as argument, set ExecutablePath to the script instead of the + interpreter. Add test case. (LP: #88794) + * apport/report.py, search_bug_patterns(): Catch all exceptions from + urlopen(), not just IOError. Sometimes this fails with funnier errors. + (LP: #89589) + * bin/apport-retrace: Give some additional explanation when installing + packages fails. (LP: #89916) + * apport/fileutils.py, get_all_{system_,}reports(): Fix file access race + condition. (LP: #89977) + * bin/apport-retrace: Add option -p/--extra-package to install an additional + package for retracing. May be specified multiple times. Document new + option in man/apport-retrace.1. (LP: #90077) + * bin/apport-chroot: Add a similar option -p/--extra-package and install + those in the 'create' command and simply pass it to apport-retrace in the + 'retrace' command. (LP: #90077) + * bin/apport-chroot: Add a -v/--verbose option. + * bin/apport-retrace: Do not complain about missing ddebs for Arch: all + packages. + + -- Martin Pitt Tue, 6 Mar 2007 16:20:41 +0100 + +apport (0.63) feisty; urgency=low + + New feature: fakechroot support for apport-retrace + + * bin/apport-retrace: + - Simplify program design and throw away the complicated debug symbol + sandbox generation, along with the -d and -C options. Instead, directly + install the missing packages and ddebs with apt. This makes the tool more + suitable for running in chroots and has often been requested anyway. + - Add option -u/--unpack-only which causes additionally installed packages + to be unpacked without being configured and purged again after + retracing. This allows apport-retrace to work under fakechroot and has + the nice side effect of speeding up package installation (we do not care + about configuration for retracing anyway). + * man/apport-retrace.1: Update description for the new behaviour, drop + documentation of the -d and -C options, and add documentation of -u. + * Add apport/chroot.py: Class for representing and working with chroots; + this uses the fakeroot and fakechroot libraries when being called as + non-root. + * Add bin/apport-chroot: CLI frontend for doing various things with + chroots (including fakeroot/fakechroot support from the Chroot class). For + now, this implements: + - create a chroot (tarball or directory) + - dist-upgrade a particular or all chroots + - apport-retrace a bug or Apport report file + * setup.py: Ship apport-chroot in scripts directory. + * Add a new package apport-retrace which ships apport-retrace and + apport-chroot and carries all the heavier dependencies (binutils, + python-launchpad-bugs, python-apt, etc.). Drop the latter two dependencies + from the apport package. This allows us to install the apport-retrace + package in fakechroots (not possible with apport itself) and avoid + unnecessary dependencies on normal desktop installations. + + -- Martin Pitt Mon, 5 Mar 2007 11:20:36 +0100 + +apport (0.62) feisty; urgency=low + + * apport/ui.py, collect_info(): Use REThread instead of Thread and raise + exceptions from it, so that errors during info collection actually become + visible. + * apport/report.py, add_proc_info(): Check that ExecutablePath actually + exists, so that invalid values from transient error conditions are ignored + (such as '/usr/bin/gnome-panel\x00\x00\x8b (deleted)'). + * apport/packaging.py: Add interface get_system_architecture() to return the + system architecture in the distro specific notation. This can differ from + get_architecture(package) on multiarch platforms such as amd64. + * backends/packaging-dpkg.py: Implement get_system_architecture() to return + dpkg --print-architecture, add a shallow test case. + * apport/report.py, add_package_info(): Rename key 'Architecture:' to + 'PackageArchitecture:' for clarity. + * apport/report.py, add_os_info(): Add system architecture as + 'Architecture:' field. + * apport/ui.py, create_crash_bug_title(): Append warning about non-native + package if package architecture does not match the system's one. + * All test suites: Remove redundant word 'behaviour' from test descriptions. + * test-hooks: Run tests on installed hooks in /usr/share/apport by default + and add a '--local' switch to test the hooks in the source tree instead. + Use this option in run-tests. + * apport/report.py, test_add_proc_info(): Change the python script test + so that it does not depend on being run in the source tree. + * run-tests: Add a 'local' command line option which runs tests on the files + and modules in the build tree. Run tests on system files/modules by + default. + * setup.py, debian/apport.install: Ship test-hooks, test-apport, and + run-tests in /usr/share/apport/testsuite/, so that the full test suite can + be run in the installed system. + * gtk/apport-gtk.desktop.in: Only show in Gnome and Xfce. + * qt4/apport-qt.desktop.in: Only show in KDE. + + -- Martin Pitt Thu, 1 Mar 2007 10:43:29 +0100 + +apport (0.61) feisty; urgency=low + + * bin/apport: + - Kernel 2.6.20-9 now sets CORE_REAL_RLIM to -1 instead of not setting it; + handle this case correctly. (LP: #87065) + - Add forgotten multiplication of CORE_REAL_RLIM with 1024, since ulimit + sets kB, not bytes. + + -- Martin Pitt Tue, 27 Feb 2007 16:06:11 +0100 + +apport (0.60) feisty; urgency=low + + * gtk/apport-gtk.glade: Reintroduce window titles. Since the crash + notifications are like alerts, title have been removed recently to comply + with Gnome HIG standards, but then the user will get 'nameless window' + buttons in the task bar. Let's have the smaller evil then. (LP: #87164) + * apport/packaging.py: Add get_architecture() interface for determining the + architecture of a particular package (which might not match the overall + system architecture on multiarch-capable systems, e. g. an i386 Firefox + package installed on amd64). + * backends/packaging-dpkg.py: Implement get_architecture() and add test + case. + * apport/report.py, add_package_info(): Add Architecture: field. + (LP: #87424) + * apport/ui.py: Already mark report as seen when we load it, not just in the + information collection thread. That way, reports will only be shown once + on systems which have /var/crash mounted noatime, too. (LP: #85809) + * apport/fileutils.py, mark_report_seen(): If os.utime() fails, and opening + the report file for reading does not change the atime (happens with + noatime mount option), don't throw an exception, just delete the report. + (other aspect of LP: #85809) + * qt4/apport-qt: Wrap gettext() into an unicode(str, 'UTF-8') call, + otherwise all non-ASCII unicode strings are broken. (LP: #87757) + + -- Martin Pitt Mon, 26 Feb 2007 20:55:40 +0100 + +apport (0.59) feisty; urgency=low + + * apport/report.py: Check that interpreter options are discarded in + test_check_interpreted_script(). This replicates bug #87005. + * apport/report.py, _check_interpreted_script(): Filter out interpreter + command line options. This should make the detection of interpreted + scripts more robust. (LP: #87005) + * test-apport, check_crash(): Differ between expecting the program dumping + core and finding a core dump on disk, because this is not equivalent any + more with core pipelining. + * bin/apport: Write core files into a process' cwd if the process' ulimit + requests and permits it and the crashes process is not packaged, so that + developers get happy again. Test this behaviour with various ulimits in + test-apport. + * test-apport: Check that the core file written by apport is valid. This + uncovers kernel bugs like #87065 + * problem_report.py test suite: Use assertAlmostEqual() when comparing stat + times, since they are floats on some systems. + * apport/report.py, add_gdb_info(): + - Remove all the initial gdb output, which gets rid of the duplicated #0 + line. + - Replace some stray tabs with spaces. + - Thanks to Kees Cook for this! + + -- Martin Pitt Thu, 22 Feb 2007 19:52:52 +0100 + +apport (0.58) feisty; urgency=low + + * qt4/apport-qt.desktop.in move to System menu + + -- Jonathan Riddell Tue, 20 Feb 2007 11:35:17 +0000 + +apport (0.57) feisty; urgency=low + + * apport/ui.py: Intercept ENOMEM and fail gracefully; there is little else + we can do at that point, and there is no point in presenting a crash + report for this. (LP: #85155) + * apport/ui.py: Ignore KeyError when deleting the CoreDump field on sending + a reduced report. This Should Not Happen™, but nevertheless did. + (LP: #86083) + * gtk/apport-gtk, qt4/apport-qt: Intercept ImportError for the non-builtin + Python modules. This usually happens for crashes when there is a + dist-upgrade active and some Python packages have not been configured yet. + (LP: #86007) + * apport/ui.py: If the problem report does not apply to a packaged program, + and we have an ExecutablePath, mention it in the error message for easier + debugging. + * apport/python_hook.py: Resolve symbolic links in ExecutablePath. + (LP: #85529) + * apport/ui.py, open_url(): Remove debugging print statement again, now + that we tracked down bug #83974. + + -- Martin Pitt Mon, 19 Feb 2007 14:40:29 +0100 + +apport (0.56) feisty; urgency=low + + * apport/ui.py, open_url(): When being invoked as root, call gnome-open or + firefox as root through sudo instead of dropping our uid/gid and calling + it normally. The latter does not work for Firefox for some mysterious + reason. Thanks to Mika Fischer for this trick. (LP: #81207) + * Add debian/local/ubuntu-bug.1: Manpage for ubuntu-bug. Add it to + debian/apport.manpages. + * qt4/apport-qt: Add some missing features that are present in the GTK UI: + - Do not show details by default, add a button to show them. + - Add complete/reduced bug report radio buttons. + - Thanks to Michael Hofmann for this! + + -- Martin Pitt Thu, 15 Feb 2007 14:59:07 +0100 + +apport (0.55) feisty; urgency=low + + * Add debian/local/ubuntu-bug: Check for a running KDE or Gnome session, + availability of apport-gtk and -qt, and open the appropriate GUI in bug + filing mode. This makes it convenient for shell users and is also required + for proper Firefox 'Report a bug...' menu integration (see bug #85041). + * debian/apport.install: Install ubuntu-bug to /usr/bin. + * gtk/apport-gtk: Generously add some gtk.main_iteration() calls to avoid + hanging dialogs, since we do not have a main loop. + * apport/ui.py: Do not silently ignore exceptions while uploading data to + Launchpad, but intercept them and display their message in the error + dialog. (Part of LP: #84992) + * apport/ui.py: Switch from edge.launchpad.net to production launchpad.net, + since the necessary bits are now there. (LP: #84992) + + -- Martin Pitt Wed, 14 Feb 2007 13:37:52 +0100 + +apport (0.54) feisty; urgency=low + + * bin/apport: Re-enable, now that our kernel has been fixed to pipe complete + core dumps to us. + + -- Martin Pitt Tue, 13 Feb 2007 09:33:38 +0100 + +apport (0.53) feisty; urgency=low + + * apport/ui.py, open_url(): Remove some accidentally left-over debugging + junk. + * gtk/apport-gtk: Process pending GTK events after hiding the info + collection window to avoid a hanging dead dialog. + * gtk/apport-gtk: Do not count the lines of fields with binary data. This + particularly avoids long delays with huge core dumps. (LP: #81979) + * apport/ui.py, open_url(): Print URL to stdout, so that we can debug the + weirdness in #83974. + + -- Martin Pitt Mon, 12 Feb 2007 16:57:05 +0100 + +apport (0.52) feisty; urgency=low + + * apport/report.py: Fix hook directory to be + /usr/share/apport/package-hooks/, not /u/s/apport/. + * Add doc/package-hooks.txt: Document per-package hooks, ship in package + apport. + * Add debian/apport.dirs: Ship package-hooks/ directory. + * gtk/apport-gtk, qt4/apport-qt: Fix detection of binary data so that the + CoreDump is not displayed as incomprehensible gibberish any more. + * Add qt4/apport-qt.desktop.in and add it to POTFILES.in. + * bin/apport-retrace: --verbose can now be specified multiple times to + increase verbosity and debug package installation. Also, fix some quoting + bugs. Thanks to Kees Cook for this! + * qt4/apport-qt: Fix restart button handling. (LP: #84202) + * qt4/apport-qt: Do not try to call splitlines() on a report value that is a + file reference; just display the reference instead. (LP: #84196) + * bin/apport: Disable for now, since the current kernel produces cropped + core dumps and thus we get totally useless crash reports + + -- Martin Pitt Fri, 9 Feb 2007 18:58:08 +0100 + +apport (0.51) feisty; urgency=low + + New feature: Qt4 GUI implementation: + + * Added qt4/: Qt4 implementation of the abstract user interface. Thanks to + Michael Hofmann for that! + * debian/copyright: Add Michael as copyright holder. + * setup.py, debian/control, debian/apport-qt.install: Packaging bits for + apport-qt. + * Move translations from apport-gtk to apport, since they are shared between + frontends. Add appropriate Conflicts/Replaces (we don't strictly need it + here because we strip them anyway, but we need that for the moving icon + anyway). + * Move icon from apport-gtk to apport, since it is/can be shared between + frontends. + + Improvements: + + * Replaced old apport.png icon stolen from bug-buddy with nice SVG one. + Thanks to Troy Sobotka for this! + * debian/copyright: Add Troy as copyright holder for the icon. + * bin/apport-retrace, man/apport-retrace.1: Document that report can now be + a LP bug number. + + -- Martin Pitt Thu, 8 Feb 2007 20:01:12 +0100 + +apport (0.50) feisty; urgency=low + + * gtk/apport-gtk.glade: Fix 'prolem' typo. + * bin/apport-retrace: Use python-launchpad-bugs to create a Report object + from a given Launchpad bug number (given as argument instead of the report + file path). Add appropriate p-l-b dependency. + * gtk/apport-gtk: Mark '(binary data)' string as translatable. + + -- Martin Pitt Thu, 8 Feb 2007 15:15:47 +0100 + +apport (0.49) feisty; urgency=low + + * gtk/apport-gtk.glade: Fix s/send/sent/ typo. Closes: LP#83061 + * apport/ui.py, create_crash_bug_title(): Cope with odd Tracebacks that are + shorter than three lines. Add test case from the bug. Closes: LP#83556 + * apport/python_hook: Do not create a report if the binary is ignored. Add + test case. Closes: LP#83566 + * gtk/apport-gtk: Do not save/alter crash dialog title any more, it's empty + now. + * apport/ui.py, open_url(): Check the user's session for + ksmserver/gnome-session to decide whether to prefer kfmclient or + gnome-open. Also, only call Firefox directly if gconf's prefered browser + is actually Firefox. Closes: LP#82007 + + -- Martin Pitt Tue, 6 Feb 2007 18:33:15 +0100 + +apport (0.48) feisty; urgency=low + + New feature: Infrastructure for reporting kernel Oopses: + + * Add bin/kernel_hook and ship it in /usr/share/apport. The kernel can call + this on an Oops. Add a test suite for it to test-hooks. + * apport/ui.py: Add support for reporting ProblemType: Kernel reports, and + add test suite for the workflow. + * gtk/apport-gtk{,.glade}: Add implementation for ui_present_kernel_error(). + + Improvements: + + * Merged various apport-retrace improvements from Kees' branch: + - Add various options to override some report fields with local values. + - Add --verbose option and be quiet by default. + - Read ProcMaps for additional library dependencies, to also catch + libraries loaded at runtime (plugins). + - Set correct debug file directory when starting an interactive gdb + session with -g. + * Add gtk/apport-gtk.desktop.in: Desktop file for calling apport-gtk in + 'file a distro bug' mode, to be displayed in gnome-panel's System menu + (see bug-reporting-tool spec). Also add a Makefile to do the + intltool-merge dance, add it to POTFILES.in, and ship it in + debian/apport-gtk.install. + * bin/apport: Call add_os_info(), so that we get architecture information + even for 'naked' reports which didn't go through UI enrichment. + * Add ./test-hooks: Test suite for the various package hooks shipped with + apport. Test the package problem hook for now. + + Bug fixes: + + * debian/control: Add missing python-apt dependency to apport + (apport-retrace needs it). Thanks to Kees Cook for noticing. + * debian/control: Add gdb dependency to python-apport. + * backends/packaging-dpkg.py test suite: Verify that packages returned by + get_dependencies() actually exist. This catches the 'chops off first + letter of package name sometimes' bug. + * backends/packaging-dpkg.py, _init_status(): Add missing space to Depends: + field format in dpkg-query call. This fixes the chopped-off first letters + in the 'Dependencies' report field. + * setup.py: Remove version attribute, we do not update and use it anyway. + * apport/ui.py: Do not crash if Package: specifies a nonexisting package. + Display a proper error message instead. Add test_run_crash_errors() test + case. + * apport/report.py, add_package_info(): Fix crash when the first dependency + is not installed. Closes: LP#82561 + * gtk/apport-gtk.glade: Remove window titles in alert dialogs to comply with + Gnome HIG. Closes: LP#83123 + + -- Martin Pitt Mon, 5 Feb 2007 12:19:35 +0100 + +apport (0.47) feisty; urgency=low + + * apport/report.py, add_hooks_info(): Only use first part of 'Package:', + there might be a version number and a changed files list which we must not + propagate to the import statement. Closes: LP#82566 + + -- Kees Cook Wed, 31 Jan 2007 15:37:11 -0800 + +apport (0.46) feisty; urgency=low + + * debian/control: Bump dependencies to python-apport due to recent changes + in expected return values in some UI functions. Closes: LP#82267 + * bin/package_hook: Remove erroneous 'import apport.packaging', which + shadows the packaging variable in the apport package. This unbreaks the + package problem hook. Closes: LP#82297 + + -- Martin Pitt Wed, 31 Jan 2007 07:51:24 +0100 + +apport (0.45) feisty; urgency=low + + New feature: Infrastructure for package install/upgrade failures: + + * Add bin/package_hook: Script for creating a report for a package + installation/upgrade failure. It receives a package name, a number of log + files, and an ErrorMessage: from stdin. This will be called from e.g. + dist-upgrader. + * setup.py, debian/apport.install: Ship package_hook. + * apport/ui.py: If ProblemType is 'Package', call a new function + self.ui_present_package_error() instead of presenting a crash. Add test + suite checks for the package error report workflow. + * apport/ui.py, create_crash_bug_title(): Create default bug title for + package reports. Add various test cases. + * gtk/apport-gtk{,.glade}: GTK implementation of ui_present_package_error(). + + New feature: Maintain a per-binary blacklist to inhibit apport crash reports + until the binary changes. Closes: LP#79408 + + * apport/report.py: Add new Report methods check_ignored() and mark_ignore() + to check for/set ignore list entries. Add test cases. + * apport/ui.py: Add another return value of ui_present_crash() to specify + whether or not to blacklist the current crash's executable. Check workflow + of both responses in the test suite. + * gtk/apport-gtk{,.glade}: Add a blacklist checkbox to the crash + notification dialogs. + * bin/apport: Do nothing if the current crash is blacklisted. + * test-apport: Test blacklisting. + + Bug fixes: + + * gtk/apport-gtk: Fix return code for restarting the application ('reopen' -> + 'restart'). Closes: LP#81422 + * test-apport: Adapt to new core_pattern kernel interface mode: + - Check core_pattern instead of the obsolete crashdump sysctl to determine + whether or not apport is running. + - Give apport max. 10 seconds to complete. The current kernel reaps the + crashed process as soon as writing the core dump to the pipe is + finished, but apport still needs to write the report file. + - Do not EXFAIL the test for crashes in nonwriteable cwd any more, since + it is now supposed to work (we do not write a core dump to the disk any + more). + * run-tests, use-local: Adapt to new core_pattern kernel interface. + * apport: Improve logging of exceptions, include environment variables. + * apport/report.py test suite: Use gdb to generate a test core dump, do not + rely on kill(SIGSEGV) and the kernel to do it (since we now use a pipe in + core_pattern). + * backends/packaging-dpkg.py: Fix return value of get_modified_files() if + dpkg .list file is missing. + * apport/report.py, add_package_info(): Do not produce stray empty lines for + uninstalled alternative dependencies. + * apport/report.py: Fix test_add_gdb_info_script() to not leave behind a + stray gzip process which randomly blocks stdin. Closes: LP#78421 + * backends/packaging-dpkg.py: Do not read the dpkg status in the + constructor, but lazily initialize it when actually calling a query + function. This avoids imposing the dpkg-query overhead for programs that + import the apport package without doing package queries (such as any + Python program under Ubuntu, due to the Python crash hook). + * apport/ui.py, create_crash_bug_title(): + - Do not crash on an empty StacktraceTop. Closes: LP#81677 + - Do not mention an unknown function name ('??') in the bug title; + instead, use the topmost function with a known name, or leave it out + at all. + - Add test cases for these situations. + * apport/report.py, _get_ignore_dom(): Do not throw an error for an empty + ignore list file. + + Code cleanups: + + * apport/report.py test suite: Refactorize generation of test crash program + and core dump generation. + * Consistently use 'in'/'not in' instead of find() for substring searches. + * Changed the packaging backend import, so that its methods can now be + accessed at apport.packaging instead of apport.packging.impl. + + -- Martin Pitt Sun, 28 Jan 2007 12:34:05 +0100 + +apport (0.44) feisty; urgency=low + + Some more 'Need for Speed' optimizations: + + * backends/packaging-dpkg.py, _check_files_md5(): Also accept a md5sum + string in addition to a md5sum file. + * backends/packaging-dpkg.py, get_modified_files(): Compare package file's + ctime and mtime against the package list file's mtime and only md5sum the + files that are newer. This drastically reduces the amount of md5suming + (usually to zero) and thus speeds up the information collection. + * backends/packaging-dpkg.py: Use a single hackish 'dpkg-query --show *' + as a portable variant of 'cat /var/lib/dpkg/status' to pre-fill the status + cache with all packages instead of calling dpkg -s on every single package + we query. This changes the time for figuring out dependencies and their + versions from 'unbearable for many packages' to 'barely noticeable'. + + New feature: per-package apport hooks to collect additional information: + + * apport/report.py: Add method add_hooks_info() which executes a function + add_info(report) from /usr/share/apport/.py. Also add + appropriate test cases. This provides per-package hooks for apport. + * apport/ui.py: Call add_hooks_info() in the information collection thread. + + Bug fixes: + + * apport/report.py: Add some more test cases for _check_interpreted() for + Python scripts. + * apport/python_hook.py: Check for a correct ExecutablePath in + test_general(). + * apport/python_hook.py: Use fileutils.likely_packaged() instead of + checking for /tmp and home, so that we ignore stuff in /usr/local, too. + Closes: LP#81244 + * apport/python_hook.py: If we figure out an ExecutablePath which is not + actually an executable, do not create a report. This particularly affects + interactive python sessions where sys.argv[0] is empty and thus + ExecutablePath ends up being the current directory. Add test cases. + Closes: LP#81237 + + -- Martin Pitt Wed, 24 Jan 2007 17:16:04 +0100 + +apport (0.43) feisty; urgency=low + + * apport/ui.py: Add method create_crash_bug_title() to construct a + reasonable standard bug title for crash reports, so that the automatic + duplicate detection actually has a chance to work. Also add test cases for + various signal crashes and an unhandled Python exception. + * apport/ui.py, file_report(): Submit a default bug title for crash reports. + Closes: LP#79657 + + -- Martin Pitt Tue, 23 Jan 2007 16:26:40 +0100 + +apport (0.42) feisty; urgency=low + + New feature: https://wiki.ubuntu.com/ApportImprovements (kernel interface + change): + + * bin/apport: Support calling without arguments, to support new semantics + agreed in the ApportImprovements spec: macro values (in particular, pid + and signal number) are passed as environment variables. + * preloadlib/libapport.c: Simulate new kernel behaviour described above. + * debian/apport.init: Set the kernel's core_pattern sysctl to pipe to apport + if the edgy-style 'crashdump-helper' sysctl helper does not exist. + + Bug fixes: + + * bin/apport-retrace: Beautify error message when report file is not + accessible. Closes: LP#79568 + * apport/ui.py: Fix crash in the bug pattern search thread if we could + not determine a package name. Closes: LP#77872 + * bin/apport: Only unlink the core dump if it still exists. Closes: LP#80866 + * gtk/apport-gtk.glade: Fix expand/fill attributes so that the expander gets + all the space when resizing the window. Closes: LP#80987 + * problem_report.py, write_mime(): Make sure that multi-line values that go + to the summary are terminated with a newline. + * apport/ui.py: Fix error message invocation for reporting cloakroom upload + failure. + * problem_report.py, write_mime(): Fix off-by-one comparison of the 'inline + text' treshold, so that apport's StacktraceTop field appears in bug + summaries. Also fix a corner case in CR line ending handling. Check both + things in the test suite. + * gtk/apport-gtk: Add missing 'import subprocess.'. Closes: LP#81007 + * debian/control: Bump apport's and apport-gtk's dependency to python-apport + to make sure that apport.ui is available. Closes: LP#81019 + * apport/ui.py: Add missing 'import pwd'. Closes: LP#81033 + + Minor improvements: + + * apport/ui.py: Get the cloakroom ticket number from the + X-Launchpad-Blob-Token HTTP header instead of parsing the resulting page. + + -- Martin Pitt Tue, 23 Jan 2007 11:27:20 +0100 + +apport (0.41) feisty; urgency=low + + New feature: Use Malone cloakroom for uploading reports. Closes: LP#70919 + + * gtk/apport-gtk.glade: Redesign bug reporting dialog to have a 'Create bug + report' and a 'Cancel' button. Also assign GTK_RESPONSE_* constants to the + dialog buttons. Go back to Glade 2 since Glade 3 still sucks too much. + * gtk/apport-gtk: Adjust workflow for sending report to Malone cloakroom + instead of asking the user to attach the file. Sending is not yet + implemented, though. + * gtk/apport-gtk: Do not show any dialogs any more when filing a bug. + * Add apport/MultipartPostHandler.py: This module provides an urllib2 opener + for uploading file attachments to forms over HTTP POST. This module is + (C) 2006 Will Holcomb and was taken from + http://odin.himinbi.org/MultipartPostHandler.py. (This is a serious hole + of the Python standard library IMHO.) + * apport/ui.py, file_report(): Upload blob to Malone (edge.launchpad.net for + now), retrieve the ticket, and pass it to +filebug. + + Refactorizations: + + * gtk/apport-gtk: Major refactorization to use modal dialogs and run() + instead of loosely coupled event handlers. + * Add apport/ui.py: Abstract frontend which encapsulates the logic, workflow + and UI independent bits and provides UI hooks for concrete + implementations. This both makes it easy to write more frontends like Qt + or CLI, and also makes the code automatically testable. Add an extensive + testsuite. + * run-tests: Add ui.py testsuite. + * gtk/apport-gtk: Port to ui.py's UserInterface (which means moving 1/3 of + the code into the new ui_*() methods and throwing away the rest). + * Add apport/REThread.py: Enhanced threading.Thread class that can propagate + the return value and uncaught exceptions of run() to the calling thread. + * apport/ui.py: Get rid of thread_check_bugpatterns() and hackish exception + handling, rewrite using REThread. + * apport/ui.py, gtk/apport-gtk: Add progress bar to report upload. It is + indefinite for now, because neither urllib2 nor httplib support upload + progress. + + Bug fixes: + + * gtk/apport-gtk.glade: Merged Gnome HIG fixes from Sebastian Heinlein, + thank you! + * Merge patch from Sebastian Heinlein to properly treat the apport-gtk icon + the dh_iconcache way and make it themeable. Thank you! + * gtk/apport-gtk: Remove periods from primary dialog texts to comply with + Gnome HIG standards. + * backends/packaging-dpkg.py, get_file_package(): Process list files in + chunks of 100, so that we do not exceed the maximum command line length if + there is a large number of packages installed. Closes: LP#64839 + * gtk/apport-gtk: Use pgrep with -u instead of pidof for testing whether the + crashed process is already running again, so that we do not match + processes of other users. Add procps package dependency for this. + * gtk/apport-gtk: Only offer to restart programs that are in the $PATH. E. + g. /usr/lib/firefox/firefox-bin cannot be called directly. + Closes: LP#79623 + * apport/report.py: Disassemble 16 instructions instead of 32 bytes to + become independent of the instruction size. Thanks to Kees Cook for the + patch! + + -- Martin Pitt Mon, 22 Jan 2007 10:47:33 +0100 + +apport (0.40) feisty; urgency=low + + * debian/control: Add missing python-dev build dependency, which is + apparently required for 2.5 now. + + -- Martin Pitt Mon, 15 Jan 2007 11:06:20 +0100 + +apport (0.39) feisty; urgency=low + + * Introduce abstract packaging interface and move all dpkg/apt specific bits + to a dpkg implementation of this packaging interface (merge + apport/abstract-pkg branch): + - Add apport/packaging.py: Abstract packaging system query interface. + - Add backends/packaging-dpkg.py: dpkg implementation of abstract + packaging interface. + - run-tests: Run tests of all backends. + - apport/fileutils.py, apport/report.py: Port to packaging.py interface. + - debian/control: Drop python-apport's 'python-apt' dependency since the + backend only uses dpkg now (without measurable performance penalty since + it uses internal caching). + - debian/rules: Install backends/packaging-dpkg.py as our packaging + backend to apport/packaging_impl.py and remove it again on clean. + + -- Martin Pitt Sat, 13 Jan 2007 15:53:08 +0100 + +apport (0.38) feisty; urgency=low + + * Add ./COPYING: GPL license. + * debian/rules: Build POT file again. + * apport/fileutils.py: Add get_all_system_reports() and + get_new_system_reports() and added test cases. Now the test suite can also + be run as root to be able to actually check their complete behaviour. + Adapt the other tests to get along with running the tests as root. + * bin/apport-checkreports: Add option --system to check for system crash + reports. Closes: LP#62316 + * gtk/apport-gtk: If called through sudo to process system crashes, drop + privileges to the original user in open_url() so that we get the web + browser correctly. (LP#62316) Caveat: The user cannot actually attach the + crash report file directly since it is not accessible to the user; this + will get fixed once Malone is able to link a bug report with uploaded + blobs. + + -- Martin Pitt Fri, 12 Jan 2007 14:29:44 +0100 + +apport (0.37) feisty; urgency=low + + * problem_report.py: Remove the requirement that values must not contain + empty lines. Add test cases that reading and writing values with empty + lines works, and add a test case that load() properly complains about + empty lines in debcontrol encoding (empty lines in values are encoded with + a single space). Closes: LP#78094 + * apport/report.py test suite: Do not rely on a particular structure of the + 'cat' stacktrace; apparently this is not consistent across architectures. + Instead, compile a segfaulting mini C program, let it dump core, and test + add_gdb_info() on it instead. This also allows us for a more rigid check + of StacktraceTop. + + -- Martin Pitt Mon, 8 Jan 2007 14:44:08 +0100 + +apport (0.36) feisty; urgency=low + + * gtk/apport-gtk.glade: Restore pulse step of progress bar (this apparently + got destroyed when saving with Glade 3). + * gtk/apport-gtk{,.glade}: Terminate the program properly when closing the + progress dialog instead of exiting with an exception. + * gtk/apport-gtk: Defer opening of the bug reporting window a bit so that + it appears on top of the browser window. Also enable the task bar blinking + for it when it is in the background. + * gtk/apport-gtk.glade: Restore vertical padding of bug report dialog labels + (another Glade 3 transition regression). + * bin/apport-retrace, apport/report.py: Call gdb on InterpreterPath if + present; calling it on a script does not yield anything useful. Add a test + case to report.py. + * debian/apport.init: Use mkdir -p instead of install -d, since install is + not in /bin. Thanks to Kees Cook for catching this. + * debian/control: Add missing python-apport dependency 'python-apt', which + is not caught by ${python:Depends}. + * gtk/apport-gtk: Catch MemoryError when loading a report and display an + error dialog instead of just crashing. Closes: LP#76235 + * gtk/apport-gtk: Properly catch exceptions from the bug pattern check + thread to avoid useless backtraces like in bug #75160. + * gtk/apport-gtk: Catch exceptions from decoding of damaged reports and + display an error message instead of crashing. Closes: LP#77149 + * apport/report.py: Add missing import of 'time' to test suite. + + -- Martin Pitt Fri, 5 Jan 2007 09:49:01 +0100 + +apport (0.35) feisty; urgency=low + + Optimizations: + + * apport/fileutils.py: Split out heuristics for determining whether a file + belongs to a package to new function likely_packaged() and add test cases. + * bin/apport: Do not use the expensive find_file_package() any more, use + likely_packaged() instead. This will create initial reports in some + corner cases (like custom non-packaged executables in /usr/bin/), but + greatly reduces I/O impact at crash time. We rely on apport-gtk to deal + with reports that do not actually belong to a packaged executable. + * apport/report.py, add_gdb_info(): Call gdb just once and split the output + instead of calling it again for each command. This should significantly + speed up the gdb stage especially for large programs/core dumps. + * Use cStringIO instead of StringIO in modules. + * gtk/apport-gtk: Code cleanup and refactorization: + - Move iteration over crash reports into __main__ to simplify housekeeping + in the ApportGTK class and get rid of some functions. + - Refactor creation of temporary report file. + * gtk/apport-gtk.glade: Split the text in the progress bar dialog so that we + can use it for multiple steps (like uploading data to Malone) while not + breaking translations. + + New feature: Bug reporting tool (https://wiki.ubuntu.com/BugReportingTool) + + * gtk/apport-gtk: Split out crash report initialization to new function + show_crashes() so that we can use the frontend for other purposes like bug + reporting. + * gtk/apport-gtk: Add --file-bug, --package, and --pid options; if given, + create a bug report about the given package instead of viewing crash + reports. + * gtk/apport-gtk{,.glade}: Generalize some strings to not talk about 'crash' + any more, to make them suitable for bug reporting, too. + * gtk/apport-gtk: Support --file-bug without specifying a package or a PID + for filing generic distro bugs. + * problem_report.py: Add new method write_mime() to encode a problem report + in MIME/Multipart RFC 2822 format (i. e. an email with attachments). Short + values are aggregated into the first inline text/plain part, large values, + binary values, and file references get gzip compressed separate + attachments. Also add various test cases. + + Bug/crash information: + + * apport/report.py, add_user_info(): Add list of system groups that the user + belongs to. + * bin/apport: Call add_user_info(), check functionality in test-apport. + * apport/report.py, add_gdb_info(): Add field 'StacktraceTop' with the top + five functions on the stack and no local variables. This reduced 'glimpse' + is suitable for inline display in bug reports and automatic processing + (dup finders, etc). + + Bug fixes: + + * po/Makefile: Add top_srcdir to work with current intltool. + * po/de.po: Unfuzz some strings. + * apport/report.py, add_gdb_info(): Strip away the 'No symbol table info + available' messages from stack traces. + * apport/report.py, test_search_bug_patterns(): Use security.u.c. instead + of archive.u.c., since the latter times out too often. + + -- Martin Pitt Wed, 3 Jan 2007 16:45:20 +0100 + +apport (0.34) feisty; urgency=low + + * apport/fileutils.py, mark_report_seen(): Do not bail out if os.utime() + fails due to access permissions. This happens if the file does not belong + to the user calling apport-gtk, but is world-readable (such as ubiquity + crash reports). If utime() fails, repeatedly open()/close() the file for + reading until atime != ctime, or the 1.2s timeout is reached. + Closes: LP#72250 + * apport/python_hook.py: Add unit test, call that in run-tests. + * apport/python_hook.py: Chmod the generated report to 0600 to not expose + potentially private data to the world, and to be consistent with other + crash reports. + * apport/fileutils.py: Add check_files_md5() and test cases. + * apport/report.py, add_package_info(): Append list of modified package + files to Package: and Dependencies: value. Closes: LP#70946 + * bin/apport-retrace: Get along with Package:/Dependencies: fields with list + of modified files. + + -- Martin Pitt Fri, 22 Dec 2006 12:40:55 +0100 + +apport (0.33) feisty; urgency=low + + * debian/rules: Convert to cdbs. This fixes the dh_pysupport invocation + along the way, too. + * gtk/apport-gtk: Rework web browser invocation: Use kfmclient if available, + fall back to firefox-remote, then to webbrowser.open(). Do not call + x-www-browser any more since this would block if no running browser was + open before. + * Drop the apport_utils module (and with it the python-apport-utils + package), it became too much of a dumping ground. The report file handling + functions now live in apport.fileutils, and the debugging information + collectors are now methods of a new 'Report' class (subclass of + ProblemReport) in the new apport.report module. Adjust all programs + accordingly. + * Add debian/python-apport.postinst: Remove old .pyc and .pyo cruft on + upgrades to clean up after our broken dh_pysupport invocation in earlier + versions, so that the new modules are actually used. + * Remove debian/apport.postinst: Those cleanups were only necessary for + intra-edgy upgrades. + + -- Martin Pitt Tue, 19 Dec 2006 01:15:27 +0100 + +apport (0.32) feisty; urgency=low + + * apport_utils.py: Filter out "no debugging symbols found" warnings from gdb + outputs, and add some tests for this. Thanks to Kees Cook for the patch! + * test-apport: Fix AGENTPATH directory when building the preload library + (recently moved to bin/). + * use-local: Fix path to apport as well (recently moved to bin/). + * apport-retrace: Use ldd on InterpreterPath if present; ldd'ing scripts + will not get us very far. Closes: LP#72201 + + -- Martin Pitt Thu, 14 Dec 2006 13:42:58 +0100 + +apport (0.31) feisty; urgency=low + + * Move scripts to bin/ in source package. + * Add apport/python_hook.py: Default exception handler for Python, to create + apport reports for unhandled exceptions. Thanks to Robert Collins + for this! Closes: LP#70957 + * Add new package python-apport to ship the new Python package 'apport'. + This includes the python crash hook for now, but in the near future + apport-utils will get redesigned and put into this package, too. + * debian/control: apport now depends on python-apport instead of + python-apport-utils. + * apport_utils.py: Quiesce gdb error messages in test suite. + + -- Martin Pitt Sat, 25 Nov 2006 12:30:41 +0100 + +apport (0.30) feisty; urgency=low + + * test-apport, use-local: Support both kernel 2.6.17 and 2.6.19 sysctl names + (crashdump-helper vs. crashdump). + * gtk/apport-gtk.glade: Improve dialog title capitalization. + Closes: LP#70652. + * debian/apport.cron.daily: Immediately exit if /var/crash does not exist. + Create /var/crash in debian/apport.init if it does not exist. + Closes: LP#71599 + * Convert all tabs in Python source code files to spaces to comply to PEP 8. + Thanks to Robert Collins for pointing this out. + * apport_utils.py, gtk/apport-gtk: Do not pass None to subprocess arguments + if report belongs to a non-packaged program. Thanks to Robert Collins for + discovering and fixing this! Closes: LP#70942 + * debian/apport.init: Change /var/crash permissions to 1777, so that custom + crash handlers (in Python/Mono/etc.) can put reports there. + + -- Martin Pitt Sat, 25 Nov 2006 10:44:33 +0100 + +apport (0.29) feisty; urgency=low + + * apport-retrace: Do not crash if a linked library is not a dependency. + Closes: LP#65914 + * apport_utils.py: + - Add test_find_file_package_diversion() selftest to check diversion + handling. + - find_file_package(): Check for and respect diversions. + - Closes: LP#65917 + * debian/apport.init, test-apport, use-local: Adapt to 'crashdump-helper' -> + 'crashdump' sysctl renaming in 2.6.19. + * test-apport: Restore cwd even when failing a test. + * problem_report.py, ProblemReport.write(): Support file-like objects as + argument of file references to support direct reading from pipes. Add test + case test_write_fileobj(). + * apport: Support '-' as core file argument, in which case the core will be + read from stdin. This paves the way for using Linux 2.6.19's 'pipe + core_pattern' feature. Bump python-problem-report dependency to >= 0.29 + for this. + * apport: Confine permissions of log file to root:adm 0640, just in case. + * apport: Temporarily drop real u/gid to target user for the os.access() + tests, so that normal users cannot verify the existence of a given + inaccessible file. Add comprehensive tests to apport_utils' test suite and + test-apport. Thanks to Kees Cook for this patch! + * apport_utils.py, find_file_package(): Terminate fgrep options with '--' to + avoid problems with funny file names. Thanks to Kees Cook for spotting + this! + * test-apport: Automatically detect whether ULIMIT_CORE is nonzero, and + adapt tests accordingly: check that core still exists after invoking + apport, and clean it up. + * apport-retrace: Add new mode -g/--gdb which starts an interactive gdb + session with the report's core dump. Add this to man/apport-retrace.1, too. + * apport-retrace: If -c is given, completely remove the CoreDump field from + the report instead of setting it to 'removed'. + * test-apport: When using 'lib' mode, point APPORT_LOG_FILE to a temporary + file. Print it if the test suite fails. + * test-apport: Fix EXFAILure of the 'core dump works for non-writable cwds' + test case. + * preloadlib: Support -DPIPE_CORE mode which emulates the + pipe-in-core_pattern mode of kernel 2.6.19. + * test-apport: Build preload library with core piping. No more failed test + suite checks in 'lib' mode. + + -- Martin Pitt Sun, 5 Nov 2006 07:10:30 -0800 + +apport (0.28) edgy; urgency=low + + "No core - ignore!" + + * apport: Do not create a report for crashes which we do not get a core dump + for. The reports are useless and only clutter our bug tracker. + + -- Martin Pitt Mon, 9 Oct 2006 15:22:32 +0200 + +apport (0.27) edgy; urgency=low + + * apport: Ignore SIGABRT for now; it's usually signalled from abort() or + assertion failures and we only get reports with unusable stack traces for + it (see #61938). + * gtk/apport-gtk: If gnome-open is not available, fall back to x-www-browser + instead of using webbrowser.py, to respect default browser in XFCE. + Closes: LP#64209 + * apport: use os.nice() instead of executing 'renice'. Thanks to Benoit + Boissinot for noticing. + * apport_utils.py, find_file_package(): Lower() both strings in the speedup + heuristics to match e. g. /usr/bin/Xorg -> xserver-xorg. Thanks to Kees + Cook! + * apport_utils.py, report_add_package_info(): Do not crash if we encounter a + 'None' current version, which can happen with uninstalled alternative + dependencies. Thanks to Kees Cook for tracking this down! + + -- Martin Pitt Fri, 6 Oct 2006 17:15:08 +0200 + +apport (0.26) edgy; urgency=low + + * apport-retrace: Clean up code a bit: + - Move option parsing to separate function. + - Use apport_utils' report_add_gdb_info() instead of duplicating the gdb + code. + * apport_utils.py, report_add_gdb_info(): Add optional parameter 'debugdir' + to specify an alternate debug file symbol root directory. + * apport-retrace: Add option -d/--download-debug to automatically download + available ddebs, create a temporary debug symbol directory from already + installed and downloaded ddebs, and point gdb to use that. Also add option + -C/--cache-dir to specify a permanent ddeb cache directory (by default, a + temporary one is used). Update the manpage accordingly. + * apport-retrace: Make the best out of a report without packaging + information (which can happen if the user does not click on 'report bug' + in apport-gtk). + * apport_utils, report_add_proc_info(): + - Move heuristics for detecting interpreted scripts to a separate function + to be able to provide separate test cases for it. Check a few more + special cases for mono programs. + - Make interpreter heuristics even scarier to detect some more mono corner + cases (like banshee and beagled-helper). Closes: LP#58859 + + -- Martin Pitt Wed, 4 Oct 2006 19:10:47 +0200 + +apport (0.25) edgy; urgency=low + + * Drop apport-gtk's update-notifier dependency to a Recommends:. + * apport_utils.py, report_add_gdb_info(): Add register dump and disassembly + of the last 32 bytes, they might be useful to see what's going on + sometimes. Thanks to Kees Cook for the idea and the patch. + * test-apport, check_crash(): Verify that a crash does not leave a core file + behind. (Test for LP#62972) + * preloadlib/libapport.c: Do not unlink the core file after calling apport, + but set REMOVE_CORE=1 environment instead. This matches the current + kernel behaviour. + * apport: Register an atexit handler as early as possible for unlinking the + core dump if REMOVE_CORE environment is set. Closes: LP#62972 + * apport: Set nice level 10 instead of 5. Closes: LP#63099 + + -- Martin Pitt Mon, 2 Oct 2006 14:21:53 +0200 + +apport (0.24) edgy; urgency=low + + The "Need for speed" release -- rrrroarrr! + + * apport: Remove _copy_shrink_corefile(): While this has an enormous impact + on the size of an uncompressed core dump, it only causes a negligible size + reduction of the bzip2'ed core, but it needs a lot of I/O resources for + large core dumps. + * problem_report.py: + - Use zlib instead of bzip2 for compressing the binary data (in + particular, core dumps). This results in slightly bigger files, but speeds + up compression a lot (30 seconds vs. ~2:45 minutes for a Firefox core dump + on my slow iBook). Closes: LP#61538 + - ProblemReport.read(): Support both bzip2 and zlib compression to be able + to read existing reports, too. + - Add/Adapt test cases. + * Move InformationCollector._get_gdb() from apport to apport_utils.py + report_add_gdb_info(), and add a test case for it. + * apport_utils.py, report_add_package_info(): Support calling without a + package name, then it will be figured out from ExecutableName. Extend test + case accordingly. + * test-apport: Do not require apport reports to contain gdb, packaging, and + OS information, since we are going to move them out of apport. + * apport: Do not collect static information. It requires a lot of CPU and + I/O resources and slows down the machine a lot, and it can be added to + the report later in the frontend. This also gets rid of the entire + InformationCollector class, since everything has been moved to + apport_utils.py now. Closes: LP#62542 + * apport: Do not intercept KeyboardInterrupt as unhandled exception (only + useful for command line debugging, though). + * problem_report.py: Add test case for appending new data to an existing + report, fix write() function to not rely on an existing ProblemType key. + * problem_report.py: Add new method ProblemReport.add_to_existing() to + update an already existing problem report with new data. Add test case. + * apport_utils.py, mark_report_seen(): Use os.utime() instead of + open()/read() and a timeout for simpler and faster operation. + * gtk/apport-gtk: + - Collect gdb/packaging/operating system information when the user chooses + to file a bug and update the apport report. + - Change the 'Downloading bug patterns...' progress dialog to 'Collecting + information about the crash...'. + * debian/control: Bumped library dependencies of apport-gtk, added + update-notifer dependency. + + -- Martin Pitt Fri, 29 Sep 2006 15:47:56 +0200 + +apport (0.23) edgy; urgency=low + + * apport: Reset signal handler to SIG_IGN in the crash signal handler, to + avoid an endless crash/handler loop (noticed during debugging LP#61708). + * debian/apport.init: Do not let the script run with set -e, so that + do_{start,stop} can deliver their return codes for proper evaluation, + instead of immediately existing. Closes: LP#61796 + * test-apport: Check that SIGQUIT does not generate a report. (Check for + bug #62511). + * apport: Ignore SIGQUIT. Closes: LP#62511 + + -- Martin Pitt Thu, 28 Sep 2006 20:57:38 +0200 + +apport (0.22) edgy; urgency=low + + * apport_utils.py, report_add_proc_info(): Make 'interpreted script' + detection more general to also work for mono programs. + * test-apport: Check that non-packaged scripts do not generate a report. + * apport: Call ic.collect_runtime_information() earlier and drop the local + /proc/pid/exe examination, so that we get proper script detection. This + avoids getting crash reports for non-packaged scripts (see test case + change from above). + * apport: Do not try to chmod the report file if we could not create it and + output to stderr instead (this mainly affects local testing only). + * apport_utils.py, find_file_package(): First grep the package lists whose + names are a substring of the crashed binary name (or vice versa), to + immensely speed up the package name determination in many cases. + * apport: Drop the maximum number of consecutive crashes per executable + from 5 to 2. 5 creates a too bad user experience and creates the + impression that it will never stop. Closes: LP#61078 + + -- Martin Pitt Tue, 19 Sep 2006 16:16:46 +0200 + +apport (0.21) edgy; urgency=low + + * apport: Keep a partially written report with '000' permissions, and only + chmod it to 0600 when it is fully written. This stops update-notifier from + picking up half-written reports and get activated several times. + Closes: LP#59988 + * apport: Add the executable path to the first line of logging. + * apport: Run the complete code under control of the general exception + fallback handler. + * debian/apport.default: Increase maximum core size to 200 MB, to also catch + Firefox and Evolution core dumps. + * apport_utils.py, find_file_package(): Before searching the dpkg database + (which is expensive), check if the executable path matches a whitelist of + path prefixes. This replaces the weaker blacklist (/tmp and /home) in + apport itself. + * gtk/apport-gtk: Show a progress dialog while checking for bug patterns and + execute report_search_bug_patterns() in a separate thread, so that the UI + is not potentially blocked for a long time. + * apport: Gracefully abort if we cannot readlink /proc/pid/exe, instead of + falling over with an exception. Closes: LP#59993 + * debian/rules: Use 'multiuser' instead of 'defaults' for dh_installinit. + Clean up the unnecessary rc symlinks in postinst and add appropriate + sysv-rc dependency. + + -- Martin Pitt Thu, 14 Sep 2006 23:16:26 +0200 + +apport (0.20) edgy; urgency=low + + * apport: Renice ourself to priority 5 to not slow down the user's processes + so heavily. + * Add manpages for apport-retrace(1) and apport-unpack(1) and install them + into apport. Closes: LP#58463 + * problem_report.py: Test attaching two files instead of one in the + test_write_file() regression check to assert correct key sorting. + * problem_report.py: Alter write() method to sort binary data to the end of + the report. This makes reports easier to read, and also shows relevant + information more quickly when progressively loading them in a web browser. + Adapt regression tests accordingly. + * Move setting of ExecutablePath from apport's InformationCollector ctor to + apport_utils' report_add_proc_info(), where it belongs to. Check + ExecutablePath in apport_utils' regression tests. + * apport-unpack: Support '-' as report argument to read from stdin. + * apport_utils.py, report_add_proc_info(): + - Apply some heuristics to determine whether the crashed process is an + interpreted script (check if the Name in /proc/pid/status matches + the second /proc/pid/cmdline part, and if that command line argument is + an existing executable file). In the case of an interpreted script, set + ExecutablePath to the script and InterpreterPath to the actually crashed + ELF binary. + - Test this with a shell (/bin/zgrep) and a Python (./apport-unpack) + script in the test suite. + - Closes: LP#58859 + * Add debian/apport.logrotate to add a daily 7-step /var/log/apport + log rotation. + * test-apport: Fix WCOREDUMP() and pidof checks in check_crash(). + * apport: Install a signal handler for all 'crashy' signals, which just logs + the signal and stack info and exits. This should avoid a crashing apport + examining itself, possibly in an endless loop. Closes: LP#58873 + + -- Martin Pitt Mon, 11 Sep 2006 09:20:18 +0200 + +apport (0.19) edgy; urgency=low + + * apport_utils.py: Add function report_search_bug_patterns(): Try to + download a package specific bug pattern XML file from a given URL base + directory and return the bug URL in case of a match. Also add extensive + test suite check. + * test-apport: Fix help message. + * apport-gtk: Make use of the new report_search_bug_patterns() function and + display appropriate instructions on match. Bump python-apport-utils dependency. + + -- Martin Pitt Tue, 5 Sep 2006 11:31:17 +0200 + +apport (0.18) edgy; urgency=low + + The "mating dance for ubiquity" release. + + * apport-gtk: + - Use pidof's -x option in the detection whether the program is already + running to correctly handle scripts. + - Do not assume the presence of the ExecutablePath key in reports, but + gracefully fall back to Package. + - If the report specifies an explicit DesktopFile, use that instead of + trying to figure it out. + - Only created reduced report and show the radio buttons if there are + actually removed fields. + - Change tooltip of 'reduced report' radio button to be more generic (do + not refer to the memory dump, but to 'large items', since this is what + apport-gtk currently does). + - Support new field 'BugDisplayMode: file | list (default)'. In 'file' + mode, display the /+filebug page instead of /+bugs and change + instructions accordingly. + - Use the ProcCmdline attibute to restart an application; correctly + parsing of all the desktop file is just not possible at this point. + - Support new field 'RespawnCommand' to use custom respawning command. + * problem_report.py: Add method has_removed_fields() to check whether load() + skipped any fields due to binary=False. Add test suite check. + * apport_utils.py: Fix the quoting in ProcCmdline so that it is fully shell + compatible. + * run-tests: Check if kernel crash dump helper is active, and if so, run + test-apport in kernel mode. + * problem_report.py: Support an optional second argument of file references + which controls whether or not the file contents will be compressed/encoded + (defaults to True for backwards compatibility). Add test suite checks. + + -- Martin Pitt Fri, 25 Aug 2006 14:01:47 +0200 + +apport (0.17) edgy; urgency=low + + * Move packaging information collection from apport to new function + report_add_package_info() in apport_utils.py, add test suite check. + * Move operating system information collection from apport to new function + report_add_os_info() in apport_utils.py, add test suite check. + * Move /proc information collection from apport to new function + report_add_proc_info() in apport_utils.py, add test suite check, and fix + handling of failed /proc/$$/environ reading. + * preloadlib/libapport.c: Route gcore's stderr to /dev/null to suppress + error messages during the test suite and to become more compatible to the + kernel behaviour. + * Change apport_utils.py to be a public module and ship it in the new + python-apport-utils package, so that other applications like ubiquity can + use it easily. + * po/de.po: Add new translations to make this complete again. + * problem_report.py, apport_utils.py: Prepend UnitTest classes with '_' so + that they do not appear in the help() output. + * apport_utils.py: Add make_report_path(), which constructs the canonical + crash report pathname for a given report. + * Add debian/apport.postinst: Remove /usr/share/apport/apport_utils.pyc when + upgrading from an earlier version, so that the programs in + /usr/share/apport actually use the version from p-apport-utils. + + -- Martin Pitt Tue, 22 Aug 2006 18:14:00 +0200 + +apport (0.16) edgy; urgency=low + + * test-apport: Check that non-packaged binaries do not generate a report. + * apport_utils.py: Add find_file_package() to find the package a file + belongs to. This uses fgrep /var/lib/dpkg/info/*.list which is much faster + than dpkg -S. Also add test suite check. + * apport: Use find_file_package() instead of direct dpkg -S call and pass + the result to the InformationCollector ctor to avoid grepping the dpkg + lists twice. + * apport: Immediately exit if the executable name starts with /home or /tmp, + to avoid grepping the dpkg database in the common developer case. + * apport: Replace 0-bytes in ProcCmdline with spaces to keep them readable. + * apport-gtk: Offer an alternative small report (without the core dump) for + users with slow internet connection. + + -- Martin Pitt Mon, 21 Aug 2006 19:34:47 +0200 + +apport (0.15) edgy; urgency=low + + * Add apport-unpack: Script to extract the fields of a problem report into + separate files into a new or empty directory. Mainly useful for extracting + compressed binary data like the core dump. + * test-apport: Check that dumped environment only contains security + insensitive variables. + * apport: Filter out all environment variables but $SHELL, $PATH, and + locale/language related ones. Closes: LP#56846 + * test-apport: Delete test report in the cleanup handler so that the + kernel-mode test can be run multiple times without manual cleanup. + * test-apport: Check for running apport and test executable processes in + check_crash(). + * preloadlib/libapport.c: Improve error checking, some robustification. + * test-apport: If using the preload library, wait a second between the test + process invocations in the flooding test to mitigate a strange race + condition that sometimes causes the signal handler not to be executed. + + -- Martin Pitt Sun, 20 Aug 2006 16:28:43 +0200 + +apport (0.14) edgy; urgency=low + + * preloadlib/libapport.c: Write core dump into cwd instead of /tmp to act + like the current kernel. + * apport_utils.py: Check APPORT_REPORT_DIR environment variable for an + alternate crash report directory. This is mainly useful for a local test + suite. + * apport: Quiesce the apt module's FutureWarning. + * preloadlib/libapport.c: Re-raise the signal instead of doing exit() so + that the process exits with the same code as it would do without the + library. + * preloadlib/libapport.c: Close stdout for gcore process. + * Add test-apport: Use preloadlib/ and APPORT_REPORT_DIR to create a + sandboxed environment and run various apport functionality tests. Also add + this script to run-tests. + * apport_utils.py, delete_report(): Actually try to unlink the report before + falling back to truncating it to zero bytes. + * preloadlib/libapport.c: Close stderr for apport process. + + -- Martin Pitt Fri, 18 Aug 2006 15:46:37 +0200 + +apport (0.13) edgy; urgency=low + + * Do not run the test suite on build since on the buildds modifying + file atimes does not work. + + -- Martin Pitt Fri, 18 Aug 2006 00:59:26 +0200 + +apport (0.12) edgy; urgency=low + + * apport-gtk: Make bug report window resizable when the details are + expanded. Closes: LP#56672 + * apport_utils.py: Add get_recent_crashes() and a test suite check for it. + * apport: If the same binary produced more than 5 crashes in the last 24 + hours, ignore the crash. This is a hideous and pretty ad-hoc band-aid to + avoid flooding users with reports for continuously crashing respawning + processes. Closes: LP#56362 + * apport: Clean up exit codes to only exit with 0 if report was created, and + with 1 otherwise (to become more compatible to proposed future kernel + behaviour, where core dumps are only generated on demand). + * Add run-tests script which calls all available selftests. + * debian/rules: Run run-tests during build to have the package FTBFS on + regressions. Add python build dependency for this (it is already there + implicitly anyway). + + -- Martin Pitt Thu, 17 Aug 2006 16:06:41 +0200 + +apport (0.11) edgy; urgency=low + + * gtk/apport-gtk.glade: Remove separators from dialogs. Closes: LP#56326 + * apport: + - Move information collection from ctor to two new separate functions + collect_runtime_information() (fast, privileged, crashed process must + exist) and collect_static_information() (slow, unprivileged, crashed + process does not need to exist). This allows a cleaner design. + - Add missing close() call in init_error_log(). + - Do not catch SystemExit in the final catch-all-and-log clause (will + become important once we switch to master/slave processes). + - Clean up handling of temporary files. + - Log successful report creation with file and package name, to ease + debugging. + - transitive_dependencies(): Do not break on pure virtual dependencies + (like perl-api-XXX). + * Add debian/apport.default: Default file to disable apport entirely and to + change the maximum size of kernel created core dumps. + * debian/apport.init: Evaluate new default file. + + -- Martin Pitt Wed, 16 Aug 2006 17:05:19 +0200 + +apport (0.10) edgy; urgency=low + + * apport-gtk: Show report file size in bug report window. + * apport: Correctly handle relative paths to core dumps (use crashed + process' cwd). + * Fix the GPL URLs in source file's copyright comments. + * debian/apport.cron.daily: Add -mindepth 1 to find commands to avoid + attempting to remove the /var/crash/ directory. Closes: LP#55107 + * problem_report.py: + - Fix precise whitespace handling in continuation lines, add selftest. + - Add selftest for reading a report, modifying fields, and writing it + back. + - Fix writing back binary data, adapt test suite to check it. + - Fixed ProblemReport.load() to clean up old data, added selftest. + - Restructure class to inherit from IterableUserDict and throw away all + the now obsolete dictionary wrapper methods. + * debian/apport.init: Add colon to description to make output less + confusing. + * Add apport-retrace and install it into apport: This tool takes a crash + report and refreshes the stack traces in it. This is particularly useful + if debug symbols are installed now, but haven't been at the time the crash + occured. + + -- Martin Pitt Fri, 11 Aug 2006 15:40:05 +0200 + +apport (0.9) edgy; urgency=low + + * apport: Call objcopy to throw out READONLY/CODE sections from the core + dump, which drastically reduces its (uncompressed) size (factor 2 to 10). + This has little effect on the bzip2'ed core dump, though. + * apport: + - Support an optional third command line argument which specifies the + location of a core dump. + - If a core dump is given, call gdb on the core dump instead of the + crashed process. We cannot attach to the latter if we are called by the + kernel (since the crashed process is in uninterruptible kernel sleep). + - If no core dump is given, do not attempt to do anything gdb related. + - This matches the future behaviour of the kernel crash dump helper while + remaining compatible to the previous call semantics. + * Add preloadlib/{Makefile,libapport.c}: LD_PRELOADable library which + emulates the future kernel behaviour. This is ONLY for testing and + development purposes. It uses unsafe temporary file handling and thus must + not be used on production boxes! + * Ship preloadlib/* as examples in package 'apport' for people who want to + play with it until the new kernel arrives. + * Add preloadlib/README: Explain how to use the preload library. + + -- Martin Pitt Wed, 9 Aug 2006 12:12:20 +0200 + +apport (0.8) edgy; urgency=low + + * apport_utils.py: + - Add two new functions seen_report() and mark_report_seen(). + - get_new_reports(): Only return unseen reports, add function + get_all_reports() for the old behaviour. + * gtk/apport-gtk.py: Do not delete reports after notifying about them. This + way, we do not need to add another button to save the report (which is + considered evil UI-wise), but still retain the report for filing and + examining later. + * Replace all usages of '/var/crash' to a new global variable in + apport_utils; this is particularly useful for test suites. + * apport.py: Overwrite old reports if they are seen. + * apport_utils.py: Add a test suite for all exported functions. + + -- Martin Pitt Tue, 8 Aug 2006 19:29:23 +0200 + +apport (0.7) edgy; urgency=low + + * Add apport_utils.py: Factorize out some common code of apport-gtk, + possible future frontends, and some backend tools. + * Add apport-checkreports: Test if there are new crash reports for the + invoking user. This factorizes out the tests we currently do in + update-notifier and makes them easier to change and keep in sync with + apport itself. Ship the script in the apport package. + + -- Martin Pitt Tue, 8 Aug 2006 17:24:46 +0200 + +apport (0.6) edgy; urgency=low + + * Add missing intltool build dependency to fix FTBFS. + + -- Martin Pitt Thu, 3 Aug 2006 09:15:42 +0200 + +apport (0.5) edgy; urgency=low + + * apport-gtk: Remove the crash report after it got displayed. + * apport-gtk: Fix exception on startup if no readable crash reports exist. + + -- Martin Pitt Wed, 2 Aug 2006 23:42:34 +0200 + +apport (0.4) edgy; urgency=low + + * Implement completely new UI according to the design described at + https://wiki.ubuntu.com/CrashReporting. Many thanks to Matthew Paul + Thomas! + * po/Makefile: Fix default target to not just break. Now it builds the .pot + file. + * debian/rules: Build .pot file on package build for automatic Rosetta + import. + * Bring German translations up to date. + * po/Makefile: Supply '--language=python' to intltool-update to properly + extract strings from apport-gtk. + + -- Martin Pitt Wed, 2 Aug 2006 23:14:58 +0200 + +apport (0.3) edgy; urgency=low + + * debian/rules clean: Also clean po/. + * debian/apport.cron.daily: Clean away empty files everytime. + * apport: Only consider a report as already present if it has a non-zero + size. + * apport: Set proper group for report files instead of 'root'. + * apport-gtk: Ignore 0-sized reports. + * apport-gtk: Add button to remove the current report (by truncating the + file to zero bytes; a user cannot unlink files in /var/crash). + * apport-gtk: Only display reports that the user can actually read. + * problem_report.py: Add 'binary' option to ProblemReport.load() to + optionally skip binary data. + * debian/rules: Clean stale *.pyc files. + * python-gtk: Do not load binary data (core dumps, etc.) to greatly speed up + the GUI. They are just gibberish anyway. + * apport: Switch from apt_pkg to apt, add SourcePackage: to reports. + * apport-gtk: Use source package name for the Malone URL. + * debian/rules: Call setup.py install with --no-compile to not ship *.pyc in + debs. + + -- Martin Pitt Mon, 31 Jul 2006 13:11:52 +0200 + +apport (0.2) edgy; urgency=low + + * debian/apport.cron.daily: Do not produce error messages if 'find' does not + find any crash reports. + * problem_report.py: Support iterators, add test case. + * apport: Filter out trailing 0-byte from ProcCmdline. + * Add a simple GTK frontend, ship it in new package apport-gtk. + + -- Martin Pitt Thu, 27 Jul 2006 23:52:33 +0200 + +apport (0.1) edgy; urgency=low + + * Initial release. This package implements the client backend part of + https://wiki.ubuntu.com/AutomatedProblemReports. + + -- Martin Pitt Mon, 24 Jul 2006 14:21:10 +0200 + --- apport-1.18.orig/debian/python-problem-report.install +++ apport-1.18/debian/python-problem-report.install @@ -0,0 +1 @@ +usr/lib/python*/*-packages/problem_report* --- apport-1.18.orig/debian/apport.manpages +++ apport-1.18/debian/apport.manpages @@ -0,0 +1,3 @@ +man/apport-unpack.1 +man/apport-cli.1 +man/apport-bug.1 --- apport-1.18.orig/debian/apport-retrace.manpages +++ apport-1.18/debian/apport-retrace.manpages @@ -0,0 +1,3 @@ +man/apport-retrace.1 +man/dupdb-admin.1 +debian/local/apport-chroot.1 --- apport-1.18.orig/debian/apport.upstart +++ apport-1.18/debian/apport.upstart @@ -0,0 +1,50 @@ +# apport - automatic crash report generation +# +# While this job is active, core dumps will captured by apport and +# used to generate automatic crash reports. + +description "automatic crash report generation" + +start on runlevel [2345] +stop on runlevel [!2345] + +env enabled=1 + +pre-start script + . /etc/default/apport + [ "$enabled" = "1" ] || [ "$force_start" = "1" ] + + mkdir -p -m 1777 /var/crash + + # check for kernel crash dump, convert it to apport report + if [ -e /var/crash/vmcore ] + then + /usr/share/apport/kernel_crashdump || true + fi + + # check for incomplete suspend/resume or hibernate + if [ -e /var/lib/pm-utils/status ] + then + /usr/share/apport/apportcheckresume || true + rm -f /var/lib/pm-utils/status + rm -f /var/lib/pm-utils/resume-hang.log + fi + + echo "|/usr/share/apport/apport %p %s %c" > /proc/sys/kernel/core_pattern +end script + +post-stop script + # Check for a hung resume. If we find one try and grab everything + # we can to aid in its discovery + if [ -e /var/lib/pm-utils/status ] + then + ps -wwef > /var/lib/pm-utils/resume-hang.log + fi + + if [ "`dd if=/proc/sys/kernel/core_pattern count=1 bs=1 2>/dev/null`" != "|" ] + then + exit 1 + else + echo "core" > /proc/sys/kernel/core_pattern + fi +end script --- apport-1.18.orig/debian/apport.install +++ apport-1.18/debian/apport.install @@ -0,0 +1,25 @@ +etc/apport/blacklist.d +etc/default +etc/cron.daily +etc/bash_completion.d +usr/share/apport/apport +usr/share/apport/apport-checkreports +usr/share/apport/package_hook +usr/share/apport/kernel_crashdump +usr/share/apport/kernel_oops +usr/share/apport/gcc_ice_hook +usr/share/apport/apportcheckresume +usr/share/apport/unkillable_shutdown +usr/share/apport/dump_acpi_tables.py +usr/share/apport/testsuite/ +usr/share/doc/apport +usr/share/locale +usr/share/icons +usr/share/mime +usr/share/apport/package-hooks +usr/share/apport/general-hooks +usr/bin/apport-cli +usr/bin/apport-unpack +usr/bin/apport-bug +usr/bin/apport-collect +../../java/apport.jar usr/share/apport/ --- apport-1.18.orig/debian/pyversions +++ apport-1.18/debian/pyversions @@ -0,0 +1 @@ +2.5- --- apport-1.18.orig/debian/copyright +++ apport-1.18/debian/copyright @@ -0,0 +1,24 @@ +apport is written and maintained by Martin Pitt +. Initial packaging was on Wed, 12 July 2006. + +The upstream source was downloaded from: + https://launchpad.net/apport/+download + +Copyright (C) 2006-2009 Canonical Ltd. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL-2'. --- apport-1.18.orig/debian/apport.postinst +++ apport-1.18/debian/apport.postinst @@ -0,0 +1,10 @@ +#!/bin/sh +set -e + +if [ "$1" = configure ]; then + # directory is required for package failures even if apport is disabled and + # thus the upstart job does not run + mkdir -p -m 1777 /var/crash +fi + +#DEBHELPER# --- apport-1.18.orig/debian/source/format +++ apport-1.18/debian/source/format @@ -0,0 +1 @@ +1.0 --- apport-1.18.orig/debian/local/ubuntu-fat-chroot +++ apport-1.18/debian/local/ubuntu-fat-chroot @@ -0,0 +1,28 @@ +#!/bin/sh -ex + +# Install a set of commonly needed packages into a minimal Ubuntu chroot as +# created by apport-chroot. + +[ -f "$1" ] || [ -d "$1" ] || { + echo "Usage: $0 " + exit 1 +} + +cat < /usr/lib/xulrunner-1.9.1b3/xulrunner-bin +dpkg-divert --divert /usr/bin/touch.real --rename /usr/bin/touch +/bin/echo -e '#!/bin/sh\ntouch.real "$@"; exit 0' > /usr/bin/touch +chmod 755 /usr/bin/touch +ln -s . /target + +DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-unauthenticated libgnome2-0 libqt3-mt +apt-get clean +EOF --- apport-1.18.orig/debian/local/apport-chroot.1 +++ apport-1.18/debian/local/apport-chroot.1 @@ -0,0 +1,305 @@ +.TH apport\-chroot 1 "August 11, 2007" "Martin Pitt" + +.SH NAME + +apport\-chroot \- Create and use chroots for apport retracing + +.SH SYNOPSIS + +.B apport\-chroot +[ +.I options +] +.B create +.I release chrootpath + +.B apport\-chroot +[ +.I options +] +.B retrace +.I crashid +.br +.B apport\-chroot +[ +.I options +] +.B retrace +.I reportfile + +.B apport\-chroot +[ +.I options +] +.B upgrade +.I chroot +.br +.B apport\-chroot +[ +.I options +] +.B upgrade all + +.B apport\-chroot +[ +.I options +] +.B installdeb +.I chroot debpath +[ +.I debpath ... +] + +.B apport\-chroot +[ +.I options +] +.B login +.I chroot + +.SH DESCRIPTION + +.SS Introduction + +.B apport\-chroot +is a tool to create, update, and manage chroots for using +.B apport\-retrace +for several distributions and releases without needing to touch the +installed system at all. It uses fakeroot and fakechroot, so that the +entire reprocessing of apport reports which get submitted to the crash +database can happen on a system where you do not have any root +privileges or special packages installed. + +Chroots can either be kept as a normal directory, or be stored as a +compressed tarball. In the latter case, the tarballs are temporarily +unpacked when using them. While unpacking takes a certain amount of +time, this is well compensated by not having to purge packages after +installing them for retracing, and being sure not to destroy the +chroot on failed upgrades, buggy maintainer scripts, etc. This also +allows you to use a chroot for several tasks in parallel. + +.SS Installation + +If fakeroot or fakechroot themselves are not installed, you can just +put the libraries anywhere and set the environment variables +.B APPORT_LIBFAKEROOT +and +.B APPORT_LIBFAKECHROOT +to the full path of +.B libfakeroot.so +and +.B libfakechroot.so\fR. If the distribution packages are installed, +they will be found and used automatically. + +.SS Creating chroots + +The +.B create +mode is mostly a wrapper around +.B debootstrap +which does the grunt work of actually creating a basic chroot. +.B apport\-chroot +then does some additional modifications: + +.IP * 4 +Install some additional packages like +.B apport-retrace +and +.B gpgv +(as well as extra packages specified with +.B \-p\fR) + +.IP * 4 +Optionally set up additional apt sources (with +.B \-a\fR) + +.IP * 4 +Adapt the apt +.B sources.list +if you use a file:// mirror + +.IP * 4 +Disable daemons with a +.B policy\-rc.d + +.IP * 4 +Clean up the apt package cache + +.PP +The only two required arguments are the release name (passed to +debootstrap), and the target path (a directory, or the path to a +.B .tar.gz +tarball). For the reasons stated above, you usually want to supply +.B \-\-tar +and some additional apt sources with +.B \-a\fR. + +.SS Using chroots for retracing + +In +.B retrace +mode, apport\-chroot selects and prepares a chroot for the crash to +reprocess and calls +.B apport\-retrace +in the chroot with the crash file. Most of the options regarding +retracing are passed to apport\-retrace, with making sure to properly +handle file references by symlinking them into the chroot. + +In this mode you need to specify a "chroot map" which maps +distribution names and release versions to chroot paths. Please see +the documentation of +.B \-m\fR/\fB\-\-chroot\-map +below for details. + +If you want to enable duplicate checking, you need to specify the path +to the duplicate database. Please see +.B \-\-duplicate\-db +below for details. + +.SS Maintaining chroots + +The most common maintenance operation is +.B upgrade +which takes a chroot path as argument, or a DistroRelease: name if a +chroot map is specified. If +.B all +is specified as chroot name, all chroots in the chroot map are +upgraded. + +To install a set of externally provided .deb packages into the chroot, +you can use the +.B installdeb +mode. This will temporarily copy the debs into the chroot and install +them with dpkg. + +The +.B login +mode will provide a shell in the chroot which can be used for general +maintenance. If you use tarball chroots, you need to decide whether +you want to keep the changes after logging out (specify +.B \-\-save\fR) or throw them away (default). + +In +.B \-\-save +mode, you can still throw away the changes if you log out with a +nonzero exit code, i. e. by doing +.B exit 1\fR. + +.SH OPTIONS + +.TP +.B \-\-mirror=\fIURL +Use an alternate archive mirror (passed to +.B debootstrap\fR). + +This is only relevant in +.B create +mode. (Passed to +.B debootstrap\fR) + +.TP +.B \-p \fIpackage\fR, \fB\-\-extra\-package=\fIpackage +Install an additional package for the selected operation. May be +specified multiple times. + +This is only relevant in +.B create +mode. + +.TP +.B \-a \fIsource\fR, \fB\-\-apt\-source=\fIsource +Add an extra apt source when creating chroots. May be specified +multiple times. + +This is only relevant in +.B create +mode. + +.TP +.B \-t\fR, \fB\-\-tar +Create a chroot tarball instead of a permanent directory. + +This is only relevant in +.B create +mode, for other operations you can specify a directory or a tarball. + +.TP +.B \-\-save +When logging in to a chroot tarball, update the tarball afterwards to +save modifications if the shell exits with status 0. + +This is only relevant in +.B login +mode if the chroot is a tarball. + +.TP +.B \-m \fIMAP\fR, \fB\-\-chroot\-map=\fIMAP + +Path to chroot map. This file maps DistroRelease: values to chroot +paths (in the syntax of a Python dictionary). This needs to be +specified when refering to a chroot by distro release name instead of +a chroot path, or when using +.B apport\-chroot +in +.B retrace +mode and specifying a crash ID. In the latter case, the +.B DistroRelease: +field is first read from the crash database, and the appropriate +chroot selected from that map. Example: + +.IP +{ + "Ubuntu 7.04": "chroots/feisty.tar.gz", + "Debian 3.1": "chroots/sarge.tar.gz", +.br +} + +.TP +.B \-v, \-\-verbose +Verbose operation. This option is also passed to +.B apport\-retrace +to report download/install progress when installing additional +packages. + +.TP +.B \-\-auth=\fIauthfile +If a bug number is given without any of the options +.B \-g\fR, +.B \-s\fR, or +.B \-o\fR, +then the retraced stack traces are attached to the bug. +Since this needs authentication, an authentication file for the crash +database must be specified. This could e. g. be the standard +.B cookies.txt +from Firefox' profile directory if the crash database uses +cookie based authentication. This option is passed to +.B apport\-retrace +(after copying the file into the chroot). + +.TP +.B \-\-duplicate\-db=\fIdbfile +Specify path to the duplicate check database (in SQLite format). The +database will be created and initialized if it does not exist. This +option is passed to +.B apport\-retrace +(after linking the file into the chroot). + +If not specified, +.B apport\-retrace +will not check for duplicates. + +.TP +.B \-\-confirm\-attach +Display retraced stack traces and ask for confirmation before +uploading them to the bug report. This option is ignored when +retracing report files. This option is just passed to +.B apport-retrace\fR. + +.TP +.B \-h, \-\-help +Print a short online help that documents all options. + +.SH AUTHOR +.B apport +and the accompanying tools are developed by Martin Pitt +. --- apport-1.18.orig/debian/local/apport-chroot +++ apport-1.18/debian/local/apport-chroot @@ -0,0 +1,350 @@ +#!/usr/bin/python + +# Execute operations on/in apport chroots. +# +# Copyright (c) 2007 Canonical Ltd. +# Author: Martin Pitt +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. See http://www.gnu.org/copyleft/gpl.html for +# the full text of the license. + +import optparse, os.path, sys, urllib, re, atexit, shutil, subprocess, tempfile +from glob import glob + +import problem_report +from apport.chroot import Chroot, setup_fakeroot_env +from apport.crashdb import get_crashdb + +# +# functions +# + +def parse_options(): + '''Parse command line options and return (options, args) tuple.''' + + optparser = optparse.OptionParser('''%prog [options] create +%prog [options] upgrade ||all +%prog [options] installdeb | [...] +%prog [options] login | +%prog [options] retrace |''') + + optparser.add_option('--mirror', + help='Mirror for chroot creation', + action='store', type='string', dest='mirror', metavar='URL', default=None) + optparser.add_option('-a', '--apt-source', + help='Add an extra apt source', + action='append', type='string', dest='extra_apt', metavar='SOURCE', default=[]) + optparser.add_option('-t', '--tar', + help='Create chroot tarball instead of directory', + action='store_true', dest='tar', default=False) + optparser.add_option('--save', + help='When logging in to a chroot tarball, update the tarball afterwards to save modifications if the shell exits with status 0.', + action='store_true', dest='tar_save', default=False) + optparser.add_option('-m', '--chroot-map', + help='Path to chroot map. This is a file that defines a Python dictionary, mapping DistroRelease: values to chroot paths', + action='store', type='string', dest='chroot_map', metavar='FILE', default=None) + optparser.add_option('-p', '--extra-package', + help='Install an extra package (can be specified multiple times)', + action='append', type='string', dest='extra_packages', metavar='PACKAGE', default=[]) + optparser.add_option('-v', '--verbose', + help='Verbose operation (also passed to apport-retrace)', + action='store_true', dest='verbose', default=False) + optparser.add_option('--auth', + help='Passed on to apport-retrace in "retrace" mode', + action='store', type='string', dest='auth_file', default=None) + optparser.add_option('--duplicate-db', + help='Passed on to apport-retrace in "retrace" mode', + action='store', type='string', dest='dup_db', default=None) + optparser.add_option('--confirm-attach', + help='Display retraced stack traces and ask for confirmation before uploading them as bug attachments.', + action='store_true', dest='confirm_attach', default=False) + + (opts, args) = optparser.parse_args() + + if len(args) < 1: + optparser.error('no command specified (use --help for a short online help)') + sys.exit(1) + + if opts.chroot_map: + if not os.path.exists(opts.chroot_map): + print >> sys.stderr, 'specified chroot map does not exist' + sys.exit(1) + + # load chroot map and resolve relative paths + map_file_dir = os.path.dirname(opts.chroot_map) + opts.chroot_map = eval(open(opts.chroot_map).read(), {}, {}) + for n, p in opts.chroot_map.iteritems(): + if not p.startswith('/'): + opts.chroot_map[n] = os.path.join(map_file_dir, p) + + return (opts, args) + +def release_from_report(file): + '''Return the distro release from the given Apport report.''' + + pr = problem_report.ProblemReport() + pr.load(open(file), binary=False) + return pr['DistroRelease'] + +def upgrade_chroot(chroot, verbose=False, extra_packages=[]): + '''Update a chroot to the latest apt lists and packages. + + If run from a tarball and the dist-upgrade succeeds, then the tarball + is updated as well. If the dist-upgrade fails, an assertion is raised.''' + + if verbose: + assert chroot.run(['apt-get', 'update']) == 0 + assert chroot.run(['apt-get', '-y', '--allow-unauthenticated', 'dist-upgrade']) == 0 + else: + assert chroot.run(['apt-get', '-qq', 'update']) == 0 + assert chroot.run(['apt-get', '-qqy', '--allow-unauthenticated', 'dist-upgrade']) == 0 + if extra_packages: + assert chroot.run(['apt-get', 'install', '-y', '--allow-unauthenticated'] + extra_packages) == 0 + + chroot.fix_symlinks() + + if chroot.root_tarball: + assert chroot.run(['apt-get', 'clean']) == 0 + chroot.tar() + +# +# commands +# + +def command_create(opts, args): + '''Create a chroot.''' + + if len(args) != 2: + print >> sys.stderr, 'create needs exactly two arguments (use --help for a short online help)' + sys.exit(1) + (release, destpath) = args + + # create chroot directory + if opts.tar: + root = tempfile.mkdtemp() + atexit.register(shutil.rmtree, root) + if os.path.isfile(destpath): + print >> sys.stderr, 'target file', destpath, 'exists already, aborting' + sys.exit(1) + else: + root = destpath + if os.path.isdir(root): + print >> sys.stderr, 'target directory', root, 'exists already, aborting' + sys.exit(1) + os.makedirs(root) + + # call debootstrap + setup_fakeroot_env() + debootstrap_argv = ['debootstrap', + '--variant=fakechroot', release, root] + if opts.mirror: + debootstrap_argv.append(opts.mirror) + + assert subprocess.call(debootstrap_argv) == 0 + + # if we have a file:// mirror, create a symlink + if opts.mirror and opts.mirror.startswith('file://'): + mirrordir = os.path.abspath(opts.mirror[7:]) + targetdir = os.path.normpath(root + '/' + os.path.dirname(mirrordir)) + if not os.path.isdir(targetdir): + os.makedirs(targetdir) + os.symlink(mirrordir, os.path.join(targetdir, os.path.basename(mirrordir))) + + # set up apt sources + if opts.mirror: + f = open(os.path.join(root, 'etc', 'apt', 'sources.list'), 'w') + print >> f, 'deb %s %s main' % (opts.mirror, release) + else: + # debootstrap puts default mirror there + f = open(os.path.join(root, 'etc', 'apt', 'sources.list'), 'a') + + for s in opts.extra_apt: + print >> f, s + f.close() + + # disable invoke-rc.d + policyrc = os.path.join(root, 'usr', 'sbin', 'policy-rc.d') + open(policyrc, 'w').write('#!/bin/sh\nexit 101') + os.chmod(policyrc, 0755) + + # set up apt-get and required packages + chroot = Chroot(root) + assert chroot.run(['apt-get', 'update']) == 0 + chroot.run(['apt-get', 'install', '-y', '--allow-unauthenticated', 'gpgv', 'apport-retrace'] + opts.extra_packages) + + chroot.fix_symlinks() + + # clean up cruft + for path, dirs, files in os.walk(os.path.join(root, 'var', 'cache', 'apt', 'archives')): + for f in files: + try: + os.unlink(os.path.join(path, f)) + except OSError: + pass + + # tar it up + if opts.tar: + chroot.tar(destpath) + +def command_upgrade(opts, args): + '''Upgrade one or all chroots.''' + + if len(args) != 1: + print >> sys.stderr, 'upgrade needs exactly one argument (use --help for a short online help)' + sys.exit(1) + if not opts.chroot_map and not os.path.exists(args[0]): + print >> sys.stderr, 'you must specify a chroot map with -m (use --help for a short online help)' + sys.exit(1) + + if args[0] == 'all': + for c in set(opts.chroot_map.itervalues()): + print 'Upgrading %s...' % c + upgrade_chroot(Chroot(c), opts.verbose, opts.extra_packages) + elif os.path.exists(args[0]): + upgrade_chroot(Chroot(args[0]), opts.verbose, opts.extra_packages) + elif opts.chroot_map.has_key(args[0]): + c = opts.chroot_map[args[0]] + print 'Upgrading %s...' % c + upgrade_chroot(Chroot(c), opts.verbose, opts.extra_packages) + else: + print >> sys.stderr, 'invalid chroot' + +def command_installdeb(opts, args): + '''Install a bunch of .debs into the chroot.''' + + if len(args) < 2: + print >> sys.stderr, 'installdeb needs more arguments (use --help for a short online help)' + sys.exit(1) + if not opts.chroot_map and not os.path.exists(args[0]): + print >> sys.stderr, 'you must specify a chroot map with -m (use --help for a short online help)' + sys.exit(1) + + if os.path.exists(args[0]): + chroot = Chroot(args[0]) + elif opts.chroot_map.has_key(args[0]): + c = opts.chroot_map[args[0]] + chroot = Chroot(c) + else: + print >> sys.stderr, 'invalid chroot' + + # symlink the debs into the chroot + chroot_deb_dir = os.path.join(chroot.root, 'installdebs') + os.makedirs(chroot_deb_dir) + for deb in args[1:]: + os.symlink(deb, os.path.join(chroot_deb_dir, os.path.basename(deb))) + + result = chroot.run(['dpkg', '-i'] + ['/installdebs/' + os.path.basename(d) for d in args[1:]]) + shutil.rmtree(chroot_deb_dir) + + chroot.fix_symlinks() + + if chroot.root_tarball and result == 0: + chroot.tar() + +def command_login(opts, args): + '''Start a shell in a chroot.''' + + if len(args) != 1: + print >> sys.stderr, 'login needs exactly one argument (use --help for a short online help)' + sys.exit(1) + if not opts.chroot_map and not os.path.exists(args[0]): + print >> sys.stderr, 'you must specify a chroot map with -m (use --help for a short online help)' + sys.exit(1) + + if os.path.exists(args[0]): + chroot = Chroot(args[0]) + elif opts.chroot_map.has_key(args[0]): + c = opts.chroot_map[args[0]] + chroot = Chroot(c) + else: + print >> sys.stderr, 'invalid chroot' + sys.exit(1) + + if opts.auth_file: + # symlink the file into the chroot + os.symlink(opts.auth_file, os.path.join(chroot.root, 'tmp', 'auth')) + + try: + del os.environ['APPORT_CRASHDB_CONF'] + except KeyError: + pass + ret = chroot.run([os.environ.get('SHELL', 'bash')]) + + if chroot.root_tarball and opts.tar_save and ret == 0: + chroot.fix_symlinks() + chroot.tar() + +def command_retrace(opts, args): + '''Retrace a bug or report file.''' + + if len(args) != 1: + print >> sys.stderr, 'retrace needs exactly one argument (use --help for a short online help)' + sys.exit(1) + if not opts.chroot_map: + print >> sys.stderr, 'you must specify a chroot map with -m (use --help for a short online help)' + sys.exit(1) + + apport_retrace_argv = ['apport-retrace', '-u'] + if opts.verbose: + apport_retrace_argv.append('-v') + for p in opts.extra_packages: + apport_retrace_argv += ['-p', p] + + if args[0].isdigit(): + crashdb = get_crashdb(opts.auth_file) + release = crashdb.get_distro_release(args[0]) + chroot_path = opts.chroot_map[release] + if os.path.isfile(chroot_path): + apport_retrace_argv.append('--no-pkg') + c = Chroot(chroot_path) + if opts.auth_file: + # symlink the file into the chroot + chroot_auth = os.path.join(c.root, 'tmp', 'auth') + os.symlink(opts.auth_file, chroot_auth) + apport_retrace_argv += ['--auth', chroot_auth] + else: + apport_retrace_argv += ['-s'] + chroot_auth = None + if opts.dup_db: + # symlink the file into the chroot + chroot_dupdb = os.path.join(c.root, 'tmp', 'dup.db') + os.symlink(opts.dup_db, chroot_dupdb) + apport_retrace_argv += ['--duplicate-db', chroot_dupdb] + if opts.confirm_attach: + apport_retrace_argv.append('--confirm') + apport_retrace_argv.append(args[0]) + + del os.environ['APPORT_CRASHDB_CONF'] + ret = c.run(apport_retrace_argv) + if chroot_auth: + os.unlink(chroot_auth) + else: + # symlink the report into the chroot + release = release_from_report(args[0]) + chroot_path = opts.chroot_map[release] + if os.path.isfile(chroot_path): + apport_retrace_argv.append('--no-pkg') + c = Chroot(chroot_path) + chroot_report = os.path.join(c.root, 'tmp', os.path.basename(args[0])) + os.symlink(os.path.realpath(args[0]), chroot_report) + apport_retrace_argv.append('-s') + apport_retrace_argv.append(chroot_report) + ret = c.run(apport_retrace_argv) + os.unlink(chroot_report) + + sys.exit(ret) + +# +# main +# + +opts, args = parse_options() +try: + command = globals()['command_' + args[0]] +except KeyError: + print >> sys.stderr, 'unknown command (use --help for a short online help)' + sys.exit(1) +command(opts, args[1:]) --- apport-1.18.orig/debian/local/setup-apport-retracer +++ apport-1.18/debian/local/setup-apport-retracer @@ -0,0 +1,115 @@ +#!/bin/sh -e + +rm -rf * + +RELEASE=lucid +ARCH=`dpkg --print-architecture` +if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then + MIRROR=http://archive.ubuntu.com/ubuntu + SECMIRROR=http://security.ubuntu.com/ubuntu +else + MIRROR=http://ports.ubuntu.com + SECMIRROR=http://ports.ubuntu.com +fi + +# create directories +mkdir -p bin fakelibs chroots + +# we assume that we are in the unpacked apport source +D=$(readlink -f $(dirname $0)/../..) +test -e $D/debian/local/apport-chroot || { + echo "This script must live in an unpacked apport source tree" >&2 + exit 1 +} +cp -r $D apport +cp apport/backends/packaging-apt-dpkg.py apport/apport/packaging_impl.py +ln -s ../apport/debian/local/apport-chroot bin/apport-chroot +ln -s ../apport/bin/crash-digger bin/crash-digger + +# debootstrap +T=`mktemp -d` +wget -O - -q $MIRROR/dists/$RELEASE/main/binary-`dpkg --print-architecture`/Packages.gz | gunzip > $T/Packages +wget -O - -q $MIRROR/dists/$RELEASE/universe/binary-`dpkg --print-architecture`/Packages.gz | gunzip > $T/Packages-universe +P=`grep '^Filename:.*debootstrap_.*deb' $T/Packages | cut -f 2 -d\ ` +wget -q $MIRROR/$P +dpkg -x debootstrap_*.deb $T +rm debootstrap_*.deb +mv $T/usr/share/debootstrap/ . +sed "1 s_\$_\\nDEBOOTSTRAP\_DIR=`pwd`/debootstrap_" $T/usr/sbin/debootstrap > bin/debootstrap +chmod 755 bin/debootstrap + +# python-apt +for p in python-apt python-libxml2 python-httplib2 python-simplejson; do + dpkg -s $p 2>/dev/null | grep -q ' installed$' || { + echo "Package $p not installed" + exit 1 + } +done + +# fake{chroot,root} libraries +type fakeroot >/dev/null 2>/dev/null || { + wget -q $MIRROR/`grep '^Filename:.*fakeroot_.*.deb' $T/Packages | cut -f 2 -d\ ` + ar p fakeroot_*.deb data.tar.gz | tar xzO ./usr/lib/libfakeroot/libfakeroot-sysv.so > fakelibs/libfakeroot.so + rm fakeroot_*.deb +} + +wget -q $MIRROR/`grep '^Filename:.*fakechroot_.*.deb' $T/Packages-universe | cut -f 2 -d\ ` +ar p fakechroot_*.deb data.tar.gz | tar xzO ./usr/lib/fakechroot/libfakechroot.so > fakelibs/libfakechroot.so +rm fakechroot_*.deb + +# launchpadlib +if [ ! -d $HOME/launchpadlib ]; then + mkdir ~/launchpadlib + d=`pwd` + cd ~/launchpadlib + + bzr get lp:launchpadlib + bzr get lp:wadllib + bzr get lp:~vcs-imports/oauth/trunk oauth + bzr get lp:lazr.uri + bzr get lp:lazr.restfulclient + + cd "$d" +fi + +rm -rf $T + +# create file with environment variables +if type fakeroot >/dev/null 2>/dev/null; then + cat < environ +PATH=`pwd`/bin:/usr/sbin:/sbin:\$PATH +PYTHONPATH=`pwd`/apport:`pwd`/apport/libs:\$HOME/launchpadlib/launchpadlib/src:\$HOME/launchpadlib/wadllib/src:$HOME/launchpadlib/lazr.uri/src:$HOME/launchpadlib/lazr.restfulclient/src:$HOME/launchpadlib/oauth:\$HOME/launchpadlib/:\$PYTHONPATH +LD_LIBRARY_PATH=`pwd`/apport:\$LD_LIBRARY_PATH +APPORT_LIBFAKECHROOT=`pwd`/fakelibs/libfakechroot.so +APPORT_CRASHDB_CONF=`pwd`/apport/etc/apport/crashdb.conf + +export PATH PYTHONPATH LD_LIBRARY_PATH APPORT_LIBFAKECHROOT APPORT_CRASHDB_CONF +EOF +else + cat < environ +PATH=`pwd`/bin:/usr/sbin:/sbin:\$PATH +PYTHONPATH=`pwd`/apport:\$PYTHONPATH +LD_LIBRARY_PATH=`pwd`/apport:$LD_LIBRARY_PATH +APPORT_LIBFAKEROOT=`pwd`/fakelibs/libfakeroot.so +APPORT_LIBFAKECHROOT=`pwd`/fakelibs/libfakechroot.so +APPORT_CRASHDB_CONF=`pwd`/apport/crashdb.conf + +export PATH PYTHONPATH LD_LIBRARY_PATH APPORT_LIBFAKEROOT APPORT_LIBFAKECHROOT APPORT_CRASHDB_CONF +EOF +fi + +. ./environ + +# create chroots +if [ "`dpkg --print-architecture`" = i386 ]; then + EXTRA_PKG="-p libc6-i686 -p libc6-i686-dbgsym" +fi +apport-chroot -t -a "deb $MIRROR $RELEASE restricted universe multiverse" -a "deb $MIRROR $RELEASE-updates main restricted universe multiverse" -a "deb $SECMIRROR $RELEASE-security main restricted universe multiverse" -a "deb http://ddebs.ubuntu.com/ $RELEASE main restricted universe multiverse" $EXTRA_PKG create $RELEASE chroots/$RELEASE.tar.gz +chmod -R g+w chroots/ + +# chroot map +cat < chrootmap +{ + 'Ubuntu 10.04': 'chroots/lucid.tar.gz', +} +EOF --- apport-1.18.orig/debhelper/apport.pm +++ apport-1.18/debhelper/apport.pm @@ -0,0 +1,10 @@ +#!/usr/bin/perl +# debhelper sequence file for apport + +use warnings; +use strict; +use Debian::Debhelper::Dh_Lib; + +insert_after("dh_bugfiles", "dh_apport"); + +1; --- apport-1.18.orig/debhelper/dh_apport +++ apport-1.18/debhelper/dh_apport @@ -0,0 +1,83 @@ +#!/usr/bin/perl -w + +=head1 NAME + +dh_installapport - install apport package hooks + +=cut + +use strict; + +use Debian::Debhelper::Dh_Lib; + +=head1 SYNOPSIS + +B [S>] + +=head1 DESCRIPTION + +dh_apport is a debhelper program that installs apport package hooks into +package build directories. + +=head1 FILES + +=over 4 + +=item debian/I.apport + +Installed into /usr/share/apport/package-hooks/I.py in the package +build directory. This file is used to control apport's bug filing for this +package. + +=item debian/source.apport + +Installed into /usr/share/apport/package-hooks/source_I.py (where +I is the current source package name) in the package build directory of +the first package dh_apport is told to act on. By default, this is the first +binary package in debian/control, but if you use -p, -i, or -a flags, it +will be the first package specified by those flags. This file is used to +control apport's bug filing for all binary packages built by this source +package. + +=back + +=cut + +init(); + +foreach my $package (@{$dh{DOPACKAGES}}) { + next if is_udeb($package); + + my $tmp=tmpdir($package); + my $hooksdir="$tmp/usr/share/apport/package-hooks"; + my $file=pkgfile($package,"apport"); + + if ($file ne '') { + if (! -d $hooksdir) { + doit("install","-d",$hooksdir); + } + doit("install","-p","-m644",$file,"$hooksdir/$package.py"); + } + + if (-e "debian/source.apport") { + if (! -d $hooksdir) { + doit("install","-d",$hooksdir); + } + my $src=sourcepackage(); + doit("install","-p","-m644","debian/source.apport","$hooksdir/source_$src.py"); + } +} + +=head1 SEE ALSO + +L + +This program is a part of apport. + +=head1 AUTHOR + +Colin Watson + +Copyright (C) 2009 Canonical Ltd., licensed under the GNU GPL v2 or later. + +=cut