2011-05-19 12:18:29 |
Julian Taylor |
description |
The foolscap setup.py file (http://foolscap.lothar.com/trac/browser/setup.py?annotate=blame&rev=7c7b1185b68076cc6176ea41b5fc677445e1e45b#L75 ) says that if a package that requires foolscap requires an extra feature named "secure_connections" then foolscap requires pyOpenSSL.
Other Python packages can then specify that they depend on "foolscap with its extra feature of 'secure_connections'". This is spelled "foolscap[secure_connections]". Tahoe-LAFS does this:
http://tahoe-lafs.org/trac/tahoe-lafs/browser/trunk/src/allmydata/_auto_deps.py?annotate=blame&rev=4976#L21
Currently the packaging of foolscap in Natty claims that it doesn't know about the "secure_connections" feature:
$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg_resources
>>> pkg_resources.require('foolscap')
[foolscap 0.6.1 (/usr/lib/python2.7/dist-packages)]
>>> pkg_resources.require('foolscap[secure_connections]')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 654, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 557, in resolve
requirements.extend(dist.requires(req.extras)[::-1])
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2180, in requires
"%s has no such extra feature %r" % (self, ext)
pkg_resources.UnknownExtra: foolscap 0.6.1 has no such extra feature 'secure_connections'
This means that, for example, the tahoe-lafs executable that is packaged in Natty cannot start:
$ tahoe --version
Traceback (most recent call last):
File "/usr/bin/tahoe", line 6, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2671, in <module>
working_set.require(__requires__)
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 654, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 557, in resolve
requirements.extend(dist.requires(req.extras)[::-1])
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2180, in requires
"%s has no such extra feature %r" % (self, ext)
pkg_resources.UnknownExtra: foolscap 0.6.1 has no such extra feature 'secure_connections'
$ type tahoe
tahoe is hashed (/usr/bin/tahoe)
$ dpkg --search /usr/bin/tahoe
tahoe-lafs: /usr/bin/tahoe
$ apt-cache policy tahoe-lafs
tahoe-lafs:
Installed: 1.8.2-0ubuntu1
Candidate: 1.8.2-0ubuntu1
Version table:
*** 1.8.2-0ubuntu1 0
500 http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ natty/universe i386 Packages
100 /var/lib/dpkg/status
By inspecting the foolscap setup.py, you can see that the stanza that declares this extra feature is inside a test for the existence of setuptools: http://foolscap.lothar.com/trac/browser/setup.py?annotate=blame&rev=7c7b1185b68076cc6176ea41b5fc677445e1e45b#L65
So the easiest way to fix this is probably to configure the Ubuntu packaging of foolscap to indicate that setuptools is a build-time requirement of foolscap, and then rebuild. This should produce the metadata file (named /usr/share/pyshared/foolscap-0.6.1.egg-info/requires.txt ) that indicates that this distribution of foolscap knows how to provide secure_connections, as long as it is in turn provided with pyOpenSSL.
ProblemType: Bug
DistroRelease: Ubuntu 11.04
Package: python-foolscap 0.6.1-1
ProcVersionSignature: Ubuntu 2.6.38-8.42-virtual 2.6.38.2
Uname: Linux 2.6.38-8-virtual i686
Architecture: i386
Date: Fri May 13 20:23:17 2011
Ec2AMI: ami-ccf405a5
Ec2AMIManifest: (unknown)
Ec2AvailabilityZone: us-east-1a
Ec2InstanceType: t1.micro
Ec2Kernel: aki-407d9529
Ec2Ramdisk: unavailable
PackageArchitecture: all
ProcEnviron:
LANG=en_US.UTF-8
SHELL=/bin/bash
SourcePackage: foolscap
UpgradeStatus: Upgraded to natty on 2011-05-13 (0 days ago) |
foolscap has accidentally dropped a build dependency on python-setuptools so the requires.txt is not installed.
This leads to software breaking which use this setuptools feature to check if a package provides the [secure_connections] feature and a missing dependency on python-twisted.
This is fixed by lp:~jtaylor/ubuntu/natty/foolscap/foolscap-fix-782414
TESTCASE:
> python -c 'import pkg_resources; print pkg_resources.require("foolscap[secure_connections]")'
What should happen:
[foolscap 0.6.1 (/usr/lib/python2.7/dist-packages), pyOpenSSL 0.10 (/usr/lib/python2.7/dist-packages), Twisted 10.2.0 (/usr/lib/python2.7/dist-packages)]
What happens:
$ python -c 'import pkg_resources; print pkg_resources.require("foolscap[secure_connections]")'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 654, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 557, in resolve
requirements.extend(dist.requires(req.extras)[::-1])
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2180, in requires
"%s has no such extra feature %r" % (self, ext)
pkg_resources.UnknownExtra: foolscap 0.6.1 has no such extra feature 'secure_connections'
the dependency tahoe-lafs is broken by this
(it is also broken by bug 782461 and bug 769935 unrelated to foolscap)
original description:
The foolscap setup.py file (http://foolscap.lothar.com/trac/browser/setup.py?annotate=blame&rev=7c7b1185b68076cc6176ea41b5fc677445e1e45b#L75 ) says that if a package that requires foolscap requires an extra feature named "secure_connections" then foolscap requires pyOpenSSL.
Other Python packages can then specify that they depend on "foolscap with its extra feature of 'secure_connections'". This is spelled "foolscap[secure_connections]". Tahoe-LAFS does this:
http://tahoe-lafs.org/trac/tahoe-lafs/browser/trunk/src/allmydata/_auto_deps.py?annotate=blame&rev=4976#L21
Currently the packaging of foolscap in Natty claims that it doesn't know about the "secure_connections" feature:
$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg_resources
>>> pkg_resources.require('foolscap')
[foolscap 0.6.1 (/usr/lib/python2.7/dist-packages)]
>>> pkg_resources.require('foolscap[secure_connections]')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 654, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 557, in resolve
requirements.extend(dist.requires(req.extras)[::-1])
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2180, in requires
"%s has no such extra feature %r" % (self, ext)
pkg_resources.UnknownExtra: foolscap 0.6.1 has no such extra feature 'secure_connections'
This means that, for example, the tahoe-lafs executable that is packaged in Natty cannot start:
$ tahoe --version
Traceback (most recent call last):
File "/usr/bin/tahoe", line 6, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2671, in <module>
working_set.require(__requires__)
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 654, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 557, in resolve
requirements.extend(dist.requires(req.extras)[::-1])
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2180, in requires
"%s has no such extra feature %r" % (self, ext)
pkg_resources.UnknownExtra: foolscap 0.6.1 has no such extra feature 'secure_connections'
$ type tahoe
tahoe is hashed (/usr/bin/tahoe)
$ dpkg --search /usr/bin/tahoe
tahoe-lafs: /usr/bin/tahoe
$ apt-cache policy tahoe-lafs
tahoe-lafs:
Installed: 1.8.2-0ubuntu1
Candidate: 1.8.2-0ubuntu1
Version table:
*** 1.8.2-0ubuntu1 0
500 http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ natty/universe i386 Packages
100 /var/lib/dpkg/status
By inspecting the foolscap setup.py, you can see that the stanza that declares this extra feature is inside a test for the existence of setuptools: http://foolscap.lothar.com/trac/browser/setup.py?annotate=blame&rev=7c7b1185b68076cc6176ea41b5fc677445e1e45b#L65
So the easiest way to fix this is probably to configure the Ubuntu packaging of foolscap to indicate that setuptools is a build-time requirement of foolscap, and then rebuild. This should produce the metadata file (named /usr/share/pyshared/foolscap-0.6.1.egg-info/requires.txt ) that indicates that this distribution of foolscap knows how to provide secure_connections, as long as it is in turn provided with pyOpenSSL.
ProblemType: Bug
DistroRelease: Ubuntu 11.04
Package: python-foolscap 0.6.1-1
ProcVersionSignature: Ubuntu 2.6.38-8.42-virtual 2.6.38.2
Uname: Linux 2.6.38-8-virtual i686
Architecture: i386
Date: Fri May 13 20:23:17 2011
Ec2AMI: ami-ccf405a5
Ec2AMIManifest: (unknown)
Ec2AvailabilityZone: us-east-1a
Ec2InstanceType: t1.micro
Ec2Kernel: aki-407d9529
Ec2Ramdisk: unavailable
PackageArchitecture: all
ProcEnviron:
LANG=en_US.UTF-8
SHELL=/bin/bash
SourcePackage: foolscap
UpgradeStatus: Upgraded to natty on 2011-05-13 (0 days ago) |
|