Robert Schweikert (rjschwei@suse.com) wrote:
On 12/06/2012 12:45 PM, Adam Spiers wrote:
Robert Schweikert (rjschwei@suse.com) wrote:
When I try to install the opennebula package which through the dependency chain pull ins rubygem-sinatra I get the message:
You are more likely to receive useful help if you provide steps to reproduce.
Sorry, I thought I did that by stating:
"When I try to install the opennebula package which through the dependency chain pull ins rubygem-sinatra"
Not really - reproduction steps contain precise technical details. "try to install" could mean many different things (zypper, yast etc.) and quite often the devil is in the details ...
Although in this case the problem is already clear:
Nothing provides rubygem(1.9.1:rack) >= 1.3.6 needed by rubygem-sinatra
Yes, that's correct:
clearly shows that Sinatra requires rack ~> 1.3.6
(Sorry, that should have been >= 1.3.6 in this case, but it doesn't change my assertion ...)
but your project does not provide this, since its version of rubygem-rack-1_3 is only 1.3.5.
OK, but how does it know it needs 1.3.6? I suppose that is in the Gemlock file that is part of the source?
Not quite, Gemfile.lock files are created by bundler. But it is in the gem's metadata which you can see via gem spec --ruby foo.gem
I have linked rubygem-rack from d:l:r:e and thus rubygem-sinatra should depend on the rubygem-rack package from the openNebula repo. rubygem-rack built successfully. Therefore, adding Cloud:OpenNebula as a repo should be sufiicient, but it is not.
Nope, because it doesn't satisfy the version requirements as above.
OK, so can I get rid off rubygem-rack and link to rubygem_rack-1_4 instead?
Yes that should probably do it. (Note that if sinatra had instead required ~> 1.3.6 then 1.4.x would not have fulfilled that requirement: http://docs.rubygems.org/read/chapter/16 )
Is there no way to have system that "just works" i.e. where I do not have to chase after every version change?
In theory I *think* it should "just work" if you build against d:l:r:e rather than the base distro repositories. That way you wouldn't even have to include rubygem packages in your project. There are disadvantages though - basically less control and stability over which packages get used, since d:l:r:e is constantly changing.
I'd like to just link to rubygem-rack (or rubygem-rack-latest or whatever the name may be) in my project and have it provide whatever version is needed by the other packages I link to. Thus, I can leave the ruby packaging and version fiddling to the ruby experts that work in d:l:r:e and do not have to become an expert myself.
But the latest version will not always be the one you need. The dependency tree for your project has to be self-consistent. So you can either achieve this by providing the minimal set of packages which satisfy your tree, or by providing the whole rubygem universe and hoping that the various Provides: and Requires: symbols are enough information for OBS to resolve the tree for you. The former is done by manual linkpacs into your project and the latter by adding <path> to your project's meta config. BTW really this thread should be on opensuse-ruby ... -- To unsubscribe, e-mail: opensuse-packaging+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-packaging+owner@opensuse.org