Incorrect rpm packages dependency resolution
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
packetary |
Fix Released
|
Critical
|
Sergey Kulanov |
Bug Description
Incorrect package resolution:
packetary --threads-num 10 clone \
-t rpm \
-r /home/skulanov/
-R /home/skulanov/
-d /home/skulanov/
detected 158 mandatory packages.
loaded: 1209 packages from http://
detected 158 mandatory packages.
loaded: 1209 packages from http://
loaded: 1676 packages from http://
detected 170 mandatory packages.
loaded: 9007 packages from http://
loaded: 301 packages from http://
Unresolved relation: python-positional (>= 0:1.0.1) from python-
Unresolved relation: python-
Unresolved relation: python-hacking (>= 0:0.10.2) from python-oslo-log
Unresolved relation: python-
Unresolved relation: python-hacking (>= 0:0.10.2) from python-
Unresolved relation: python-
Unresolved relation: python-hacking (>= 0:0.10.2) from python-oslo-i18n
Unresolved relation: python-
Unresolved relation: python-openstacksdk (>= 0:0.7.4) from python-
Unresolved relation: python-yaql (>= 0:1.1.0) from python-muranoclient
Unresolved relation: python-
Unresolved relation: python-hacking (>= 0:0.10.2) from python-oslo-cache
cloning repository 'http://
centos_mirror.yaml
- name: "mos-repos"
uri: "http://
priority: 10
path: "/home/
- name: "upstream-os"
uri: "http://
priority: 90
path: "/home/
- name: "upstream-updates"
uri: "http://
priority: 10
path: "/home/
- name: "upstream-extras"
uri: "http://
priority: 90
path: "/home/
- name: "mos-repos"
uri: "http://
priority: 1
path: "/home/
1)
yum deplist python-
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirror.logol.ru
* extras: mirror.logol.ru
* updates: mirror.logol.ru
package: python-
dependency: python(abi) = 2.7
provider: python.x86_64 2.7.5-34.el7
dependency: python-argparse
provider: python.x86_64 2.7.5-34.el7
dependency: python-iso8601 >= 0.1.9
provider: python-
dependency: python-oslo-config
provider: python2-
dependency: python-positional >= 1.0.1
provider: python2-
dependency: python-requests >= 2.8.1
provider: python-
dependency: python-six >= 1.9.0
provider: python-six.noarch 1.10.0-2.el7~mos1
dependency: python-stevedore >= 1.5.0
provider: python-
2)
[root@4b4adbdfb436 /]# yum deplist python-oslo-log
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirror.logol.ru
* extras: mirror.logol.ru
* updates: mirror.logol.ru
package: python-
dependency: python(abi) = 2.7
provider: python.x86_64 2.7.5-34.el7
dependency: python-babel >= 1.3
provider: python-babel.noarch 1.3-6.el7~mos1
dependency: python-dateutil >= 2.4.2
provider: python-
dependency: python-
provider: python2-
dependency: python-hacking >= 0.10.2
provider: python2-
dependency: python-iso8601 >= 0.1.9
provider: python-
dependency: python-oslo-config >= 3.7.0
provider: python2-
dependency: python-oslo-context >= 0.2.0
provider: python-
dependency: python-oslo-i18n >= 2.1.0
provider: python-
dependency: python-
provider: python-
dependency: python-oslo-utils >= 3.5.0
provider: python-
dependency: python-pbr >= 1.6
provider: python-pbr.noarch 1.8.0-1.el7~mos4
dependency: python-setuptools
provider: python-
dependency: python-six >= 1.9.0
provider: python-six.noarch 1.10.0-2.el7~mos1
Changed in packetary: | |
importance: | Undecided → Critical |
milestone: | none → 0.2.0 |
Just to simplify the debugging let's take one package:
packetary --debug --threads-num 10 clone \
-t rpm \
-r centos_mirror.yaml \
-R packages.yaml \
-d /tmp/mirrors/
centos_mirror.yaml:
- name: "mos-repos" localhost: 8000/centos/ /x86_64" mos-centos"
uri: "http://
priority: 1
path: "/tmp/mirrors/
- name: "upstream-os" osci-mirror- kha.kha. mirantis. net/pkgs/ centos- 2016-05- 22-170053/ /os/x86_ 64" centos" osci-mirror- kha.kha. mirantis. net/pkgs/ centos- 2016-05- 22-170053/ /updates/ x86_64" centos" osci-mirror- kha.kha. mirantis. net/pkgs/ centos- 2016-05- 22-170053/ /extras/ x86_64" centos" localhost: 8000/centos/ /x86_64" mos-centos"
uri: "http://
priority: 90
path: "/tmp/mirrors/
- name: "upstream-updates"
uri: "http://
priority: 10
path: "/tmp/mirrors/
- name: "upstream-extras"
uri: "http://
priority: 90
path: "/tmp/mirrors/
- name: "mos-repos"
uri: "http://
priority: 1
path: "/tmp/mirrors/
packages.yaml:
packages:
- name: python2-oslo-config
# repositories:
# - name: mos-repos
# excludes:
# - name: "/^.*debuginfo.*/"
Result:
Unresolved relation: python- debtcollector (>= 0:1.2.0) from python2-oslo-config
So it seems we have some issues in logic:
Information from spec: debtcollector = %{version} -%{release} debtcollector < 0.7.0-3
Provides: python-
Obsoletes: python-
From package meta information: debtcollector < 1.2.0-1.el7~mos1 debtcollector < 0.7.0-3
$] cat OBSOLETES
python-
python-
$] cat PROVIDES debtcollector = 1.2.0-1.el7~mos1 debtcollector = 1.2.0-1.el7~mos1
python-
python2-
So rpm package can either provide or obsolete packages, and this this logic [1] doesn't take it into account
[1]. https:/ /github. com/openstack/ packetary/ blob/master/ packetary/ objects/ packages_ tree.py# L63-L80