Merge lp:~mvo/apport/kernel-crashdump into lp:~apport-hackers/apport/trunk

Proposed by Michael Vogt
Status: Merged
Merge reported by: Martin Pitt
Merged at revision: not available
Proposed branch: lp:~mvo/apport/kernel-crashdump
Merge into: lp:~apport-hackers/apport/trunk
Diff against target: None lines
To merge this branch: bzr merge lp:~mvo/apport/kernel-crashdump
Reviewer Review Type Date Requested Status
Apport upstream developers Pending
Review via email: mp+8448@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Michael Vogt (mvo) wrote :

Please review/merge support for kernel crashdump retracing.

Overview:
* bin/kernel_crashdump:
  - needs the add_os_info() to get uname and architecture to make the retracing easier (and is cheap to obtain)
* bin/apport-retrace:
  - small changes to make it friendlier for the kernel output
* apport/report.py
  - add_kernel_info: that is not yet split up, but I think the final splitting depends on what information the kernel team wants here, it should do no harm to merge it and append later
* backends/packaging-apt-dpkg.py
  - uses hardcoded ddebs.ubuntu.com currently which is ugly. but kernel-image-debug packages are not in the Packages.gz so this method seems to be required for now

Thanks and feedback welcome

lp:~mvo/apport/kernel-crashdump updated
1462. By Michael Vogt

add crash_signature and simple test for it

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory '.bzr-builddeb'
=== added file '.bzr-builddeb/default.conf'
--- .bzr-builddeb/default.conf 1970-01-01 00:00:00 +0000
+++ .bzr-builddeb/default.conf 2009-04-06 23:58:27 +0000
@@ -0,0 +1,2 @@
1[BUILDDEB]
2merge = True
03
=== modified file 'TODO'
--- TODO 2009-04-11 18:37:37 +0000
+++ TODO 2009-05-07 06:19:04 +0000
@@ -13,3 +13,12 @@
1313
14hooks:14hooks:
15 - add hooks which run during program crash, to collect more runtime data15 - add hooks which run during program crash, to collect more runtime data
16
17retracers:
18 - cache Contents.gz
19
20hookutils:
21- run hooks for related packages in attach_related_packages
22
23apt-dpkg backend:
24- use python-apt's Version.get_source() instead of apt-get source
1625
=== modified file 'apport/hookutils.py'
--- apport/hookutils.py 2009-06-12 10:19:31 +0000
+++ apport/hookutils.py 2009-06-12 10:47:53 +0000
@@ -63,6 +63,43 @@
6363
64 report[key] = read_file(path)64 report[key] = read_file(path)
6565
66def attach_conffiles(report, package, conffiles=None):
67 '''Attach information about any modified or deleted conffiles'''
68
69 try:
70 dpkg = subprocess.Popen(['dpkg-query','-W','--showformat=${Conffiles}',
71 package], stdout=subprocess.PIPE, close_fds=True)
72 except OSError, e:
73 return 'Error: ' + str(e)
74
75 out = dpkg.communicate()[0]
76 if dpkg.returncode != 0:
77 return
78
79 for line in out.splitlines():
80 if not line:
81 continue
82 path, default_md5sum = line.strip().split()
83
84 if conffiles and path not in conffiles: continue
85
86 key = 'modified.conffile.' + path_to_key(path)
87
88 if os.path.exists(path):
89 contents = open(path).read()
90 m = hashlib.md5()
91 m.update(contents)
92 calculated_md5sum = m.hexdigest()
93
94 if calculated_md5sum != default_md5sum:
95 report[key] = contents
96 statinfo = os.stat(path)
97 mtime = datetime.datetime.fromtimestamp(statinfo.st_mtime)
98 mtime_key = 'mtime.conffile.' + path_to_key(path)
99 report[mtime_key] = mtime.isoformat()
100 else:
101 report[key] = '[deleted]'
102
66def attach_dmesg(report):103def attach_dmesg(report):
67 '''Attach information from the kernel ring buffer (dmesg).'''104 '''Attach information from the kernel ring buffer (dmesg).'''
68105
69106
=== added symlink 'apport/packaging_impl.py'
=== target is '../backends/packaging-apt-dpkg.py'
=== modified file 'apport/report.py'
--- apport/report.py 2009-06-23 09:53:14 +0000
+++ apport/report.py 2009-07-09 11:04:18 +0000
@@ -170,7 +170,12 @@
170 appends a list of all modified files'''170 appends a list of all modified files'''
171171
172 if not package:172 if not package:
173 package = fileutils.find_file_package(self['ExecutablePath'])173 # the kernel does not have a executable path but a package
174 if (not "ExecutablePath" in self and
175 self["ProblemType"] == "KernelCrash"):
176 package = self["Package"]
177 else:
178 package = fileutils.find_file_package(self['ExecutablePath'])
174 if not package:179 if not package:
175 return180 return
176181
@@ -393,6 +398,43 @@
393 self['ProcEnviron'] += '\n'398 self['ProcEnviron'] += '\n'
394 self['ProcEnviron'] += 'PATH=(custom, no user)'399 self['ProcEnviron'] += 'PATH=(custom, no user)'
395400
401 def add_kernel_crash_info(self, debugdir=None):
402 '''Add information from crash
403
404 This needs a VmCore in the Report
405 '''
406 if not self.has_key('VmCore'):
407 return
408 unlink_core = False
409 ret = False
410 try:
411 if hasattr(self['VmCore'], 'find'):
412 (fd, core) = tempfile.mkstemp()
413 os.write(fd, self['VmCore'])
414 os.close(fd)
415 unlink_core = True
416 kver = self['Uname'].split()[1]
417 command = ["crash",
418 "/usr/lib/debug/boot/vmlinux-%s" % kver,
419 core,
420 ]
421 p = subprocess.Popen(command,
422 stdin=subprocess.PIPE,
423 stdout=subprocess.PIPE,
424 stderr=subprocess.STDOUT)
425 p.stdin.write("bt -a -f\n")
426 p.stdin.write("ps\n")
427 p.stdin.write("runq\n")
428 p.stdin.write("quit\n")
429 # FIXME: split it up nicely etc
430 out = p.stdout.read()
431 ret = (p.wait() == 0)
432 self["Stacktrace"] = out
433 finally:
434 if unlink_core:
435 os.unlink(core)
436 return ret
437
396 def add_gdb_info(self, debugdir=None):438 def add_gdb_info(self, debugdir=None):
397 '''Add information from gdb.439 '''Add information from gdb.
398440
399441
=== modified file 'backends/packaging-apt-dpkg.py'
--- backends/packaging-apt-dpkg.py 2009-06-30 20:35:38 +0000
+++ backends/packaging-apt-dpkg.py 2009-07-09 11:04:18 +0000
@@ -323,6 +323,44 @@
323 # TODO: Ubuntu specific323 # TODO: Ubuntu specific
324 return 'linux-image-' + os.uname()[2]324 return 'linux-image-' + os.uname()[2]
325325
326 def _install_debug_kernel(self, report):
327 '''Install kernel debug package
328
329 Ideally this would be just another package but the kernel is
330 special in various ways currently so we can not use the apt
331 method.
332 '''
333 import urllib, apt_pkg
334 installed = []
335 outdated = []
336 kver = report['Uname'].split()[1]
337 arch = report['Architecture']
338 ver = report['Package'].split()[1]
339 debug_pkgname = 'linux-image-debug-%s' % kver
340 c = self._cache()
341 if c.has_key(debug_pkgname) and c[debug_pkgname].isInstalled:
342 #print "kernel ddeb already installed"
343 return (installed, outdated)
344 target_dir = apt_pkg.Config.FindDir("Dir::Cache::archives")+"/partial"
345 deb = "%s_%s_%s.ddeb" % (debug_pkgname, ver, arch)
346 # FIXME: this package is currently not in Packages.gz
347 url = "http://ddebs.ubuntu.com/pool/main/l/linux/%s" % deb
348 out = open(os.path.join(target_dir,deb), "w")
349 # urlretrieve does not return 404 in the headers so we use urlopen
350 u = urllib.urlopen(url)
351 if u.getcode() > 400:
352 raise IOError, "urllib returned %s for %s" % (u.getcode(), url)
353 while True:
354 block = u.read(8*1024)
355 if not block:
356 break
357 out.write(block)
358 out.flush()
359 ret = subprocess.call(["dpkg","-i",os.path.join(target_dir,deb)])
360 if ret == 0:
361 installed.append(deb.split("_")[0])
362 return (installed, outdated)
363
326 def install_retracing_packages(self, report, verbosity=0,364 def install_retracing_packages(self, report, verbosity=0,
327 unpack_only=False, no_pkg=False, extra_packages=[]):365 unpack_only=False, no_pkg=False, extra_packages=[]):
328 '''Install packages which are required to retrace a report.366 '''Install packages which are required to retrace a report.
@@ -339,6 +377,10 @@
339 377
340 Return a tuple (list of installed packages, string with outdated packages).378 Return a tuple (list of installed packages, string with outdated packages).
341 '''379 '''
380 if (report['ProblemType'] == 'KernelCrash' and
381 report['Package'].startswith("linux-image")):
382 return self._install_debug_kernel(report)
383
342 c = self._cache()384 c = self._cache()
343385
344 try:386 try:
345387
=== removed file 'backends/packaging_rpm.py'
--- backends/packaging_rpm.py 2009-04-11 16:40:06 +0000
+++ backends/packaging_rpm.py 1970-01-01 00:00:00 +0000
@@ -1,309 +0,0 @@
1'''A partial apport.PackageInfo class implementation for RPM, as found in
2Fedora, RHEL, openSUSE, SUSE Linux, and many other distributions.
3
4Copyright (C) 2007 Red Hat Inc.
5Copyright (C) 2008 Nikolay Derkach
6Author: Will Woods <wwoods@redhat.com>, Nikolay Derkach <nderkach@gmail.com>
7
8This program is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 2 of the License, or (at your
11option) any later version. See http://www.gnu.org/copyleft/gpl.html for
12the full text of the license.
13'''
14
15# N.B. There's some distro-specific bits in here (e.g. is_distro_package()).
16# So this is actually an abstract base class (or a template, if you like) for
17# RPM-based distributions.
18# A proper implementation needs to (at least) set official_keylist to a list
19# of GPG keyids used by official packages. You might have to extend
20# is_distro_package() as well, if you don't sign all your official packages
21# (cough cough Fedora rawhide cough)
22
23# It'd be convenient to use rpmUtils from yum, but I'm trying to keep this
24# class distro-agnostic.
25import rpm, hashlib, os, stat, subprocess
26
27class RPMPackageInfo:
28 '''Partial apport.PackageInfo class implementation for RPM, as
29 found in Fedora, RHEL, CentOS, etc.'''
30
31 # Empty keylist. Should contain a list of key ids (8 lowercase hex digits).
32 # e.g. official_keylist = ('30c9ecf8','4f2a6fd2','897da07a','1ac70ce6')
33 official_keylist = ()
34
35 def __init__(self):
36 self.ts = rpm.TransactionSet() # connect to the rpmdb
37 self._mirror = None
38
39 def get_version(self, package):
40 '''Return the installed version of a package.'''
41 hdr = self._get_header(package)
42 if hdr == None:
43 raise ValueError
44 # Note - "version" here seems to refer to the full EVR, so..
45 if not hdr['e']:
46 return hdr['v'] + '-' + hdr['r']
47 if not hdr['v'] or not hdr['r']:
48 return None
49 else:
50 return hdr['e'] + ':' + hdr['v'] + '-' + hdr['r']
51
52 def get_available_version(self, package):
53 '''Return the latest available version of a package.'''
54 # used in report.py, which is used by the frontends
55 raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
56
57 def get_dependencies(self, package):
58 '''Return a list of packages a package depends on.'''
59 hdr = self._get_header(package)
60 # parse this package's Requires
61 reqs=[]
62 for r in hdr['requires']:
63 if r.startswith('rpmlib') or r.startswith('uname('):
64 continue # we've got rpmlib, thanks
65 if r[0] == '/': # file requires
66 req_heads = self._get_headers_by_tag('basenames',r)
67 else: # other requires
68 req_heads = self._get_headers_by_tag('provides',r)
69 for rh in req_heads:
70 rh_envra = self._make_envra_from_header(rh)
71 if rh_envra not in reqs:
72 reqs.append(rh_envra)
73 return reqs
74
75 def get_source(self, package):
76 '''Return the source package name for a package.'''
77 hdr = self._get_header(package)
78 return hdr['sourcerpm']
79
80 def get_architecture(self, package):
81 '''Return the architecture of a package.
82
83 This might differ on multiarch architectures (e. g. an i386 Firefox
84 package on a x86_64 system)'''
85 # Yeah, this is kind of redundant, as package is ENVRA, but I want
86 # to do this the right way (in case we change what 'package' is)
87 hdr = self._get_header(package)
88 return hdr['arch']
89
90 def get_files(self, package):
91 '''Return list of files shipped by a package.'''
92 hdr = self._get_header(package)
93 files = []
94 for (f, mode) in zip(hdr['filenames'],hdr['filemodes']):
95 if not stat.S_ISDIR(mode):
96 files.append(f)
97 return files
98
99 def get_modified_files(self, package):
100 '''Return list of all modified files of a package.'''
101 hdr = self._get_header(package)
102
103 files = hdr['filenames']
104 mtimes = hdr['filemtimes']
105 md5s = hdr['filemd5s']
106
107 modified = []
108 for i in xrange(len(files)):
109 # Skip files we're not tracking md5s for
110 if not md5s[i]: continue
111 # Skip files we can't read
112 if not os.access(files[i],os.R_OK): continue
113 # Skip things that aren't real files
114 s = os.stat(files[i])
115 if not stat.S_ISREG(s.st_mode): continue
116 # Skip things that haven't been modified
117 if mtimes[i] == s.st_mtime: continue
118 # Oh boy, an actual possibly-modified file. Check the md5sum!
119 if not self._checkmd5(files[i],md5s[i]):
120 modified.append(files[i])
121
122 return modified
123
124 def get_file_package(self, file):
125 '''Return the package a file belongs to, or None if the file is not
126 shipped by any package.
127
128 Under normal use, the 'file' argument will always be the executable
129 that crashed.
130 '''
131 # The policy for handling files which belong to multiple packages depends on the distro
132 raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
133
134 def get_system_architecture(self):
135 '''Return the architecture of the system, in the notation used by the
136 particular distribution.'''
137 rpmarch = subprocess.Popen(['rpm', '--eval', '%_target_cpu'],
138 stdout=subprocess.PIPE)
139 arch = rpmarch.communicate()[0].strip()
140 return arch
141
142 def is_distro_package(self, package):
143 '''Check if a package is a genuine distro package (True) or comes from
144 a third-party source.'''
145 # This is a list of official keys, set by the concrete subclass
146 if not self.official_keylist:
147 raise Exception, 'Subclass the RPM implementation for your distro!'
148 hdr = self._get_header(package)
149 if not hdr:
150 return False
151 # Check the GPG sig and key ID to see if this package was signed
152 # with an official key.
153 if hdr['siggpg']:
154 # Package is signed
155 keyid = hdr['siggpg'][13:17].encode('hex')
156 if keyid in self.official_keylist:
157 return True
158 return False
159
160 def set_mirror(self, url):
161 '''Explicitly set a distribution mirror URL for operations that need to
162 fetch distribution files/packages from the network.
163
164 By default, the mirror will be read from the system configuration
165 files.'''
166 # FIXME C&P from apt-dpkg implementation, might move to subclass
167 self._mirror = url
168
169 def get_source_tree(self, srcpackage, dir, version=None):
170 '''Download given source package and unpack it into dir (which should
171 be empty).
172
173 This also has to care about applying patches etc., so that dir will
174 eventually contain the actually compiled source.
175
176 If version is given, this particular version will be retrieved.
177 Otherwise this will fetch the latest available version.
178
179 Return the directory that contains the actual source root directory
180 (which might be a subdirectory of dir). Return None if the source is
181 not available.'''
182 # Used only by apport-retrace.
183 raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
184
185 def compare_versions(self, ver1, ver2):
186 '''Compare two package versions.
187
188 Return -1 for ver < ver2, 0 for ver1 == ver2, and 1 for ver1 > ver2.'''
189 # Used by crashdb.py (i.e. the frontends)
190 # I could duplicate stringToVersion/compareEVR from rpmUtils.misc,
191 # but I hate duplicating code. So if you don't want to require rpmUtils
192 # you can implement this function yourself. Probably you've got
193 # equivalent code in whatever your distro uses instead of yum anyway.
194 raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
195
196 def package_name_glob(self, glob):
197 '''Return known package names which match given glob.'''
198
199 raise NotImplementedError, 'TODO'
200
201 #
202 # Internal helper methods. These are only single-underscore, so you can use
203 # use them in extending/overriding the methods above in your subclasses
204 #
205
206 def _get_headers_by_tag(self,tag,arg):
207 '''Get a list of RPM headers by doing dbMatch on the given tag and
208 argument.'''
209 matches = self.ts.dbMatch(tag,arg)
210 if matches.count() == 0:
211 raise ValueError, 'Could not find package with %s: %s' % (tag,arg)
212 return [m for m in matches]
213
214 def _get_header(self,envra):
215 '''Get the RPM header that matches the given ENVRA.'''
216
217 querystr = envra
218 qlen = len(envra)
219 while qlen > 0:
220 mi = impl.ts.dbMatch('name', querystr)
221 hdrs = [m for m in mi]
222 if len(hdrs) > 0:
223 # yay! we found something
224 # Unless there's some rpmdb breakage, you should have one header
225 # here. If you do manage to have two rpms with the same ENVRA,
226 # who cares which one you get?
227 h = hdrs[0]
228 break
229
230 # remove the last char of querystr and retry the search
231 querystr = querystr[0:len(querystr)-1]
232 qlen = qlen - 1
233
234 if qlen == 0:
235 raise ValueError, 'No headers found for this envra: %s' % envra
236 return h
237
238 def _make_envra_from_header(self,h):
239 '''Generate an ENVRA string from an rpm header'''
240 nvra="%s-%s-%s.%s" % (h['n'],h['v'],h['r'],h['arch'])
241 if h['e']:
242 envra = "%s:%s" % (h['e'],nvra)
243 else:
244 envra = nvra
245 return envra
246
247 def _checkmd5(self,filename,filemd5):
248 '''Internal function to check a file's md5sum'''
249 m = hashlib.md5()
250 f = open(filename)
251 data = f.read()
252 f.close()
253 m.update(data)
254 return (filemd5 == m.hexdigest())
255
256impl = RPMPackageInfo()
257
258#
259# Unit test
260#
261
262if __name__ == '__main__':
263 import unittest
264
265 class RPMPackageInfoTest(unittest.TestCase):
266
267 def test_get_dependencies(self):
268 '''get_dependencies().'''
269
270 deps = impl.get_dependencies('bash')
271 self.assertNotEqual(deps, [])
272
273 def test_get_header(self):
274 '''_get_header().'''
275
276 hdr = impl._get_header('alsa-utils')
277 self.assertEqual(hdr['n'], 'alsa-utils')
278
279 def test_get_headers_by_tag(self):
280 '''_get_headers_by_tag().'''
281
282 headersByTag = impl._get_headers_by_tag('basenames','/bin/bash')
283 self.assertEqual(len(headersByTag), 1)
284 self.assert_(headersByTag[0]['n'].startswith('bash'))
285
286 def test_get_system_architecture(self):
287 '''get_system_architecture().'''
288
289 arch = impl.get_system_architecture()
290 # must be nonempty without line breaks
291 self.assertNotEqual(arch, '')
292 self.assert_('\n' not in arch)
293
294 def test_get_version(self):
295 '''get_version().'''
296
297 ver = impl.get_version('bash')
298 self.assertNotEqual(ver, None)
299 ver = impl.get_version('alsa-utils')
300 self.assertNotEqual(ver, None)
301
302
303 # only execute if rpm is available
304 try:
305 if subprocess.call(['rpm', '--help'], stdout=subprocess.PIPE,
306 stderr=subprocess.PIPE) == 0:
307 unittest.main()
308 except OSError:
309 pass
3100
=== modified file 'bin/apport-retrace'
--- bin/apport-retrace 2009-04-05 18:21:18 +0000
+++ bin/apport-retrace 2009-07-09 10:00:51 +0000
@@ -104,8 +104,9 @@
104104
105 print '--- stack trace ---'105 print '--- stack trace ---'
106 print report['Stacktrace']106 print report['Stacktrace']
107 print '--- thread stack trace ---'107 if report.has_key('ThreadedStacktrace'):
108 print report['ThreadStacktrace']108 print '--- thread stack trace ---'
109 print report['ThreadStacktrace']
109 print '---'110 print '---'
110111
111 ch = None112 ch = None
@@ -243,11 +244,16 @@
243244
244# sanity checks245# sanity checks
245required_fields = set(['CoreDump', 'ExecutablePath', 'Package'])246required_fields = set(['CoreDump', 'ExecutablePath', 'Package'])
246if not required_fields.issubset(set(report.keys())):247if report['ProblemType'] == 'KernelCrash':
248 if not set(['Package','VmCore']).issubset(set(report.keys())):
249 print >> sys.stderr, 'report file does not contain the required fields'
250 sys.exit(0)
251elif not required_fields.issubset(set(report.keys())):
247 print >> sys.stderr, 'report file does not contain required fields: ' + \252 print >> sys.stderr, 'report file does not contain required fields: ' + \
248 ' '.join(required_fields)253 ' '.join(required_fields)
249 sys.exit(0)254 sys.exit(0)
250255
256
251(installed, outdated_msg) = apport.packaging.install_retracing_packages(report,257(installed, outdated_msg) = apport.packaging.install_retracing_packages(report,
252 options.verbose, options.unpack_only, options.no_pkg,258 options.verbose, options.unpack_only, options.no_pkg,
253 options.extra_packages)259 options.extra_packages)
@@ -265,6 +271,7 @@
265 # regenerate gdb info271 # regenerate gdb info
266 try:272 try:
267 report.add_gdb_info()273 report.add_gdb_info()
274 report.add_kernel_crash_info()
268 gen_source_stacktrace(report)275 gen_source_stacktrace(report)
269 except AssertionError:276 except AssertionError:
270 if outdated_msg:277 if outdated_msg:
@@ -283,8 +290,9 @@
283if options.stdout:290if options.stdout:
284 print '--- stack trace ---'291 print '--- stack trace ---'
285 print report['Stacktrace']292 print report['Stacktrace']
286 print '--- thread stack trace ---'293 if report.has_key('ThreadedStacktrace'):
287 print report['ThreadStacktrace']294 print '--- thread stack trace ---'
295 print report['ThreadStacktrace']
288 if report.has_key('StacktraceSource'):296 if report.has_key('StacktraceSource'):
289 print '--- source code stack trace ---'297 print '--- source code stack trace ---'
290 print report['StacktraceSource']298 print report['StacktraceSource']
291299
=== modified file 'bin/kernel_crashdump'
--- bin/kernel_crashdump 2009-06-26 06:37:25 +0000
+++ bin/kernel_crashdump 2009-07-09 10:52:51 +0000
@@ -23,6 +23,7 @@
23pr['Package'] = apport.packaging.get_kernel_package()23pr['Package'] = apport.packaging.get_kernel_package()
2424
25pr['VmCore'] = (vmcore_path,)25pr['VmCore'] = (vmcore_path,)
26pr.add_os_info()
26if os.path.exists(vmcore_path + '.log'):27if os.path.exists(vmcore_path + '.log'):
27 pr['VmCoreLog'] = (vmcore_path + '.log',)28 pr['VmCoreLog'] = (vmcore_path + '.log',)
2829
2930
=== added file 'data/general-hooks/automatix.py'
--- data/general-hooks/automatix.py 1970-01-01 00:00:00 +0000
+++ data/general-hooks/automatix.py 2009-03-10 17:32:02 +0000
@@ -0,0 +1,26 @@
1'''Do not send any crashes when automatix is or was installed, since it usually
2causes a mess in the system and causes a lot of package installation failures.
3
4Copyright (C) 2007 Canonical Ltd.
5Author: Martin Pitt <martin.pitt@ubuntu.com>
6
7This program is free software; you can redistribute it and/or modify it
8under the terms of the GNU General Public License as published by the
9Free Software Foundation; either version 2 of the License, or (at your
10option) any later version. See http://www.gnu.org/copyleft/gpl.html for
11the full text of the license.
12'''
13
14import apport.packaging
15
16def add_info(report):
17 try:
18 if apport.packaging.get_version('automatix') or \
19 apport.packaging.get_version('automatix2') or \
20 apport.packaging.get_version('ultamatix'):
21 report['UnreportableReason'] = 'You have installed automatix or ultamatix on your \
22system. This is known to cause a lot of instability, thus problem reports \
23will not be sent to the %s developers.' % report.get('DistroRelease',
24 'distribution').split()[0]
25 except ValueError, e:
26 return
027
=== added file 'data/general-hooks/ubuntu.py'
--- data/general-hooks/ubuntu.py 1970-01-01 00:00:00 +0000
+++ data/general-hooks/ubuntu.py 2009-06-03 07:42:02 +0000
@@ -0,0 +1,31 @@
1'''Attach generally useful information, not specific to any package.
2
3Copyright (C) 2009 Canonical Ltd.
4Author: Matt Zimmerman <mdz@canonical.com>
5
6This program is free software; you can redistribute it and/or modify it
7under the terms of the GNU General Public License as published by the
8Free Software Foundation; either version 2 of the License, or (at your
9option) any later version. See http://www.gnu.org/copyleft/gpl.html for
10the full text of the license.
11'''
12
13import apport.packaging
14from apport.hookutils import *
15
16def add_info(report):
17 # crash reports from live system installer often expose target mount
18 for f in ('ExecutablePath', 'InterpreterPath'):
19 if f in report and report[f].startswith('/target/'):
20 report[f] = report[f][7:]
21
22 # if we are running from a live system, add the build timestamp
23 attach_file_if_exists(report, '/cdrom/.disk/info', 'LiveMediaBuild')
24
25 # This includes the Ubuntu packaged kernel version
26 attach_file_if_exists(report, '/proc/version_signature', 'ProcVersionSignature')
27
28 if 'Package' in report:
29 package = report['Package'].split()[0]
30 if package and 'attach_conffiles' in dir():
31 attach_conffiles(report, package)
032
=== added file 'data/package-hooks/source_linux.py'
--- data/package-hooks/source_linux.py 1970-01-01 00:00:00 +0000
+++ data/package-hooks/source_linux.py 2009-04-28 17:09:17 +0000
@@ -0,0 +1,40 @@
1'''Apport package hook for the Linux kernel.
2
3(c) 2008 Canonical Ltd.
4Contributors:
5Matt Zimmerman <mdz@canonical.com>
6Martin Pitt <martin.pitt@canonical.com>
7
8This program is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 2 of the License, or (at your
11option) any later version. See http://www.gnu.org/copyleft/gpl.html for
12the full text of the license.
13'''
14
15import os
16import subprocess
17from apport.hookutils import *
18
19def add_info(report):
20 attach_hardware(report)
21
22 attach_file_if_exists(report, "/etc/initramfs-tools/conf.d/resume",
23 key="HibernationDevice")
24
25 version_signature = report.get('ProcVersionSignature', '')
26 if not version_signature.startswith('Ubuntu '):
27 report['UnreportableReason'] = _('The running kernel is not an Ubuntu kernel')
28 return
29
30 uname_release = os.uname()[2]
31 lrm_package_name = 'linux-restricted-modules-%s' % uname_release
32 lbm_package_name = 'linux-backports-modules-%s' % uname_release
33
34 attach_related_packages(report, [lrm_package_name, lbm_package_name])
35
36if __name__ == '__main__':
37 report = {}
38 add_info(report)
39 for key in report:
40 print '%s: %s' % (key, report[key].split('\n', 1)[0])
041
=== added directory 'debian'
=== added file 'debian/apport-gtk.install'
--- debian/apport-gtk.install 1970-01-01 00:00:00 +0000
+++ debian/apport-gtk.install 2009-06-29 09:59:56 +0000
@@ -0,0 +1,2 @@
1usr/share/apport/*gtk*
2usr/share/applications/*gtk-mime*
03
=== added file 'debian/apport-kde.install'
--- debian/apport-kde.install 1970-01-01 00:00:00 +0000
+++ debian/apport-kde.install 2009-06-29 09:59:56 +0000
@@ -0,0 +1,7 @@
1usr/share/apport/*kde*
2usr/share/apport/progress.ui
3usr/share/apport/error.ui
4usr/share/apport/bugreport.ui
5usr/share/apport/choices.ui
6usr/share/applications/apport-kde-mime.desktop
7usr/share/applications/apport-kde-mimelnk.desktop usr/share/mimelnk/text
08
=== added file 'debian/apport-retrace.install'
--- debian/apport-retrace.install 1970-01-01 00:00:00 +0000
+++ debian/apport-retrace.install 2009-04-05 18:30:06 +0000
@@ -0,0 +1,3 @@
1usr/share/apport/apport-retrace usr/bin
2usr/share/apport/dupdb-admin usr/bin
3../local/apport-chroot usr/bin
04
=== added file 'debian/apport-retrace.manpages'
--- debian/apport-retrace.manpages 1970-01-01 00:00:00 +0000
+++ debian/apport-retrace.manpages 2009-04-05 18:30:06 +0000
@@ -0,0 +1,3 @@
1man/apport-retrace.1
2man/dupdb-admin.1
3debian/local/apport-chroot.1
04
=== added file 'debian/apport.install'
--- debian/apport.install 1970-01-01 00:00:00 +0000
+++ debian/apport.install 2009-04-05 18:15:48 +0000
@@ -0,0 +1,21 @@
1etc/default
2etc/init.d
3etc/cron.daily
4usr/share/apport/apport
5usr/share/apport/apport-checkreports
6usr/share/apport/package_hook
7usr/share/apport/kernel_crashdump
8usr/share/apport/kernel_oops
9usr/share/apport/gcc_ice_hook
10usr/share/apport/apportcheckresume
11usr/share/apport/apport-unpack usr/bin
12usr/share/apport/testsuite/
13usr/share/doc/apport
14usr/share/locale
15usr/share/icons
16usr/share/mime
17usr/share/apport/package-hooks
18usr/share/apport/general-hooks
19usr/share/apport/*cli* usr/bin/
20../local/ubuntu-bug usr/bin
21../local/apport-collect usr/bin
022
=== added file 'debian/apport.links'
--- debian/apport.links 1970-01-01 00:00:00 +0000
+++ debian/apport.links 2009-04-23 22:02:32 +0000
@@ -0,0 +1,1 @@
1/usr/share/apport/package-hooks/source_linux.py /usr/share/apport/package-hooks/source_linux-meta.py
02
=== added file 'debian/apport.logrotate'
--- debian/apport.logrotate 1970-01-01 00:00:00 +0000
+++ debian/apport.logrotate 2006-09-10 20:59:21 +0000
@@ -0,0 +1,9 @@
1/var/log/apport.log {
2 daily
3 rotate 7
4 delaycompress
5 compress
6 notifempty
7 missingok
8}
9
010
=== added file 'debian/apport.manpages'
--- debian/apport.manpages 1970-01-01 00:00:00 +0000
+++ debian/apport.manpages 2009-02-19 12:28:59 +0000
@@ -0,0 +1,4 @@
1man/apport-unpack.1
2man/apport-cli.1
3debian/local/ubuntu-bug.1
4debian/local/apport-collect.1
05
=== added file 'debian/changelog'
--- debian/changelog 1970-01-01 00:00:00 +0000
+++ debian/changelog 2009-06-30 20:39:23 +0000
@@ -0,0 +1,3855 @@
1apport (1.5-0ubuntu2) karmic; urgency=low
2
3 * Merge fixes from trunk:
4 - packaging-apt-dpkg.py: Fix install_retracing_packages() for pre-0.7.9
5 python-apt API.
6 - Sort the list of dependencies so it's easier to scan (LP: #391021)
7
8 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 30 Jun 2009 22:39:18 +0200
9
10apport (1.5-0ubuntu1) karmic; urgency=low
11
12 * New upstream release:
13 - Drop all Makefiles, po/POTFILES.in, and most code from setup.py, and use
14 DistUtilsExtras.auto which "just does the right thing" for most build
15 system tasks. This requires python-distutils-extra >= 2.2, see
16 https://launchpad.net/python-distutils-extra
17 - Move all test scripts into test/, to unclutter source tree.
18 - setup.py now auto-detects the required packaging backend if
19 apport/packaging_impl.py is not manually installed.
20 * debian/control: Add python-distutils-extra build dependency.
21 * debian/rules: Drop stuff which is now properly done by the upstream build
22 system.
23 * Drop debian/apport.examples, preloadlib died long ago.
24 * Adapt debian/apport-{gtk,kde}.install to new upstream build system, which
25 now installs the .desktop files itself.
26
27 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 29 Jun 2009 12:00:21 +0200
28
29apport (1.4-0ubuntu1) karmic; urgency=low
30
31 * New upstream release. Compared to our previous snapshot, this changes:
32 - Replace Qt4 frontend with KDE frontend, thanks to Richard Johnson!
33 - apport/ui.py, run_report_bug(): Clean up PID information collection.
34 - gtk/apport-gtk.ui: Drop invalid icon reference. (LP: #389064)
35 - ui.py: Do not reject non-distro package reports if report sets CrashDB
36 (for third-party destination). (LP: #391015)
37 - bin/kernel_crashdump: Use packaging API properly.
38 - apport-gtk.ui: Drop erroneous translatable flag from stock buttons.
39 - Update German translations.
40 * debian/*: qt → kde, add transitional package for apport-qt.
41 * Drop backends/packaging_rpm.py. We don't use it in the Ubuntu package at
42 all, and it's still in trunk.
43 * debian/rules: Drop some deprecated dh_* calls, cdbs's debhelper.mk has
44 done them for a long time.
45 * debian/control: Bump Standards-Version to 3.8.2 (no changes necessary).
46 * debian/control: Replace URLs in descriptions with proper Homepage: field.
47
48 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 26 Jun 2009 10:44:54 +0200
49
50apport (1.3-0ubuntu2) karmic; urgency=low
51
52 * debian/local/apport-collect: Pass None as HookUI object. This will crash
53 with interactive hooks, but is a good enough immediate bandaid.
54 (LP: #385811)
55 * Merge fixes from trunk:
56 - packaging-apt-dpkg.py: Add backwards compatibility code for python-apt <
57 0.7.9 to not break backportability.
58 - hookutils.py, command_output(): Force LC_MESSAGES=C, to avoid translated
59 output in bug reports. (LP: #383230)
60 - apport-gtk.ui: Make details window resizable, and lower default size, so
61 that it will fit on small screens. (LP: #365517)
62
63 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 12 Jun 2009 12:47:59 +0200
64
65apport (1.3-0ubuntu1) karmic; urgency=low
66
67 * New upstream release. Compared to our bzr snapshot, this has:
68 - Interactive package hooks:
69 + Add apport.ui.HookUI class which provides GUI functionality such as
70 yes/no
71 questions or file dialogs to hooks.
72 + add_info() in package hooks now can (optionally) take a second argument
73 which is the HookUI instance.
74 + See doc/package-hooks.txt for details.
75 + See UbuntuSpec:desktop-karmic-symptom-based-bug-reporting
76 - New function apport.hookutils.root_command_output() to run a command as root,
77 through gksu/kdesudo/sudo, depending on the desktop environment.
78
79 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 10 Jun 2009 16:49:13 +0200
80
81apport (1.2.1-0ubuntu3) karmic; urgency=low
82
83 * debian/control: Bump Standards-Version to 3.8.1 (no changes necessary).
84 * debian/control: Bump debhelper dependency for dh_icons, to satisfy
85 lintian.
86 * general-hooks/ubuntu.py: Fix IndexError crash if report does not have a
87 Package field. Check whether we actually have attach_conffiles() (which is
88 not the case when running the upstream version).
89 * Merge trunk:
90 - launchpad.py: Fix crash for unset titles.
91 - Add segfault analysis hook for quick segv reviews. Thanks to Kees Cook!
92 - run-tests: Replace hardcoded Python path with dynamically detected path.
93
94 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 03 Jun 2009 09:52:03 +0200
95
96apport (1.2.1-0ubuntu2) karmic; urgency=low
97
98 * debian/control: Update Vcs-Bzr: for new location (moved from project
99 branch to package branch).
100 * Merge bug fixes from trunk:
101 - apport-cli: Fix report saving in "bug report" mode. (LP: #353253)
102 - Drop "UnsupportableReason" field, it is too similar to
103 UnreportableReason and just confusing.
104 - ui.py: Check UnreportableReason for run_report_bug() as well.
105 (LP: #361359)
106 - general-hooks/generic.py: Do not report problems with low free space on
107 / or /home. (LP: #381047)
108 - launchpad.py: Do not overwrite report['Title'].
109 - launchpad.py: Repair support for extra tags.
110 - New function apport.hookutils.root_command_output() to run a command as
111 root, through gksu/kdesudo/sudo, depending on the desktop environment.
112 (Part of UbuntuSpec:desktop-karmic-symptom-based-bug-reporting)
113 - launchpad.py: Fetch DpkgTerminalLog. (LP: #382589)
114 - launchpad.py: More robust download(), fixes other part of (LP: #382589)
115 - problem_report.py: Allow dashes and underscores in key names. Update
116 doc/data-format.tex accordingly. (LP: #380811)
117
118 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 02 Jun 2009 11:59:41 +0200
119
120apport (1.2.1-0ubuntu1) karmic; urgency=low
121
122 * New upstream release:
123 - Moving away from deprecated APIs:
124 + packaging-apt-dpkg.py: Use python-apt >= 0.7.9 official API and drop
125 usage of internal symbols.
126 + hookutils.py: Drop hal related functions and queries, replace with
127 udev database, udev log file, and DMI information from sysfs.
128 + gtk UI: Convert from libglade to gtk.Builder.
129 - Bug fixes:
130 + hookutils.py: Drop /proc/version_signature collection, it is Ubuntu
131 specific.
132 + apportcheckresume: Fix log collection from pm-utils.
133 + Fix various crashes and report properties for reporting against
134 uninstalled packages.
135 * debian/control: Drop python-glade2 dependency, bump python-gtk2 dependency
136 to ensure availability of gtk.Builder.
137 * hookutils, attach_conffiles(): Remove leftover debugging spew.
138 * debian/apport-qt.install: Install the individual Qt .ui files instead of
139 *.ui, since GTK's are now also called *.ui.
140
141 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 15 May 2009 11:28:34 +0200
142
143apport (1.1.1-0ubuntu2) karmic; urgency=low
144
145 [ Martin Pitt ]
146 * hookutils.py: Do not attach /proc/version_signature, it's Ubuntu specific.
147 (Merged from trunk). Instead, attach it in general-hooks/ubuntu.py.
148 * general-hooks/ubuntu.py: Attach package conffile information.
149 * debian/local/apport-collect: Add workaround for launchpadlib bug
150 LP#353805, to avoid crashing with non-UTF8 attachments. (LP: #368004)
151 * debian/local/apport-collect: Fix import of launchpadlib's HTTPError.
152 * apport/hookutils.py, attach_conffiles(): Ignore empty lines from
153 dpkg-query output.
154 * general-hooks/ubuntu.py: Strip off '/target' prefix from ExecutablePath
155 and InterpreterPath, to correctly process crash reports from the live
156 system installer.
157 * apport/hookutils.py, attach_conffiles(): Do not use command_output(),
158 since that causes error messages to get parsed as conffiles. Use
159 subprocess properly.
160 * backends/packaging-apt-dpkg.py: Replace deprecated python-apt properties
161 with current ones (merged from trunk). Update python-apt dependency to
162 >= 0.7.9.
163 * packaging-apt-dpkg.py, get_modified_files(): Do not show package list file
164 as modified if the package is not installed (merged from trunk).
165 (LP: #364533)
166 * backends/packaging-apt-dpkg.py, install_retracing_packages(): Fix syntax
167 error which broke the retracers.
168
169 [ Andy Whitcroft ]
170 * bin/apportcheckresume: the suspend _and_ hibernate logs are both in
171 pm-suspend.log.
172 * bin/apportcheckresume: remove redunant check for file before attaching
173 stress log.
174
175 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 13 May 2009 15:22:53 +0200
176
177apport (1.1.1-0ubuntu1) karmic; urgency=low
178
179 [ Martin Pitt ]
180 * New upstream security update:
181 - etc/cron.daily/apport: Only attempt to remove files and symlinks, do not
182 descend into subdirectories of /var/crash/. Doing so might be exploited by
183 a race condition between find traversing a huge directory tree, changing
184 an existing subdir into a symlink to e. g. /etc/, and finally getting
185 that piped to rm. This also changes the find command to not use GNU
186 extensions. Thanks to Stephane Chazelas for discovering this!
187 (LP: #357024, CVE-2009-1295)
188 - Other fixes were already cherrypicked in the previous upload.
189
190 [ Matt Zimmerman ]
191 * package-hooks/source_linux.py: Attach info for linux-restricted-modules
192 and linux-backports-modules
193
194 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 30 Apr 2009 09:08:29 +0200
195
196apport (1.1-0ubuntu1) karmic; urgency=low
197
198 * New upstream release:
199 - Drop some remaining distro specific pieces of code from non-backends.
200 - Add hookutils methods for attaching relevant packages, greatly improve
201 attach_alsa() for sound problem debugging.
202 - Move launchpad crash database implementation from ever-breaking
203 python-launchpad-bugs (screenscraping) to launchpadlib (official and
204 stable Launchpad API). (LP: #353879)
205 - Add new field Report.pid which gets set on add_proc_info() and can be
206 used by hooks.
207 - setup.py: Properly clean up all generated files, install missing
208 mimetypes/text-x-apport.svg icon symlink.
209 - Add README file.
210 - Add translations from Launchpad.
211 - Remove preloadlib/*; it's undermaintained, and not really useful any
212 more these days.
213 - Various bug fixes; most visible being the misnamed
214 etc/default/apport.default file (which should just be
215 etc/default/apport).
216 * Merge some bug fixes from trunk:
217 - launchpad.py: Send and read Date: field again, reverting r1128; it is
218 useful after all. (LP: #349139)
219 - report.py, add_proc_info(): Only add ProcAttrCurrent if it is not
220 "unconfined".
221 - ui.py: Detect invalid PIDs (such as for kernel processes) and give a
222 friendly error message. (LP: #360608)
223 - report.py, add_hooks_info(): Always run common hooks, and run source
224 package hooks if we do not have a binary package name. (LP: #350131)
225 - launchpad.py: Consider socket errors when connecting as transient, so
226 that crash-digger doesn't stop completely on them.
227 * Drop debian/apport.README.Debian, superseded by upstream README.
228 * Drop debian/apport.links, done by upstream setup.py now.
229 * debian/rules, debian/apport.preinst: Drop upgrade fix for misnamed default
230 file again, was only necessary for intra-Jaunty upgrades.
231 * debian/control: python-launchpad-bugs → python-launchpadlib dependencies.
232 * debian/local/apport-collect: Drop launchpadlib login code, just use the
233 CrashDatabase implementation from apport/crashdb_impl/launchpad.py.
234 * Make package backportable to hardy and intrepid:
235 - debian/control: Relax python-central buil-dependency to 0.5.6.
236 - debian/rules: Determine DH_PYCENTRAL value ("include-links" vs.
237 "nomove") based on the installed pycentral version.
238 - debian/rules: Only supply --install-layout=deb when Python version is
239 2.6.
240 * apport/hookutils.py: Add docstring for attach_hardware, thanks Matt
241 Zimmerman! (Merged from lp:~mdz/apport/hookutils)
242 * apport/crashdb_impl/launchpad.py: Support older wadllib API
243 where bug.date_created was a string instead of a datetime object.
244 (Cherrypicked from trunk).
245 * debian/control: Drop apport dependency to python-xdg, it's not required.
246 (LP: #354172)
247 * debian/control: Drop gdb from Depends: to Recommends:. (LP: #354172)
248 * debian/local/apport-collect: Print a friendly error message instead of
249 crashing if the bug number is not an integer. (LP: #351050)
250 * debian/local/apport-collect: Change incomplete tasks back to "New" after
251 data collection. (LP: #363126)
252 * debian/apport.links: source_linux-meta.py -> source_linux.py package hook,
253 so that apport-collect works on "linux" source bug tasks. These get
254 opportunistically translated into binary packages, but the binary "linux"
255 is built by the source "linux-meta". (LP: #350131)
256 * debian/local/setup-apport-retracer:
257 - Use ports.ubuntu.com for non-{i386,amd64,lpia}.
258 - Set up Jaunty by default.
259 - Fix test for being in local unpackaged apport source tree.
260 - Drop installation of python-launchpad-bugs.
261 - Install bzr branches/packages necessary for launchpad, in a shared
262 ~/launchpadlib/ tree: launchpadlib, wadllib, oauth, lazr.uri, httplib2,
263 simplejson.
264 - Clean up apport-chroot calling for extra packages.
265
266 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 28 Apr 2009 10:50:49 +0200
267
268apport (1.0-0ubuntu5) jaunty; urgency=low
269
270 [ Martin Pitt ]
271 * Rename etc/default/apport.default to etc/default/apport (brown paperbag),
272 and add debian/apport.preinst to remove the apport.default file on
273 upgrades. (LP: #361543)
274 * debian/rules: Call dh_installinit with --onlyscripts, so that the package
275 calls update-rc.d again. This fixes the calling of init script again,
276 which got broken in 1.0-0ubuntu1. (LP: #361579)
277
278 [ Matt Zimmerman ]
279 * package-hooks/source_linux.py: Attach /etc/initramfs-tools/conf.d/resume to
280 show the resume device for hibernation
281
282 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 15 Apr 2009 22:36:33 +0200
283
284apport (1.0-0ubuntu4) jaunty; urgency=low
285
286 * etc/default/apport.default: Disable Apport by default for the final
287 release.
288
289 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 14 Apr 2009 11:47:29 +0200
290
291apport (1.0-0ubuntu3) jaunty; urgency=low
292
293 * apport/hookutils.py: Factor out package_versions() to generate a simple
294 text listing of relevant package versions and use it in attach_printing()
295 * apport/hookutils.py: Add new function attach_relevant_packages() to attach
296 version information (and perhaps eventually run hooks?) for related
297 packages
298 * apport/hookutils.py: Add glob matching to package_versions()
299 * apport/hookutils.py: Add fuser info and dmesg to attach_alsa
300 * apport/hookutils.py: Add codec info to attach_alsa
301
302 -- Matt Zimmerman <mdz@ubuntu.com> Thu, 09 Apr 2009 07:36:45 -0700
303
304apport (1.0-0ubuntu2) jaunty; urgency=low
305
306 * backends/packaging-apt-dpkg.py: Add missing shutil import.
307 * debian/local/ubuntu-bug: Filter out -p and -P, for backwards calling
308 compatibility. (LP: #356755)
309
310 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 06 Apr 2009 23:04:39 -0700
311
312apport (1.0-0ubuntu1) jaunty; urgency=low
313
314 * Apport has a proper upstream trunk now (lp:apport) and made an 1.0
315 upstream release. Use this as an orig.tar.gz. This does not change any
316 code for Jaunty, just removes the Fedora/OpenSUSE specific .spec and init
317 scripts.
318 * Add bzr-builddeb configuration (merge mode).
319 * Add debian/watch for upstream releases on Launchpad.
320 * Drop debian/python-apport.postinst, obsolete for a long time.
321
322 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 06 Apr 2009 17:37:48 -0700
323
324apport (0.149) jaunty; urgency=low
325
326 Do some internal cleanup of distribution specific stuff:
327
328 * problem_report.py, man/apport-unpack.1: Fix description of .crash file
329 syntax (RFC822, not "Debian control").
330 * Move cron.daily, init script, and default file from debian/ to etc/, and
331 install them in setup.py. These files are appropriate for upstream
332 installation.
333 * Move crashdb.conf and doc/README.blacklist to etc/, to simplify setup.py.
334 * setup.py: Move *.mo generation/installation into my_install_data class,
335 for cleanliness.
336 * Move installation of missing packages for retracing from
337 bin/apport-retrace to new abstract interface apport/packaging.py,
338 install_retracing_packages() and remove_packages(), and move the apt/dpkg
339 code to backends/packaging-apt-dpkg.py. This removes a major piece of
340 apt/dpkg specific code from non-backends.
341 * bin/apport-retrace: Rename option --no-dpkg to --no-pkg and update
342 bin/apport-chroot accordingly.
343 * Move bin/apport-chroot and man/apport-chroot.1 to debian/local, since they
344 are totally Debian/Ubuntu specific.
345 * debian/local/setup-apport-retracer: Update apport-chroot and crashdb.conf
346 paths for above changes.
347 * apport/hookutils.py, files_in_package(): Replace dpkg-query call with
348 packaging.get_files(), to avoid Debianism.
349 * man/apport-retrace.1: Drop reference to "apt", simply talk about package
350 installation.
351
352 Bug fixes:
353
354 * setup.py: Fix homepage URL.
355 * debian/local/apport-chroot: If multiple distro IDs point to the same
356 chroot, do not upgrade them more than once with "upgrade all".
357
358 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 06 Apr 2009 16:06:33 -0700
359
360apport (0.148) jaunty; urgency=low
361
362 [ Matt Zimmerman ]
363 * apport/hookutils.py: add attach_media_build to include information about
364 the build of installation media in use (i.e. in a casper live CD
365 environment)
366 * general-hooks/ubuntu.py: use attach_media_build (LP: #351781)
367 * bin/apportcheckresume: Use attach_file_if_exists rather than attach_file to
368 avoid spurious error messages about non-existent log files (LP: #351973)
369
370 [ Martin Pitt ]
371 * debian/local/ubuntu-bug: Drop generic passthrough of apport-{cli,gtk,kde}
372 options since this leads to too much confusion. Instead just support a
373 single argument and check whether it is a pid, a package name, a .crash
374 file, or a program path. This does the right thing when calling it with a
375 .crash file (LP: #347392) and fixes the help output (LP: #344923) Update
376 manpage accordingly.
377 * apport/hookutils.py: Move attach_media_build() to
378 general-hooks/ubuntu.py, since it is Ubuntu specific.
379 * bin/apport-retrace: Fix KeyError crash on bugs with an ExecutablePath
380 which does not exist any more. Close the bug as invalid instead.
381 (LP: #352331)
382 * bin/kernel_oops: Add "kernel-oops" tag. Since both bin/kernel_oops and
383 bin/apportcheckresume use the "kerneloops" bug class, it previously was
384 hard to filter out the bug reports which were real oopses. (LP: #349621)
385
386 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 01 Apr 2009 18:10:01 +0200
387
388apport (0.147) jaunty; urgency=low
389
390 * bin/apportcheckresume: report the pm-suspend.log/pm-hibernate.log
391 from /var/lib.
392 * bin/apportcheckresume: only attempt to attach the stress log if its is
393 present.
394 * bin/apportcheckresume, debian/apport.init: add detection for late
395 resume hangs, those where the user thinks the system was working.
396 (LP: #335323)
397
398 -- Andy Whitcroft <apw@canonical.com> Mon, 30 Mar 2009 09:47:28 +0200
399
400apport (0.146) jaunty; urgency=low
401
402 * apport/report.py, _generate_sigsegv_report(): Turn into a class method, so
403 that it can be used by test cases in other modules as well. Also add
404 missing Signal field.
405 * apport/crashdb_impl/launchpad.py: Fully enable operation with
406 staging.launchpad.net.
407 * apport/crashdb_impl/launchpad.py: Add initial test suite, performing data
408 upload, Python and SEGV bug reporting, report download, report updating,
409 tag and duplicate handling. This happens on staging.launchpad.net.
410 * apport/crashdb.py: Add new interface duplicate_of(id) to return the master
411 bug of a duplicate. Also document that close_duplicate() with "None"
412 master bug will un-duplicate the bug.
413 * apport/crashdb_impl/{launchpad,memory}.py: Implement duplicate_of() and
414 add test cases. The Launchpad test case reproduces the
415 "duplicate-of-a-duplicate" regression, which now got fixed in
416 python-launchpad-bugs bzr head.
417 * apport/ui.py, open_url(): Also consider a sesssion as "GNOME" if gconfd-2
418 is running; some variants such as UNR do not have gnome-panel; this fixes
419 using the preferred browser for them. (LP: #322386)
420 * debian/local/apport-collect: Add new option -p to explicitly specify a
421 (binary) package name instead of guesstimating it from the bug's source
422 package tasks. Document new option in debian/local/apport-collect.1.
423 (LP: #333875)
424 * apport/crashdb.py, duplicate_db_consolidate(): Add logging about removing
425 invalidated bugs from the duplicate database, now that this actually
426 works.
427 * debian/local/ubuntu-bug.1: Update for the possibility to specify a package
428 name or PID without any options. Also document the "ubuntu-bug linux"
429 special case. (LP: #348985)
430 * debian/local/ubuntu-bug.1: Add missing documentation of the case of
431 specifying a path name.
432 * backends/packaging-apt-dpkg.py: When unpacking source trees, try
433 "debian/rules setup" last, since it is the least common variant.
434 * debian/local/ubuntu-fat-chroot: Divert away
435 /usr/lib/xulrunner-1.9.1b3/xulrunner-bin. It is called on debian/rules
436 patch in xulrunner-1.9.1 and hangs eternally in the fakechroots. This is
437 only a temporary kludge, though, until the next xulrunner version lands.
438 * apport/crashdb_impl/launchpad.py: Add test case: Update a bug report which
439 got marked as a duplicate during processing. This reproduces #349407.
440 * apport/crashdb_impl/launchpad.py, update(): Intercept and ignore IOErrors
441 when changing the bug priority. This happens if a bug gets duplicated
442 underneath us. (LP: #349407)
443 * apport/crashdb.py, get_crashdb(): Print syntax errors from parsing
444 conf.d/*.conf to stderr.
445 * apport/crashdb_impl/launchpad.py: Support new CrashDB option "project"
446 which can be set to a LP project name to file bugs against that project
447 instead of the distribution. Add test case for filing crash bug against a
448 project, updating it, duplicating/unduplicating it, and determining fixed
449 version. (LP: #338835)
450 * bin/crash-digger: If apport-retrace exits with 99, consider it a transient
451 error and just stop the retracer, but don't leave the lock file behind.
452 Add appropriate test case to test-crash-digger.
453 * bin/apport-retrace: If apt update fails due to a "hash sum mismatch", exit
454 with a "transient error" code, to stop (but not break) the retracing
455 cycle.
456
457 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 27 Mar 2009 17:01:08 +0100
458
459apport (0.145) jaunty; urgency=low
460
461 * apport/crashdb_impl/launchpad.py: Fix typo in previous upload.
462 * debian/local/apport-collect: Do not crash on
463 launchpadlib.errors.HTTPError, but give a proper error message and point
464 out that this script needs "change anything" privileges. (LP: #338201)
465 * apport_python_hook.py: Fix crash for already existing reports, and make
466 behaviour equivalent to bin/apport: Silently exit for existing unseen
467 crash report, and overwrite existing seen crash report. Add test cases.
468 (LP: #323714)
469 * general-hooks/automatix.py: Refuse to send bug reports when ultamatix is
470 installed.
471
472 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 10 Mar 2009 18:45:34 +0100
473
474apport (0.144) jaunty; urgency=low
475
476 * apport/crashdb_impl/launchpad.py, mark_retrace_failed(): If report is
477 invalid, remove CoreDump.gz and other attachments.
478 * bin/apport-retrace: If we didn't find the ExecutablePath on the system
479 because the package is out of date, don't crash, but close the bug as
480 invalid.
481
482 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 10 Mar 2009 10:45:56 +0100
483
484apport (0.143) jaunty; urgency=low
485
486 * debian/apport.README.Debian: Document how to temporarily and permanently
487 enable crash interception.
488 * backends/packaging-apt-dpkg.py, is_distro_package(): Do not consider a
489 package a native distro one if installed version is "None". This happens
490 with some PPA packages. (LP: #252734)
491 * apport/report.py, anonymize(): Move user name anonymization into the
492 "non-root" case as well; fixes uninitialized variable. (LP: #338847)
493
494 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 09 Mar 2009 12:16:49 +0100
495
496apport (0.142) jaunty; urgency=low
497
498 * apport/report.py: Do not include lsb_release's stderr in the
499 DistroRelease: output.
500 * apport/hookutils.py: Fix attach_printing():
501 - Correct spelling or "error_log".
502 - Do not call fgrep with no file names (if /etc/cups/ppd/ is empty), since
503 that hangs forever.
504 * apport/report.py, _gen_stacktrace_top(): Fix parsing of stacktraces
505 with some addresses missing. Add test cases. (LP: #269133)
506 * apport/ui.py, run_report_bug(): Show details of collected information and
507 give the user a chance to cancel. Previously, collected data was sent
508 directly to Launchpad. Nowadays lots of packages have hooks, so we cannot
509 guarantee any more that bug reports only have non-sensitive information.
510 (LP: #195514) This also allows the user to cancel if (s)he inadvertedly
511 clicked on "Report a problem". (LP: #279033)
512 * apport/ui.py: Fix crash in get_complete_size() for reports that are
513 constructed on the fly instead of loaded from a file (i. e. for bug
514 reports). Fixes displaying of report in apport-cli.
515 * apport/report.py: Slight robustification of test_add_gdb_info_script()
516 test case.
517 * debian/local/ubuntu-bug: Fix invocation with "--help". (LP: #305841)
518 * apport/ui.py, load_report(): Clearer error message if report file does not
519 exist. (LP: #204198)
520 * Remove redundant verbiage from test suite docstrings.
521 * apport/report.py, anonymize(): Fix crash when processing root-owned
522 reports. (LP: #338033)
523 * apport/report.py, anonymize(): Do not anonymize single-character user and
524 host names, since they create an utter mess in bug reports, and also are
525 very low-sensitive.
526 * debian/apport.init: Also start apport if force_start=1 is given. This
527 provides a convenient method of starting apport just for a session without
528 changing the default file. Add a comment to debian/apport.default about
529 this possibility. Thanks to Milan for the suggestion and the initial
530 patch! (LP: #320467)
531 * backends/packaging-apt-dpkg.py, _get_mirror(): Only consider http://
532 mirrors for fetching Contents.gz. (LP: #315797)
533
534 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 05 Mar 2009 17:01:05 +0100
535
536apport (0.141) jaunty; urgency=low
537
538 * apport/hookutils.py: Add cups error log to attach_printing()
539
540 -- Brian Murray <brian@ubuntu.com> Mon, 02 Mar 2009 10:55:53 -0800
541
542apport (0.140) jaunty; urgency=low
543
544 * debian/python-{apport,problem-report}.install: Fix site-packages →
545 *-packages.
546 * run-tests: Only check for local packaging_impl.py if running local tests.
547 This unbreaks running tests from /usr/share/apport/testsuite/.
548
549 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 02 Mar 2009 11:56:59 +0100
550
551apport (0.139) jaunty; urgency=low
552
553 * apport/report.py, anonymize(): Do not anonymize "root". (Side
554 issue in LP #333542)
555 * debian/rules: Supply --install-layout=deb to setup.py.
556 * debian/local/apport-collect: Attach new info to
557 staging.launchpad.net if $APPORT_STAGING is defined. This makes
558 testing easier. Describe in debian/local/apport-collect.1.
559 * debian/local/apport-collect: Ignore ValueErrors from
560 add_package_info(), which happens if the bug has a source package
561 task which does not have an identically named binary package name.
562 Slightly ugly, but it's nontrivial to do that in a sensible
563 manner; let's just fix the crash for now, since the focus of this
564 tool is to collect information from hooks. (LP: #334823)
565 * apport/hookutils.py, hal_dump_udi(): Filter out serial numbers.
566 (Mentioned in LP #107103)
567
568 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 02 Mar 2009 11:36:18 +0100
569
570apport (0.138) jaunty; urgency=low
571
572 * apport/crashdb_impl/launchpad.py: Consider an useful stack trace
573 sufficient for automatically removing the core dump, it doesn't
574 need to be perfect. This is in accordance with not setting the
575 apport-failed-retrace tag for useful, but non-perfect retraces any
576 more.
577 * apport/hookutils.py, backends/packaging_rpm.py: Convert usage of
578 md5 module (which is deprecated in 2.6) to hashlib.
579 * Replace all instances of using an exception's .message attribute
580 with str(exception), since message is deprecated in Python 2.6.
581 * apport/hookutils.py: Add attach_printing(). Thanks to Brian Murray
582 for the initial patch! (LP: #333582)
583
584 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 24 Feb 2009 22:24:31 +0100
585
586apport (0.137) jaunty; urgency=low
587
588 * Set python-version to all, include symlinks in the package.
589
590 -- Matthias Klose <doko@ubuntu.com> Tue, 24 Feb 2009 21:22:36 +0100
591
592apport (0.136) jaunty; urgency=low
593
594 [ Andy Whitcroft ]
595 * bin/apportcheckresume: remove originator in suspend/hibernate/resume
596 reporting. This was intended for debugging only and is now redundant.
597 * bin/apportcheckresume, apport/report.py: when collecting resume failures
598 in very early boot hal may not be running and we thus unable to obtain
599 the machine type information. Move title generation to the reporting
600 engine.
601
602 [ Martin Pitt ]
603 * debian/local/apport-collect: Add user environment information, too
604 (LANG, PATH, SHELL). (LP: #332578)
605
606 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 24 Feb 2009 14:25:21 +0100
607
608apport (0.135) jaunty; urgency=low
609
610 * problem_report.py, test_write_mime_text(): Add test cases for
611 single-line and two-line UTF-8 values, single-line and two-line
612 Unicode values and a single-line LF-terminated value. Fix handling
613 of the latter two.
614 * problem_report.py, test_write(): Add test cases for single-line
615 and two-line UTF-8 and Unicode values, and fix handling of these
616 in write().
617 * debian/local/apport-collect: Collect package, OS, and user
618 information as well. (LP: #332578)
619 * package-hooks/source_apport.py: Robustify by using hookutils, and
620 avoid stat errors if /var/crash/* does not exist.
621 * test-hooks: Update dodgy test for uninstalled package,
622 libdb4.3-tcl is not available in Jaunty any more.
623
624 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 23 Feb 2009 13:14:24 +0100
625
626apport (0.134) jaunty; urgency=low
627
628 * debian/local/apport-collect: Do not collect information for closed
629 tasks. Thanks for Brian Murray for the initial patch! (LP: #331839)
630 * apport/crashdb_impl/launchpad.py, download(): Download
631 DpkgTerminalLog.txt attachment as well.
632 * apport/report.py: If downloading a nonexisting bug pattern file
633 name succeeds and returns a HTML snippet with "404 Not Found",
634 consider this as failure. This repairs falling back to source
635 package names. (LP: #328751)
636 * apport/hookutils.py: Replace tabs with spaces.
637
638 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 20 Feb 2009 11:22:15 +0100
639
640apport (0.133) jaunty; urgency=low
641
642 [ Andy Whitcroft ]
643 * apport/hookutils.py: define and include a machine type from the hardware
644 information in the report, using HAL information where available.
645 * bin/apportcheckresume: include the machine type in the suspend/hibernate
646 report title. They are generally machine specific.
647
648 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 19 Feb 2009 17:49:03 +0100
649
650apport (0.132) jaunty; urgency=low
651
652 [ Martin Pitt ]
653 * Add debian/local/apport-collect: Download a Launchpad bug report,
654 get its source package, check if it has apport hooks, and if so,
655 run and upload them. Add manpage, too. (LP: #124338)
656 * debian/control: Add Suggests: python-launchpadlib; this is only
657 needed by apport-collect, thus we don't need to pull that into
658 every default installation; if it's not installed apport-collect
659 will detect and point this out.
660 * debian/control: Add ${misc:Depends} dependencies.
661
662 [ Jonathan Riddell ]
663 * Set window icon in apport-qt
664
665 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 19 Feb 2009 13:50:34 +0100
666
667apport (0.131) jaunty; urgency=low
668
669 [ Andy Whitcroft ]
670 * bin/apportcheckresume, bin/kernel_oops, cli/apport-cli, gtk/apport-gtk,
671 gtk/apport-gtk.glade, qt4/apport-qt: generalised the KernelOops
672 dialog and handling to allow suspend and hibernate failures present
673 more accurate reasons for the report. Also commonises all messages
674 in the three implementations to simplify internationalisation.
675
676 [ Martin Pitt ]
677 * po/Makefile: Fix merge-po rule to actually work again.
678 * cli/apport-cli, qt4/apport-qt: Unify string with apport-gtk.
679 * apport/ui.py: Drop some bogus translatable strings.
680 * Update German translations.
681
682 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 16 Feb 2009 19:31:41 +0100
683
684apport (0.130) jaunty; urgency=low
685
686 [ Martin Pitt ]
687 * bin/kernel_crashdump: Don't crash if vmcore.log does not exist.
688 * crashdb_impl/launchpad.py: Tag bugs with the architecture they are
689 being reported on.
690 * bin/crash-digger: Revert catching "database is locked" errors
691 during consolidation, since it just hides more fundamental errors.
692 * apport/crashdb_impl/memory.py: Improve docstrings of test suite.
693 * bin/apport-retrace: Do not try to install -dbgsym packages with
694 nonmatching versions, unless --unpack-only is used. Thanks to
695 hggdh for the initial patch! (LP: #309208)
696
697 [ Andy Whitcroft ]
698 * bin/apportcheckresume: modify the oops title and thereby the launchpad
699 bug title to say suspend or hibernate.
700 * bin/apportcheckresume: modify the tags to bin/apportcheckresume:
701 modify the oops title and thereby the launchpad be resume+suspend or
702 resume+hibernate as appropriate.
703 * bin/apportcheckresume: include any non-free modules in the bug title.
704
705 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 12 Feb 2009 22:09:35 +0100
706
707apport (0.129) jaunty; urgency=low
708
709 * bin/apport-retrace: Log broken reports.
710 * bin/apport-retrace: Do not mark bugs as invalid after they are
711 already marked as a duplicate, since that does not work in
712 Launchpad.
713 * debian/local/ubuntu-fat-chroot: Symlink /target -> /, to work
714 for crashes which appear in /target during installation.
715 * bin/apport: Move argv length/usage help before lock check, so that
716 it works if the user cannot lock /var/crash/.lock. Thanks to Kees
717 Cook!
718 * doc/package-hooks.txt: Point out apport.hookutils.
719 * apport/ui.py: Check environment variable APPORT_REPORT_THIRDPARTY
720 in addition to the 'thirdparty' configuration file option for
721 overriding the "genuine distro package" check. Thanks to Oumar
722 Aziz OUATTARA!
723 * apport/crashdb_impl/launchpad.py: In third-party mode, report bugs
724 against Launchpad projects. Thanks to Oumar
725 Aziz OUATTARA for his branch! (LP: #213454)
726 * bin/apportcheckresume: Include /var/lib/pm-utils/stress.log, too.
727 Thanks to Andy Whitcroft for the initial patch, rewrote to use
728 apport.hookutils.
729 * apport/crashdb.py, init_duplicate_db(): Run an integrity check and
730 raise exception if it fails, to avoid running the retracers on a
731 corrupt duplicate db. Add test case to
732 apport/crashdb_impl/memory.py.
733 * bin/crash-digger: Create a backup of the duplicates database right
734 after initializing it (which verifies integrity).
735 * dupdb-admin: Add new command "consolidate".
736 * apport/crashdb_impl/launchpad.py: Request bug lists with batch
737 size 300, for slight speedup of consolidation.
738 * apport/crashdb.py, duplicate_db_consolidate(): Warn about a bug
739 which is not yet fixed, but does not appear in get_unfixed(). In
740 Launchpad, this means that the bug does not have the
741 'apport-crash' tag any more; if there are many, those would be a
742 huge time/bandwidth waste.
743
744 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Jan 2009 16:04:16 +0100
745
746apport (0.128) jaunty; urgency=low
747
748 * apport/ui.py: Introduce new configuration option "thirdparty" and
749 ignore the is_distro_package() check if it is set to true.
750 * bin/apport-retrace: Call Cache.open() after Cache.update().
751 * bin/apport-retrace: If downloading a report fails (e. g. the
752 description was invalidly modified), mark the bug as invalid with
753 a proper explanation instead of crashing, unless we are in
754 "stdout" or "output file" mode.
755 * apport/crashdb_impl/launchpad.py: Apply some heuristics to attempt
756 recovering broken descriptions as in LP #315728 (intermediate
757 blank lines, and non-apport data append).
758
759 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 19 Jan 2009 17:49:55 +0100
760
761apport (0.127) jaunty; urgency=low
762
763 * bin/apportcheckresume, debian/apport.init: integrate with pm-utils to
764 detect suspend/resume failures. Thanks to Steve Conklin and Andy
765 Whitcroft. LP: #316419.
766
767 -- Steve Langasek <steve.langasek@ubuntu.com> Tue, 13 Jan 2009 12:54:12 -0800
768
769apport (0.126) jaunty; urgency=low
770
771 * bin/apport-chroot: If --auth is specified in "login" mode, symlink
772 the file into /tmp/auth in the fakechroot. This makes it much
773 easier to interactively debug retracing.
774 * bin/apport-retrace: Exit with zero for bugs which do not have a
775 core dump, so that it does not completely stop the retracers.
776
777 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 09 Jan 2009 22:49:48 +0100
778
779apport (0.125) jaunty; urgency=low
780
781 * bin/apport-chroot: Exit with apport-retraces' exit status, to
782 propagate errors upwards to crash-digger.
783 * bin/apport-retrace: Do not put outdated -dbgsym comments into the
784 bug comments.
785 * Rewrite bin/crash-digger to become much more robust and easier for
786 retracer maintainers:
787 - Now designed around cron-based maintenance: start, process all
788 pending bugs, exit. This makes memory leaks irrelevant, and gets
789 rid of all the logging, daemonizing, and looping code.
790 - Adapt stdout/stderr reporting to be suitable for cron and
791 redirecting stdout to a log file.
792 - Use lock files to avoid overlapping instances and avoid damaging
793 bugs with broken retracers after crash-digger failed.
794 - Handle chroot upgrading, so that this does not need separate
795 cronjobs any more.
796 - Drop old -i option, replace with -D/--dupcheck which is a mode
797 which *only* checks duplicates of Python crashes (no fakechroot
798 handling).
799 - Mark bug as retraced after apport-chroot retrace finished
800 successfully; the process is robust enough now to avoid enless
801 loops even if retracing fails.
802 - Adapt test-crash-digger accordingly.
803 - UbuntuSpec:apport-retracer-maintenance
804
805 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 09 Jan 2009 12:14:44 +0100
806
807apport (0.124) jaunty; urgency=low
808
809 * debian/local/ubuntu-fat-chroot: Divert touch to touch.real and
810 wrap it into a shell wrapper which ignores failures. Some packages
811 use "touch -m" which fails with EPERM on directories under
812 fakechroot. Also disable gconf-schemas and polkit-auth, since they
813 do not work in fakechroots.
814 * apport/crashdb_impl/launchpad.py: Allow using staging for testing.
815 * apport/crashdb.py, mark_retrace_failed(): Add new optional
816 argument "invalid_msg", intended for crashes which cannot be
817 retraced properly (e. g. due to outdated packages). Implement this
818 in apport/crashdb_impl/launchpad.py.
819 * bin/apport-retrace: If we do not have an usable stack trace, and
820 encounter outdated package versions in the crash, close the report
821 as invalid with an appropriate comment. (LP: #308917)
822 * bin/apport-retrace: Update the apt cache before looking for, and
823 installing packages. (Part of UbuntuSpec:apport-retracer-maintenance)
824 * debian/apport.default: Enable by default again for Jaunty. Let the
825 flood begin!
826
827 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 08 Jan 2009 14:05:07 +0100
828
829apport (0.123) jaunty; urgency=low
830
831 * bin/apport: Do not write the report into the log file if opening
832 the report file failed; just log the error.
833 * bin/apport: Remove a previously seen report file, so that the
834 following creation with O_EXCL actually works.
835 * apport/report.py, add_proc_info(): Only try to attach
836 /proc/pid/attr/current if we are root. This works around Python
837 segfaulting regression when encountering EPERM on read() (see
838 LP #314065).
839 * apport/report.py testsuite: Use "isofs" for module license check
840 testing instead of "usbcore", since the latter is more likely to
841 get built into the kernel.
842 * apport/report.py, add_proc_environ(): Use "PATH=(...)" instead of
843 "PATH: ..." notation, to be consistent with other environment
844 variables. Unbreaks the apport test suite.
845
846 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 05 Jan 2009 18:05:38 +0100
847
848apport (0.122) jaunty; urgency=low
849
850 * apport/crashdb_impl/launchpad.py: Support extra tags in the
851 report's "Tags:" field, and set them in the Launchpad bug.
852 Document this in doc/data-format.tex. Thanks to Steve Conklin for
853 the patch!
854
855 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 05 Jan 2009 10:06:49 +0100
856
857apport (0.121) jaunty; urgency=low
858
859 * debian/apport.init: Drop long obsolete setting of
860 /proc/sys/kernel/crashdump-size.
861 * debian/apport.init: Make restart actually work if the default file was
862 changed. (LP: #292402)
863 * apport/report.py, add_proc_environ(): Do not include verbatim $PATH, only
864 classify it as "default" (does not appear at all then), "custom,
865 user" (/home or /tmp in $PATH), or "custom, no user". Add appropriate test
866 case. Update the data format documentation accordingly. (LP: #245263)
867
868 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 08 Dec 2008 19:37:53 -0800
869
870apport (0.120) jaunty; urgency=low
871
872 * man/apport-cli.1: Fix "sytem" typo. (LP: #288977)
873 * apport/fileutils.py: Add new function get_options() to read
874 ~/.config/apport/settings. In the future, the apport-ignore.xml file will
875 move to this directory, too. Based on idea and initial patch from Nikolay
876 Derkach.
877 * bin/apport: Check config option "unpackaged", and if it is set to True,
878 create a crash dump for unpackaged programs, too. Bump apport package
879 dependency to python-apport for this.
880 * apport/ui.py: Fix regression introduced in in 0.115 for checking
881 successful package name determination.
882 * apport/report.py: Some distro portability fixes in the test suite, thanks
883 to Nikolay Derkach!
884 * Add OpenSUSE spec file, init script, and RPM packaging backend. Thanks to
885 Nikolay Derkach!
886 * apport_python_hook.py, bin/apport: Create files in a race free way to
887 avoid symlink attacks. Thanks to Sebastian Kramer <krahmer@novell.com> for
888 finding them!
889 * problem_report.py test suite: Create debugging leftover which left /tmp/r
890 behind.
891 * apport/crashdb_impl/memory.py: Use example.com, not bug.net, since the
892 latter actually exists now.
893 * apport/hookutils.py: Add attach_network(), attach_alsa(), and
894 attach_hardware(), and add proper docstrings. Thanks to Matt Zimmerman for
895 the branch!
896 * source_linux.py hook: Use above tool functions, which greatly simplifies
897 the hook.
898 * apport/report.py: Also print exceptions from binary and source package
899 hooks, not just from common ones.
900 * apport/report.py, add_hooks_info(): Do not print an error if a source
901 package hook does not exist.
902 * apport/hookutils.py, _parse_gconf_schema(): Correctly handle bool values.
903
904 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 26 Nov 2008 19:24:23 +0100
905
906apport (0.119) intrepid; urgency=low
907
908 * debian/apport.default: Disable Apport by default for the final release.
909
910 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 23 Oct 2008 09:34:41 +0200
911
912apport (0.118) intrepid; urgency=low
913
914 * apport/hookutils.py: add attach_gconf() function to add non-default gconf
915 settings to a report
916
917 -- Matt Zimmerman <mdz@ubuntu.com> Mon, 13 Oct 2008 20:10:33 +0100
918
919apport (0.117) intrepid; urgency=low
920
921 * backends/packaging-apt-dpkg.py, is_distro_package(): Fix crash if
922 apt.Cache()[pkg].origins is None. (LP: #279353)
923 * bin/apport: Log that we are ignoring SIGABRT, since it is a common cause
924 of confusion.
925 * test-apport, create_test_process(): Fix race condition: wait until the
926 child process has fully execve()ed, to avoid coredumping it while it is
927 still running as test-apport process.
928 * apport/crashdb_impl/launchpad.py, update(): Set source package of a bug if
929 the reporter removed it and the task is against 'Ubuntu'. (LP: #269045)
930
931 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 07 Oct 2008 16:38:06 +0200
932
933apport (0.116) intrepid; urgency=low
934
935 * Update AUTHORS and debian/copyright, Michael and Troy released their
936 copyright to Canonical. Properly attribute them as authors in the
937 respective files.
938 * debian/local/ubuntu-bug: Fix quoting of the command line arguments, so
939 that several options do not end up as one big argument when being passed
940 to apport-{cli,gtk,qt}. This also repairs launchpad-integration.
941 (LP: #260242)
942
943 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 26 Sep 2008 10:32:45 +0200
944
945apport (0.115) intrepid; urgency=low
946
947 [ Matt Zimmerman ]
948 * Add apport/hookutils.py with some convenience functions for writing hook
949 scripts (work in progress)
950 * Extend ubuntu-bug to accept a path as an argument and look up the package
951 name
952 * Rename kernel_hook to kernel_crashdump (there are other kernel hooks)
953 * Change kernel crash report type to KernelCrash
954 * Fix automatix.py to not crash when automatix isn't installed (LP: #267004)
955 * Add bin/kernel_oops hook to capture a kernel oops (eg. via kerneloops)
956
957 [ Martin Pitt ]
958 * Add AUTHORS file for collecting the list of major contributors and
959 copyright holders.
960 * apport/report.py: If we do not find a bug pattern file for the binary
961 package, fall back to looking for one with the source package name.
962 * run-tests: Provide a better error message if apport/packaging_impl.py does
963 not exist.
964
965 [ Brian Murray ]
966 * apport/crashdb_impl/launchpad.py: Add regression-retracer tag to bugs
967 which seem to be a regression (duplicate, and crash happens in a later
968 version than the fix). (LP: #271876)
969
970 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 18 Sep 2008 18:18:03 -0700
971
972apport (0.114) intrepid; urgency=low
973
974 [ Fabien Tassin ]
975 * apport/ui.py: Use preferred browser when it's recognized as a
976 Mozilla browser (firefox, seamonkey, flock) or Epiphany (LP: #131350)
977
978 [ Oumar Aziz OUATTARA ]
979 * apport/crashdb.py: Add support for /etc/apport/crashdb.conf.d/*.conf crash
980 database configuration files. Document it in doc/crashdb-conf.txt.
981 * apport/ui.py: Support a new field "CrashDB" in apport reports which select
982 a non-default crash database. Document this in doc/package-hooks.txt.
983
984 [ Martin Pitt ]
985 * apport/report.py: If a hook crashes with an exception, print it to
986 stderr, for easier debugging of hooks.
987 * apport/crashdb_impl/launchpad.py: If PackageArchitecture is 'all', fall
988 back to looking at Architecture instead of not adding a
989 needs-$ARCH-retrace tag at all. This prevented signal crashes originating
990 from e. g. Python packages from being automatically retraced.
991
992 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 04 Sep 2008 10:51:24 +0200
993
994apport (0.113) intrepid; urgency=low
995
996 * apport-qt recommends update-notifier-kde instead of adept-notifier
997
998 -- Anthony Mercatante <tonio@ubuntu.com> Thu, 28 Aug 2008 15:02:20 +0200
999
1000apport (0.112) intrepid; urgency=low
1001
1002 * apport/crashdb_impl/launchpad.py: Update attachment handling to current
1003 python-launchpad-bugs API, thanks Markus Korn!
1004 * apport/ui.py: Use gnome-panel as indicator for a running GNOME session;
1005 'gnome-session' now calls itself x-session-manager, which isn't useful
1006 to tell apart session types.
1007
1008 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 07 Aug 2008 17:09:49 +0200
1009
1010apport (0.111) intrepid; urgency=low
1011
1012 The "(Kernel) OOPS, I dumped it again!" release.
1013
1014 * apport/ui.py: Fix test_run_report_bug_unpackaged_pid() to work with the
1015 installed run-tests from the package as well.
1016 * apport/crashdb_impl/launchpad.py: Ignore broken LP bug tasks instead of
1017 crashing on them.
1018 * apport/report.py, add_proc_info(): Report the AppArmor or SELinux context
1019 in a new ProcAttrCurrent field, read from /proc/pid/attr/current.
1020 Document it in doc/data-format.tex. The field will not be added if the
1021 proc attribute cannot be read or isn't present. Thanks to Steve Beattie
1022 for the patch and the suggestion!
1023 * debian/local/setup-apport-retracer: Switch to intrepid.
1024 * debian/local/setup-apport-retracer: Fix installation of python-apt. Also
1025 install apt, to avoid library version mismatches to python-apt.
1026 * debian/apport.default: Enable apport by default again, now that we have
1027 working retracers.
1028 * apport/report.py, test_add_gdb_info_script(): Use bash, not dash as test
1029 program for core dumping; stack trace is awkwardly bad with dash, so that
1030 the test case cannot really work any more.
1031 * Add package-hooks/source_linux.py: Package hook for collecting kernel
1032 related information. By Matt Zimmerman, thank you! (LP: #251441)
1033 * debian/local/ubuntu-bug.1: Fix documentation of -p, it specifies the
1034 binary package name, not the source.
1035 * apport/packaging.py: Add get_kernel_package() to return the actual Linux
1036 kernel package name; useful if the user reports a bug against just
1037 "linux". Implement it in backends/packaging-apt-dpkg.py.
1038 * apport/ui.py: "Do what I mean" when filing a bug against "linux" and
1039 report it against the actual kernel package.
1040 * debian/local/ubuntu-bug: If just one argument is given, infer -p/-P from
1041 the type of the argument.
1042 * apport/ui.py: Drop the PackageArchitecture field for the uploaded report
1043 if it is equal to Architecture. Adapt apport/crashdb_impl/launchpad.py to
1044 fall back to Architecture, and mention the change in doc/data-format.tex.
1045 * problem_report.py, write_mime(): Add new "skip_keys" argument to filter
1046 out keys. Add test cases.
1047 * apport/crashdb_impl/launchpad.py: Do not write the "Date:" field on
1048 upload(), and fetch it from the bug metadata in download().
1049 * apport/crashdb_impl/launchpad.py, download(): Support reading bugs with
1050 the "--- " separator instead of "ProblemType: ". Launchpad doesn't create
1051 bugs that way ATM, but at least we have the reading part implemented now.
1052 * package-hooks/source_linux.py: Drop Uname, ProcVersion, and
1053 RunningKernelVersion fields, since they are all subsumed in the
1054 ProcVersionSignature field.
1055 * apport/ui.py, run_report_bug(): Strip spaces from package argument.
1056 * apport/ui.py, add_hooks_info(): Collect OS info first, then call the
1057 package hooks, so that the linux hook actually has a chance to delete the
1058 Uname field.
1059 * bin/kernel_hook, test-hooks: Throw away the original kernel hook which
1060 we never used (and got superseded by the proper source_linux.py package
1061 hook now). Replace it with the new logic of looking for
1062 /var/crash/vmcore{,.log} and turning that into an apport report.
1063 * debian/apport.init: Call kernel_hook if /var/crash/vmcore exists.
1064 (LP: #241322)
1065 * apport/ui.py: Collect information for "ProblemType: Kernel" as well, so
1066 that we run the package hook. Adapt test suite to cover this.
1067 * debian/control: Bump Standards-Version (no required changes).
1068 * gtk/apport-gtk.glade, qt4/apport-qt: Generalize notification of kernel
1069 crash, since it now happens after a boot, not right after the BUG/OOPS.
1070 But in the future we want to cover both cases.
1071
1072 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 05 Aug 2008 18:13:24 +0200
1073
1074apport (0.110) intrepid; urgency=low
1075
1076 * apport/chroot.py: In the test suite, copy some system binaries/libraries
1077 into a fakechroot and exercise a lot of standard shell commands (cp, ln
1078 -s, rm, rm -r, mkdir, echo, chmod, chown, etc.) with absolute/relative
1079 paths. This reproduces the total breakage of rm'ing, chmod'ing, and
1080 chown'ing absolute paths in hardy fakechroots.
1081 * bin/crash-digger: Intercept exceptions when downloading crash reports for
1082 duplicate checking, so that the retracer does not crash on malformed bug
1083 reports. (LP: #205178)
1084 * apport/packaging.py: Introduce a new function enabled() which reports
1085 whether Apport should create crash reports. Signal crashes are controlled
1086 by /proc/sys/kernel/core_pattern, but we need that to control whether
1087 reports for Python, package, or kernel crashes are generated.
1088 * backends/packaging-apt-dpkg.py: Provide implementation for
1089 PackageInfo.enabled() for Debian/Ubuntu by evaluating /etc/default/apport.
1090 Add various test cases for different configuration files and absent files.
1091 * apport_python_hook.py: Do not create reports if Apport is disabled (in
1092 /etc/default/apport). (LP: #222260)
1093
1094 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 17 May 2008 12:44:21 +0200
1095
1096apport (0.109) intrepid; urgency=low
1097
1098 [ Martin Pitt ]
1099 * debian/local/setup-apport-retracer: Update for some changes in Hardy.
1100
1101 [ Loic Minier ]
1102 * apport/report.py, add_proc_info(): also strip pathnames starting with
1103 'cow', 'squashmnt', and 'persistmnt' to allow apport to locate the
1104 executable pathname, additionally to 'rofs' added in 0.75. This fixes
1105 apport for packages installed on the read-write part of the unionfs mounts
1106 and under UME which uses different names for the mount points. Proper fix
1107 is to rewrite the pathnames in the kernel. (LP: #224168)
1108
1109 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 23 Apr 2008 14:30:03 +0200
1110
1111apport (0.108) hardy; urgency=low
1112
1113 [ Martin Pitt ]
1114 * apport-{gtk,qt,cli}: Fix handling of file references added by package
1115 hooks. (LP: #205163)
1116 * backends/packaging_rpm.py: Fix dependency resolution of uname(*) in the
1117 RPM backend. Thanks to Patryk Zawadzki! (LP: #213018)
1118 * backends/packaging_rpm.py: Fix RPM platform parsing, thanks to Patryk
1119 Zawadzki! (LP: #213015)
1120 * po/de.po: Fix typo (missing space).
1121 * debian/apport.default: Disable Apport for the final Hardy release, since
1122 it is less useful in stable releases, and drains a lot of CPU and I/O
1123 power on crashes. Disabling it here instead of in update-notifier/adept is
1124 more discoverable and more centralized.
1125
1126 [ Daniel Hahler ]
1127 * bin/apport-retrace: catch the same exceptions from Report.load() like
1128 ui.load_report() does (LP: #211899)
1129 * Fix uncaught exceptions in apport itself (LP: #215929):
1130 - apport/REThread.py: check if "sys" exists in the except block of
1131 REThread.run()
1132 - apport_python_hook.py: check if "sys" exists in the finally block of
1133 apport_excepthook
1134 * cli/apport-cli: Fix UnboundLocalError in ui_present_crash, which rendered
1135 apport-cli useless (for reporting crashes) (LP: #216151)
1136
1137 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 16 Apr 2008 12:24:32 +0200
1138
1139apport (0.107) hardy; urgency=low
1140
1141 * cli/apport-cli: Add translator comment for difficult string. (LP: #210948)
1142 * Update German translations.
1143 * po/Make{vars,file}: Remove the --language=python option again, since it
1144 breaks extracting strings from the glade. intltool-update currently does
1145 not seem to have a way to tag a file as "language python", so add an ugly
1146 workaround: Create temporary .py symlinks for gtk/apport-gtk & friends,
1147 and have intltool extract them.
1148 * apport/ui.py: Disallow filing a bug without specifying a package or a PID.
1149 Update debian/local/ubuntu-bug.1 accordingly (apport-cli manpage was
1150 already correct). (LP: #210348)
1151
1152 -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 06 Apr 2008 11:44:38 -0600
1153
1154apport (0.106) hardy; urgency=low
1155
1156 [ Martin Pitt ]
1157 * apport/crashdb_impl/launchpad.py: Fix spelling mistake in p-lp-bugs API
1158 (now corrected there).
1159 * apport_python_hook.py: Catch IndexError for invalid sys.argv[0], too.
1160 (LP: #204940)
1161 * apport/ui.py: Add test_run_report_bug_unpackaged_pid() test case which
1162 reports a bug against a pid which belongs to an unpackaged program. This
1163 reproduces LP #203764.
1164 * apport/report.py: Drop add_hooks_info() assertion on nonexisting Package
1165 field, return silently instead. This conforms to the behaviour of the
1166 other add_*_info() functions and avoids nasty error handling.
1167 * apport/ui.py: Generate proper error message when calling with -f -p PID
1168 and PID belongs to an unpackaged program. (LP: #203764).
1169
1170 [ Sebastien Bacher ]
1171 * po/Makevars: add the --language=python xgettext option so the translations
1172 template is correctly updated on build since cdbs is using intltool-update
1173 directly and not the corresponding makefile target
1174
1175 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 01 Apr 2008 16:02:46 +0200
1176
1177apport (0.105) hardy; urgency=low
1178
1179 * apport/crashdb_impl/launchpad.py: Ignore ValueErrors when subscribing a
1180 team, since these are usually due to the team already being subscribed.
1181 * apport/report.py, anonymize(): Be robust against empty user names and only
1182 anonymize fields which can potentially contain user specific data.
1183 (LP: #195706)
1184 * backends/packaging-apt-dpkg.py, get_architecture(): Return 'unknown'
1185 instead of None if package architecture cannot be determined.
1186 (LP: #198548)
1187 * apport/ui.py, run_crash(): Intercept other IOErrors, too (such as EISDIR)
1188 and print out proper error message instead of crashing. (LP: #201819)
1189 * apport_python_hook.py: If the Python script has mutilated sys.argv so that
1190 even sys.argv[0] does not exist any more, fall back into readlink()ing
1191 /proc/pid/exe and gracefully handle the failure of that, instead of
1192 crashing in the crash handler (ugh). Add test case. (LP: #198183)
1193
1194 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 18 Mar 2008 23:04:57 +0100
1195
1196apport (0.104) hardy; urgency=low
1197
1198 [ Martin Pitt ]
1199 * apport/crashdb_impl/launchpad.py, get_source_version(): re-escape the
1200 package name so that it doesn't stumble over '+' and similar characters.
1201 * apport/ui.py tests: assert that ProcEnviron is also included into bug
1202 reports where we do not have a PID, since having the local information is
1203 interesting and important (and acceptable in terms of personal
1204 information).
1205 * apport/report.py: Split out method add_proc_environ() for getting
1206 ProcEnviron, so that we can call it separately.
1207 * apport/ui.py, run_report_bug(): Add ProcEnviron if we do not have a pid to
1208 file a bug against. This way, bugs filed against packages or distro also
1209 get locale information. (LP: #198514)
1210 * apport/fileutils.py, mark_report_seen(): Do not crash if the file does not
1211 exist any more, because it was removed underneath us. (LP: #199932)
1212 * apport/ui.py, test_collect_info_exepath(): Add a tuple argument and a
1213 CompressedValue to the test report. This reproduces LP #199349.
1214 * apport/report.py, anonymize(): Only work on string values. (LP: #199349)
1215 * apport/ui.py: If a report has a field "Ignore", entirely ignore the report
1216 without even presenting an explanatory error dialog (as
1217 "UnsupportableReason" does). Document this in doc/package-hooks.txt.
1218 (LP: #198863)
1219 * debian/control: Bump Standards-Version (no changes necessary).
1220 * debian/control: Fix wrongly spelt project names (Python and GTK+). Thanks
1221 to lintian's scrutiny.
1222 * gtk/apport-gtk-mime.desktop.in, qt4/apport-qt-mime.desktop.in: Add a main
1223 category.
1224
1225 [ Kees Cook ]
1226 * apport/report.py: fix module license checking logic (LP: #199927).
1227 - nonfree_modules: being unable to find a module should not mean the
1228 module is non-free.
1229 - test_module_license_evaluation: check modinfo reporting.
1230 * problem_report.py: Skip atime test case if file system is mounted noatime.
1231
1232 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 13 Mar 2008 14:01:30 +0100
1233
1234apport (0.103) hardy; urgency=low
1235
1236 * bin/apport-unpack: Print error messages instead of crashing for problems
1237 like nonexisting file names passed as arguments. (LP: #185273)
1238 * backends/packaging-apt-dpkg.py, is_distro_package(): Explicitly check site
1239 for "ppa", so that we do not automatically file bugs for PPA packages.
1240 This works around Soyuz bug LP #140412 for the time being.
1241 * apport/report.py: Add standard_title() test cases for Python crashes with
1242 a custom message, and a custom message with newlines. The latter
1243 reproduces LP #190947.
1244 * apport/report.py, standard_title(): Do not rely on a fixed position of the
1245 topmost function; use iteration and regular expression matching instead.
1246 (LP: #190947)
1247 * apport/ui.py, parse_argv(): Specify that --pid/-P argument must be an
1248 integer, to avoid exceptions when it's not. (LP: #193494)
1249 * apport/report.py: Use uname -srm, not -a, to hide the hostname. (part of
1250 LP #192786); also use os.uname() instead of calling the system program.
1251 * problem_report.py(): Make write() work for reports with CompressedValues.
1252 Add test case.
1253 * apport/ui.py: Add test case test_run_crash_anonymity() which asserts that
1254 the crash dump does not contain strings which can identify the user, such
1255 as the user name, login name, host name, and current directory.
1256 * apport/report.py: Add method anonymize() which replaces user specific
1257 strings with generic ones.
1258 * apport/ui.py, thread_collect_info(): Call anonymize() on the report.
1259 (LP: #192786)
1260 * bin/apport-retrace: Only update a bug report with new attachments if it is
1261 not a duplicate. (LP: #172792)
1262 * bin/apport-retrace: Print out proper error message instead of an exception
1263 if trying to do write operations to the bug tracker without specifying
1264 a cookie file. (LP: #146423)
1265
1266 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 25 Feb 2008 17:47:13 +0100
1267
1268apport (0.102) hardy; urgency=low
1269
1270 [ Martin Pitt ]
1271 * problem_report.py: Support reading reports with legacy zlib
1272 compression in 'retain compressed values' mode (as used nowadays by
1273 apport when reporting a crash). Add a test case, too. (LP: #129616)
1274 * debian/control, debian/rules: Switch from python-support to
1275 python-central, and use 'nomove' option so that apport works during
1276 upgrades, too. (LP: #121341)
1277 * debian/rules: Use dh_icons instead of dh_iconcache.
1278 * debian/apport.init: Do not stop apport in any runlevel (LSB header).
1279 * apport/ui.py, run_crash(): Catch zlib.error on invalidly compressed core
1280 dumps. (LP: #176977)
1281 * apport/ui.py: Give a meaningful error message instead of crashing if the
1282 package for a crash report is not installed any more. (LP: #149739)
1283 * apport/ui.py: Do not include ProcCmdline in bug reports, since these are
1284 not ack'ed by the user and might contain sensitive data. (LP: #132800)
1285 * apport/ui.py: Add various test cases for crash reports whose packages have
1286 been uninstalled between the crash and the report. This reproduces
1287 LP #186684.
1288 * apport/ui.py, load_report(): Produce proper error message if
1289 executable/interpreter path do not exist any more. (LP: #186684)
1290 * cli/apport-cli: Intercept SIGPIPE when calling sensible-pager, to avoid
1291 crash when quitting it prematurely. (LP: #153872)
1292 * bin/apport-checkreports: Print out a list of program names/packages which
1293 have a pending crash report. (LP: #145117)
1294 * apport/ui.py, run_argv(): Add return code which indicates whether any
1295 report has been processed.
1296 * cli/apport-cli: If no pending crash reports are present, say so and refer
1297 to --help. (LP: #182985)
1298 * apport/ui.py: Waive check for obsolete packages if environment defines
1299 $APPORT_IGNORE_OBSOLETE_PACKAGES. Document this in the apport-cli manpage.
1300 (LP: #148064)
1301
1302 [ Daniel Hahler ]
1303 * .crash file integration for KDE3 (LP: #177055)
1304 - debian/apport-qt.install: install added files qt4/apport-qt-mime.desktop
1305 and qt4/apport-qt-mimelnk.desktop
1306 * Fixed minor warnings/errors from desktop-file-validate in
1307 gtk/apport-gtk-mime.desktop.in and qt4/apport-qt.desktop.in (LP: #146957)
1308
1309 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 06 Feb 2008 12:55:53 +0100
1310
1311apport (0.101) hardy; urgency=low
1312
1313 * debian/control: Add python-xdg dependency to apport, since apport-cli
1314 needs it. (LP: #177095)
1315 * apport/ui.py: Add test case for reporting a report which has been
1316 preprocessed by apport-retrace, i. e. has a stack trace, but no core dump
1317 any more (reproducing LP #185084).
1318 * apport/ui.py, run_crash(): Do not reject reports which have a stack trace,
1319 but no core dump. (LP: #185084)
1320 * apport/report.py: Fix test_add_gdb_info_load() test case, the temporary
1321 executable was already deleted when gdb ran the second time.
1322
1323 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 23 Jan 2008 17:48:06 +0000
1324
1325apport (0.100) hardy; urgency=low
1326
1327 * bin/crash-digger: Add option --log for logging to a file, and
1328 --pidfile/--stop for daemonization. Add test cases to test-crash-digger.
1329 * bin/apport: Do not re-raise exceptions about failure to create the lock
1330 file, to avoid crashing in the case that another apport instance tries to
1331 lock at exactly the same moment. (LP: #147237)
1332 * apport/report.py testsuite: Check that our methods get along with binary
1333 data which turn into CompressedValue objects after loading them from a
1334 file. This reproduces LP #148305.
1335 * problem_report.py, CompressedValue: Add method splitlines() since we need
1336 it very often. Add test case to test_compressed_values(). (LP: #148305)
1337 * problem_report.py: Add test case to check that update() works and does the
1338 right thing with binary values and overwriting. This confirms that
1339 importing a dictionary works.
1340 * debian/local/setup-apport-retracer: Update for hardy.
1341 * apport/crashdb_impl/launchpad.py: get_source_info() does not work any more
1342 due to HTML changes in Launchpad, and not showing the component any more
1343 on /distro/+source/package. Since we do not actually need component and
1344 release name any more, rename it to get_source_version(), fix the regular
1345 expression to just get the version, and adapt get_fixed_version()
1346 accordingly.
1347 * debian/local/setup-apport-retracer: Update default apt sources to
1348 http://ddebs.ubuntu.com.
1349 * apport/ui.py: Robostify cleanup of forked test processes.
1350 * apport/ui.py: Sleep for 0.5 seconds after creating the test process in the
1351 test suite to give /proc some time to settle down.
1352 * bin/apport: Drop evaluation of CORE_* environment variables and mandate
1353 calling with <pid> <signal> <core ulimit>. Drop the now obsolete
1354 apport/elfcore.py. Adapt test-apport accordingly.
1355 * debian/apport.init, use-local: Now call apport with %p, %s, and %c kernel
1356 macros (since 2.6.24). Drop Edgy support from init script.
1357
1358 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 21 Dec 2007 02:18:48 +0100
1359
1360apport (0.99) hardy; urgency=low
1361
1362 * cli/apport-cli, qt4/apport-qt: Fix typo 'send' -> 'sent'.
1363 (LP: #139288)
1364 * apport_python_hook.py: Add user info, too. Also add check for this to the
1365 test suite. (LP: #145109)
1366 * apport/ui.py, run_crash(): Show a proper UI error message instead of just
1367 crashing with an exception if the crash report is inaccessible for the
1368 invoking user. (LP: #146464)
1369 * apport/crashdb_impl/memory.py: Implement mark_retraced(),
1370 get_unretraced(), and get_dup_unchecked() for completeness, and define
1371 _MemoryCrashDBTest also when not running file as __main__. This makes the
1372 class useful for higher-level test suites. Add test cases for the new
1373 functions.
1374 * apport/crashdb_impl/memory.py: Support 'dummy_data' option which adds a
1375 few dummy crashes by default. This is useful for external test suites
1376 which cannot otherwise pre-fill the in-memory db. Add checks that this
1377 works properly.
1378 * bin/crash-digger: Use self.log() more consistently, and flush stdout in
1379 log(), so that we do not lose logs on output redirection.
1380 * Add test-crash-digger: Initial test suite for bin/crash-digger.
1381 * apport/ui.py, run_crash(): Intercept CRC errors from the info collection
1382 thread, which happens on broken core dumps. (LP: #132212)
1383 * cli/apport-cli, ui_present_package_error(): Fix running of dialog, so that
1384 reporting package problems with apport-cli actually works. (LP: #136369)
1385 * apport/ui.py, run_crash(): Intercept ENOSPC and present a proper error
1386 message. (LP: #145100)
1387 * gtk/apport-gtk.glade: Fix title of upload progress window to comply to
1388 HIG. Thanks, Bruce Cowan. (LP: #144782)
1389 * qt4/apport-qt: Fix Unicode <-> UTF-8 conversion. Thanks, Daniel Hahler!
1390 (LP: #148177)
1391 * apport/ui.py: Only import xdg.DesktopEntry when a .desktop file has been
1392 found in the affected package. This avoids the dependency on servers with
1393 just apport-cli. Thanks, Matthias Gug! (LP: #130013)
1394 * apport/fileutils.py: Do not fail if there are no packages installed which
1395 have one or several .desktop files. Thanks, Matthias Gug!
1396
1397 -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 28 Oct 2007 18:32:07 -0400
1398
1399apport (0.98) gutsy; urgency=low
1400
1401 [ Martin Pitt ]
1402 * debian/local/setup-apport-retracer: launchpadBugs -> launchpadbugs
1403 (recently renamed Python package in python-launchpad-bugs).
1404 * apport/crashdb_impl/launchpad.py, test examples: Do not duplicate to bug
1405 #1, that generates a huge amount of spam. Use another test bug.
1406 * apport/crashdb_impl/launchpad.py, download(): Use Bug.description_raw,
1407 since LP mangles spaces in .description. Bump p-lp-bugs dependency.
1408 * apport/crashdb_impl/launchpad.py, close_duplicate(): Explicitly set the
1409 duplicate after removing attachments, since the new LP does not allow any
1410 modification of duplicate bugs.
1411 * bin/crash-digger: Only consolidate the duplicate DB when -i is given (i.
1412 e. usually only on one running instance).
1413
1414 [ Colin Watson ]
1415 * Use bugs.launchpad.net for +filebug and +bugs requests. (LP: #138090)
1416
1417 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 01 Oct 2007 14:35:07 +0200
1418
1419apport (0.97) gutsy; urgency=low
1420
1421 [Martin Pitt]
1422 * problem_report.py: Coerce CompressedValue.__len__() to return an int to
1423 work on Python 2.4, too.
1424 * debian/local/setup-apport-retracer: Adapt ddeb apt source for the move
1425 from ~pitti to ~ubuntu-archive.
1426
1427 [Markus Korn]
1428 * port to new python-launchpad-bugs API.
1429
1430 [Daniel Holbach]
1431 * small fixes to the port.
1432 * debian/control: bumped python-launchpad-bugs Depends to >= 0.2.2.
1433
1434 -- Daniel Holbach <daniel.holbach@ubuntu.com> Tue, 04 Sep 2007 11:24:28 +0200
1435
1436apport (0.96) gutsy; urgency=low
1437
1438 * Create man pages for apport-cli, apport-chroot, and dupdb-admin.
1439 * apport/fileutils.py, find_file_package(): Try to resolve symlinks in the
1440 directory path. (LP: #125551)
1441 * apport/crashdb_impl/launchpad.py, debian/local/setup-apport-retracer: Use
1442 packaging.get_system_architecture() (which is dpkg --print-architecture on
1443 Debian/Ubuntu) instead of uname, so that this does the right thing on lpia.
1444 * problem_report.py, write_mime(): Use base64 encoding for gzipped
1445 attachments, to not screw up mail servers. Thanks to Tim Yamin for this
1446 patch!
1447 * apport/crashdb.py: Drop the last argument (-1), since it is the default
1448 anyway and did not yet exist on Python 2.4.
1449
1450 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 21 Aug 2007 14:11:48 +0200
1451
1452apport (0.95) gutsy; urgency=low
1453
1454 * general-hooks/automatix.py: Remove hashbang, it's not an executable
1455 script.
1456 * apport/report.py: Support system-wide blacklisting:
1457 /etc/apport/blacklist.d/. Add test cases.
1458 * Add doc/README.blacklist: Document blacklist.d/, install it there in
1459 setup.py.
1460 * debian/rules: Blacklist wine-preloader, so that we ignore wine crashes
1461 until an appropriate way is found to deal with them. (Point 6 of
1462 apport-better-retracing spec.)
1463
1464 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 11 Aug 2007 18:10:54 +0200
1465
1466apport (0.94) gutsy; urgency=low
1467
1468 * doc/data-format.tex: Some updates to incorporate feedback from Gnome
1469 upstream:
1470 - Do not talk about "Distributions" any more, but "Operating systems".
1471 Gnome is used on non-Linux OSs, too.
1472 - Split "DistroRelease:" field into "OS:" and "OSRelease:".
1473 - Explicitly mention that CoreDump, StackTrace etc. can also contain
1474 minidump output.
1475 - Increase document version to 0.2.
1476 * apport/report.py, obsolete_packages(): Fix crash when apt does not know an
1477 available version of a package. (LP: #128176)
1478 * test-apport: Add check that apport aborts immediately if another apport
1479 instance is already running. Also test that a symlink attack on the lock
1480 file is not possible.
1481 * bin/apport: Abort running several apport instances at the same time, by
1482 lockf()'ing /var/crashes/.lock and aborting on failure. (LP: #119622)
1483 * Add bin/gcc_ice_hook: Script to create an apport report for a gcc ICE
1484 (internal compiler exception). Add test cases to test-hooks, and ship it
1485 in the 'apport' package. (LP: #125551)
1486 * run-tests: In 'local' mode, only explicitly run the apt/dpkg
1487 implementation instead of backends/*, since the RPM ones don't have tests
1488 yet.
1489 * apport/crashdb.py: Add a second optional parameter to upload() to specify
1490 an upload progress callback function. Adapt the declarations in the
1491 Launchpad and Memory implementations, too.
1492 * apport/crashdb_impl/launchpad.py, upload(): Pass upload progress callback
1493 handler to launchpadBugs.storeblob.upload(), which supports this since
1494 version 0.2~39. Bump dependency to it accordingly.
1495 * apport/ui.py, file_report(): Define an upload progress callback handler,
1496 pass it to the crashdb upload(), and feed ui_set_upload_progress() with
1497 some actual data. (LP: #91521)
1498 * problem_report.py: Remove support for reading bz2 compressed binary data.
1499 That was only relevant during edgy's development cycle.
1500 * apport/report.py, test_add_proc_info(): Fix determination of /bin/zgrep
1501 interpreter.
1502 * problem_report.py: Switch encoding of binary values from bare zlib to
1503 proper gzip format, since this is much more useful when reusing the
1504 compressed value. Retain support for zlib-only reports. Add test cases for
1505 both old and new encodings, and adapt the other test cases for the new
1506 format. Update doc/data-format.tex accordingly.
1507 * problem_report.py, write(): Add new permitted 'binary' argument value
1508 'compressed', which retains gzip compressed binary values instead of
1509 unpacking them transparently. Add test cases.
1510 * problem_report, write_mime(): Eliminate unnecessary usage of StringIO.
1511 * problem_report, write_mime(): Make function work for compressed binary
1512 values. Add test case.
1513 * apport/report.py, add_gdb_info(): Make function work if CoreDump is a
1514 compressed value.
1515 * apport/ui.py: Load crash report with keeping compressed binaries. This
1516 avoids loading the entire uncompressed core dump into memory, and avoids
1517 recompressing it all over again for generating the crash database upload
1518 MIME document. This greatly speeds up crash reporting, too. (LP: #98562)
1519
1520 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 31 Jul 2007 21:32:00 +0200
1521
1522apport (0.93) gutsy; urgency=low
1523
1524 * apport/crashdb.py: Set sqlite connect timeout to two hours, instead of the
1525 default 5 seconds. Previously, one retracer always crashed when the other
1526 was consolidating the database.
1527 * bin/dupdb-admin, command_dump(): Correctly interpret empty version strings
1528 as 'fixed in unknown verrsion', not 'unfixed'.
1529 * apport/crashdb_impl/launchpad.py: Fix typo in bug comment string.
1530 * apport/crashdb_impl/launchpad.py: Add function get_source_info() which
1531 parses out release, version, and component from
1532 https://launchpad.net/$DISTRO/+source/$PACKAGE.
1533 * apport/crashdb_impl/launchpad.py, get_fixed_version(): If a bug is fixed,
1534 return the current version (as approximation of the version where the bug
1535 was fixed), instead of an empty string (which meant 'fixed in unknown
1536 version'). [apport-crash-duplicates spec]
1537
1538 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 25 Jul 2007 17:04:27 +0200
1539
1540apport (0.92) gutsy; urgency=low
1541
1542 * bin/crash-digger: Do not crash if duplicate db is locked when attempting
1543 to consolidate it. This happens often because in the DC we have two
1544 parallel instances (for amd64 and i386).
1545 * Move ubuntu-fat-chroot from bin/ to debian/local/, since it is so heavily
1546 Ubuntu specific.
1547 * debian/local/ubuntu-fat-chroot: Use diversions for the binaries we want to
1548 disable, so that chroot upgrades do not trash the modifications.
1549 * debian/local/setup-apport-retracer: launchpad-crash-digger ->
1550 crash-digger.
1551 * bin/crash-digger: Add option -i/--arch-indep-dupcheck to explicitly enable
1552 duplicate checking of arch-independent crashes like Python exceptions. We
1553 only want to process them on one architecture to avoid scattering the
1554 duplicate database.
1555 * apport/crashdb_impl/launchpad.py, get_unfixed(): Search for 'apport-crash'
1556 tag, not 'apport'.
1557 * bin/apport-unpack: Fix format string in error message.
1558 * apport/ui.py, __init__(): Intercept ImportError, which can happen for
1559 crashes during system upgrades. (LP: #124354)
1560 * Add general-hooks/automatix.py: Refuse to send problem reports if
1561 automatix is installed.
1562 * doc/package-hooks.txt: Do not document UnsupportableReason, since it does
1563 not make sense to set it in package hooks (it is checked before calling
1564 the hooks). Hooks should use UnreportableReason only.
1565 * apport/ui.py, test_run_crash_package(): Check that 'Package' problem
1566 reports collect additional information, too.
1567 * apport/ui.py, collect_info(): Collect additional information for 'Package'
1568 problem reports, too.
1569 * Revive preloadlib/:
1570 - Remove PIPE_CORE #ifdefs and make them the default. We do not need to
1571 support the Edgy kernel patches in this version any more.
1572 - Install signal handler for SIGABRT, too.
1573 - Read core ulimit, pass it to apport in CORE_REAL_RLIM, and set it to
1574 zero for the program, since we do not actually want the kernel to write
1575 core files when we pipe the core dump to apport.
1576 - test-apport: Pass APPORT_REPORT_DIR to the manually called apport
1577 instance in the memory clipping test; otherwise it'll write into
1578 /var/crash/, which we do not consider in library mode.
1579 * apport/crashdb_impl/launchpad.py, __init__(): Only do the "download bug
1580 #2" hack if we actually have an authentication cookie. Thus, do it only on
1581 the retracing servers, not on the client side. (LP: #125142)
1582 * apport/report.py, crash_signature(): Generate a signature for one-line
1583 Python tracebacks, too. This sometimes seems to happen, e. g. LP#124588.
1584 (LP: #125020)
1585 * apport/crashdb_impl/launchpad.py, update(): Set bug importance to Medium
1586 if retracing was successful. (LP: #106379)
1587
1588 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 24 Jul 2007 21:50:34 +0200
1589
1590apport (0.91) gutsy; urgency=low
1591
1592 * bin/apport: Remove code that supported the Edgy kernel way of core dump
1593 passing. Also factorize the CORE_REAL_RLIM evaluation, since it is likely
1594 to change in the near future.
1595 * apport/crashdb_impl/launchpad.py, close_duplicate(): Delete some
1596 attachments, as specified in apport-crash-duplicates spec, and make the
1597 bug public afterwards.
1598 * apport/crashdb_impl/launchpad.py, close_duplicate(): If the master bug is
1599 already duped to yet another bug, mark the bug to that one instead of the
1600 master.
1601 * apport/crashdb.py: Split out duplicate_db_last_consolidation() for getting
1602 the date (or seconds since) the last consolidation, so that we can use it
1603 externally.
1604 * apport/crashdb.py: Add duplicate_db_change_master_id() to change the
1605 master ID of a crash. Add test case to apport/crashdb_impl/memory.py.
1606 * Add bin/dupdb-admin: Initial version of duplicate db CLI app; can dump the
1607 db, display consolidation state, and change master bug IDs for now. Ship
1608 it in apport-retrace.
1609 * apport/crashdb.py, duplicate_db_last_consolidation(): Fix timedelta
1610 seconds calculation to actually take the days into account, too.
1611 * bin/crash-digger: Fix dumping of dup db after consolidation.
1612 * apport/ui.py:
1613 - test_run_report_bug_package(): Add test case for calling the UI in bug
1614 filing mode with an invalid package name.
1615 - run_report_bug(): Do not crash on invalid package name, generate an
1616 error message instead. (LP: #123644)
1617 * apport/fileutils.py, mark_report_seen(): Do not crash if the file has
1618 already been deleted underneath us. (LP: #122347)
1619 * apport/ui.py, run_report_bug(): Do not crash if the target process runs as
1620 a different user. Print a proper error message instead. Add test case
1621 test_run_report_bug_noperm_pid(). (LP: #121121)
1622 * apport/fileutils.py, likely_packaged(): Ignore /var/lib/schroot. Add test
1623 case. (LP: #122859)
1624 * apport/ui.py, open_url(): Intercept weird race condition for os.close()
1625 trying to close an already invalidated fd. (LP: #123180)
1626
1627 Merge the fedora branch, thanks to Will Woods <wwoods@redhat.com>:
1628
1629 * Add apport.init.fedora: Fedora specific init script.
1630 * Add apport.spec: RPM build recipe.
1631 * Add backends/packaging_rpm.py: Partial implementation of the packaging
1632 backend for RPM which applies to all RPM-based distros.
1633 * Add backends/packaging_fedora.py: Concrete packaging backend
1634 implementation for Fedora.
1635 * apport/elfcore.py: Classes for parsing general ELF files, and information
1636 from core dumps.
1637 * bin/apport: Fall back to reading signal number and PID directly from the
1638 core file (via elfcore.py) if CORE_SIGNAL and CORE_PID are not defined (i.
1639 e. when running on a non-Ubuntu kernel).
1640 * crashdb.conf: Add stanzas for Fedora and a 'debug' database which uses the
1641 'memory' crashdb implementation.
1642
1643 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 14 Jul 2007 15:08:35 +0200
1644
1645apport (0.90) gutsy; urgency=low
1646
1647 * apport/ui.py, load_report(): Catch IOError, too. LP: #118827
1648 * Merge apport-cli package into apport itself. The program itself is just 3
1649 kB compressed, and it's not worth wasting another 34 kB compressed
1650 changelog for this tiny bit.
1651 * apport/report.py, obsolete_packages(): Use the version comparison from the
1652 packaging system instead of just testing for inequality. This catches zero
1653 epochs. Thanks to Will Woods <wwoods@redhat.com>!
1654 * apport/ui.py: Add option -c/--crash-file to run the UI with a particular
1655 crash file (which can be anywhere) instead of all pending crashes in
1656 /var/crash/.
1657 * Add xdg-mime/apport.xml: XDG MIME type definition for .crash files.
1658 * Add gtk/apport-gtk-mime.desktop.in: Link text/x-apport MIME type to
1659 apport-gtk -c, so that .crash files can be reported with Gnome.
1660 * Add debian/apport.links: Install an icon symlink for the MIME type.
1661 * apport/ui.py: Do not ask the initial "Do you want to report this?"
1662 question when being invoked with --crash-file.
1663 * po/POTFILES.in: Add missing cli/apport-cli.
1664 * po/de.po: Updated for apport-cli.
1665 * cli/apport-cli: Add option for keeping the report file without sending it,
1666 and to display its path. This is for sending the report later, copying
1667 it from a server to a workstation with internet connection, etc.
1668 * apport/crashdb_impl/launchpad.py: Simplify _subscribe_triaging_team(), now
1669 that we do not differ between main and universe policies any more.
1670 * apport/report.py: Support another hook directory
1671 /usr/share/apport/general-hooks/ for scripts which are run for every
1672 problem report. This was requested for adding e. g. AppArmor logs, etc.
1673 Add test cases.
1674 * Add debian/apport.dirs again to ship that hook directory.
1675 * doc/package-hooks.txt: Document the general hooks.
1676
1677 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 10 Jul 2007 21:10:19 +0100
1678
1679apport (0.89) gutsy; urgency=low
1680
1681 Implement private crash bug handling, according to
1682 https://wiki.ubuntu.com/CrashReporting:
1683
1684 * apport/crashdb_impl/launchpad.py:
1685 - upload(): If we have an Ubuntu bug, mark it as private and only
1686 subscribe 'apport' (the 'Apport retracing service' user).
1687 - Add function _subscribe_triaging_team() which subscribes
1688 ubuntu-crashes-main for source packages in Ubuntu main or restricted, or
1689 ubuntu-crashes-universe for other packages. It does not touch non-Ubuntu
1690 bugs, since these are not marked private by default and are outside of
1691 the scope of this spec.
1692 - update(), _mark_dup_checked(): Call _subscribe_triaging_team().
1693 - Note: This entire spec is a gross hack, and Ubuntu derivatives do not
1694 benefit from it at all. We have to live with this until LP grows a real
1695 crash database.
1696 - get_distro_release(): Make this function work with private bugs, too, by
1697 using p-lp-bugs' safe_urlopen().
1698
1699 Bug fixes:
1700
1701 * apport/crashdb_impl/launchpad.py: Revert simplification change of 0.85:
1702 BugList returns a set of strings, not integers; due to non-identity they
1703 do not work with the usual set operations.
1704 * apport/crashdb_impl/launchpad.py: Add function get_source_component() to
1705 query Launchpad for the component of a given distribution and source
1706 package. (This will be required for implementing crash-reporting).
1707 * backends/packaging-apt-dpkg.py, _search_contents(): Package list is
1708 actually comma separated, only take the first item. This fixes retracing
1709 of e. g. #124139.
1710 * backends/packaging-apt-dpkg.py, _search_contents(): Fix package name
1711 parsing for non-main components. This fixes retracing of e. g. #124111.
1712 * apport/report.py, _read_maps(): Revert ptrace hack when maps cannot be
1713 read. maps file is now protected based on process ownership, not ptracing.
1714 * apport/crashdb.py, apport/crashdb_impl/launchpad.py,
1715 apport/crashdb_impl/memory.py: Remove official interface
1716 mark_dup_checked(), as it should only be an internally used function. Add
1717 report parameter, since we will need it there in the future. Remove
1718 explicit call from bin/crash-digger and instead change check_duplicate()
1719 to call it on its own.
1720 * apport/crashdb_impl/launchpad.py, download(): Replace dodgy parsing of
1721 fields from the description with proper code, so that multi-line fields
1722 are read correctly, too.
1723
1724 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 06 Jul 2007 11:19:22 +0200
1725
1726apport (0.88) gutsy; urgency=low
1727
1728 * po/de.po: Update.
1729 * backends/packaging-apt-dpkg.py, _search_contents(): Do not check the
1730 return value of zgrep. It usually errors out with 'stdout: broken pipe'
1731 when called with -m1.
1732 * bin/crash-digger: Mark a bug as retraced if DistroRelease: cannot be
1733 determined. Those are bugs apport cannot handle.
1734 * backends/packaging-apt-dpkg.py, get_source_tree(): Call apt-get source
1735 with --assume-yes to not block on VCS confirmations.
1736 * apport/crashdb.py: Add interface mark_retrace_failed(). Implement it in
1737 apport/crashdb_impl/launchpad.py.
1738 * bin/apport-retrace: If retraced report does not have a crash signature,
1739 mark it as failed with above new function. Bump python-apport dependency
1740 for this.
1741 * apport/crashdb_impl/launchpad.py, update(): Delete CoreDump.gz attachment
1742 if the retrace was successful (i. e. if the report has a crash signature).
1743 * apport/ui.py, test_run_crash(): Set the message box title, text, and
1744 severity as assertion message if the run_crash() test fails, so that you
1745 know why it fails. This usually happens if libc6 or another dependency of
1746 the test crash is out of date.
1747 * gtk/apport-gtk.glade: Mark string as translatable. LP: #119621
1748
1749 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 03 Jul 2007 21:38:05 +0200
1750
1751apport (0.87) gutsy; urgency=low
1752
1753 * apport/report.py:
1754 - test_gen_stacktrace_top(): Add test case for unwinding a Gnome assertion
1755 (g_logv(), g_assert_warning() and similar), see LP #123462.
1756 - _gen_stacktrace_top(): Generalize for unwinding multiple functions and a
1757 set of function names, and add the Gnome assertion ones.
1758
1759 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 02 Jul 2007 11:00:44 +0200
1760
1761apport (0.86) gutsy; urgency=low
1762
1763 * test-apport: Check that apport does not create reports for emtpy core
1764 dumps.
1765 * problem_report.py: Introduce a fourth optional parameter "fail_on_empty"
1766 to file pointer tuples which causes write() to raise an IOError if no data
1767 was read. Add test cases.
1768 * bin/apport: Enforce non-emptyness of CoreDump.
1769 * problem_report.py: Add test case for delayed piping of data passed as file
1770 object pointers. This was supposed to explain the reason for getting bugs
1771 with zero-byte core dumps, but already works correctly.
1772 * apport/report.py, check_ignored(): round the mtime to an int (just like
1773 mark_ignore() does), to not get wrong results on file systems that support
1774 subsecond file timestamps. This fixes running the test suite on the live
1775 CD.
1776 * test-apport: Clarify assertion message if /var/crash is not empty.
1777
1778 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 28 Jun 2007 19:14:36 +0200
1779
1780apport (0.85) gutsy; urgency=low
1781
1782 * apport/crashdb_impl/launchpad.py: BugList.bugs is already a set, simplify
1783 code a bit.
1784 * debian/control: Add dpkg-dev dependency to apport-retrace, for getting
1785 dpkg-source.
1786 * apport/report.py, crash_signature(): Allow ':' and '~' as part of function
1787 names to cover C++. Adapt test case to cover this.
1788 * apport/report.py test suite: Do not assume that /bin/zgrep uses /bin/sh,
1789 it was recently changed to use bash. Directly read the interpreter from
1790 the shebang line.
1791 * bin/apport-chroot, command_upgrade(): Supply -y to 'apt-get upgrade' also
1792 in verbose mode.
1793 * bin/apport-chroot, command_upgrade(): Run 'apt-get clean' before
1794 regenerating the chroot tarball.
1795 * backends/packaging-apt-dpkg.py, get_dependencies(): Fix crash when
1796 encountering a virtual package. LP: #122274
1797 * apport/report.py, obsolete_packages(): Do not consider virtual packages as
1798 obsolete.
1799 * apport/crashdb_impl/launchpad.py: Do a bogus call to Bug() in the ctor.
1800 This initializes python-launchpad-bugs to use a cookie for the urlopen in
1801 BugList, so that get_unretraced() and get_dup_unchecked() return private
1802 bugs, too. This works around LP #122126.
1803
1804 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 25 Jun 2007 16:38:43 +0200
1805
1806apport (0.84) gutsy; urgency=low
1807
1808 * apport/crashdb.py: Add new abstract methods:
1809 - get_unretraced() and mark_retraced(id) to get a list of crashes that
1810 need to be retraced and chalk them off.
1811 - get_dup_unchecked() and mark_dup_checked() to get a list of crashes that
1812 need to be checked for being a duplicate and chalk them off. This is
1813 aimed at crashes which do not need retracing, such as unhandled Python
1814 exceptions.
1815 * apport/crashdb_impl/launchpad.py: Implement above methods for launchpad
1816 (moving the code from bin/launchpad-crash-digger).
1817 * apport/crashdb_impl/launchpad.py: Set "need-duplicate-check" tag for
1818 Python crashes.
1819 * apport/crashdb_impl/launchpad.py, download(): Fetch Traceback.txt, too, so
1820 that we can do duplicate checking for Python crashes.
1821 * bin/launchpad-crash-digger: Drop Launchpad specific code and replace it
1822 with calls to above new functions. Rename to bin/crash-digger. Also rename
1823 all 'cookie' to 'auth' (as happened with the other applications earlier).
1824 * bin/crash-digger: Do duplicate checking for needs-duplicate-check crash
1825 bugs (such as Python crashes).
1826 * bin/apport-retrace, bin/crash-digger: More language cleanup; we should
1827 stop talking about 'bugs' and use 'crash' consistently.
1828
1829 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 14 Jun 2007 19:50:24 +0200
1830
1831apport (0.83) gutsy; urgency=low
1832
1833 * apport/crashdb.py: Separate abstract from implemented functions.
1834 * apport/crashdb.py, apport/packaging.py, apport/ui.py: Use
1835 NotImplementedError instead of Exception in the abstract methods.
1836 * apport/packaging.py: Add interface compare_versions() for comparing
1837 package version numbers.
1838 * backends/packaging-apt-dpkg.py: Implement compare_versions() using
1839 apt.VersionCompare(), add some test cases.
1840 * apport/report.py: Fix typo: 'none' -> 'None'.
1841 * apport/chroot.py: Do not include /usr/local/lib and /usr/lib in
1842 LD_LIBRARY_PATH, just /lib, so that we still use the libc from outside,
1843 but e. g. libxml2 from inside the chroot.
1844
1845 https://blueprints.launchpad.net/ubuntu/+spec/apport-crash-duplicates: Merge
1846 crash-dups branch, which implements automatic crash duplicate detection:
1847
1848 * apport/crashdb.py: Add methods for crash duplicate detection.
1849 * apport/crashdb_impl/memory.py: Change internal data management to track
1850 fixed version and duplicates.
1851 * apport/crashdb_impl/memory.py: Add a test suite for all methods, including
1852 the duplicate detection API of the base CrashDatabase (since it is
1853 much easier to test it here, on an actual implementation).
1854 * debian/pyversions: Bump minimal Python version to 2.5, since this starts
1855 providing the sqlite3 module.
1856 * apport/crashdb_impl/launchpad.py: Implement new methods required for crash
1857 duplicate detection. get_fixed_version() does not approximate version
1858 tracking yet; it just returns '' for fixed bugs (which means 'fixed, but
1859 unknown version'). Bump python-launchpad-bugs dependency for this to
1860 ensure the availability of Bug.mark_duplicate().
1861 * bin/apport-retrace: Add option --duplicate-db which specifies the path to
1862 the duplicate sqlite database and enables duplicate detection.
1863 * Abin/apport-chroot: Add option --duplicate-db. If a file is given, symlink
1864 it into the chroot and pass --duplicate-db to apport-retrace.
1865 * bin/launchpad-crash-digger: Add --duplicate-db and pass it to
1866 apport-chroot.
1867 * apport/crashdb.py: Track last run of duplicate_db_consolidate() in an
1868 extra table and add a method duplicate_db_needs_consolidation() which
1869 returns True if the last run was more than a given number of seconds ago.
1870 Add test cases to apport/crashdb_impl/memory.py.
1871 * bin/launchpad-crash-digger, fill_pool(): Check whether the duplicate
1872 database needs consolidation (i. e. updating the bug states to the reality
1873 in the bug tracker) and if so, trigger it.
1874
1875 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 13 Jun 2007 13:09:57 +0200
1876
1877apport (0.82) gutsy; urgency=low
1878
1879 * Add bin/ubuntu-fat-chroot: Script to install a set of commonly needed
1880 packages into a minimal Ubuntu chroot (as created by apport-chroot). This
1881 requires some hacking of postinst and /usr/sbin/ files in between the
1882 installation stages and thus deserves a script on its own.
1883 * apport/packaging.py:
1884 - Add "uninstalled" option to get_file_package(). If set to True, this
1885 will do an expensive search of files/packages which are not installed.
1886 - Add interface "set_mirror(URL)" for functions which need to retrieve
1887 packages and data from distribution mirrors.
1888 * backends/packaging-apt-dpkg.py: Implement "uninstalled" option and
1889 "set_mirror(URL)", add test cases.
1890 * bin/apport-retrace: Use "uninstalled" option now to install packages and
1891 corresponding -dbgsyms for uninstalled files mentioned in ProcMaps
1892 (Point 1 of apport-better-retracing spec). Bump python-apport dependency.
1893 * apport/packaging.py: Add interface get_available_version(package).
1894 * backends/packaging-apt-dpkg.py: Implement get_available_version(), add
1895 shallow test case.
1896 * apport/report.py: Add function obsolete_packages() to return packages in
1897 Package: and Depends: which are not up to date. Add test cases.
1898 * apport/ui.py, thread_collect_info(): For crashes, call obsolete_packages()
1899 and set UnreportableReason: if there are any (Point 2 of
1900 apport-better-retracing spec).
1901 * apport/ui.py, thread_collect_info(): call standard_title() and add it to
1902 the report as 'Title' field. This is useful if reporters modify the
1903 default title (per request of Brian Murray, thanks). Add test case.
1904 * apport/ui.py: Fix declaration of the test suite's
1905 ui_set_upload_progress(). Funny that this has never been triggered before.
1906 * apport/report.py, add_gdb_info(): Split out StacktraceTop generation into
1907 separate funtion _gen_stacktrace_top(), so that we can test it separately.
1908 * apport/report.py, _gen_stacktrace_top(): Step back from the crashed
1909 program's own signal handlers, since those are generally not useful for
1910 the purposes of StacktraceTop and only impede duplicate matching
1911 (Point 4 of apport-better-retracing spec). Add various test cases.
1912 * apport/report.py: Add method crash_signature() to calculate an unique
1913 identifier of a signal or Python crash, to be used for duplicate
1914 detection. Add various test cases.
1915 * apport/packaging.py: Add interface get_source_tree() to fetch and unpack a
1916 source package to a given directory, optionally specifying a particular
1917 version.
1918 * backends/packaging-apt-dpkg.py: Implement get_source_tree(). This has a
1919 rather crude 'call apt-get source and guess about directories'
1920 implementation until python-apt learns about doing this directly and more
1921 elegantly (see LP #118788).
1922 * bin/apport-retrace: Add gen_source_stacktrace() and a few helper functions
1923 to construct a field 'StacktraceSource' with the source code around the
1924 affected lines in the stack trace (as available). (Point 5 of
1925 apport-better-retracing spec).
1926 * apport/crashdb_impl/launchpad.py, update(): Attach StacktraceSource to the
1927 bug if it exists.
1928 * apport/crashdb_impl/launchpad.py: Check PackageArchitecture for 'all', to
1929 not set a retracer tag 'need-all-retrace'.
1930 * test-apport: Clarify assertion failure message when an unexpected core
1931 dump is present.
1932 * apport/report.py, get_module_license(): Do not iterate over Popen.stdout,
1933 use communicate() instead. The latter is already fixed to not trip over
1934 SIGINTR. (LP: #118965)
1935
1936 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 08 Jun 2007 07:47:04 +0200
1937
1938apport (0.81) gutsy; urgency=low
1939
1940 * apport/report.py: Remove '[apport]' default bug title prefix. (LP: #94819)
1941 * apport/crashdb_impl/launchpad.py: Tag new bugs with
1942 'apport-<problemtype>'. This replaces the former '[apport]' prefixing.
1943 * debian/local/setup-apport-retracer: Specify a path in '.' command and
1944 use sh again. Yay for me needing three attempts before actually RTFMing
1945 how '.' works (which is really nasty and strange IMHO).
1946 * bin/apport-chroot: Fix symlinks before repackaging the chroot tarball in
1947 'install' and 'installdeb' modes.
1948 * debian/local/setup-apport-retracer: Install python-libxml2 and python-apt.
1949 * bin/launchpad-crash-digger: Supply --auth instead of the deprecated
1950 --cookie to apport-chroot.
1951 * bin/apport-chroot: Fix identifier name in command_retrace().
1952 * debian/local/setup-apport-retracer: Set APPORT_CRASHDB_CONF to the local
1953 crashdb.conf.
1954 * bin/apport-chroot: Unset APPORT_CRASHDB_CONF for login and retrace.
1955 * bin/launchpad-crash-digger: Check the release of a bug and whether we have
1956 a chroot for it before untagging it. This avoids loosing tags for bugs we
1957 do not yet have a working retracer chroot for.
1958 * bin/apport-retrace: Do not abort with an exception if package installation
1959 fails. Give a proper error message instead and point to -u. (LP: #115681)
1960 * apport/crashdb_impl/launchpad.py, update(): Create a temporary directory
1961 and use proper file names for the new attachments. With TemporaryFile(),
1962 attachment file names ended up as '<fdopen>'. (LP: #115347)
1963 * apport/report.py, add_os_info(): Add field 'NonfreeKernelModules' which
1964 lists loaded kernel modules which do not have a FOSS license. This is
1965 particularly helpful for quickly checking for restricted graphics drivers.
1966 (LP: #103239)
1967 * apport_python_hook.py: Move the apport.* imports into the try: block and
1968 move the likely_packaged() test to the top, to avoid importing
1969 apport.report and creating a Report object for non-packaged scripts. This
1970 makes the entire code more efficient and robust against errors in the
1971 apport modules. (LP: #109955)
1972 * apport/report.py, add_gdb_info(): Intercept OSError from gdb invocation
1973 (which might be segfaulting itself) and just do not put any gdb output
1974 into the report. The automatic retracers can try their luck again.
1975 (LP: #112501)
1976 * bin/apport-retrace: Fix handling of packages which are still known to
1977 /var/lib/dpkg/status, but do not have an apt record any more; treat them
1978 like virtual packages and just issue a warning instead of falling over.
1979 (LP: #107474)
1980 * Add doc/data-format.tex: Documentation of the structure, encoding, and
1981 standard keys of the Apport report file format. [apport-for-upstreams
1982 blueprint]
1983 * Add doc/Makefile: Build and clean rules for generating data-format.pdf.
1984 * debian/rules, setup.py: Call doc/Makefile and install the PDF
1985 documentation. Add texlive-latex-recommended build dependency for that.
1986
1987 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 24 May 2007 19:39:12 +0200
1988
1989apport (0.80) gutsy; urgency=low
1990
1991 Collect all Launchpad specific bits in a separate class and provide an
1992 abstract base class. This will greatly help for getting upstream acceptance
1993 and the possibility of automatically forwarding crashes upstream
1994 (apport-for-upstreams specification):
1995
1996 * Add apport/crashdb.py: Abstract crash database interface. This also offers
1997 a factory function get_crashdb() which reads a configuration file to find
1998 the default crash database to be used.
1999 * Add ./crashdb.conf: Crash database configuration file, for Ubuntu on
2000 Launchpad. Modify setup.py and debian/python-apport.install to ship it in
2001 python-apport.
2002 * Add apport/crashdb_impl/memory.py: Simple in-memory implementation of
2003 crash database interface for testing.
2004 * Add apport/crashdb_impl/launchpad.py: Launchpad implementation of crash
2005 database interface.
2006 * apport/ui.py: Drop LP specific bits and move towards new CrashDatabase
2007 interface.
2008 * apport/ui.py, test suite: Do not overwrite file_report() any more, but
2009 use the memory CrashDatabase. This will test the actual file_report()
2010 implementation and allows the test suite to check the precise value of
2011 opened URLs.
2012 * apport/{report,ui}.py: Move UserInterface.create_crash_bug_title() and its
2013 test cases to Report.standard_title(). It is much more appropriate there
2014 and can be used in the retracer as well.
2015 * bin/apport-retrace: Drop LP specific bits and move to CrashDatabase
2016 interface. Remove the --remove-tag option, we really should not have it
2017 here; remove it from man/apport-retrace.1 as well.
2018 * bin/apport-chroot: Drop --remove-tag option here, too.
2019 * bin/apport-chroot: Drop LP specific bits and move to CrashDatabase
2020 interface.
2021 * bin/launchpad-crash-digger: Remove retracing tag directly instead of
2022 passing --remove-tag to apport-chroot. This is a much cleaner design and
2023 avoids infinitely looping on some weirdly failing retraces.
2024 * debian/control: Bump some python-apport dependencies for the API changes.
2025
2026 Some debranding:
2027
2028 * setup.py: Use apport wiki home page for 'url'.
2029 * Remove 'X-Ubuntu-Gettext-Domain' from *.desktop.in, since langpack.mk will
2030 add it automatically now.
2031 * *.desktop.in: Remove 'in Ubuntu' from comment.
2032 * cli/apport-cli, qt4/apport-qt: Generalize window titles.
2033
2034 Other fixes:
2035 * po/de.po: Update.
2036 * debian/local/setup-apport-retracer: Revert back 'source' to '.' and use
2037 bash instead of sh. POSIX sh does not seem to have a 'source' command.
2038
2039 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 21 May 2007 19:25:31 +0200
2040
2041apport (0.79) gutsy; urgency=low
2042
2043 * debian/local/setup-apport-retracer: Fix '.' bashism, replace it with
2044 'source'.
2045 * problem_report.py, write_mime(): Drop preamble argument, replace it with
2046 an extra_headers dictionary. This is much easier to evaluate on clients.
2047 * apport/ui.py: Convert to new write_mime() interface from above. This
2048 finally automatically tags bugs with need-$ARCH-retrace. Bump
2049 p-problem-report dependency of python-apport for this.
2050 * apport/report.py: Change example URLs in the testsuite from launchpad to
2051 an artificial ones to avoid the impression that it is LP specific.
2052 * backends/packaging-apt-dpkg.py: Formally make this a subclass of
2053 apport.packaging.PackageInfo.
2054 * debian/control: Use code.lp.net instead of bazaar.lp.net VCS URL.
2055 * bin/kernel_hook: Fix/improve the collected information:
2056 - Read /proc/modules instead of lsmod.
2057 - Fix lspci argument: -n instead of -m.
2058 - Add /proc/cmdline.
2059 * debian/rules: Use langpack.mk for updating the .desktop files.
2060 * Add po/Makevars to specify the domain, to make intltool figure out the
2061 gettext domain automatically.
2062 * bin/kernel_hook, ./test-hooks: Do not rely on /proc/version_signature any
2063 more, it's gone in the gutsy kernel.
2064
2065 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 21 May 2007 15:55:10 +0200
2066
2067apport (0.78) gutsy; urgency=low
2068
2069 * apport/packaging.py, backends/packaging-dpkg.py: Add new interface
2070 is_distro_package(package) which verifies the origin of a given package.
2071 Move the dodgy hack from apport/ui.py to the backend, where it belongs to.
2072 Also add a test case.
2073 * debian/control: Add python-apt dependency to python-apport.
2074 * debian/control: Remove debianutils dependency, it's essential.
2075 * Drop backends/packaging-dpkg.py. It had some hackish usage of python-apt
2076 anyway, since some things just cannot be figured out with dpkg alone.
2077 Since we have to give up on that idea, implement a new clean packaging
2078 backend 'packaging-apt-dpkg.py' which now uses python-apt and dpkg in a
2079 clean way.
2080 * apport/report.py, add_gdb_info(): Fix crash when Stacktrace could not be
2081 created. (LP: #107853)
2082 * ./test-apport: Check that crashes create a core dump (with proper ulimits)
2083 when an unseen crash report exists already. This reproduces LP #105976.
2084 * bin/apport: Create core dump file if aborting because an unseen crash
2085 report already exists. (LP: #105976)
2086 * apport/ui.py: Add a comment for translators. (LP: #104703)
2087 * apport/ui.py, load_report(): Also catch zlib.error on invalid reports.
2088 (LP: #103547)
2089 * apport/report.py: Add method has_useful_stacktrace() to determine whether
2090 the stack trace can be considered useful. The current heuristic is to
2091 consider it useless if it either is shorter than three lines and has any
2092 unknown function, or for longer traces, a minority of known functions. Add
2093 test cases.
2094 * gtk/apport-gtk, qt4/apport-qt, cli/apport-cli: Do not offer 'reduced
2095 report' option if the stack trace is useless. (LP: #87430) Bump the
2096 python-apport dependencies of the frontend packages to ensure that we have
2097 has_useful_stacktrace().
2098
2099 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 5 May 2007 17:53:42 +0200
2100
2101apport (0.77) gutsy; urgency=low
2102
2103 * apport/report.py: Replace any() call with a list comprehension to work
2104 with Python < 2.5. (LP: #104864)
2105 * apport/report.py: Move the ctypes import to the one place where we
2106 actually need it, and do not entirely fail if they do not exist (such as
2107 in Python 2.4). It is only required for non-default Feisty kernels anyway.
2108 (LP: #107662)
2109 * apport/chroot.py: Fix test suite to work with Python 2.4's tarfile module
2110 output format.
2111 * debian/local/setup-apport-retracer: Generalized some feisty specific
2112 bits, set default release to gutsy.
2113
2114 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 23 Apr 2007 12:22:17 +0200
2115
2116apport (0.76) feisty; urgency=low
2117
2118 * Move python_hook.py out of the apport module to apport_python_hook.py, so
2119 that it does not inflict the expensive import of all apport related
2120 modules to every python program. Adapt module prefixes accordingly.
2121 (LP: #105764)
2122 * setup.py, debian/python-apport.install: Install apport_python_hook.py into
2123 the python-apport binary package.
2124 * apport/ui.py test suite: Unset locale related environment variables so
2125 that the tests which check strings are not invalidated by translations.
2126
2127 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 12 Apr 2007 11:47:50 +0200
2128
2129apport (0.75) feisty; urgency=low
2130
2131 * apport/report.py, add_proc_info(): Chop off /rofs/ prefix from
2132 ExecutablePath, so that crashes work on the live system, too. Arguably a
2133 kernel bug, but probably too hard to fix at this time. (LP: #102909)
2134 * backends/packaging-dpkg.py, get_modified_files(): Ignore empty lines in
2135 broken .md5sums file rather than crashing on them. (LP: #102906)
2136
2137 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 4 Apr 2007 21:51:28 +0200
2138
2139apport (0.74) feisty; urgency=low
2140
2141 * debian/apport-{gtk,qt}.install: Do not install .desktop files for now,
2142 until we get a proper guided bug reporting.
2143 * problem_report.py, write_mime(): Do not re-compress keys which already end
2144 in .gz. Add test cases.
2145 * test-hooks: Add a (dodgy) test case for calling package_hook on an
2146 uninstalled package. After all, this is very likely to happen for
2147 installation errors. This reproduces #97636.
2148 * backends/packaging-dpkg.py, get_source(): Add a similarly dodgy fallback
2149 to apt if the queried package is not installed. This needs to be
2150 generalized and cleaned up later, but now is the time for unintrusive
2151 small patches. (LP: #97636)
2152 * test-apport: Do not fail on non-empty gdb stderr if it only consists of a
2153 single warning (as happens on powerpc).
2154 * apport/report.py, test_check_interpreted(): Run gedit test on an actually
2155 existing file, reproducing the interpreter confusion reported in #102056.
2156 * apport/report.py, _check_interpreted(): Add a whitelist of common
2157 interpreters and check ExecutablePath against it. (LP: #102056)
2158 * apport/ui.py: Ignore SystemError exceptions from apt, which happen on
2159 badly formatted source.list entries. (LP: #98901)
2160 * apport/ui.py: Fix crash on None candiateOrigin from the apt cache object.
2161 (LP: #98961)
2162 * gtk/apport-gtk.glade: Add window titles to progress and details dialogs.
2163 (LP: #97640)
2164
2165 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 4 Apr 2007 14:44:08 +0200
2166
2167apport (0.73) feisty; urgency=low
2168
2169 * problem_report.py, write(): Allow a third optional argument in tuple
2170 values, which specify a maximum file size. Above it, the entire key gets
2171 removed. Add testsuite checks for all boundary cases.
2172 * bin/apport: Limit core dump size to 75% of usable RAM
2173 (MemFree+Cached-Writeback). This should avoid trashing people's boxes hard
2174 on huge core dumps. Bump dependencies on python-problem-report. Create an
2175 expensive, but realistic check for this in test-apport.
2176 (LP: #71560)
2177 * apport/ui.py, run_crash(): If a signal crash report does not have a core
2178 dump, explain that the computer has too little memory for an automatic
2179 analysis/report of the crash. Add test suite check.
2180
2181 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 29 Mar 2007 23:38:23 +0200
2182
2183apport (0.72) feisty; urgency=low
2184
2185 [ Martin Pitt ]
2186 * bin/apport-chroot, command_create(): Install gpgv.
2187 * bin/apport-retrace: Fix error handling in fetch_unpack().
2188 * Move apport-retrace.1 manpage from package apport to apport-retrace. Bump
2189 Conflicts/Replaces accordingly.
2190 * bin/launchpad-crash-digger, apport/ui.py: Remove the special case
2191 'powerpc'->'ppc' and use need-powerpc-retrace uniformly.
2192 * debian/control: Add XS-Vcs-Bzr: header.
2193 * apport/ui.py: Fix wrong parameter name in help message.
2194 * Another grammar fix, thanks to Brian Murray!
2195
2196 [ Michael Hofmann ]
2197 * debian/local/ubuntu-bug: Try to use apport-cli, if we do not have a
2198 $DISPLAY, or neither Gnome nor KDE are running.
2199 * debian/control: Recommend elinks, since it is the only text browser so far
2200 that works with Launchpad (see #59510)
2201 * Add debian/apport-cli.README.Debian: Describe how to integrate
2202 apport-checkreports and apport-cli into .bashrc for crash notification on
2203 servers.
2204 * qt4/apport-qt: Fix undefined symbol in ui_present_package_error().
2205 (LP: #97282)
2206
2207 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 29 Mar 2007 11:41:39 +0200
2208
2209apport (0.71) feisty; urgency=low
2210
2211 * cli/apport-cli, qt4/apport-qt: Fix bad grammar 'some minutes'.
2212 (LP: #95296)
2213 * problem_report.py, write_mime(): Add optional 'preamble' parameter. Add
2214 test case.
2215 * apport/ui.py, upload_launchpad_blob(): Set need-$ARCH-retrace tag in MIME
2216 preamble. Bump p-problem-report dependency. (LP: #94790)
2217 * bin/apport-retrace: In verbose mode, display the path of currently
2218 extracting deb.
2219 * bin/apport-retrace: Do not fall over errors of dpkg -x (which happens e.
2220 g. on udev, where it cannot unpack /dev, since this is a symlink to the
2221 real /dev). Merely print out a warning about it.
2222 * apport/ui.py, run_report_bug(): Ignore ENOENT from add_proc_info(). This
2223 happens if the user closes the application prematurely, so that /proc/pid
2224 does not exist any more. Add test case. (LP: #95954)
2225 * backends/packaging-dpkg.py, get_modified_files(): Ignore lines in .md5sums
2226 files which contain a NUL byte. This Should Not Happenâ„¢, but nevertheless
2227 did. (LP: #96050)
2228 * apport/ui.py, doc/package-hooks.txt: Check for a field
2229 "UnreportableReason: <text>" and display an information box that the
2230 current crash cannot be reported because of <text>. Add test case.
2231 Document the new field.
2232 * apport/ui.py: Check package origin, compare it to DistroRelease:, and
2233 report crash as unreportable if they do not match. This particularly saves
2234 the user from uploading large reports for e. g. opera crashes, and avoids
2235 filing Ubuntu bugs from Debian installations. (LP: #75513)
2236
2237 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Mar 2007 18:01:24 +0200
2238
2239apport (0.70) feisty; urgency=low
2240
2241 [ Martin Pitt ]
2242 * bin/apport-retrace: Add option --remove-tag to remove a Launchpad bug
2243 tag. This is intended for an automatic Malone crash retracing system.
2244 * debian/control: Bump python-launchpad-bugs dependency to ensure that we
2245 have Bug.[gs]et_metadata().
2246 * man/apport-retrace.1: Add documentation for --confirm and --remove-tag.
2247 * bin/apport-chroot: Add option --remove-tag and pass it to apport-retrace.
2248 * apport/chroot.py, fix_symlinks(): Convert chroot path prefixed absolute
2249 symlinks to relative symlinks to avoid fakechroot's weird handling of
2250 absolute symlinks.
2251 * Add bin/launchpad-crash-digger: Daemon for watching out for
2252 need-$ARCH-retrace tagged Ubuntu bugs in Launchpad and calling
2253 apport-retrace on them.
2254 * bin/apport-retrace: Mangle bug comment with StacktraceTop to not contain
2255 invalid UTF-8, to avoid getting Internal Server Errors from LP.
2256 * debian/local/setup-apport-retracer: Install libc6-i686{,-dbgsym} into an
2257 x86 chroot, to get sane x86 backtraces for crashes in libc.
2258 * debian/local/setup-apport-retracer:
2259 - Unpack and install python-launchpad-bugs locally if the package is not
2260 installed.
2261 - Link launchpad-crash-digger into the retracer's bin/ dir.
2262 * run-tests: Run tests with python's -tt flag to catch whitespace errors.
2263 * Replace tabs with spaces in all Python files. (LP: #93561)
2264 * Remove trailing white space in all Python files.
2265 * apport/report.py, add_proc_info(): Do not regard symlinks to executables
2266 as interpreted scripts any more (such as Debian alternatives). Add test
2267 case. (LP: #94732)
2268 * problem_report.py: Add new method get_new() which returns a set of all
2269 keys which have been added since load() or construction. Add test cases.
2270 * problem_report.py: Add optional parameter only_new to write(), which
2271 writes only the get_new() keys. Add test case.
2272 * apport/ui.py: Remember currently processed report file and update it with
2273 the added information, so that it becomes useful for local evaluation,
2274 too. Bump python-problem-report dependency to ensure write()'s only_new
2275 availability. (LP: #94678)
2276 * apport-chroot: Add forgotten sys.exit(1) after printing the error message
2277 about an invalid chroot specification.
2278 * apport/ui.py, run_crash(): Check for a field "UnsupportableReason: <text>"
2279 and display an information box that the current configuration cannot be
2280 supported because of <text>, instead of processing and reporting the
2281 crash. Add test case for this workflow. With special regards to our
2282 Firefox crash triagers who want to get rid of the hundreds of
2283 flash-related crashes. :)
2284 * apport/report.py, add_hooks_info(): Use execfile() instead of
2285 __import__(), since package names might conflict with module names already
2286 imported into apport's namespace. Also search for hook named after the
2287 source package name (prefixed with 'source_'). Add test cases.
2288 * bin/apport-chroot: When specifying --save for login, only save the tarball
2289 if the exit status is 0.
2290 * bin/apport-chroot, create: Install /usr/sbin/policy-rc.d to disable init
2291 scripts.
2292 * bin/apport-chroot: Fixed command function selection to not abort with
2293 'unknown command' if the DistroRelease: was unknown.
2294 * bin/apport-retrace: Replace --no-purge with --no-dpkg. With this option,
2295 do not call dpkg --unpack any more, but dpkg -x, to avoid any fchmod() and
2296 other calls which cause problems in fakechroots.
2297 * bin/apport-retrace: Fix ordering of version numbers in warning message.
2298 * doc/package-hooks.txt: Add some examples, document source package hook.
2299
2300 [ Kees Cook ]
2301 * apport/report.py, add_proc_info(): If reading /proc/pid/maps fails,
2302 ptrace() the target process to make it readable (proposed security
2303 improvement in future kernels).
2304 * bin/apport-retrace: Fix crash for packages unknown to the apt cache.
2305 * apport/report.py, add_gdb_info(): Limit maximum backtrace depth to 2000 to
2306 avoid infinitely looped stacks and gdb crashes. (LP: #94455)
2307 This also caps the maximum size of information that we add to reports.
2308 (LP: #92653)
2309 * bin/apport-retrace: Add option -R/--rebuild-package-info, so that
2310 apport-retrace works on unprocessed crash dumps in /var/crash.
2311 * Some grammar corrections.
2312 * Add package-hooks/source_apport.py: Package hook for apport itself.
2313 Include /var/log/apport.log and the status of files in /var/crash.
2314
2315 [ Michael Hofmann ]
2316 * Add cli/apport-cli, setup.py, debian/apport-cli.install, debian/control:
2317 Add command line user interface.
2318 * apport/ui.py, format_filesize(): Use MiB and GiB instead of MB and GB;
2319 these are the official units. Adapt test cases.
2320 * apport/ui.py, collect_info()/file_report(): Do not raise an exception on
2321 KeyboardInterrupt in the subthreads.
2322 * apport/ui.py, open_url(): Do not use gtk.MessageDialog(), but
2323 ui_error_message(), and fix error passing so that the message is
2324 displayed in the parent thread.
2325 * apport/ui.py, open_url(): Check that $DISPLAY is set before considering
2326 the KDE/Gnome web browsers.
2327
2328 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Mar 2007 09:41:03 +0200
2329
2330apport (0.69) feisty; urgency=low
2331
2332 * apport-chroot: Add command 'installdeb' to conveniently install a bunch of
2333 .debs into a chroot.
2334 * apport-chroot: Fix 'login' and 'upgrade' commands to not require
2335 specifying a chroot map when giving a chroot tarball path as argument.
2336 * test-apport: Check that core dumps are written for packaged programs as
2337 well, if ulimits want them. (Test for #92029)
2338 * bin/apport: Call write_user_coredump() for packaged program crashes and
2339 SIGABRT as well. (LP: #92029)
2340
2341 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 19 Mar 2007 17:37:23 +0100
2342
2343apport (0.68) feisty; urgency=low
2344
2345 [ Michael Hofmann ]
2346 * qt4/apport-qt: Fix taskbar entry, remove an unused method.
2347 * qt4/error.ui: Fix icon spacing.
2348
2349 [ Martin Pitt ]
2350 * apport-retrace: Add option --confirm to display the retraced stack traces
2351 and ask for confirmation before uploading them as LP bug attachments.
2352 (LP: #91878)
2353 * apport-chroot: Add option --confirm-attach; if given, call apport-retrace
2354 with --confirm.
2355
2356 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 15 Mar 2007 00:05:18 +0100
2357
2358apport (0.67) feisty; urgency=low
2359
2360 * debian/local/setup-apport-retracer: Add apt sources for restricted,
2361 universe, and multiverse, too.
2362 * po/de.po: Update from Rosetta.
2363 * apport/report.py: Remove undefined call to error_log() in
2364 _command_output(), replace it with raising proper exceptions.
2365 * bin/apport-retrace: Fix 'numer' typo. (LP: #91680)
2366 * test-apport: Check that non-packaged executables generate a core dump on
2367 SIGABRT, too (test case for bug #92029).
2368 * bin/apport: Move check for ignoring SIGABRT below the core dump file
2369 writing for non-packaged binaries. (LP: #92029)
2370 * gtk/apport-gtk.glade:
2371 - Remove titles from the progress windows to comply with Gnome HIG and not
2372 repeat the text content.
2373 - Improve wording a bit.
2374 - LP: #92114
2375 * gtk/apport-gtk{,.glade}: Fix signal handler name of the Cancel button in
2376 the upload progress dialog, so that it actually works. (LP: #92115)
2377
2378 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 14 Mar 2007 17:34:57 +0100
2379
2380apport (0.66) feisty; urgency=low
2381
2382 * Remove apport/MultipartPostHandler.py, this functionality moved to
2383 python-launchpad-bugs now. Add a dependency to that package.
2384 * apport/ui.py, upload_launchpad_blob(): Use the shiny new
2385 launchpadBugs.storeblob.upload().
2386 * bin/apport-retrace: Attach retraced stack traces back to the Launchpad bug
2387 report if no other output option is given (This corresponds to the
2388 in-place editing when a report file is specified). Add option --cookie to
2389 specify a Mozilla-style cookie file for the necessary Launchpad
2390 authentication.
2391 * man/apport-retrace.1: Document above apport-retrace changes.
2392 * bin/apport-chroot: Add --cookie option: temporarily symlink cookie into
2393 the chroot and pass it to apport-retrace in retrace mode.
2394
2395 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 10 Mar 2007 15:01:57 +0100
2396
2397apport (0.65) feisty; urgency=low
2398
2399 * debian/local/setup-apport-retracer:
2400 - Replace grep-dctrl with grep call, since grep-dctrl is not installed in
2401 all the DC chroots.
2402 - Do not download apport source from archive.u.c., instead require that
2403 this script lives in the unpacked apport source tree.
2404 * bin/apport-chroot: Use apt-get options -y and --allow-unauthenticated when
2405 installing additional packages.
2406 * bin/apport-chroot: Handle --extra-package for 'upgrade', too, to provide a
2407 simple way of adding a package to an existing chroot tarball.
2408 * debian/local/setup-apport-retracer: Create tarball chroots by default.
2409 It only imposes a negligible overhead, and sharing unpacked directories
2410 with multiple people is just too brittle.
2411 * bin/apport-retrace: Add option --no-purge to not purge unpacked packages
2412 after retracing. This is (only) useful with temporarily unpacked chroots,
2413 since it's only a waste of time there.
2414 * bin/apport-chroot: Call apport-retrace with --no-purge when retracing in a
2415 chroot tarball.
2416 * apport/chroot.py: Add fix_symlinks() method to remove the chroot root
2417 directory prefix from symbolic links; they prevent function of tarball
2418 chroots and moving around directory chroots. Add test case.
2419 * bin/apport: Fix symlinks after creating and upgrading a chroot.
2420 * bin/apport-chroot: Add option --save to update a tarball after logging
2421 in to it.
2422
2423 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 10 Mar 2007 21:21:25 +0100
2424
2425apport (0.64) feisty; urgency=low
2426
2427 * bin/apport-chroot: Add 'login' command.
2428 * bin/apport-chroot: Install apport-retrace into a newly created chroot.
2429 * Add debian/local/setup-apport-retracer: Script to install local versions
2430 of apport, debootstrap, fake{,ch}root libraries, and a feisty apport
2431 fakechroot. This works OOTB on ronne's amd64 and i386 feisty chroots. The
2432 script is not shipped in any package yet, but it's convenient to ship it
2433 in revision control and in the source.
2434 * apport/report.py, _check_interpreted(): When calling an interpreter with a
2435 script name as argument, set ExecutablePath to the script instead of the
2436 interpreter. Add test case. (LP: #88794)
2437 * apport/report.py, search_bug_patterns(): Catch all exceptions from
2438 urlopen(), not just IOError. Sometimes this fails with funnier errors.
2439 (LP: #89589)
2440 * bin/apport-retrace: Give some additional explanation when installing
2441 packages fails. (LP: #89916)
2442 * apport/fileutils.py, get_all_{system_,}reports(): Fix file access race
2443 condition. (LP: #89977)
2444 * bin/apport-retrace: Add option -p/--extra-package to install an additional
2445 package for retracing. May be specified multiple times. Document new
2446 option in man/apport-retrace.1. (LP: #90077)
2447 * bin/apport-chroot: Add a similar option -p/--extra-package and install
2448 those in the 'create' command and simply pass it to apport-retrace in the
2449 'retrace' command. (LP: #90077)
2450 * bin/apport-chroot: Add a -v/--verbose option.
2451 * bin/apport-retrace: Do not complain about missing ddebs for Arch: all
2452 packages.
2453
2454 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 6 Mar 2007 16:20:41 +0100
2455
2456apport (0.63) feisty; urgency=low
2457
2458 New feature: fakechroot support for apport-retrace
2459
2460 * bin/apport-retrace:
2461 - Simplify program design and throw away the complicated debug symbol
2462 sandbox generation, along with the -d and -C options. Instead, directly
2463 install the missing packages and ddebs with apt. This makes the tool more
2464 suitable for running in chroots and has often been requested anyway.
2465 - Add option -u/--unpack-only which causes additionally installed packages
2466 to be unpacked without being configured and purged again after
2467 retracing. This allows apport-retrace to work under fakechroot and has
2468 the nice side effect of speeding up package installation (we do not care
2469 about configuration for retracing anyway).
2470 * man/apport-retrace.1: Update description for the new behaviour, drop
2471 documentation of the -d and -C options, and add documentation of -u.
2472 * Add apport/chroot.py: Class for representing and working with chroots;
2473 this uses the fakeroot and fakechroot libraries when being called as
2474 non-root.
2475 * Add bin/apport-chroot: CLI frontend for doing various things with
2476 chroots (including fakeroot/fakechroot support from the Chroot class). For
2477 now, this implements:
2478 - create a chroot (tarball or directory)
2479 - dist-upgrade a particular or all chroots
2480 - apport-retrace a bug or Apport report file
2481 * setup.py: Ship apport-chroot in scripts directory.
2482 * Add a new package apport-retrace which ships apport-retrace and
2483 apport-chroot and carries all the heavier dependencies (binutils,
2484 python-launchpad-bugs, python-apt, etc.). Drop the latter two dependencies
2485 from the apport package. This allows us to install the apport-retrace
2486 package in fakechroots (not possible with apport itself) and avoid
2487 unnecessary dependencies on normal desktop installations.
2488
2489 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 5 Mar 2007 11:20:36 +0100
2490
2491apport (0.62) feisty; urgency=low
2492
2493 * apport/ui.py, collect_info(): Use REThread instead of Thread and raise
2494 exceptions from it, so that errors during info collection actually become
2495 visible.
2496 * apport/report.py, add_proc_info(): Check that ExecutablePath actually
2497 exists, so that invalid values from transient error conditions are ignored
2498 (such as '/usr/bin/gnome-panel\x00\x00\x8b (deleted)').
2499 * apport/packaging.py: Add interface get_system_architecture() to return the
2500 system architecture in the distro specific notation. This can differ from
2501 get_architecture(package) on multiarch platforms such as amd64.
2502 * backends/packaging-dpkg.py: Implement get_system_architecture() to return
2503 dpkg --print-architecture, add a shallow test case.
2504 * apport/report.py, add_package_info(): Rename key 'Architecture:' to
2505 'PackageArchitecture:' for clarity.
2506 * apport/report.py, add_os_info(): Add system architecture as
2507 'Architecture:' field.
2508 * apport/ui.py, create_crash_bug_title(): Append warning about non-native
2509 package if package architecture does not match the system's one.
2510 * All test suites: Remove redundant word 'behaviour' from test descriptions.
2511 * test-hooks: Run tests on installed hooks in /usr/share/apport by default
2512 and add a '--local' switch to test the hooks in the source tree instead.
2513 Use this option in run-tests.
2514 * apport/report.py, test_add_proc_info(): Change the python script test
2515 so that it does not depend on being run in the source tree.
2516 * run-tests: Add a 'local' command line option which runs tests on the files
2517 and modules in the build tree. Run tests on system files/modules by
2518 default.
2519 * setup.py, debian/apport.install: Ship test-hooks, test-apport, and
2520 run-tests in /usr/share/apport/testsuite/, so that the full test suite can
2521 be run in the installed system.
2522 * gtk/apport-gtk.desktop.in: Only show in Gnome and Xfce.
2523 * qt4/apport-qt.desktop.in: Only show in KDE.
2524
2525 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 1 Mar 2007 10:43:29 +0100
2526
2527apport (0.61) feisty; urgency=low
2528
2529 * bin/apport:
2530 - Kernel 2.6.20-9 now sets CORE_REAL_RLIM to -1 instead of not setting it;
2531 handle this case correctly. (LP: #87065)
2532 - Add forgotten multiplication of CORE_REAL_RLIM with 1024, since ulimit
2533 sets kB, not bytes.
2534
2535 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 27 Feb 2007 16:06:11 +0100
2536
2537apport (0.60) feisty; urgency=low
2538
2539 * gtk/apport-gtk.glade: Reintroduce window titles. Since the crash
2540 notifications are like alerts, title have been removed recently to comply
2541 with Gnome HIG standards, but then the user will get 'nameless window'
2542 buttons in the task bar. Let's have the smaller evil then. (LP: #87164)
2543 * apport/packaging.py: Add get_architecture() interface for determining the
2544 architecture of a particular package (which might not match the overall
2545 system architecture on multiarch-capable systems, e. g. an i386 Firefox
2546 package installed on amd64).
2547 * backends/packaging-dpkg.py: Implement get_architecture() and add test
2548 case.
2549 * apport/report.py, add_package_info(): Add Architecture: field.
2550 (LP: #87424)
2551 * apport/ui.py: Already mark report as seen when we load it, not just in the
2552 information collection thread. That way, reports will only be shown once
2553 on systems which have /var/crash mounted noatime, too. (LP: #85809)
2554 * apport/fileutils.py, mark_report_seen(): If os.utime() fails, and opening
2555 the report file for reading does not change the atime (happens with
2556 noatime mount option), don't throw an exception, just delete the report.
2557 (other aspect of LP: #85809)
2558 * qt4/apport-qt: Wrap gettext() into an unicode(str, 'UTF-8') call,
2559 otherwise all non-ASCII unicode strings are broken. (LP: #87757)
2560
2561 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Feb 2007 20:55:40 +0100
2562
2563apport (0.59) feisty; urgency=low
2564
2565 * apport/report.py: Check that interpreter options are discarded in
2566 test_check_interpreted_script(). This replicates bug #87005.
2567 * apport/report.py, _check_interpreted_script(): Filter out interpreter
2568 command line options. This should make the detection of interpreted
2569 scripts more robust. (LP: #87005)
2570 * test-apport, check_crash(): Differ between expecting the program dumping
2571 core and finding a core dump on disk, because this is not equivalent any
2572 more with core pipelining.
2573 * bin/apport: Write core files into a process' cwd if the process' ulimit
2574 requests and permits it and the crashes process is not packaged, so that
2575 developers get happy again. Test this behaviour with various ulimits in
2576 test-apport.
2577 * test-apport: Check that the core file written by apport is valid. This
2578 uncovers kernel bugs like #87065
2579 * problem_report.py test suite: Use assertAlmostEqual() when comparing stat
2580 times, since they are floats on some systems.
2581 * apport/report.py, add_gdb_info():
2582 - Remove all the initial gdb output, which gets rid of the duplicated #0
2583 line.
2584 - Replace some stray tabs with spaces.
2585 - Thanks to Kees Cook for this!
2586
2587 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 22 Feb 2007 19:52:52 +0100
2588
2589apport (0.58) feisty; urgency=low
2590
2591 * qt4/apport-qt.desktop.in move to System menu
2592
2593 -- Jonathan Riddell <jriddell@ubuntu.com> Tue, 20 Feb 2007 11:35:17 +0000
2594
2595apport (0.57) feisty; urgency=low
2596
2597 * apport/ui.py: Intercept ENOMEM and fail gracefully; there is little else
2598 we can do at that point, and there is no point in presenting a crash
2599 report for this. (LP: #85155)
2600 * apport/ui.py: Ignore KeyError when deleting the CoreDump field on sending
2601 a reduced report. This Should Not Happenâ„¢, but nevertheless did.
2602 (LP: #86083)
2603 * gtk/apport-gtk, qt4/apport-qt: Intercept ImportError for the non-builtin
2604 Python modules. This usually happens for crashes when there is a
2605 dist-upgrade active and some Python packages have not been configured yet.
2606 (LP: #86007)
2607 * apport/ui.py: If the problem report does not apply to a packaged program,
2608 and we have an ExecutablePath, mention it in the error message for easier
2609 debugging.
2610 * apport/python_hook.py: Resolve symbolic links in ExecutablePath.
2611 (LP: #85529)
2612 * apport/ui.py, open_url(): Remove debugging print statement again, now
2613 that we tracked down bug #83974.
2614
2615 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 19 Feb 2007 14:40:29 +0100
2616
2617apport (0.56) feisty; urgency=low
2618
2619 * apport/ui.py, open_url(): When being invoked as root, call gnome-open or
2620 firefox as root through sudo instead of dropping our uid/gid and calling
2621 it normally. The latter does not work for Firefox for some mysterious
2622 reason. Thanks to Mika Fischer for this trick. (LP: #81207)
2623 * Add debian/local/ubuntu-bug.1: Manpage for ubuntu-bug. Add it to
2624 debian/apport.manpages.
2625 * qt4/apport-qt: Add some missing features that are present in the GTK UI:
2626 - Do not show details by default, add a button to show them.
2627 - Add complete/reduced bug report radio buttons.
2628 - Thanks to Michael Hofmann for this!
2629
2630 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 15 Feb 2007 14:59:07 +0100
2631
2632apport (0.55) feisty; urgency=low
2633
2634 * Add debian/local/ubuntu-bug: Check for a running KDE or Gnome session,
2635 availability of apport-gtk and -qt, and open the appropriate GUI in bug
2636 filing mode. This makes it convenient for shell users and is also required
2637 for proper Firefox 'Report a bug...' menu integration (see bug #85041).
2638 * debian/apport.install: Install ubuntu-bug to /usr/bin.
2639 * gtk/apport-gtk: Generously add some gtk.main_iteration() calls to avoid
2640 hanging dialogs, since we do not have a main loop.
2641 * apport/ui.py: Do not silently ignore exceptions while uploading data to
2642 Launchpad, but intercept them and display their message in the error
2643 dialog. (Part of LP: #84992)
2644 * apport/ui.py: Switch from edge.launchpad.net to production launchpad.net,
2645 since the necessary bits are now there. (LP: #84992)
2646
2647 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 14 Feb 2007 13:37:52 +0100
2648
2649apport (0.54) feisty; urgency=low
2650
2651 * bin/apport: Re-enable, now that our kernel has been fixed to pipe complete
2652 core dumps to us.
2653
2654 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 13 Feb 2007 09:33:38 +0100
2655
2656apport (0.53) feisty; urgency=low
2657
2658 * apport/ui.py, open_url(): Remove some accidentally left-over debugging
2659 junk.
2660 * gtk/apport-gtk: Process pending GTK events after hiding the info
2661 collection window to avoid a hanging dead dialog.
2662 * gtk/apport-gtk: Do not count the lines of fields with binary data. This
2663 particularly avoids long delays with huge core dumps. (LP: #81979)
2664 * apport/ui.py, open_url(): Print URL to stdout, so that we can debug the
2665 weirdness in #83974.
2666
2667 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 12 Feb 2007 16:57:05 +0100
2668
2669apport (0.52) feisty; urgency=low
2670
2671 * apport/report.py: Fix hook directory to be
2672 /usr/share/apport/package-hooks/, not /u/s/apport/.
2673 * Add doc/package-hooks.txt: Document per-package hooks, ship in package
2674 apport.
2675 * Add debian/apport.dirs: Ship package-hooks/ directory.
2676 * gtk/apport-gtk, qt4/apport-qt: Fix detection of binary data so that the
2677 CoreDump is not displayed as incomprehensible gibberish any more.
2678 * Add qt4/apport-qt.desktop.in and add it to POTFILES.in.
2679 * bin/apport-retrace: --verbose can now be specified multiple times to
2680 increase verbosity and debug package installation. Also, fix some quoting
2681 bugs. Thanks to Kees Cook for this!
2682 * qt4/apport-qt: Fix restart button handling. (LP: #84202)
2683 * qt4/apport-qt: Do not try to call splitlines() on a report value that is a
2684 file reference; just display the reference instead. (LP: #84196)
2685 * bin/apport: Disable for now, since the current kernel produces cropped
2686 core dumps and thus we get totally useless crash reports
2687
2688 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 9 Feb 2007 18:58:08 +0100
2689
2690apport (0.51) feisty; urgency=low
2691
2692 New feature: Qt4 GUI implementation:
2693
2694 * Added qt4/: Qt4 implementation of the abstract user interface. Thanks to
2695 Michael Hofmann <mh21@piware.de> for that!
2696 * debian/copyright: Add Michael as copyright holder.
2697 * setup.py, debian/control, debian/apport-qt.install: Packaging bits for
2698 apport-qt.
2699 * Move translations from apport-gtk to apport, since they are shared between
2700 frontends. Add appropriate Conflicts/Replaces (we don't strictly need it
2701 here because we strip them anyway, but we need that for the moving icon
2702 anyway).
2703 * Move icon from apport-gtk to apport, since it is/can be shared between
2704 frontends.
2705
2706 Improvements:
2707
2708 * Replaced old apport.png icon stolen from bug-buddy with nice SVG one.
2709 Thanks to Troy Sobotka for this!
2710 * debian/copyright: Add Troy as copyright holder for the icon.
2711 * bin/apport-retrace, man/apport-retrace.1: Document that report can now be
2712 a LP bug number.
2713
2714 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 8 Feb 2007 20:01:12 +0100
2715
2716apport (0.50) feisty; urgency=low
2717
2718 * gtk/apport-gtk.glade: Fix 'prolem' typo.
2719 * bin/apport-retrace: Use python-launchpad-bugs to create a Report object
2720 from a given Launchpad bug number (given as argument instead of the report
2721 file path). Add appropriate p-l-b dependency.
2722 * gtk/apport-gtk: Mark '(binary data)' string as translatable.
2723
2724 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 8 Feb 2007 15:15:47 +0100
2725
2726apport (0.49) feisty; urgency=low
2727
2728 * gtk/apport-gtk.glade: Fix s/send/sent/ typo. Closes: LP#83061
2729 * apport/ui.py, create_crash_bug_title(): Cope with odd Tracebacks that are
2730 shorter than three lines. Add test case from the bug. Closes: LP#83556
2731 * apport/python_hook: Do not create a report if the binary is ignored. Add
2732 test case. Closes: LP#83566
2733 * gtk/apport-gtk: Do not save/alter crash dialog title any more, it's empty
2734 now.
2735 * apport/ui.py, open_url(): Check the user's session for
2736 ksmserver/gnome-session to decide whether to prefer kfmclient or
2737 gnome-open. Also, only call Firefox directly if gconf's prefered browser
2738 is actually Firefox. Closes: LP#82007
2739
2740 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 6 Feb 2007 18:33:15 +0100
2741
2742apport (0.48) feisty; urgency=low
2743
2744 New feature: Infrastructure for reporting kernel Oopses:
2745
2746 * Add bin/kernel_hook and ship it in /usr/share/apport. The kernel can call
2747 this on an Oops. Add a test suite for it to test-hooks.
2748 * apport/ui.py: Add support for reporting ProblemType: Kernel reports, and
2749 add test suite for the workflow.
2750 * gtk/apport-gtk{,.glade}: Add implementation for ui_present_kernel_error().
2751
2752 Improvements:
2753
2754 * Merged various apport-retrace improvements from Kees' branch:
2755 - Add various options to override some report fields with local values.
2756 - Add --verbose option and be quiet by default.
2757 - Read ProcMaps for additional library dependencies, to also catch
2758 libraries loaded at runtime (plugins).
2759 - Set correct debug file directory when starting an interactive gdb
2760 session with -g.
2761 * Add gtk/apport-gtk.desktop.in: Desktop file for calling apport-gtk in
2762 'file a distro bug' mode, to be displayed in gnome-panel's System menu
2763 (see bug-reporting-tool spec). Also add a Makefile to do the
2764 intltool-merge dance, add it to POTFILES.in, and ship it in
2765 debian/apport-gtk.install.
2766 * bin/apport: Call add_os_info(), so that we get architecture information
2767 even for 'naked' reports which didn't go through UI enrichment.
2768 * Add ./test-hooks: Test suite for the various package hooks shipped with
2769 apport. Test the package problem hook for now.
2770
2771 Bug fixes:
2772
2773 * debian/control: Add missing python-apt dependency to apport
2774 (apport-retrace needs it). Thanks to Kees Cook for noticing.
2775 * debian/control: Add gdb dependency to python-apport.
2776 * backends/packaging-dpkg.py test suite: Verify that packages returned by
2777 get_dependencies() actually exist. This catches the 'chops off first
2778 letter of package name sometimes' bug.
2779 * backends/packaging-dpkg.py, _init_status(): Add missing space to Depends:
2780 field format in dpkg-query call. This fixes the chopped-off first letters
2781 in the 'Dependencies' report field.
2782 * setup.py: Remove version attribute, we do not update and use it anyway.
2783 * apport/ui.py: Do not crash if Package: specifies a nonexisting package.
2784 Display a proper error message instead. Add test_run_crash_errors() test
2785 case.
2786 * apport/report.py, add_package_info(): Fix crash when the first dependency
2787 is not installed. Closes: LP#82561
2788 * gtk/apport-gtk.glade: Remove window titles in alert dialogs to comply with
2789 Gnome HIG. Closes: LP#83123
2790
2791 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 5 Feb 2007 12:19:35 +0100
2792
2793apport (0.47) feisty; urgency=low
2794
2795 * apport/report.py, add_hooks_info(): Only use first part of 'Package:',
2796 there might be a version number and a changed files list which we must not
2797 propagate to the import statement. Closes: LP#82566
2798
2799 -- Kees Cook <kees@ubuntu.com> Wed, 31 Jan 2007 15:37:11 -0800
2800
2801apport (0.46) feisty; urgency=low
2802
2803 * debian/control: Bump dependencies to python-apport due to recent changes
2804 in expected return values in some UI functions. Closes: LP#82267
2805 * bin/package_hook: Remove erroneous 'import apport.packaging', which
2806 shadows the packaging variable in the apport package. This unbreaks the
2807 package problem hook. Closes: LP#82297
2808
2809 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 31 Jan 2007 07:51:24 +0100
2810
2811apport (0.45) feisty; urgency=low
2812
2813 New feature: Infrastructure for package install/upgrade failures:
2814
2815 * Add bin/package_hook: Script for creating a report for a package
2816 installation/upgrade failure. It receives a package name, a number of log
2817 files, and an ErrorMessage: from stdin. This will be called from e.g.
2818 dist-upgrader.
2819 * setup.py, debian/apport.install: Ship package_hook.
2820 * apport/ui.py: If ProblemType is 'Package', call a new function
2821 self.ui_present_package_error() instead of presenting a crash. Add test
2822 suite checks for the package error report workflow.
2823 * apport/ui.py, create_crash_bug_title(): Create default bug title for
2824 package reports. Add various test cases.
2825 * gtk/apport-gtk{,.glade}: GTK implementation of ui_present_package_error().
2826
2827 New feature: Maintain a per-binary blacklist to inhibit apport crash reports
2828 until the binary changes. Closes: LP#79408
2829
2830 * apport/report.py: Add new Report methods check_ignored() and mark_ignore()
2831 to check for/set ignore list entries. Add test cases.
2832 * apport/ui.py: Add another return value of ui_present_crash() to specify
2833 whether or not to blacklist the current crash's executable. Check workflow
2834 of both responses in the test suite.
2835 * gtk/apport-gtk{,.glade}: Add a blacklist checkbox to the crash
2836 notification dialogs.
2837 * bin/apport: Do nothing if the current crash is blacklisted.
2838 * test-apport: Test blacklisting.
2839
2840 Bug fixes:
2841
2842 * gtk/apport-gtk: Fix return code for restarting the application ('reopen' ->
2843 'restart'). Closes: LP#81422
2844 * test-apport: Adapt to new core_pattern kernel interface mode:
2845 - Check core_pattern instead of the obsolete crashdump sysctl to determine
2846 whether or not apport is running.
2847 - Give apport max. 10 seconds to complete. The current kernel reaps the
2848 crashed process as soon as writing the core dump to the pipe is
2849 finished, but apport still needs to write the report file.
2850 - Do not EXFAIL the test for crashes in nonwriteable cwd any more, since
2851 it is now supposed to work (we do not write a core dump to the disk any
2852 more).
2853 * run-tests, use-local: Adapt to new core_pattern kernel interface.
2854 * apport: Improve logging of exceptions, include environment variables.
2855 * apport/report.py test suite: Use gdb to generate a test core dump, do not
2856 rely on kill(SIGSEGV) and the kernel to do it (since we now use a pipe in
2857 core_pattern).
2858 * backends/packaging-dpkg.py: Fix return value of get_modified_files() if
2859 dpkg .list file is missing.
2860 * apport/report.py, add_package_info(): Do not produce stray empty lines for
2861 uninstalled alternative dependencies.
2862 * apport/report.py: Fix test_add_gdb_info_script() to not leave behind a
2863 stray gzip process which randomly blocks stdin. Closes: LP#78421
2864 * backends/packaging-dpkg.py: Do not read the dpkg status in the
2865 constructor, but lazily initialize it when actually calling a query
2866 function. This avoids imposing the dpkg-query overhead for programs that
2867 import the apport package without doing package queries (such as any
2868 Python program under Ubuntu, due to the Python crash hook).
2869 * apport/ui.py, create_crash_bug_title():
2870 - Do not crash on an empty StacktraceTop. Closes: LP#81677
2871 - Do not mention an unknown function name ('??') in the bug title;
2872 instead, use the topmost function with a known name, or leave it out
2873 at all.
2874 - Add test cases for these situations.
2875 * apport/report.py, _get_ignore_dom(): Do not throw an error for an empty
2876 ignore list file.
2877
2878 Code cleanups:
2879
2880 * apport/report.py test suite: Refactorize generation of test crash program
2881 and core dump generation.
2882 * Consistently use 'in'/'not in' instead of find() for substring searches.
2883 * Changed the packaging backend import, so that its methods can now be
2884 accessed at apport.packaging instead of apport.packging.impl.
2885
2886 -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 28 Jan 2007 12:34:05 +0100
2887
2888apport (0.44) feisty; urgency=low
2889
2890 Some more 'Need for Speed' optimizations:
2891
2892 * backends/packaging-dpkg.py, _check_files_md5(): Also accept a md5sum
2893 string in addition to a md5sum file.
2894 * backends/packaging-dpkg.py, get_modified_files(): Compare package file's
2895 ctime and mtime against the package list file's mtime and only md5sum the
2896 files that are newer. This drastically reduces the amount of md5suming
2897 (usually to zero) and thus speeds up the information collection.
2898 * backends/packaging-dpkg.py: Use a single hackish 'dpkg-query --show *'
2899 as a portable variant of 'cat /var/lib/dpkg/status' to pre-fill the status
2900 cache with all packages instead of calling dpkg -s on every single package
2901 we query. This changes the time for figuring out dependencies and their
2902 versions from 'unbearable for many packages' to 'barely noticeable'.
2903
2904 New feature: per-package apport hooks to collect additional information:
2905
2906 * apport/report.py: Add method add_hooks_info() which executes a function
2907 add_info(report) from /usr/share/apport/<package>.py. Also add
2908 appropriate test cases. This provides per-package hooks for apport.
2909 * apport/ui.py: Call add_hooks_info() in the information collection thread.
2910
2911 Bug fixes:
2912
2913 * apport/report.py: Add some more test cases for _check_interpreted() for
2914 Python scripts.
2915 * apport/python_hook.py: Check for a correct ExecutablePath in
2916 test_general().
2917 * apport/python_hook.py: Use fileutils.likely_packaged() instead of
2918 checking for /tmp and home, so that we ignore stuff in /usr/local, too.
2919 Closes: LP#81244
2920 * apport/python_hook.py: If we figure out an ExecutablePath which is not
2921 actually an executable, do not create a report. This particularly affects
2922 interactive python sessions where sys.argv[0] is empty and thus
2923 ExecutablePath ends up being the current directory. Add test cases.
2924 Closes: LP#81237
2925
2926 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 24 Jan 2007 17:16:04 +0100
2927
2928apport (0.43) feisty; urgency=low
2929
2930 * apport/ui.py: Add method create_crash_bug_title() to construct a
2931 reasonable standard bug title for crash reports, so that the automatic
2932 duplicate detection actually has a chance to work. Also add test cases for
2933 various signal crashes and an unhandled Python exception.
2934 * apport/ui.py, file_report(): Submit a default bug title for crash reports.
2935 Closes: LP#79657
2936
2937 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 23 Jan 2007 16:26:40 +0100
2938
2939apport (0.42) feisty; urgency=low
2940
2941 New feature: https://wiki.ubuntu.com/ApportImprovements (kernel interface
2942 change):
2943
2944 * bin/apport: Support calling without arguments, to support new semantics
2945 agreed in the ApportImprovements spec: macro values (in particular, pid
2946 and signal number) are passed as environment variables.
2947 * preloadlib/libapport.c: Simulate new kernel behaviour described above.
2948 * debian/apport.init: Set the kernel's core_pattern sysctl to pipe to apport
2949 if the edgy-style 'crashdump-helper' sysctl helper does not exist.
2950
2951 Bug fixes:
2952
2953 * bin/apport-retrace: Beautify error message when report file is not
2954 accessible. Closes: LP#79568
2955 * apport/ui.py: Fix crash in the bug pattern search thread if we could
2956 not determine a package name. Closes: LP#77872
2957 * bin/apport: Only unlink the core dump if it still exists. Closes: LP#80866
2958 * gtk/apport-gtk.glade: Fix expand/fill attributes so that the expander gets
2959 all the space when resizing the window. Closes: LP#80987
2960 * problem_report.py, write_mime(): Make sure that multi-line values that go
2961 to the summary are terminated with a newline.
2962 * apport/ui.py: Fix error message invocation for reporting cloakroom upload
2963 failure.
2964 * problem_report.py, write_mime(): Fix off-by-one comparison of the 'inline
2965 text' treshold, so that apport's StacktraceTop field appears in bug
2966 summaries. Also fix a corner case in CR line ending handling. Check both
2967 things in the test suite.
2968 * gtk/apport-gtk: Add missing 'import subprocess.'. Closes: LP#81007
2969 * debian/control: Bump apport's and apport-gtk's dependency to python-apport
2970 to make sure that apport.ui is available. Closes: LP#81019
2971 * apport/ui.py: Add missing 'import pwd'. Closes: LP#81033
2972
2973 Minor improvements:
2974
2975 * apport/ui.py: Get the cloakroom ticket number from the
2976 X-Launchpad-Blob-Token HTTP header instead of parsing the resulting page.
2977
2978 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 23 Jan 2007 11:27:20 +0100
2979
2980apport (0.41) feisty; urgency=low
2981
2982 New feature: Use Malone cloakroom for uploading reports. Closes: LP#70919
2983
2984 * gtk/apport-gtk.glade: Redesign bug reporting dialog to have a 'Create bug
2985 report' and a 'Cancel' button. Also assign GTK_RESPONSE_* constants to the
2986 dialog buttons. Go back to Glade 2 since Glade 3 still sucks too much.
2987 * gtk/apport-gtk: Adjust workflow for sending report to Malone cloakroom
2988 instead of asking the user to attach the file. Sending is not yet
2989 implemented, though.
2990 * gtk/apport-gtk: Do not show any dialogs any more when filing a bug.
2991 * Add apport/MultipartPostHandler.py: This module provides an urllib2 opener
2992 for uploading file attachments to forms over HTTP POST. This module is
2993 (C) 2006 Will Holcomb <wholcomb@gmail.com> and was taken from
2994 http://odin.himinbi.org/MultipartPostHandler.py. (This is a serious hole
2995 of the Python standard library IMHO.)
2996 * apport/ui.py, file_report(): Upload blob to Malone (edge.launchpad.net for
2997 now), retrieve the ticket, and pass it to +filebug.
2998
2999 Refactorizations:
3000
3001 * gtk/apport-gtk: Major refactorization to use modal dialogs and run()
3002 instead of loosely coupled event handlers.
3003 * Add apport/ui.py: Abstract frontend which encapsulates the logic, workflow
3004 and UI independent bits and provides UI hooks for concrete
3005 implementations. This both makes it easy to write more frontends like Qt
3006 or CLI, and also makes the code automatically testable. Add an extensive
3007 testsuite.
3008 * run-tests: Add ui.py testsuite.
3009 * gtk/apport-gtk: Port to ui.py's UserInterface (which means moving 1/3 of
3010 the code into the new ui_*() methods and throwing away the rest).
3011 * Add apport/REThread.py: Enhanced threading.Thread class that can propagate
3012 the return value and uncaught exceptions of run() to the calling thread.
3013 * apport/ui.py: Get rid of thread_check_bugpatterns() and hackish exception
3014 handling, rewrite using REThread.
3015 * apport/ui.py, gtk/apport-gtk: Add progress bar to report upload. It is
3016 indefinite for now, because neither urllib2 nor httplib support upload
3017 progress.
3018
3019 Bug fixes:
3020
3021 * gtk/apport-gtk.glade: Merged Gnome HIG fixes from Sebastian Heinlein,
3022 thank you!
3023 * Merge patch from Sebastian Heinlein to properly treat the apport-gtk icon
3024 the dh_iconcache way and make it themeable. Thank you!
3025 * gtk/apport-gtk: Remove periods from primary dialog texts to comply with
3026 Gnome HIG standards.
3027 * backends/packaging-dpkg.py, get_file_package(): Process list files in
3028 chunks of 100, so that we do not exceed the maximum command line length if
3029 there is a large number of packages installed. Closes: LP#64839
3030 * gtk/apport-gtk: Use pgrep with -u instead of pidof for testing whether the
3031 crashed process is already running again, so that we do not match
3032 processes of other users. Add procps package dependency for this.
3033 * gtk/apport-gtk: Only offer to restart programs that are in the $PATH. E.
3034 g. /usr/lib/firefox/firefox-bin cannot be called directly.
3035 Closes: LP#79623
3036 * apport/report.py: Disassemble 16 instructions instead of 32 bytes to
3037 become independent of the instruction size. Thanks to Kees Cook for the
3038 patch!
3039
3040 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 22 Jan 2007 10:47:33 +0100
3041
3042apport (0.40) feisty; urgency=low
3043
3044 * debian/control: Add missing python-dev build dependency, which is
3045 apparently required for 2.5 now.
3046
3047 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 15 Jan 2007 11:06:20 +0100
3048
3049apport (0.39) feisty; urgency=low
3050
3051 * Introduce abstract packaging interface and move all dpkg/apt specific bits
3052 to a dpkg implementation of this packaging interface (merge
3053 apport/abstract-pkg branch):
3054 - Add apport/packaging.py: Abstract packaging system query interface.
3055 - Add backends/packaging-dpkg.py: dpkg implementation of abstract
3056 packaging interface.
3057 - run-tests: Run tests of all backends.
3058 - apport/fileutils.py, apport/report.py: Port to packaging.py interface.
3059 - debian/control: Drop python-apport's 'python-apt' dependency since the
3060 backend only uses dpkg now (without measurable performance penalty since
3061 it uses internal caching).
3062 - debian/rules: Install backends/packaging-dpkg.py as our packaging
3063 backend to apport/packaging_impl.py and remove it again on clean.
3064
3065 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 13 Jan 2007 15:53:08 +0100
3066
3067apport (0.38) feisty; urgency=low
3068
3069 * Add ./COPYING: GPL license.
3070 * debian/rules: Build POT file again.
3071 * apport/fileutils.py: Add get_all_system_reports() and
3072 get_new_system_reports() and added test cases. Now the test suite can also
3073 be run as root to be able to actually check their complete behaviour.
3074 Adapt the other tests to get along with running the tests as root.
3075 * bin/apport-checkreports: Add option --system to check for system crash
3076 reports. Closes: LP#62316
3077 * gtk/apport-gtk: If called through sudo to process system crashes, drop
3078 privileges to the original user in open_url() so that we get the web
3079 browser correctly. (LP#62316) Caveat: The user cannot actually attach the
3080 crash report file directly since it is not accessible to the user; this
3081 will get fixed once Malone is able to link a bug report with uploaded
3082 blobs.
3083
3084 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 12 Jan 2007 14:29:44 +0100
3085
3086apport (0.37) feisty; urgency=low
3087
3088 * problem_report.py: Remove the requirement that values must not contain
3089 empty lines. Add test cases that reading and writing values with empty
3090 lines works, and add a test case that load() properly complains about
3091 empty lines in debcontrol encoding (empty lines in values are encoded with
3092 a single space). Closes: LP#78094
3093 * apport/report.py test suite: Do not rely on a particular structure of the
3094 'cat' stacktrace; apparently this is not consistent across architectures.
3095 Instead, compile a segfaulting mini C program, let it dump core, and test
3096 add_gdb_info() on it instead. This also allows us for a more rigid check
3097 of StacktraceTop.
3098
3099 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 8 Jan 2007 14:44:08 +0100
3100
3101apport (0.36) feisty; urgency=low
3102
3103 * gtk/apport-gtk.glade: Restore pulse step of progress bar (this apparently
3104 got destroyed when saving with Glade 3).
3105 * gtk/apport-gtk{,.glade}: Terminate the program properly when closing the
3106 progress dialog instead of exiting with an exception.
3107 * gtk/apport-gtk: Defer opening of the bug reporting window a bit so that
3108 it appears on top of the browser window. Also enable the task bar blinking
3109 for it when it is in the background.
3110 * gtk/apport-gtk.glade: Restore vertical padding of bug report dialog labels
3111 (another Glade 3 transition regression).
3112 * bin/apport-retrace, apport/report.py: Call gdb on InterpreterPath if
3113 present; calling it on a script does not yield anything useful. Add a test
3114 case to report.py.
3115 * debian/apport.init: Use mkdir -p instead of install -d, since install is
3116 not in /bin. Thanks to Kees Cook for catching this.
3117 * debian/control: Add missing python-apport dependency 'python-apt', which
3118 is not caught by ${python:Depends}.
3119 * gtk/apport-gtk: Catch MemoryError when loading a report and display an
3120 error dialog instead of just crashing. Closes: LP#76235
3121 * gtk/apport-gtk: Properly catch exceptions from the bug pattern check
3122 thread to avoid useless backtraces like in bug #75160.
3123 * gtk/apport-gtk: Catch exceptions from decoding of damaged reports and
3124 display an error message instead of crashing. Closes: LP#77149
3125 * apport/report.py: Add missing import of 'time' to test suite.
3126
3127 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 5 Jan 2007 09:49:01 +0100
3128
3129apport (0.35) feisty; urgency=low
3130
3131 Optimizations:
3132
3133 * apport/fileutils.py: Split out heuristics for determining whether a file
3134 belongs to a package to new function likely_packaged() and add test cases.
3135 * bin/apport: Do not use the expensive find_file_package() any more, use
3136 likely_packaged() instead. This will create initial reports in some
3137 corner cases (like custom non-packaged executables in /usr/bin/), but
3138 greatly reduces I/O impact at crash time. We rely on apport-gtk to deal
3139 with reports that do not actually belong to a packaged executable.
3140 * apport/report.py, add_gdb_info(): Call gdb just once and split the output
3141 instead of calling it again for each command. This should significantly
3142 speed up the gdb stage especially for large programs/core dumps.
3143 * Use cStringIO instead of StringIO in modules.
3144 * gtk/apport-gtk: Code cleanup and refactorization:
3145 - Move iteration over crash reports into __main__ to simplify housekeeping
3146 in the ApportGTK class and get rid of some functions.
3147 - Refactor creation of temporary report file.
3148 * gtk/apport-gtk.glade: Split the text in the progress bar dialog so that we
3149 can use it for multiple steps (like uploading data to Malone) while not
3150 breaking translations.
3151
3152 New feature: Bug reporting tool (https://wiki.ubuntu.com/BugReportingTool)
3153
3154 * gtk/apport-gtk: Split out crash report initialization to new function
3155 show_crashes() so that we can use the frontend for other purposes like bug
3156 reporting.
3157 * gtk/apport-gtk: Add --file-bug, --package, and --pid options; if given,
3158 create a bug report about the given package instead of viewing crash
3159 reports.
3160 * gtk/apport-gtk{,.glade}: Generalize some strings to not talk about 'crash'
3161 any more, to make them suitable for bug reporting, too.
3162 * gtk/apport-gtk: Support --file-bug without specifying a package or a PID
3163 for filing generic distro bugs.
3164 * problem_report.py: Add new method write_mime() to encode a problem report
3165 in MIME/Multipart RFC 2822 format (i. e. an email with attachments). Short
3166 values are aggregated into the first inline text/plain part, large values,
3167 binary values, and file references get gzip compressed separate
3168 attachments. Also add various test cases.
3169
3170 Bug/crash information:
3171
3172 * apport/report.py, add_user_info(): Add list of system groups that the user
3173 belongs to.
3174 * bin/apport: Call add_user_info(), check functionality in test-apport.
3175 * apport/report.py, add_gdb_info(): Add field 'StacktraceTop' with the top
3176 five functions on the stack and no local variables. This reduced 'glimpse'
3177 is suitable for inline display in bug reports and automatic processing
3178 (dup finders, etc).
3179
3180 Bug fixes:
3181
3182 * po/Makefile: Add top_srcdir to work with current intltool.
3183 * po/de.po: Unfuzz some strings.
3184 * apport/report.py, add_gdb_info(): Strip away the 'No symbol table info
3185 available' messages from stack traces.
3186 * apport/report.py, test_search_bug_patterns(): Use security.u.c. instead
3187 of archive.u.c., since the latter times out too often.
3188
3189 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 3 Jan 2007 16:45:20 +0100
3190
3191apport (0.34) feisty; urgency=low
3192
3193 * apport/fileutils.py, mark_report_seen(): Do not bail out if os.utime()
3194 fails due to access permissions. This happens if the file does not belong
3195 to the user calling apport-gtk, but is world-readable (such as ubiquity
3196 crash reports). If utime() fails, repeatedly open()/close() the file for
3197 reading until atime != ctime, or the 1.2s timeout is reached.
3198 Closes: LP#72250
3199 * apport/python_hook.py: Add unit test, call that in run-tests.
3200 * apport/python_hook.py: Chmod the generated report to 0600 to not expose
3201 potentially private data to the world, and to be consistent with other
3202 crash reports.
3203 * apport/fileutils.py: Add check_files_md5() and test cases.
3204 * apport/report.py, add_package_info(): Append list of modified package
3205 files to Package: and Dependencies: value. Closes: LP#70946
3206 * bin/apport-retrace: Get along with Package:/Dependencies: fields with list
3207 of modified files.
3208
3209 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 22 Dec 2006 12:40:55 +0100
3210
3211apport (0.33) feisty; urgency=low
3212
3213 * debian/rules: Convert to cdbs. This fixes the dh_pysupport invocation
3214 along the way, too.
3215 * gtk/apport-gtk: Rework web browser invocation: Use kfmclient if available,
3216 fall back to firefox-remote, then to webbrowser.open(). Do not call
3217 x-www-browser any more since this would block if no running browser was
3218 open before.
3219 * Drop the apport_utils module (and with it the python-apport-utils
3220 package), it became too much of a dumping ground. The report file handling
3221 functions now live in apport.fileutils, and the debugging information
3222 collectors are now methods of a new 'Report' class (subclass of
3223 ProblemReport) in the new apport.report module. Adjust all programs
3224 accordingly.
3225 * Add debian/python-apport.postinst: Remove old .pyc and .pyo cruft on
3226 upgrades to clean up after our broken dh_pysupport invocation in earlier
3227 versions, so that the new modules are actually used.
3228 * Remove debian/apport.postinst: Those cleanups were only necessary for
3229 intra-edgy upgrades.
3230
3231 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 19 Dec 2006 01:15:27 +0100
3232
3233apport (0.32) feisty; urgency=low
3234
3235 * apport_utils.py: Filter out "no debugging symbols found" warnings from gdb
3236 outputs, and add some tests for this. Thanks to Kees Cook for the patch!
3237 * test-apport: Fix AGENTPATH directory when building the preload library
3238 (recently moved to bin/).
3239 * use-local: Fix path to apport as well (recently moved to bin/).
3240 * apport-retrace: Use ldd on InterpreterPath if present; ldd'ing scripts
3241 will not get us very far. Closes: LP#72201
3242
3243 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 14 Dec 2006 13:42:58 +0100
3244
3245apport (0.31) feisty; urgency=low
3246
3247 * Move scripts to bin/ in source package.
3248 * Add apport/python_hook.py: Default exception handler for Python, to create
3249 apport reports for unhandled exceptions. Thanks to Robert Collins
3250 <robert@ubuntu.com> for this! Closes: LP#70957
3251 * Add new package python-apport to ship the new Python package 'apport'.
3252 This includes the python crash hook for now, but in the near future
3253 apport-utils will get redesigned and put into this package, too.
3254 * debian/control: apport now depends on python-apport instead of
3255 python-apport-utils.
3256 * apport_utils.py: Quiesce gdb error messages in test suite.
3257
3258 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 25 Nov 2006 12:30:41 +0100
3259
3260apport (0.30) feisty; urgency=low
3261
3262 * test-apport, use-local: Support both kernel 2.6.17 and 2.6.19 sysctl names
3263 (crashdump-helper vs. crashdump).
3264 * gtk/apport-gtk.glade: Improve dialog title capitalization.
3265 Closes: LP#70652.
3266 * debian/apport.cron.daily: Immediately exit if /var/crash does not exist.
3267 Create /var/crash in debian/apport.init if it does not exist.
3268 Closes: LP#71599
3269 * Convert all tabs in Python source code files to spaces to comply to PEP 8.
3270 Thanks to Robert Collins for pointing this out.
3271 * apport_utils.py, gtk/apport-gtk: Do not pass None to subprocess arguments
3272 if report belongs to a non-packaged program. Thanks to Robert Collins for
3273 discovering and fixing this! Closes: LP#70942
3274 * debian/apport.init: Change /var/crash permissions to 1777, so that custom
3275 crash handlers (in Python/Mono/etc.) can put reports there.
3276
3277 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 25 Nov 2006 10:44:33 +0100
3278
3279apport (0.29) feisty; urgency=low
3280
3281 * apport-retrace: Do not crash if a linked library is not a dependency.
3282 Closes: LP#65914
3283 * apport_utils.py:
3284 - Add test_find_file_package_diversion() selftest to check diversion
3285 handling.
3286 - find_file_package(): Check for and respect diversions.
3287 - Closes: LP#65917
3288 * debian/apport.init, test-apport, use-local: Adapt to 'crashdump-helper' ->
3289 'crashdump' sysctl renaming in 2.6.19.
3290 * test-apport: Restore cwd even when failing a test.
3291 * problem_report.py, ProblemReport.write(): Support file-like objects as
3292 argument of file references to support direct reading from pipes. Add test
3293 case test_write_fileobj().
3294 * apport: Support '-' as core file argument, in which case the core will be
3295 read from stdin. This paves the way for using Linux 2.6.19's 'pipe
3296 core_pattern' feature. Bump python-problem-report dependency to >= 0.29
3297 for this.
3298 * apport: Confine permissions of log file to root:adm 0640, just in case.
3299 * apport: Temporarily drop real u/gid to target user for the os.access()
3300 tests, so that normal users cannot verify the existence of a given
3301 inaccessible file. Add comprehensive tests to apport_utils' test suite and
3302 test-apport. Thanks to Kees Cook for this patch!
3303 * apport_utils.py, find_file_package(): Terminate fgrep options with '--' to
3304 avoid problems with funny file names. Thanks to Kees Cook for spotting
3305 this!
3306 * test-apport: Automatically detect whether ULIMIT_CORE is nonzero, and
3307 adapt tests accordingly: check that core still exists after invoking
3308 apport, and clean it up.
3309 * apport-retrace: Add new mode -g/--gdb which starts an interactive gdb
3310 session with the report's core dump. Add this to man/apport-retrace.1, too.
3311 * apport-retrace: If -c is given, completely remove the CoreDump field from
3312 the report instead of setting it to 'removed'.
3313 * test-apport: When using 'lib' mode, point APPORT_LOG_FILE to a temporary
3314 file. Print it if the test suite fails.
3315 * test-apport: Fix EXFAILure of the 'core dump works for non-writable cwds'
3316 test case.
3317 * preloadlib: Support -DPIPE_CORE mode which emulates the
3318 pipe-in-core_pattern mode of kernel 2.6.19.
3319 * test-apport: Build preload library with core piping. No more failed test
3320 suite checks in 'lib' mode.
3321
3322 -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 5 Nov 2006 07:10:30 -0800
3323
3324apport (0.28) edgy; urgency=low
3325
3326 "No core - ignore!"
3327
3328 * apport: Do not create a report for crashes which we do not get a core dump
3329 for. The reports are useless and only clutter our bug tracker.
3330
3331 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 9 Oct 2006 15:22:32 +0200
3332
3333apport (0.27) edgy; urgency=low
3334
3335 * apport: Ignore SIGABRT for now; it's usually signalled from abort() or
3336 assertion failures and we only get reports with unusable stack traces for
3337 it (see #61938).
3338 * gtk/apport-gtk: If gnome-open is not available, fall back to x-www-browser
3339 instead of using webbrowser.py, to respect default browser in XFCE.
3340 Closes: LP#64209
3341 * apport: use os.nice() instead of executing 'renice'. Thanks to Benoit
3342 Boissinot for noticing.
3343 * apport_utils.py, find_file_package(): Lower() both strings in the speedup
3344 heuristics to match e. g. /usr/bin/Xorg -> xserver-xorg. Thanks to Kees
3345 Cook!
3346 * apport_utils.py, report_add_package_info(): Do not crash if we encounter a
3347 'None' current version, which can happen with uninstalled alternative
3348 dependencies. Thanks to Kees Cook for tracking this down!
3349
3350 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 6 Oct 2006 17:15:08 +0200
3351
3352apport (0.26) edgy; urgency=low
3353
3354 * apport-retrace: Clean up code a bit:
3355 - Move option parsing to separate function.
3356 - Use apport_utils' report_add_gdb_info() instead of duplicating the gdb
3357 code.
3358 * apport_utils.py, report_add_gdb_info(): Add optional parameter 'debugdir'
3359 to specify an alternate debug file symbol root directory.
3360 * apport-retrace: Add option -d/--download-debug to automatically download
3361 available ddebs, create a temporary debug symbol directory from already
3362 installed and downloaded ddebs, and point gdb to use that. Also add option
3363 -C/--cache-dir to specify a permanent ddeb cache directory (by default, a
3364 temporary one is used). Update the manpage accordingly.
3365 * apport-retrace: Make the best out of a report without packaging
3366 information (which can happen if the user does not click on 'report bug'
3367 in apport-gtk).
3368 * apport_utils, report_add_proc_info():
3369 - Move heuristics for detecting interpreted scripts to a separate function
3370 to be able to provide separate test cases for it. Check a few more
3371 special cases for mono programs.
3372 - Make interpreter heuristics even scarier to detect some more mono corner
3373 cases (like banshee and beagled-helper). Closes: LP#58859
3374
3375 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 4 Oct 2006 19:10:47 +0200
3376
3377apport (0.25) edgy; urgency=low
3378
3379 * Drop apport-gtk's update-notifier dependency to a Recommends:.
3380 * apport_utils.py, report_add_gdb_info(): Add register dump and disassembly
3381 of the last 32 bytes, they might be useful to see what's going on
3382 sometimes. Thanks to Kees Cook for the idea and the patch.
3383 * test-apport, check_crash(): Verify that a crash does not leave a core file
3384 behind. (Test for LP#62972)
3385 * preloadlib/libapport.c: Do not unlink the core file after calling apport,
3386 but set REMOVE_CORE=1 environment instead. This matches the current
3387 kernel behaviour.
3388 * apport: Register an atexit handler as early as possible for unlinking the
3389 core dump if REMOVE_CORE environment is set. Closes: LP#62972
3390 * apport: Set nice level 10 instead of 5. Closes: LP#63099
3391
3392 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 2 Oct 2006 14:21:53 +0200
3393
3394apport (0.24) edgy; urgency=low
3395
3396 The "Need for speed" release -- rrrroarrr!
3397
3398 * apport: Remove _copy_shrink_corefile(): While this has an enormous impact
3399 on the size of an uncompressed core dump, it only causes a negligible size
3400 reduction of the bzip2'ed core, but it needs a lot of I/O resources for
3401 large core dumps.
3402 * problem_report.py:
3403 - Use zlib instead of bzip2 for compressing the binary data (in
3404 particular, core dumps). This results in slightly bigger files, but speeds
3405 up compression a lot (30 seconds vs. ~2:45 minutes for a Firefox core dump
3406 on my slow iBook). Closes: LP#61538
3407 - ProblemReport.read(): Support both bzip2 and zlib compression to be able
3408 to read existing reports, too.
3409 - Add/Adapt test cases.
3410 * Move InformationCollector._get_gdb() from apport to apport_utils.py
3411 report_add_gdb_info(), and add a test case for it.
3412 * apport_utils.py, report_add_package_info(): Support calling without a
3413 package name, then it will be figured out from ExecutableName. Extend test
3414 case accordingly.
3415 * test-apport: Do not require apport reports to contain gdb, packaging, and
3416 OS information, since we are going to move them out of apport.
3417 * apport: Do not collect static information. It requires a lot of CPU and
3418 I/O resources and slows down the machine a lot, and it can be added to
3419 the report later in the frontend. This also gets rid of the entire
3420 InformationCollector class, since everything has been moved to
3421 apport_utils.py now. Closes: LP#62542
3422 * apport: Do not intercept KeyboardInterrupt as unhandled exception (only
3423 useful for command line debugging, though).
3424 * problem_report.py: Add test case for appending new data to an existing
3425 report, fix write() function to not rely on an existing ProblemType key.
3426 * problem_report.py: Add new method ProblemReport.add_to_existing() to
3427 update an already existing problem report with new data. Add test case.
3428 * apport_utils.py, mark_report_seen(): Use os.utime() instead of
3429 open()/read() and a timeout for simpler and faster operation.
3430 * gtk/apport-gtk:
3431 - Collect gdb/packaging/operating system information when the user chooses
3432 to file a bug and update the apport report.
3433 - Change the 'Downloading bug patterns...' progress dialog to 'Collecting
3434 information about the crash...'.
3435 * debian/control: Bumped library dependencies of apport-gtk, added
3436 update-notifer dependency.
3437
3438 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 29 Sep 2006 15:47:56 +0200
3439
3440apport (0.23) edgy; urgency=low
3441
3442 * apport: Reset signal handler to SIG_IGN in the crash signal handler, to
3443 avoid an endless crash/handler loop (noticed during debugging LP#61708).
3444 * debian/apport.init: Do not let the script run with set -e, so that
3445 do_{start,stop} can deliver their return codes for proper evaluation,
3446 instead of immediately existing. Closes: LP#61796
3447 * test-apport: Check that SIGQUIT does not generate a report. (Check for
3448 bug #62511).
3449 * apport: Ignore SIGQUIT. Closes: LP#62511
3450
3451 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 28 Sep 2006 20:57:38 +0200
3452
3453apport (0.22) edgy; urgency=low
3454
3455 * apport_utils.py, report_add_proc_info(): Make 'interpreted script'
3456 detection more general to also work for mono programs.
3457 * test-apport: Check that non-packaged scripts do not generate a report.
3458 * apport: Call ic.collect_runtime_information() earlier and drop the local
3459 /proc/pid/exe examination, so that we get proper script detection. This
3460 avoids getting crash reports for non-packaged scripts (see test case
3461 change from above).
3462 * apport: Do not try to chmod the report file if we could not create it and
3463 output to stderr instead (this mainly affects local testing only).
3464 * apport_utils.py, find_file_package(): First grep the package lists whose
3465 names are a substring of the crashed binary name (or vice versa), to
3466 immensely speed up the package name determination in many cases.
3467 * apport: Drop the maximum number of consecutive crashes per executable
3468 from 5 to 2. 5 creates a too bad user experience and creates the
3469 impression that it will never stop. Closes: LP#61078
3470
3471 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 19 Sep 2006 16:16:46 +0200
3472
3473apport (0.21) edgy; urgency=low
3474
3475 * apport: Keep a partially written report with '000' permissions, and only
3476 chmod it to 0600 when it is fully written. This stops update-notifier from
3477 picking up half-written reports and get activated several times.
3478 Closes: LP#59988
3479 * apport: Add the executable path to the first line of logging.
3480 * apport: Run the complete code under control of the general exception
3481 fallback handler.
3482 * debian/apport.default: Increase maximum core size to 200 MB, to also catch
3483 Firefox and Evolution core dumps.
3484 * apport_utils.py, find_file_package(): Before searching the dpkg database
3485 (which is expensive), check if the executable path matches a whitelist of
3486 path prefixes. This replaces the weaker blacklist (/tmp and /home) in
3487 apport itself.
3488 * gtk/apport-gtk: Show a progress dialog while checking for bug patterns and
3489 execute report_search_bug_patterns() in a separate thread, so that the UI
3490 is not potentially blocked for a long time.
3491 * apport: Gracefully abort if we cannot readlink /proc/pid/exe, instead of
3492 falling over with an exception. Closes: LP#59993
3493 * debian/rules: Use 'multiuser' instead of 'defaults' for dh_installinit.
3494 Clean up the unnecessary rc symlinks in postinst and add appropriate
3495 sysv-rc dependency.
3496
3497 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 14 Sep 2006 23:16:26 +0200
3498
3499apport (0.20) edgy; urgency=low
3500
3501 * apport: Renice ourself to priority 5 to not slow down the user's processes
3502 so heavily.
3503 * Add manpages for apport-retrace(1) and apport-unpack(1) and install them
3504 into apport. Closes: LP#58463
3505 * problem_report.py: Test attaching two files instead of one in the
3506 test_write_file() regression check to assert correct key sorting.
3507 * problem_report.py: Alter write() method to sort binary data to the end of
3508 the report. This makes reports easier to read, and also shows relevant
3509 information more quickly when progressively loading them in a web browser.
3510 Adapt regression tests accordingly.
3511 * Move setting of ExecutablePath from apport's InformationCollector ctor to
3512 apport_utils' report_add_proc_info(), where it belongs to. Check
3513 ExecutablePath in apport_utils' regression tests.
3514 * apport-unpack: Support '-' as report argument to read from stdin.
3515 * apport_utils.py, report_add_proc_info():
3516 - Apply some heuristics to determine whether the crashed process is an
3517 interpreted script (check if the Name in /proc/pid/status matches
3518 the second /proc/pid/cmdline part, and if that command line argument is
3519 an existing executable file). In the case of an interpreted script, set
3520 ExecutablePath to the script and InterpreterPath to the actually crashed
3521 ELF binary.
3522 - Test this with a shell (/bin/zgrep) and a Python (./apport-unpack)
3523 script in the test suite.
3524 - Closes: LP#58859
3525 * Add debian/apport.logrotate to add a daily 7-step /var/log/apport
3526 log rotation.
3527 * test-apport: Fix WCOREDUMP() and pidof checks in check_crash().
3528 * apport: Install a signal handler for all 'crashy' signals, which just logs
3529 the signal and stack info and exits. This should avoid a crashing apport
3530 examining itself, possibly in an endless loop. Closes: LP#58873
3531
3532 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 11 Sep 2006 09:20:18 +0200
3533
3534apport (0.19) edgy; urgency=low
3535
3536 * apport_utils.py: Add function report_search_bug_patterns(): Try to
3537 download a package specific bug pattern XML file from a given URL base
3538 directory and return the bug URL in case of a match. Also add extensive
3539 test suite check.
3540 * test-apport: Fix help message.
3541 * apport-gtk: Make use of the new report_search_bug_patterns() function and
3542 display appropriate instructions on match. Bump python-apport-utils dependency.
3543
3544 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 5 Sep 2006 11:31:17 +0200
3545
3546apport (0.18) edgy; urgency=low
3547
3548 The "mating dance for ubiquity" release.
3549
3550 * apport-gtk:
3551 - Use pidof's -x option in the detection whether the program is already
3552 running to correctly handle scripts.
3553 - Do not assume the presence of the ExecutablePath key in reports, but
3554 gracefully fall back to Package.
3555 - If the report specifies an explicit DesktopFile, use that instead of
3556 trying to figure it out.
3557 - Only created reduced report and show the radio buttons if there are
3558 actually removed fields.
3559 - Change tooltip of 'reduced report' radio button to be more generic (do
3560 not refer to the memory dump, but to 'large items', since this is what
3561 apport-gtk currently does).
3562 - Support new field 'BugDisplayMode: file | list (default)'. In 'file'
3563 mode, display the /+filebug page instead of /+bugs and change
3564 instructions accordingly.
3565 - Use the ProcCmdline attibute to restart an application; correctly
3566 parsing of all the desktop file is just not possible at this point.
3567 - Support new field 'RespawnCommand' to use custom respawning command.
3568 * problem_report.py: Add method has_removed_fields() to check whether load()
3569 skipped any fields due to binary=False. Add test suite check.
3570 * apport_utils.py: Fix the quoting in ProcCmdline so that it is fully shell
3571 compatible.
3572 * run-tests: Check if kernel crash dump helper is active, and if so, run
3573 test-apport in kernel mode.
3574 * problem_report.py: Support an optional second argument of file references
3575 which controls whether or not the file contents will be compressed/encoded
3576 (defaults to True for backwards compatibility). Add test suite checks.
3577
3578 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 25 Aug 2006 14:01:47 +0200
3579
3580apport (0.17) edgy; urgency=low
3581
3582 * Move packaging information collection from apport to new function
3583 report_add_package_info() in apport_utils.py, add test suite check.
3584 * Move operating system information collection from apport to new function
3585 report_add_os_info() in apport_utils.py, add test suite check.
3586 * Move /proc information collection from apport to new function
3587 report_add_proc_info() in apport_utils.py, add test suite check, and fix
3588 handling of failed /proc/$$/environ reading.
3589 * preloadlib/libapport.c: Route gcore's stderr to /dev/null to suppress
3590 error messages during the test suite and to become more compatible to the
3591 kernel behaviour.
3592 * Change apport_utils.py to be a public module and ship it in the new
3593 python-apport-utils package, so that other applications like ubiquity can
3594 use it easily.
3595 * po/de.po: Add new translations to make this complete again.
3596 * problem_report.py, apport_utils.py: Prepend UnitTest classes with '_' so
3597 that they do not appear in the help() output.
3598 * apport_utils.py: Add make_report_path(), which constructs the canonical
3599 crash report pathname for a given report.
3600 * Add debian/apport.postinst: Remove /usr/share/apport/apport_utils.pyc when
3601 upgrading from an earlier version, so that the programs in
3602 /usr/share/apport actually use the version from p-apport-utils.
3603
3604 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 22 Aug 2006 18:14:00 +0200
3605
3606apport (0.16) edgy; urgency=low
3607
3608 * test-apport: Check that non-packaged binaries do not generate a report.
3609 * apport_utils.py: Add find_file_package() to find the package a file
3610 belongs to. This uses fgrep /var/lib/dpkg/info/*.list which is much faster
3611 than dpkg -S. Also add test suite check.
3612 * apport: Use find_file_package() instead of direct dpkg -S call and pass
3613 the result to the InformationCollector ctor to avoid grepping the dpkg
3614 lists twice.
3615 * apport: Immediately exit if the executable name starts with /home or /tmp,
3616 to avoid grepping the dpkg database in the common developer case.
3617 * apport: Replace 0-bytes in ProcCmdline with spaces to keep them readable.
3618 * apport-gtk: Offer an alternative small report (without the core dump) for
3619 users with slow internet connection.
3620
3621 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 21 Aug 2006 19:34:47 +0200
3622
3623apport (0.15) edgy; urgency=low
3624
3625 * Add apport-unpack: Script to extract the fields of a problem report into
3626 separate files into a new or empty directory. Mainly useful for extracting
3627 compressed binary data like the core dump.
3628 * test-apport: Check that dumped environment only contains security
3629 insensitive variables.
3630 * apport: Filter out all environment variables but $SHELL, $PATH, and
3631 locale/language related ones. Closes: LP#56846
3632 * test-apport: Delete test report in the cleanup handler so that the
3633 kernel-mode test can be run multiple times without manual cleanup.
3634 * test-apport: Check for running apport and test executable processes in
3635 check_crash().
3636 * preloadlib/libapport.c: Improve error checking, some robustification.
3637 * test-apport: If using the preload library, wait a second between the test
3638 process invocations in the flooding test to mitigate a strange race
3639 condition that sometimes causes the signal handler not to be executed.
3640
3641 -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 20 Aug 2006 16:28:43 +0200
3642
3643apport (0.14) edgy; urgency=low
3644
3645 * preloadlib/libapport.c: Write core dump into cwd instead of /tmp to act
3646 like the current kernel.
3647 * apport_utils.py: Check APPORT_REPORT_DIR environment variable for an
3648 alternate crash report directory. This is mainly useful for a local test
3649 suite.
3650 * apport: Quiesce the apt module's FutureWarning.
3651 * preloadlib/libapport.c: Re-raise the signal instead of doing exit() so
3652 that the process exits with the same code as it would do without the
3653 library.
3654 * preloadlib/libapport.c: Close stdout for gcore process.
3655 * Add test-apport: Use preloadlib/ and APPORT_REPORT_DIR to create a
3656 sandboxed environment and run various apport functionality tests. Also add
3657 this script to run-tests.
3658 * apport_utils.py, delete_report(): Actually try to unlink the report before
3659 falling back to truncating it to zero bytes.
3660 * preloadlib/libapport.c: Close stderr for apport process.
3661
3662 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 18 Aug 2006 15:46:37 +0200
3663
3664apport (0.13) edgy; urgency=low
3665
3666 * Do not run the test suite on build since on the buildds modifying
3667 file atimes does not work.
3668
3669 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 18 Aug 2006 00:59:26 +0200
3670
3671apport (0.12) edgy; urgency=low
3672
3673 * apport-gtk: Make bug report window resizable when the details are
3674 expanded. Closes: LP#56672
3675 * apport_utils.py: Add get_recent_crashes() and a test suite check for it.
3676 * apport: If the same binary produced more than 5 crashes in the last 24
3677 hours, ignore the crash. This is a hideous and pretty ad-hoc band-aid to
3678 avoid flooding users with reports for continuously crashing respawning
3679 processes. Closes: LP#56362
3680 * apport: Clean up exit codes to only exit with 0 if report was created, and
3681 with 1 otherwise (to become more compatible to proposed future kernel
3682 behaviour, where core dumps are only generated on demand).
3683 * Add run-tests script which calls all available selftests.
3684 * debian/rules: Run run-tests during build to have the package FTBFS on
3685 regressions. Add python build dependency for this (it is already there
3686 implicitly anyway).
3687
3688 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 17 Aug 2006 16:06:41 +0200
3689
3690apport (0.11) edgy; urgency=low
3691
3692 * gtk/apport-gtk.glade: Remove separators from dialogs. Closes: LP#56326
3693 * apport:
3694 - Move information collection from ctor to two new separate functions
3695 collect_runtime_information() (fast, privileged, crashed process must
3696 exist) and collect_static_information() (slow, unprivileged, crashed
3697 process does not need to exist). This allows a cleaner design.
3698 - Add missing close() call in init_error_log().
3699 - Do not catch SystemExit in the final catch-all-and-log clause (will
3700 become important once we switch to master/slave processes).
3701 - Clean up handling of temporary files.
3702 - Log successful report creation with file and package name, to ease
3703 debugging.
3704 - transitive_dependencies(): Do not break on pure virtual dependencies
3705 (like perl-api-XXX).
3706 * Add debian/apport.default: Default file to disable apport entirely and to
3707 change the maximum size of kernel created core dumps.
3708 * debian/apport.init: Evaluate new default file.
3709
3710 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 16 Aug 2006 17:05:19 +0200
3711
3712apport (0.10) edgy; urgency=low
3713
3714 * apport-gtk: Show report file size in bug report window.
3715 * apport: Correctly handle relative paths to core dumps (use crashed
3716 process' cwd).
3717 * Fix the GPL URLs in source file's copyright comments.
3718 * debian/apport.cron.daily: Add -mindepth 1 to find commands to avoid
3719 attempting to remove the /var/crash/ directory. Closes: LP#55107
3720 * problem_report.py:
3721 - Fix precise whitespace handling in continuation lines, add selftest.
3722 - Add selftest for reading a report, modifying fields, and writing it
3723 back.
3724 - Fix writing back binary data, adapt test suite to check it.
3725 - Fixed ProblemReport.load() to clean up old data, added selftest.
3726 - Restructure class to inherit from IterableUserDict and throw away all
3727 the now obsolete dictionary wrapper methods.
3728 * debian/apport.init: Add colon to description to make output less
3729 confusing.
3730 * Add apport-retrace and install it into apport: This tool takes a crash
3731 report and refreshes the stack traces in it. This is particularly useful
3732 if debug symbols are installed now, but haven't been at the time the crash
3733 occured.
3734
3735 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 11 Aug 2006 15:40:05 +0200
3736
3737apport (0.9) edgy; urgency=low
3738
3739 * apport: Call objcopy to throw out READONLY/CODE sections from the core
3740 dump, which drastically reduces its (uncompressed) size (factor 2 to 10).
3741 This has little effect on the bzip2'ed core dump, though.
3742 * apport:
3743 - Support an optional third command line argument which specifies the
3744 location of a core dump.
3745 - If a core dump is given, call gdb on the core dump instead of the
3746 crashed process. We cannot attach to the latter if we are called by the
3747 kernel (since the crashed process is in uninterruptible kernel sleep).
3748 - If no core dump is given, do not attempt to do anything gdb related.
3749 - This matches the future behaviour of the kernel crash dump helper while
3750 remaining compatible to the previous call semantics.
3751 * Add preloadlib/{Makefile,libapport.c}: LD_PRELOADable library which
3752 emulates the future kernel behaviour. This is ONLY for testing and
3753 development purposes. It uses unsafe temporary file handling and thus must
3754 not be used on production boxes!
3755 * Ship preloadlib/* as examples in package 'apport' for people who want to
3756 play with it until the new kernel arrives.
3757 * Add preloadlib/README: Explain how to use the preload library.
3758
3759 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 9 Aug 2006 12:12:20 +0200
3760
3761apport (0.8) edgy; urgency=low
3762
3763 * apport_utils.py:
3764 - Add two new functions seen_report() and mark_report_seen().
3765 - get_new_reports(): Only return unseen reports, add function
3766 get_all_reports() for the old behaviour.
3767 * gtk/apport-gtk.py: Do not delete reports after notifying about them. This
3768 way, we do not need to add another button to save the report (which is
3769 considered evil UI-wise), but still retain the report for filing and
3770 examining later.
3771 * Replace all usages of '/var/crash' to a new global variable in
3772 apport_utils; this is particularly useful for test suites.
3773 * apport.py: Overwrite old reports if they are seen.
3774 * apport_utils.py: Add a test suite for all exported functions.
3775
3776 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 8 Aug 2006 19:29:23 +0200
3777
3778apport (0.7) edgy; urgency=low
3779
3780 * Add apport_utils.py: Factorize out some common code of apport-gtk,
3781 possible future frontends, and some backend tools.
3782 * Add apport-checkreports: Test if there are new crash reports for the
3783 invoking user. This factorizes out the tests we currently do in
3784 update-notifier and makes them easier to change and keep in sync with
3785 apport itself. Ship the script in the apport package.
3786
3787 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 8 Aug 2006 17:24:46 +0200
3788
3789apport (0.6) edgy; urgency=low
3790
3791 * Add missing intltool build dependency to fix FTBFS.
3792
3793 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 3 Aug 2006 09:15:42 +0200
3794
3795apport (0.5) edgy; urgency=low
3796
3797 * apport-gtk: Remove the crash report after it got displayed.
3798 * apport-gtk: Fix exception on startup if no readable crash reports exist.
3799
3800 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 2 Aug 2006 23:42:34 +0200
3801
3802apport (0.4) edgy; urgency=low
3803
3804 * Implement completely new UI according to the design described at
3805 https://wiki.ubuntu.com/CrashReporting. Many thanks to Matthew Paul
3806 Thomas!
3807 * po/Makefile: Fix default target to not just break. Now it builds the .pot
3808 file.
3809 * debian/rules: Build .pot file on package build for automatic Rosetta
3810 import.
3811 * Bring German translations up to date.
3812 * po/Makefile: Supply '--language=python' to intltool-update to properly
3813 extract strings from apport-gtk.
3814
3815 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 2 Aug 2006 23:14:58 +0200
3816
3817apport (0.3) edgy; urgency=low
3818
3819 * debian/rules clean: Also clean po/.
3820 * debian/apport.cron.daily: Clean away empty files everytime.
3821 * apport: Only consider a report as already present if it has a non-zero
3822 size.
3823 * apport: Set proper group for report files instead of 'root'.
3824 * apport-gtk: Ignore 0-sized reports.
3825 * apport-gtk: Add button to remove the current report (by truncating the
3826 file to zero bytes; a user cannot unlink files in /var/crash).
3827 * apport-gtk: Only display reports that the user can actually read.
3828 * problem_report.py: Add 'binary' option to ProblemReport.load() to
3829 optionally skip binary data.
3830 * debian/rules: Clean stale *.pyc files.
3831 * python-gtk: Do not load binary data (core dumps, etc.) to greatly speed up
3832 the GUI. They are just gibberish anyway.
3833 * apport: Switch from apt_pkg to apt, add SourcePackage: to reports.
3834 * apport-gtk: Use source package name for the Malone URL.
3835 * debian/rules: Call setup.py install with --no-compile to not ship *.pyc in
3836 debs.
3837
3838 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 31 Jul 2006 13:11:52 +0200
3839
3840apport (0.2) edgy; urgency=low
3841
3842 * debian/apport.cron.daily: Do not produce error messages if 'find' does not
3843 find any crash reports.
3844 * problem_report.py: Support iterators, add test case.
3845 * apport: Filter out trailing 0-byte from ProcCmdline.
3846 * Add a simple GTK frontend, ship it in new package apport-gtk.
3847
3848 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 27 Jul 2006 23:52:33 +0200
3849
3850apport (0.1) edgy; urgency=low
3851
3852 * Initial release. This package implements the client backend part of
3853 https://wiki.ubuntu.com/AutomatedProblemReports.
3854
3855 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 24 Jul 2006 14:21:10 +0200
03856
=== added file 'debian/compat'
--- debian/compat 1970-01-01 00:00:00 +0000
+++ debian/compat 2006-07-12 14:20:41 +0000
@@ -0,0 +1,1 @@
15
02
=== added file 'debian/control'
--- debian/control 1970-01-01 00:00:00 +0000
+++ debian/control 2009-06-29 09:37:51 +0000
@@ -0,0 +1,120 @@
1Source: apport
2Section: utils
3Priority: optional
4Build-Depends: cdbs (>= 0.4.43), debhelper (>= 5.0.51~),
5 python-central (>= 0.5.6), python-dev (>= 2.4), intltool,
6 python-distutils-extra (>= 2.2~), texlive-latex-recommended
7Maintainer: Martin Pitt <martin.pitt@ubuntu.com>
8Standards-Version: 3.8.2
9XS-Python-Version: all
10Vcs-Bzr: https://code.launchpad.net/~ubuntu-core-dev/ubuntu/karmic/apport/ubuntu
11Homepage: https://wiki.ubuntu.com/Apport
12
13Package: apport
14XB-Python-Version: ${python:Versions}
15Architecture: all
16Depends: python (>= 2.4), python-apport (>= 0.120), lsb-base (>= 3.0-6),
17 sysv-rc (>= 2.86.ds1-14.1ubuntu2), ${misc:Depends}
18Conflicts: apport-gtk (<< 0.51), apport-cli
19Replaces: apport-gtk (<< 0.51), apport-cli
20Suggests: apport-gtk | apport-kde
21Description: automatically generate crash reports for debugging
22 apport automatically collects data from crashed processes and
23 compiles a problem report in /var/crash/. This utilizes the crashdump
24 helper hook provided by the Ubuntu kernel.
25 .
26 This package also provides a command line frontend for browsing and
27 handling the crash reports. For desktops, you should consider
28 installing the GTK+ or Qt user interface (apport-gtk or apport-kde).
29
30Package: python-problem-report
31XB-Python-Version: ${python:Versions}
32Section: python
33Architecture: all
34Depends: ${python:Depends}, ${misc:Depends}
35Description: Python library to handle problem reports
36 This Python library provides an interface for creating, modifying,
37 and accessing standardized problem reports for program and kernel
38 crashes and packaging bugs.
39 .
40 These problem reports use standard Debian control format syntax
41 (RFC822).
42
43Package: python-apport
44XB-Python-Version: ${python:Versions}
45Section: python
46Architecture: all
47Depends: ${python:Depends}, python-apt, python-problem-report (>= 0.94),
48 python-launchpadlib, ${misc:Depends}
49Recommends: gdb
50Conflicts: python-apport-utils
51Replaces: python-apport-utils
52Description: apport crash report handling library
53 This Python package provides high-level functions for creating and
54 handling apport crash reports:
55 .
56 * Query available and new reports.
57 * Add OS, packaging, and process runtime information to a report.
58 * Various frontend utility functions.
59 * Python hook to generate crash reports when Python scripts fail.
60
61Package: apport-retrace
62XB-Python-Version: ${python:Versions}
63Section: devel
64Architecture: all
65Depends: python (>= 2.4), python-apport (>= 0.124), python-apt,
66 apt, binutils, dpkg-dev, ${misc:Depends}
67Suggests: debootstrap (>= 0.3.3.2ubuntu2), fakeroot, fakechroot
68Conflicts: apport (<< 0.72)
69Replaces: apport (<< 0.72)
70Description: tools for reprocessing Apport crash reports
71 apport-retrace recombines an Apport crash report (either a file or a
72 Launchpad bug) and debug symbol packages (.ddebs) into fully symbolic
73 stack traces.
74 .
75 This package also ships apport-chroot. This tool can create and
76 manage chroots for usage with apport-retrace. If the fakeroot and
77 fakechroot libraries are available (either by installing the packages
78 or by merely putting their libraries somewhere and setting two
79 environment variables), the entire process of retracing crashes in
80 chroots can happen with normal user privileges.
81
82Package: apport-gtk
83XB-Python-Version: ${python:Versions}
84Section: gnome
85Architecture: all
86Depends: python (>= 2.4), python-apport (>= 0.80), python-gtk2 (>= 2.12),
87 python-xdg, apport (>= 0.41), procps, ${misc:Depends}
88Recommends: update-notifier
89Description: GTK+ frontend for the apport crash report system
90 apport automatically collects data from crashed processes and
91 compiles a problem report in /var/crash/. This utilizes the crashdump
92 helper hook provided by the Ubuntu kernel.
93 .
94 This package provides a GTK+ frontend for browsing and handling the
95 crash reports.
96
97Package: apport-kde
98XB-Python-Version: ${python:Versions}
99Section: kde
100Architecture: all
101Depends: python (>= 2.4), python-apport (>= 0.80), python-kde4, python-xdg,
102 apport (>= 0.41), procps, ${misc:Depends}
103Recommends: update-notifier-kde
104Replaces: apport-qt (<< 1.4)
105Conflicts: apport-qt (<< 1.4)
106Provides: apport-qt
107Description: KDE frontend for the apport crash report system
108 apport automatically collects data from crashed processes and
109 compiles a problem report in /var/crash/. This utilizes the crashdump
110 helper hook provided by the Ubuntu kernel.
111 .
112 This package provides a KDE frontend for browsing and handling the
113 crash reports.
114
115Package: apport-qt
116Section: oldlibs
117Architecture: all
118Depends: apport-kde
119Description: transitional package to apport-kde
120 You can savely remove this package after the upgrade.
0121
=== added file 'debian/copyright'
--- debian/copyright 1970-01-01 00:00:00 +0000
+++ debian/copyright 2008-09-21 21:04:36 +0000
@@ -0,0 +1,24 @@
1apport is written and maintained by Martin Pitt
2<martin.pitt@ubuntu.com>. Initial packaging was on Wed, 12 July 2006.
3
4The original source can always be found at:
5 http://archive.ubuntu.com/ubuntu/pool/main/a/apport
6
7Copyright (C) 2006, 2007, 2008 Canonical Ltd.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22
23On Debian systems, the complete text of the GNU General
24Public License can be found in `/usr/share/common-licenses/GPL'.
025
=== added directory 'debian/local'
=== added file 'debian/local/apport-chroot'
--- debian/local/apport-chroot 1970-01-01 00:00:00 +0000
+++ debian/local/apport-chroot 2009-04-06 22:48:33 +0000
@@ -0,0 +1,347 @@
1#!/usr/bin/python
2
3# Execute operations on/in apport chroots.
4#
5# Copyright (c) 2007 Canonical Ltd.
6# Author: Martin Pitt <martin.pitt@ubuntu.com>
7#
8# This program is free software; you can redistribute it and/or modify it
9# under the terms of the GNU General Public License as published by the
10# Free Software Foundation; either version 2 of the License, or (at your
11# option) any later version. See http://www.gnu.org/copyleft/gpl.html for
12# the full text of the license.
13
14import optparse, os.path, sys, urllib, re, atexit, shutil, subprocess, tempfile
15from glob import glob
16
17import problem_report
18from apport.chroot import Chroot, setup_fakeroot_env
19from apport.crashdb import get_crashdb
20
21#
22# functions
23#
24
25def parse_options():
26 '''Parse command line options and return (options, args) tuple.'''
27
28 optparser = optparse.OptionParser('''%prog [options] create <release> <chroot path>
29%prog [options] upgrade <chroot path>|<chroot release name>|all
30%prog [options] installdeb <chroot path>|<chroot release name> <path to .deb> [...]
31%prog [options] login <chroot path>|<chroot release name>
32%prog [options] retrace <bugnumber>|<report file>''')
33
34 optparser.add_option('--mirror',
35 help='Mirror for chroot creation',
36 action='store', type='string', dest='mirror', metavar='URL', default=None)
37 optparser.add_option('-a', '--apt-source',
38 help='Add an extra apt source',
39 action='append', type='string', dest='extra_apt', metavar='SOURCE', default=[])
40 optparser.add_option('-t', '--tar',
41 help='Create chroot tarball instead of directory',
42 action='store_true', dest='tar', default=False)
43 optparser.add_option('--save',
44 help='When logging in to a chroot tarball, update the tarball afterwards to save modifications if the shell exits with status 0.',
45 action='store_true', dest='tar_save', default=False)
46 optparser.add_option('-m', '--chroot-map',
47 help='Path to chroot map. This is a file that defines a Python dictionary, mapping DistroRelease: values to chroot paths',
48 action='store', type='string', dest='chroot_map', metavar='FILE', default=None)
49 optparser.add_option('-p', '--extra-package',
50 help='Install an extra package (can be specified multiple times)',
51 action='append', type='string', dest='extra_packages', metavar='PACKAGE', default=[])
52 optparser.add_option('-v', '--verbose',
53 help='Verbose operation (also passed to apport-retrace)',
54 action='store_true', dest='verbose', default=False)
55 optparser.add_option('--auth',
56 help='Passed on to apport-retrace in "retrace" mode',
57 action='store', type='string', dest='auth_file', default=None)
58 optparser.add_option('--duplicate-db',
59 help='Passed on to apport-retrace in "retrace" mode',
60 action='store', type='string', dest='dup_db', default=None)
61 optparser.add_option('--confirm-attach',
62 help='Display retraced stack traces and ask for confirmation before uploading them as bug attachments.',
63 action='store_true', dest='confirm_attach', default=False)
64
65 (opts, args) = optparser.parse_args()
66
67 if len(args) < 1:
68 optparser.error('no command specified (use --help for a short online help)')
69 sys.exit(1)
70
71 if opts.chroot_map:
72 if not os.path.exists(opts.chroot_map):
73 print >> sys.stderr, 'specified chroot map does not exist'
74 sys.exit(1)
75
76 # load chroot map and resolve relative paths
77 map_file_dir = os.path.dirname(opts.chroot_map)
78 opts.chroot_map = eval(open(opts.chroot_map).read(), {}, {})
79 for n, p in opts.chroot_map.iteritems():
80 if not p.startswith('/'):
81 opts.chroot_map[n] = os.path.join(map_file_dir, p)
82
83 return (opts, args)
84
85def release_from_report(file):
86 '''Return the distro release from the given Apport report.'''
87
88 pr = problem_report.ProblemReport()
89 pr.load(open(file), binary=False)
90 return pr['DistroRelease']
91
92def upgrade_chroot(chroot, verbose=False, extra_packages=[]):
93 '''Update a chroot to the latest apt lists and packages.
94
95 If run from a tarball and the dist-upgrade succeeds, then the tarball
96 is updated as well. If the dist-upgrade fails, an assertion is raised.'''
97
98 if verbose:
99 assert chroot.run(['apt-get', 'update']) == 0
100 assert chroot.run(['apt-get', '-y', '--allow-unauthenticated', 'dist-upgrade']) == 0
101 else:
102 assert chroot.run(['apt-get', '-qq', 'update']) == 0
103 assert chroot.run(['apt-get', '-qqy', '--allow-unauthenticated', 'dist-upgrade']) == 0
104 if extra_packages:
105 assert chroot.run(['apt-get', 'install', '-y', '--allow-unauthenticated'] + extra_packages) == 0
106
107 chroot.fix_symlinks()
108
109 if chroot.root_tarball:
110 assert chroot.run(['apt-get', 'clean']) == 0
111 chroot.tar()
112
113#
114# commands
115#
116
117def command_create(opts, args):
118 '''Create a chroot.'''
119
120 if len(args) != 2:
121 print >> sys.stderr, 'create needs exactly two arguments (use --help for a short online help)'
122 sys.exit(1)
123 (release, destpath) = args
124
125 # create chroot directory
126 if opts.tar:
127 root = tempfile.mkdtemp()
128 atexit.register(shutil.rmtree, root)
129 if os.path.isfile(destpath):
130 print >> sys.stderr, 'target file', destpath, 'exists already, aborting'
131 sys.exit(1)
132 else:
133 root = destpath
134 if os.path.isdir(root):
135 print >> sys.stderr, 'target directory', root, 'exists already, aborting'
136 sys.exit(1)
137 os.makedirs(root)
138
139 # call debootstrap
140 setup_fakeroot_env()
141 debootstrap_argv = ['debootstrap',
142 '--variant=fakechroot', release, root]
143 if opts.mirror:
144 debootstrap_argv.append(opts.mirror)
145
146 assert subprocess.call(debootstrap_argv) == 0
147
148 # if we have a file:// mirror, create a symlink
149 if opts.mirror and opts.mirror.startswith('file://'):
150 mirrordir = os.path.abspath(opts.mirror[7:])
151 targetdir = os.path.normpath(root + '/' + os.path.dirname(mirrordir))
152 if not os.path.isdir(targetdir):
153 os.makedirs(targetdir)
154 os.symlink(mirrordir, os.path.join(targetdir, os.path.basename(mirrordir)))
155
156 # set up apt sources
157 if opts.mirror:
158 f = open(os.path.join(root, 'etc', 'apt', 'sources.list'), 'w')
159 print >> f, 'deb %s %s main' % (opts.mirror, release)
160 else:
161 # debootstrap puts default mirror there
162 f = open(os.path.join(root, 'etc', 'apt', 'sources.list'), 'a')
163
164 for s in opts.extra_apt:
165 print >> f, s
166 f.close()
167
168 # disable invoke-rc.d
169 policyrc = os.path.join(root, 'usr', 'sbin', 'policy-rc.d')
170 open(policyrc, 'w').write('#!/bin/sh\nexit 101')
171 os.chmod(policyrc, 0755)
172
173 # set up apt-get and required packages
174 chroot = Chroot(root)
175 assert chroot.run(['apt-get', 'update']) == 0
176 chroot.run(['apt-get', 'install', '-y', '--allow-unauthenticated', 'gpgv', 'apport-retrace'] + opts.extra_packages)
177
178 chroot.fix_symlinks()
179
180 # clean up cruft
181 for path, dirs, files in os.walk(os.path.join(root, 'var', 'cache', 'apt', 'archives')):
182 for f in files:
183 try:
184 os.unlink(os.path.join(path, f))
185 except OSError:
186 pass
187
188 # tar it up
189 if opts.tar:
190 chroot.tar(destpath)
191
192def command_upgrade(opts, args):
193 '''Upgrade one or all chroots.'''
194
195 if len(args) != 1:
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches