[opensuse-buildservice] Confused package scheduler
Hi, we have the following setup of projects with project dependencies in open buildservice: base (1.0.0) <- extension (1.0.0) base (1.0.1) <- UI (1.0.1) and extension (1.0.0), UI (1.0.1) <- broken project We have a "package-b" in "broken project" that has build dependencies on a "package-a (1.0.1)" located in project "base (1.0.1)". Unfortunately the scheduler tries to resolve the build dependency sometimes with the "package-a (1.0.0)" located in project "base (1.0.0)". This leads to an "unresolvable" package state with message "nothing provides package-a >= 1.0.1". All projects span several distributions including RHEL6, RHEL7 and Debian Jessie. This unresolvable state appears for all distributions. Is the scheduler capable to resolve versioned dependencies with the available packages in both "base" projects and depending on the versioned dependency resolve it with the correctly versioned package-a? Thanks, Marcus PS: we defined the build dependencies in the following way: debian/control: Build-Depends: package-a (>= 1.0.1) .spec: BuildRequires: package-a >= 1.0.1 -- To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org
On Mittwoch, 26. Oktober 2016, 16:09:07 CEST wrote Marcus Klein:
Hi,
we have the following setup of projects with project dependencies in open buildservice: base (1.0.0) <- extension (1.0.0) base (1.0.1) <- UI (1.0.1) and extension (1.0.0), UI (1.0.1) <- broken project
We have a "package-b" in "broken project" that has build dependencies on a "package-a (1.0.1)" located in project "base (1.0.1)". Unfortunately the scheduler tries to resolve the build dependency sometimes with the "package-a (1.0.0)" located in project "base (1.0.0)". This leads to an "unresolvable" package state with message "nothing provides package-a >= 1.0.1".
All projects span several distributions including RHEL6, RHEL7 and Debian Jessie. This unresolvable state appears for all distributions.
Is the scheduler capable to resolve versioned dependencies with the available packages in both "base" projects and depending on the versioned dependency resolve it with the correctly versioned package-a?
In general OBS takes care about versioned deps, but it also takes the priority of used repositories into account. Means a higher path wins no matter what version may be in the lower path for a repository. Without to know more about your setup, I can just recommend that you use the magic # osc buildinfo -d .... | grep package-a to find out why a specific package got used.
Thanks, Marcus
PS: we defined the build dependencies in the following way:
debian/control: Build-Depends: package-a (>= 1.0.1)
.spec: BuildRequires: package-a >= 1.0.1
-- Adrian Schroeter email: adrian@suse.de SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg) Maxfeldstraße 5 90409 Nürnberg Germany -- To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org
added package-extension because of package-extension >= 1.0.0 (direct dep) added package-c because of package-extension:package-base-c >= 1.0.0 added package-a because of package-base-c:package-a >= 1.0.0 But the package-b in broken project clearly states BuildRequires: package-extension >= 1.0.0 BuildRequires: package-a >= 1.0.1 This remains "unresolvable" although package-a (1.0.1) is available from project base (1.0.1). This makes it pretty hard for us to make independant releases of these components base, extension, UI and broken project, although package dependencies and projects to resolve them are defined correctly using transitive project dependencies. What do you mean by "higher path"? The list in the project dependencies? <repository name="DebianJessie"> <path project="UI-1.0.1" repository="DebianJessie"/> <path project="extension-1.0.0" repository="DebianJessie"/> <arch>x86_64</arch> </repository> We defined the path for version 1.0.1 of UI and base first. Is this correct? Is there anything else how to get the scheduler to resolve the versioned dependency? Thanks Marcus
On October 26, 2016 at 4:27 PM Adrian Schröter <adrian@suse.de> wrote:
On Mittwoch, 26. Oktober 2016, 16:09:07 CEST wrote Marcus Klein:
Hi,
we have the following setup of projects with project dependencies in open buildservice: base (1.0.0) <- extension (1.0.0) base (1.0.1) <- UI (1.0.1) and extension (1.0.0), UI (1.0.1) <- broken project
We have a "package-b" in "broken project" that has build dependencies on a "package-a (1.0.1)" located in project "base (1.0.1)". Unfortunately the scheduler tries to resolve the build dependency sometimes with the "package-a (1.0.0)" located in project "base (1.0.0)". This leads to an "unresolvable" package state with message "nothing provides package-a >= 1.0.1".
All projects span several distributions including RHEL6, RHEL7 and Debian Jessie. This unresolvable state appears for all distributions.
Is the scheduler capable to resolve versioned dependencies with the available packages in both "base" projects and depending on the versioned dependency resolve it with the correctly versioned package-a?
In general OBS takes care about versioned deps, but it also takes the priority of used repositories into account. Means a higher path wins no matter what version may be in the lower path for a repository.
Without to know more about your setup, I can just recommend that you use the magic
# osc buildinfo -d .... | grep package-a
to find out why a specific package got used.
Thanks, Marcus
PS: we defined the build dependencies in the following way:
debian/control: Build-Depends: package-a (>= 1.0.1)
.spec: BuildRequires: package-a >= 1.0.1
--
Adrian Schroeter email: adrian@suse.de
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg)
Maxfeldstraße 5 90409 Nürnberg Germany
-- To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org -- To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org
On Wed, Oct 26, 2016 at 04:50:36PM +0200, Marcus Klein wrote:
What do you mean by "higher path"? The list in the project dependencies? <repository name="DebianJessie"> <path project="UI-1.0.1" repository="DebianJessie"/> <path project="extension-1.0.0" repository="DebianJessie"/> <arch>x86_64</arch> </repository> We defined the path for version 1.0.1 of UI and base first. Is this correct?
I think you want to add <path project="base-1.0.1" repository="DebianJessie"/> right after the UI path. To give you complete freedom over the repository setup, OBS only "expands" the last component of a path. So with the current setup you get: current_project UI-1.0.1 extension-1.0.0 base-1.0.0 (expanded from extension-1.0.0) Note that the repos are strictly priorized, if a package is in multiple repos, only the first one is used and all the others are excluded. A versioned dependency does not change this, you will just get a "nothing provides" if you try to select an excluded package. (You can play tricks with aggregates if you need to workaround this for special cases.) Cheers, Michael. -- Michael Schroeder mls@suse.de SUSE LINUX GmbH, GF Jeff Hawn, HRB 16746 AG Nuernberg main(_){while(_=~getchar())putchar(~_-1/(~(_|32)/13*2-11)*13);} -- To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org
On October 27, 2016 at 11:58 AM Michael Schroeder <mls@suse.de> wrote:
On Wed, Oct 26, 2016 at 04:50:36PM +0200, Marcus Klein wrote:
What do you mean by "higher path"? The list in the project dependencies? <repository name="DebianJessie"> <path project="UI-1.0.1" repository="DebianJessie"/> <path project="extension-1.0.0" repository="DebianJessie"/> <arch>x86_64</arch> </repository> We defined the path for version 1.0.1 of UI and base first. Is this correct?
I think you want to add <path project="base-1.0.1" repository="DebianJessie"/> right after the UI path.
To give you complete freedom over the repository setup, OBS only "expands" the last component of a path. So with the current setup you get: current_project UI-1.0.1 extension-1.0.0 base-1.0.0 (expanded from extension-1.0.0)
Note that the repos are strictly priorized, if a package is in multiple repos, only the first one is used and all the others are excluded. A versioned dependency does not change this, you will just get a "nothing provides" if you try to select an excluded package.
I found this documentation: https://en.opensuse.org/openSUSE:Build_Service_Tips_and_Tricks#Adding_multip...
(You can play tricks with aggregates if you need to workaround this for special cases.)
Our trick was to change the order of the path: <repository name="DebianJessie"> <path project="extension-1.0.0" repository="DebianJessie"/> <path project="UI-1.0.1" repository="DebianJessie"/> <arch>x86_64</arch> </repository> This solved the problem. "package-a" is now considered with version 1.0.1 from base 1.0.1 project. I am not sure, why this happens/works now because it is totally contrary to what the documentation says. Kind regards, Marcus
Cheers, Michael.
-- Michael Schroeder mls@suse.de SUSE LINUX GmbH, GF Jeff Hawn, HRB 16746 AG Nuernberg main(_){while(_=~getchar())putchar(~_-1/(~(_|32)/13*2-11)*13);} -- To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org
-- To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org
On Thu, Oct 27, 2016 at 12:05:43PM +0200, Marcus Klein wrote:
On October 27, 2016 at 11:58 AM Michael Schroeder <mls@suse.de> wrote:
On Wed, Oct 26, 2016 at 04:50:36PM +0200, Marcus Klein wrote:
What do you mean by "higher path"? The list in the project dependencies? <repository name="DebianJessie"> <path project="UI-1.0.1" repository="DebianJessie"/> <path project="extension-1.0.0" repository="DebianJessie"/> <arch>x86_64</arch> </repository> We defined the path for version 1.0.1 of UI and base first. Is this correct?
I think you want to add <path project="base-1.0.1" repository="DebianJessie"/> right after the UI path.
To give you complete freedom over the repository setup, OBS only "expands" the last component of a path. So with the current setup you get: current_project UI-1.0.1 extension-1.0.0 base-1.0.0 (expanded from extension-1.0.0)
Note that the repos are strictly priorized, if a package is in multiple repos, only the first one is used and all the others are excluded. A versioned dependency does not change this, you will just get a "nothing provides" if you try to select an excluded package.
I found this documentation: https://en.opensuse.org/openSUSE:Build_Service_Tips_and_Tricks#Adding_multip...
(You can play tricks with aggregates if you need to workaround this for special cases.)
Our trick was to change the order of the path: <repository name="DebianJessie"> <path project="extension-1.0.0" repository="DebianJessie"/> <path project="UI-1.0.1" repository="DebianJessie"/> <arch>x86_64</arch> </repository>
With that you get the following expanded search path: current_project extension-1.0.0 UI-1.0.1 base-1.0.1 (expanded from UI-1.0.1) I.e. you no longer have base-1.0.0 in the path. But extension-1.0.0 now comes before UI-1.0.1, but that doesn't seem to cause problems for you.
This solved the problem. "package-a" is now considered with version 1.0.1 from base 1.0.1 project. I am not sure, why this happens/works now because it is totally contrary to what the documentation says.
No it's not ;) Btw, osc buildinfo contains the expanded path at the bottom, so you can use that to check if your setup is correct. Cheers, Michael. -- Michael Schroeder mls@suse.de SUSE LINUX GmbH, GF Jeff Hawn, HRB 16746 AG Nuernberg main(_){while(_=~getchar())putchar(~_-1/(~(_|32)/13*2-11)*13);} -- To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org
On October 27, 2016 at 12:46 PM Michael Schroeder <mls@suse.de> wrote:
On Thu, Oct 27, 2016 at 12:05:43PM +0200, Marcus Klein wrote:
On October 27, 2016 at 11:58 AM Michael Schroeder <mls@suse.de> wrote:
On Wed, Oct 26, 2016 at 04:50:36PM +0200, Marcus Klein wrote:
What do you mean by "higher path"? The list in the project dependencies? <repository name="DebianJessie"> <path project="UI-1.0.1" repository="DebianJessie"/> <path project="extension-1.0.0" repository="DebianJessie"/> <arch>x86_64</arch> </repository> We defined the path for version 1.0.1 of UI and base first. Is this correct?
I think you want to add <path project="base-1.0.1" repository="DebianJessie"/> right after the UI path.
To give you complete freedom over the repository setup, OBS only "expands" the last component of a path. So with the current setup you get: current_project UI-1.0.1 extension-1.0.0 base-1.0.0 (expanded from extension-1.0.0)
Note that the repos are strictly priorized, if a package is in multiple repos, only the first one is used and all the others are excluded. A versioned dependency does not change this, you will just get a "nothing provides" if you try to select an excluded package.
I found this documentation: https://en.opensuse.org/openSUSE:Build_Service_Tips_and_Tricks#Adding_multip...
(You can play tricks with aggregates if you need to workaround this for special cases.)
Our trick was to change the order of the path: <repository name="DebianJessie"> <path project="extension-1.0.0" repository="DebianJessie"/> <path project="UI-1.0.1" repository="DebianJessie"/> <arch>x86_64</arch> </repository>
With that you get the following expanded search path: current_project extension-1.0.0 UI-1.0.1 base-1.0.1 (expanded from UI-1.0.1)
extension-1.0.0 depends on base-1.0.0 Why is it not current_project extension-1.0.0 base-1.0.0
I.e. you no longer have base-1.0.0 in the path. But extension-1.0.0 now comes before UI-1.0.1, but that doesn't seem to cause problems for you.
This solved the problem. "package-a" is now considered with version 1.0.1 from base 1.0.1 project. I am not sure, why this happens/works now because it is totally contrary to what the documentation says.
No it's not ;)
Btw, osc buildinfo contains the expanded path at the bottom, so you can use that to check if your setup is correct.
Cheers, Michael.
-- Michael Schroeder mls@suse.de SUSE LINUX GmbH, GF Jeff Hawn, HRB 16746 AG Nuernberg main(_){while(_=~getchar())putchar(~_-1/(~(_|32)/13*2-11)*13);} -- To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org
On October 27, 2016 at 12:46 PM Michael Schroeder <mls@suse.de> wrote:
On Thu, Oct 27, 2016 at 12:05:43PM +0200, Marcus Klein wrote:
On October 27, 2016 at 11:58 AM Michael Schroeder <mls@suse.de> wrote:
On Wed, Oct 26, 2016 at 04:50:36PM +0200, Marcus Klein wrote:
What do you mean by "higher path"? The list in the project dependencies?
x86_64
We defined the path for version 1.0.1 of UI and base first. Is this correct?
I think you want to add
right after the UI path.
To give you complete freedom over the repository setup, OBS only "expands" the last component of a path. So with the current setup you get: current_project UI-1.0.1 extension-1.0.0 base-1.0.0 (expanded from extension-1.0.0)
Note that the repos are strictly priorized, if a package is in multiple repos, only the first one is used and all the others are excluded. A versioned dependency does not change this, you will just get a "nothing provides" if you try to select an excluded package.
I found this documentation: https://en.opensuse.org/openSUSE:Build_Service_Tips_and_Tricks#Adding_multip...
(You can play tricks with aggregates if you need to workaround this for special cases.)
Our trick was to change the order of the path:
x86_64
With that you get the following expanded search path: current_project extension-1.0.0 UI-1.0.1 base-1.0.1 (expanded from UI-1.0.1)
extension-1.0.0 depends on base-1.0.0 Why is it not current_project extension-1.0.0 base-1.0.0 UI-1.0.1 base-1.0.1 ? Sorry, sent to early.
I.e. you no longer have base-1.0.0 in the path. But extension-1.0.0 now comes before UI-1.0.1, but that doesn't seem to cause problems for you.
This solved the problem. "package-a" is now considered with version 1.0.1 from base 1.0.1 project. I am not sure, why this happens/works now because it is totally contrary to what the documentation says.
No it's not ;)
Btw, osc buildinfo contains the expanded path at the bottom, so you can use that to check if your setup is correct.
I see a long list of added packages but no expanded path. Kind regards, Marcus
Cheers, Michael.
-- Michael Schroeder mls@suse.de SUSE LINUX GmbH, GF Jeff Hawn, HRB 16746 AG Nuernberg main(_){while(_=~getchar())putchar(~_-1/(~(_|32)/13*2-11)*13);}
-- To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org
On Thu, Oct 27, 2016 at 12:50:50PM +0200, Marcus Klein wrote:
extension-1.0.0 depends on base-1.0.0
Why is it not current_project extension-1.0.0 base-1.0.0 UI-1.0.1 base-1.0.1 ?
Because it does not expand the path of "extension-1.0.0". This is so that you have full control over the path. If it always expanded all elements, some useful setups would not be possible.
I see a long list of added packages but no expanded path.
Right, as we now have preinstallimage support it's no longer at the bottom. It's right over the preinstallimage section, search for "path project". M. -- To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org
participants (3)
-
Adrian Schröter
-
Marcus Klein
-
Michael Schroeder