Summary: | sys-apps/portage: USE dependency conflict triggers inappropriate autounmask package.unmask changes | ||
---|---|---|---|
Product: | Portage Development | Reporter: | Zac Medico <zmedico> |
Component: | Core - Dependencies | Assignee: | Portage team <dev-portage> |
Status: | CONFIRMED --- | ||
Severity: | normal | CC: | esigra, grknight, pacho |
Priority: | Normal | ||
Version: | unspecified | ||
Hardware: | All | ||
OS: | All | ||
See Also: |
https://bugs.gentoo.org/show_bug.cgi?id=622462 https://bugs.gentoo.org/show_bug.cgi?id=426222 https://bugs.gentoo.org/show_bug.cgi?id=658648 |
||
Whiteboard: | |||
Package list: | Runtime testing required: | --- | |
Bug Depends on: | 669154 | ||
Bug Blocks: | 376695 | ||
Attachments: | emerge debug log for conflict between dev-libs/openssl[-bindist] and dev-libs/openssl[bindist] |
Description
Zac Medico
2018-09-26 19:22:39 UTC
The debug log shows that the USE dependency conflict triggers a backtracking loop which ultimately causes both the installed and "ebuild scheduled for merge" instances of dev-libs/openssl-1.0.2p to be added to the runtime_pkg_mask: > backtracking due to slot conflict: > first package: (dev-libs/openssl-1.0.2p:0/0::gentoo, ebuild scheduled for merge) > package to mask: (dev-libs/openssl-1.0.2p:0/0::gentoo, installed) > runtime_pkg_mask: {<Package ('installed', '/', 'dev-libs/openssl-1.0.2p', 'nomerge', 'installed')>: {'slot conflict': {(<Package ('ebuild', '/', 'net-dns/bind-tools-9.11.2_p1', 'merge', 'gentoo')>, '>=dev-libs/openssl-1.0.0:0=[-bindist]')}}} > Exiting... (dev-libs/openssl-1.0.2p:0/0::gentoo, ebuild scheduled for merge) > !!! backtracking loop detected: (dev-libs/openssl-1.0.2p:0/0::gentoo, installed) {'slot conflict': {(<Package ('ebuild', '/', 'net-dns/bind-tools-9.11.2_p1', 'merge', 'gentoo')>, '>=dev-libs/openssl-1.0.0:0=[-bindist]')}} > backtracking due to slot conflict: > first package: (dev-libs/openssl-1.0.2p:0/0::gentoo, ebuild scheduled for merge) > package to mask: (dev-libs/openssl-1.0.2p:0/0::gentoo, installed) > runtime_pkg_mask: {<Package ('installed', '/', 'dev-libs/openssl-1.0.2p', 'nomerge', 'installed')>: {'slot conflict': {(<Package ('ebuild', '/', 'net-dns/bind-tools-9.11.2_p1', 'merge', 'gentoo')>, '>=dev-libs/openssl-1.0.0:0=[-bindist]')}}, <Package ('ebuild', '/', 'dev-libs/openssl-1.0.2p', 'merge', 'gentoo')>: {'slot conflict': {(<Package ('installed', '/', 'net-misc/openssh-7.7_p1-r9', 'nomerge', 'installed')>, '>=dev-libs/openssl-1.0.1:0/0=[bindist]'), (<Package ('installed', '/', 'net-misc/openssh-7.7_p1-r9', 'nomerge', 'installed')>, '>=dev-libs/openssl-1.0.1:0=[bindist]')}}} The "backtracking loop detected" logic can serve as a heuristic indicating that it would be risky for autounmask to create package.mask or keyword changes for the corresponding package slot. Since it's only a heuristic, there's no guarantee that package.mask or keyword changes are really not appropriate. I think a reasonable approach would be to disable backtracking by default for this case, and add a new --use-conflict-backtrack=<y|n> option which can be used to force it to continue backtracking (similar to the --autounmask-backtrack=<y|n> option). The documentation can advise people that if --use-conflict-backtrack=y is used then the --autounmask-keep-masks=y and --autounmask-keep-keywords=y options are also recommended in order to prevent spurious package.mask and keywords adjustments. |