How does apt/dpkg choose which real package is installed when a virtual package is specified as a dependency?
e.g. if package specifies
Depends: www-browser
How does apt/dpkg decide which real package will be installed?
apt dpkg aptitude
add a comment |
e.g. if package specifies
Depends: www-browser
How does apt/dpkg decide which real package will be installed?
apt dpkg aptitude
add a comment |
e.g. if package specifies
Depends: www-browser
How does apt/dpkg decide which real package will be installed?
apt dpkg aptitude
e.g. if package specifies
Depends: www-browser
How does apt/dpkg decide which real package will be installed?
apt dpkg aptitude
apt dpkg aptitude
edited 2 hours ago
peterh
4,28592957
4,28592957
asked 5 hours ago
the_velour_fog
5,24533360
5,24533360
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
According to this answer on Ask Ubuntu, apt will first try to install any non-virtual packages listed as options instead:
Now, according to sources, apt tries first of satisfying the dependency before trying with virtual packages (i.e., if depends are
firefox | www-browser
, checks if any of the packages are installed, then try to install firefox if neither is).
If not, it will simply iterate over the list of packages that provide the virtual one, and install the first one that it can:
If the non-virtual package isn't available, it seems to just iterate over all packages which provides the virtual package, if no other dependencies are broken. Other comments evidence of this behavior are this which leads to GrpIterator::FindPreferredPkg function.
It is discouraged to use pure virtual dependencies, usually you'd give one real and one virtual package as in your example. ForBuild-Depends
, this is required by policy as well, as "or" relationships are ignored by autobuilders.
– Simon Richter
1 hour ago
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f491843%2fhow-does-apt-dpkg-choose-which-real-package-is-installed-when-a-virtual-package%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
According to this answer on Ask Ubuntu, apt will first try to install any non-virtual packages listed as options instead:
Now, according to sources, apt tries first of satisfying the dependency before trying with virtual packages (i.e., if depends are
firefox | www-browser
, checks if any of the packages are installed, then try to install firefox if neither is).
If not, it will simply iterate over the list of packages that provide the virtual one, and install the first one that it can:
If the non-virtual package isn't available, it seems to just iterate over all packages which provides the virtual package, if no other dependencies are broken. Other comments evidence of this behavior are this which leads to GrpIterator::FindPreferredPkg function.
It is discouraged to use pure virtual dependencies, usually you'd give one real and one virtual package as in your example. ForBuild-Depends
, this is required by policy as well, as "or" relationships are ignored by autobuilders.
– Simon Richter
1 hour ago
add a comment |
According to this answer on Ask Ubuntu, apt will first try to install any non-virtual packages listed as options instead:
Now, according to sources, apt tries first of satisfying the dependency before trying with virtual packages (i.e., if depends are
firefox | www-browser
, checks if any of the packages are installed, then try to install firefox if neither is).
If not, it will simply iterate over the list of packages that provide the virtual one, and install the first one that it can:
If the non-virtual package isn't available, it seems to just iterate over all packages which provides the virtual package, if no other dependencies are broken. Other comments evidence of this behavior are this which leads to GrpIterator::FindPreferredPkg function.
It is discouraged to use pure virtual dependencies, usually you'd give one real and one virtual package as in your example. ForBuild-Depends
, this is required by policy as well, as "or" relationships are ignored by autobuilders.
– Simon Richter
1 hour ago
add a comment |
According to this answer on Ask Ubuntu, apt will first try to install any non-virtual packages listed as options instead:
Now, according to sources, apt tries first of satisfying the dependency before trying with virtual packages (i.e., if depends are
firefox | www-browser
, checks if any of the packages are installed, then try to install firefox if neither is).
If not, it will simply iterate over the list of packages that provide the virtual one, and install the first one that it can:
If the non-virtual package isn't available, it seems to just iterate over all packages which provides the virtual package, if no other dependencies are broken. Other comments evidence of this behavior are this which leads to GrpIterator::FindPreferredPkg function.
According to this answer on Ask Ubuntu, apt will first try to install any non-virtual packages listed as options instead:
Now, according to sources, apt tries first of satisfying the dependency before trying with virtual packages (i.e., if depends are
firefox | www-browser
, checks if any of the packages are installed, then try to install firefox if neither is).
If not, it will simply iterate over the list of packages that provide the virtual one, and install the first one that it can:
If the non-virtual package isn't available, it seems to just iterate over all packages which provides the virtual package, if no other dependencies are broken. Other comments evidence of this behavior are this which leads to GrpIterator::FindPreferredPkg function.
answered 5 hours ago
Nonny Moose
1415
1415
It is discouraged to use pure virtual dependencies, usually you'd give one real and one virtual package as in your example. ForBuild-Depends
, this is required by policy as well, as "or" relationships are ignored by autobuilders.
– Simon Richter
1 hour ago
add a comment |
It is discouraged to use pure virtual dependencies, usually you'd give one real and one virtual package as in your example. ForBuild-Depends
, this is required by policy as well, as "or" relationships are ignored by autobuilders.
– Simon Richter
1 hour ago
It is discouraged to use pure virtual dependencies, usually you'd give one real and one virtual package as in your example. For
Build-Depends
, this is required by policy as well, as "or" relationships are ignored by autobuilders.– Simon Richter
1 hour ago
It is discouraged to use pure virtual dependencies, usually you'd give one real and one virtual package as in your example. For
Build-Depends
, this is required by policy as well, as "or" relationships are ignored by autobuilders.– Simon Richter
1 hour ago
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f491843%2fhow-does-apt-dpkg-choose-which-real-package-is-installed-when-a-virtual-package%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown