Hello,
I'm packaging a PHP application under CentOS 5. It depends on some other php libraries, but should work with both php (5.1) and php53. But when I try to install the application RPM, yum mixes both php and php53 libraries.
What is the best way to prevent this ?
Cheers,
I mean, given the following packages:
my-app php-foo php-bar php53-foo php53-bar
php-foo and php-bar depend on php-common. php53-foo and php53-bar depend on php53-common. php-foo and php53-foo provide "php(foo)". php-bar and php53-bar provide "php(bar)". And my-app depends on "php(foo)" and "php(bar)".
When I yum install my-app, it tries to install both php53-foo and php-bar, resulting in a conflict between php-common and php53-common.
So, how can I ensure that all my dependencies are installed for the same PHP version ? Is making two my-app-php and my-app-php53 packages the only solution ?
On Thu, Sep 6, 2012 at 11:31 AM, indent man indentman@gmail.com wrote:
Hello,
I'm packaging a PHP application under CentOS 5. It depends on some other php libraries, but should work with both php (5.1) and php53. But when I try to install the application RPM, yum mixes both php and php53 libraries.
What is the best way to prevent this ?
Cheers,
On Thu, 6 Sep 2012 11:31:40 +0200, indent man wrote:
Hello,
I'm packaging a PHP application under CentOS 5. It depends on some other php libraries, but should work with both php (5.1) and php53. But when I try to install the application RPM, yum mixes both php and php53 libraries.
What is the best way to prevent this ?
Make the dependencies more specific.
Add dependencies on package names and/or specific versions. Use RPM to examine the package's current "Requires" (both the automatically added ones as well as manually added ones) and the PHP package's "Provides".
If multiple packages provide the same thing, Yum assumes that either one can be used to resolve a dependency.
On Thu, Sep 6, 2012 at 11:49 AM, Michael Schwendt mschwendt@gmail.comwrote:
Make the dependencies more specific.
Add dependencies on package names and/or specific versions. Use RPM to examine the package's current "Requires" (both the automatically added ones as well as manually added ones) and the PHP package's "Provides".
If multiple packages provide the same thing, Yum assumes that either one can be used to resolve a dependency.
Ok, I hoped yum would not to choose conflicting providers. Since it does, I suppose I'd better provide 2 separate packages for my app with explicit dependencies. Thank you for your answer !
On Thu, 6 Sep 2012 13:03:07 +0200, indent man wrote:
Make the dependencies more specific.
Add dependencies on package names and/or specific versions. Use RPM to examine the package's current "Requires" (both the automatically added ones as well as manually added ones) and the PHP package's "Provides".
If multiple packages provide the same thing, Yum assumes that either one can be used to resolve a dependency.
Ok, I hoped yum would not to choose conflicting providers. Since it does,
It doesn't. And it cannot know that a package that provides "php(foo)" isn't sufficient for a simple dependency on "php(foo)". How would it know about a version requirement without any such version in the dependency?
The terminology with regard to "conflicts" is different, btw. Packages conflict only if there are explicit "Conflicts:" tags in them, or if they contain conflicting files in the same path (aka "implicit conflict").
Assumably, the two php(foo) providers can be installed in parallel even. So, they don't conflict. It's really just that you need to be more specific about which version of php(foo) to install/depend on.
I suppose I'd better provide 2 separate packages for my app with explicit dependencies.
Of course! There is no way to guess which version of PHP you need. That version must be specified in the dependencies wherever it matters.
I should have said that I'm also packaging the php/php53 foo/bar dependencies. So maybe I just forgot some "Conflicts" tags (my bad). Taking a look at it...
On Thu, Sep 6, 2012 at 1:30 PM, Michael Schwendt mschwendt@gmail.comwrote:
On Thu, 6 Sep 2012 13:03:07 +0200, indent man wrote:
Make the dependencies more specific.
Add dependencies on package names and/or specific versions. Use RPM to examine the package's current "Requires" (both the automatically added ones as well as manually added ones) and the PHP package's "Provides".
If multiple packages provide the same thing, Yum assumes that either
one
can be used to resolve a dependency.
Ok, I hoped yum would not to choose conflicting providers. Since it does,
It doesn't. And it cannot know that a package that provides "php(foo)" isn't sufficient for a simple dependency on "php(foo)". How would it know about a version requirement without any such version in the dependency?
The terminology with regard to "conflicts" is different, btw. Packages conflict only if there are explicit "Conflicts:" tags in them, or if they contain conflicting files in the same path (aka "implicit conflict").
Assumably, the two php(foo) providers can be installed in parallel even. So, they don't conflict. It's really just that you need to be more specific about which version of php(foo) to install/depend on.
I suppose I'd better provide 2 separate packages for my app with explicit dependencies.
Of course! There is no way to guess which version of PHP you need. That version must be specified in the dependencies wherever it matters.
-- Fedora release 17 (Beefy Miracle) - Linux 3.5.3-1.fc17.x86_64 loadavg: 0.08 0.25 0.29 -- packaging mailing list packaging@lists.fedoraproject.org https://admin.fedoraproject.org/mailman/listinfo/packaging
On Thu, 6 Sep 2012 13:49:23 +0200, indent man wrote:
I should have said that I'm also packaging the php/php53 foo/bar dependencies. So maybe I just forgot some "Conflicts" tags (my bad). Taking a look at it...
Adding them won't solve your problem, however, and may even be wrong for parallel-installable packages. Also notice: http://fedoraproject.org/wiki/Packaging:Conflicts
I'm a bit lost...
From what I can read, it's not possible to package a php app in centos 5 so
that it may be installed with either php or php53, is it ? So should I provide 2 packages: myapp and myapp-php53 ?
My app also needs json. The official centos php53-common package "provides" php-pecl-json (1.2.1), but php-common does not. So, and since I can't use EPEL, I need to provide my own php-pecl-json package, with version 1.2.1, and a dependency on php < 5.2. And to make myapp depend on php-pecl-json. Then, when I try to yum install myapp (not myapp-php53), it tries to install php53-common, because it is a valid provider of php-pecl-json. And as it also tries to install other php (5.1) dependencies, it crashes because of the conflict between php-common and php53-common.
So what is the correct way to make myapp (not myapp-php53) depend on php-pecl-json, and not on php53-pecl-json ?
Thanks,
On Thu, Sep 6, 2012 at 3:32 PM, Michael Schwendt mschwendt@gmail.comwrote:
On Thu, 6 Sep 2012 13:49:23 +0200, indent man wrote:
I should have said that I'm also packaging the php/php53 foo/bar dependencies. So maybe I just forgot some "Conflicts" tags (my bad). Taking a look at it...
Adding them won't solve your problem, however, and may even be wrong for parallel-installable packages. Also notice: http://fedoraproject.org/wiki/Packaging:Conflicts
-- Fedora release 17 (Beefy Miracle) - Linux 3.5.3-1.fc17.x86_64 loadavg: 0.15 0.28 0.31 -- packaging mailing list packaging@lists.fedoraproject.org https://admin.fedoraproject.org/mailman/listinfo/packaging
Or should I make myapp depend on a specific release/epoch/whatever ? (sounds like a bad idea) Or change the php-pecl-json version to 1.2.1.myapp ? (bad idea too) Or provide a php-pecl-json-myapp package ?
On Fri, Sep 7, 2012 at 12:37 PM, indent man indentman@gmail.com wrote:
I'm a bit lost... From what I can read, it's not possible to package a php app in centos 5 so that it may be installed with either php or php53, is it ? So should I provide 2 packages: myapp and myapp-php53 ?
My app also needs json. The official centos php53-common package "provides" php-pecl-json (1.2.1), but php-common does not. So, and since I can't use EPEL, I need to provide my own php-pecl-json package, with version 1.2.1, and a dependency on php < 5.2. And to make myapp depend on php-pecl-json. Then, when I try to yum install myapp (not myapp-php53), it tries to install php53-common, because it is a valid provider of php-pecl-json. And as it also tries to install other php (5.1) dependencies, it crashes because of the conflict between php-common and php53-common.
So what is the correct way to make myapp (not myapp-php53) depend on php-pecl-json, and not on php53-pecl-json ?
Thanks,
On Thu, Sep 6, 2012 at 3:32 PM, Michael Schwendt mschwendt@gmail.comwrote:
On Thu, 6 Sep 2012 13:49:23 +0200, indent man wrote:
I should have said that I'm also packaging the php/php53 foo/bar dependencies. So maybe I just forgot some "Conflicts" tags (my bad). Taking a look at it...
Adding them won't solve your problem, however, and may even be wrong for parallel-installable packages. Also notice: http://fedoraproject.org/wiki/Packaging:Conflicts
-- Fedora release 17 (Beefy Miracle) - Linux 3.5.3-1.fc17.x86_64 loadavg: 0.15 0.28 0.31 -- packaging mailing list packaging@lists.fedoraproject.org https://admin.fedoraproject.org/mailman/listinfo/packaging
On Fri, 7 Sep 2012 12:37:22 +0200, indent man wrote:
I'm a bit lost... From what I can read, it's not possible to package a php app in centos 5 so that it may be installed with either php or php53, is it ?
Well, first of all, it depends on the app and whether the app can detect the PHP runtime environment and adjust to the different versions it might find and how it handles missing modules. You could leave it to the admin/user to install the needed pieces, but you could also create RPM packages which contain proper dependencies on everything that's strictly needed (and make installation of the whole show much more comfortable).
So should I provide 2 packages: myapp and myapp-php53 ?
Give a few details about what those packages would do/contain, and the question would be easier to answer. A solution could also be to create a common app package and two meta packages that add the needed stuff via dependencies.
My app also needs json. The official centos php53-common package "provides" php-pecl-json (1.2.1), but php-common does not. So, and since I can't use EPEL, I need to provide my own php-pecl-json package, with version 1.2.1, and a dependency on php < 5.2. And to make myapp depend on php-pecl-json. Then, when I try to yum install myapp (not myapp-php53), it tries to
Yum does not know anything about PHP. It only evaluates RPM package metadata. Make the dependencies more accurate/strict, and any package tool will be able to install the right stuff.
install php53-common, because it is a valid provider of php-pecl-json. And as it also tries to install other php (5.1) dependencies, it crashes because of the conflict between php-common and php53-common.
So what is the correct way to make myapp (not myapp-php53) depend on php-pecl-json, and not on php53-pecl-json ?
Choose a more suitable package name for the json version you want to provide. Depend on that one. Or invent a more convenient virtual capability to add to the package as "Provides", which to depend on.
Le 07/09/2012 12:37, indent man a écrit :
My app also needs json. The official centos php53-common package "provides" php-pecl-json (1.2.1), but php-common does not. So, and since I can't use EPEL, I need to provide my own php-pecl-json package, with version 1.2.1, and a dependency on php < 5.2.
No, it should only requires correct ABI which is php(abi)
And to make myapp depend on php-pecl-json. Then, when I try to yum install myapp (not myapp-php53), it tries to install php53-common, because it is a valid provider of php-pecl-json.
php-pecl-json is a better provider (name match) than php53-common (virtual provides)
I full yum output should be interesting.
And as it also tries to install other php (5.1) dependencies, it crashes because of the conflict between php-common and php53-common.
So what is the correct way to make myapp (not myapp-php53) depend on php-pecl-json, and not on php53-pecl-json ?
Thanks,
On Thu, Sep 6, 2012 at 3:32 PM, Michael Schwendt <mschwendt@gmail.com mailto:mschwendt@gmail.com> wrote:
On Thu, 6 Sep 2012 13:49:23 +0200, indent man wrote: > I should have said that I'm also packaging the php/php53 foo/bar > dependencies. > So maybe I just forgot some "Conflicts" tags (my bad). > Taking a look at it... Adding them won't solve your problem, however, and may even be wrong for parallel-installable packages. Also notice: http://fedoraproject.org/wiki/Packaging:Conflicts -- Fedora release 17 (Beefy Miracle) - Linux 3.5.3-1.fc17.x86_64 loadavg: 0.15 0.28 0.31 -- packaging mailing list packaging@lists.fedoraproject.org <mailto:packaging@lists.fedoraproject.org> https://admin.fedoraproject.org/mailman/listinfo/packaging
-- packaging mailing list packaging@lists.fedoraproject.org https://admin.fedoraproject.org/mailman/listinfo/packaging
packaging@lists.fedoraproject.org