Ubuntu frequently has multiple providers for the same package name,
e.g. "vim" is provided by "vim", "vim-gnome" etc.
We need to adjust the resolving algorithm to:
1. lookup in virtual packages
2. lookup in packages
3. lookup in obsoletes.
Use the package which was found last (version-sorted).
Closes-bug: 1656888
Change-Id: I7279aa6526ff9133829be2e316932c9b052c7814
Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
No functional impact, just fix a recurring traceback when verbose:
"TypeError: %d format: a number is required, not str"
Change-Id: I4a88e7eba81b4a470bd6a442762336d4110ea548
Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
In certain scenarios, mirror components (e.g. trusty-security)
are present in both packetary configuration input, and in target
system's apt source definitions, but contain no packages of interest.
For such repository/requirements combinations, packetary currently
skips creating metadata (Release, Packages) for those components,
which leads to the partial mirror missing some critical files for apt,
(an empty file would be enough).
e.g.: Using packetary to create a partial Ubuntu mirror, then trying
to build a bootstrap image from the new mirror leads to:
W: Failed to fetch http://127.0.0.1:8080/mirrors/ubuntu/dists/\
trusty-security/multiverse/binary-amd64/Packages 404
Closes-bug: 1638631
Change-Id: I850b43d5b4d8742d99e9a5702cc9ad4de881a401
Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
When generating repository metadata, the Release file gets the
architecture list in an untranslated format, ending up with
'x86_64' instead of 'amd64'.
Closes-bug: 1638628
Change-Id: I8471db6d54157175ff275c969ed5195d4616fa0f
Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
Enable new architecture 'aarch64' ('arm64' on Ubuntu).
Tested with DEB driver.
Closes-bug: 1638635
Change-Id: I9761322020837186c109c18e849128791ab909d8
Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
Update requirements with filter option:
"mandatory": {
"enum": ["exact", "newest"]
}
1) [RPM] We need to search the newest mandatory packages in all
forest but not from the exact tree, also repo priority should
be take into account
2) Add priority to gen_repository in tests, since this is
mandatory parameter
3) [Tests] Add package10 with different version to check mandatory
values:
- None
- "exact"
- "newest"
match for mandatory packages
Change-Id: I36a1463b495075bf6c44a46b557c3ac524de0220
Closes-bug: #1585103
Option 'cache_dir' uses to specify directory where
will be downloaded remote files
The packaging controller allows to use files which
are available via HTTP as source or spec file
Each driver has its own section in input data,
this allows to use same input data for several drivers.
Change-Id: I1fb3b08fe305c3413e5aa4a9213762208a2479da
Usage of command:
packetary build -t "the name of driver" \
-i "the path of file with input data" \
-o "the path to output directory" \
[-C "the config for driver"]
Change-Id: I71df1b8a36342a9ea238d5b6ebb686e5bce71007
This change introduces API for building packages.
The commit includes Controller object and interface for PackagingDriver.
Change-Id: I1ce0f746c1cbc5cf8ff29d08d09175acb5d79586
Override method 'redirect_request' for patching
new request, that has been created on handling
http redirect.
Closes-Bug: 1592464
Change-Id: Id32bc46cce2c0eabb91f645d01378b6da3128469
The 'packetary.drivers' is very common namespace, so
the repository drivers was moved to 'repository_drivers' namespace.
Change-Id: Ie246e8ba83e1f4cd01ff707c0cd1e77ea5fe3551
1) We need to merge trees with the same priority in order
to catch case when we have package with different versions in
repos with the same priority, eg:
repo2, priority=10, package=foo-5.3
repo1, priority=5, package=asd-1.2
repo3, priority=10, package=foo-7.1
--> sort(key=priority) can result:
repo1, priority=5, package=asd-1.2
repo2, priority=10, package=foo-5.3
repo3, priority=10, package=foo-7.1
so we will return: foo-5.3 instead we must return foo-7.1
2) priority must be a mandatory parameter for Repository
3) Align rpm default priority _DEFAULT_PRIORITY: N, where
N is an integer from 1 to 99. The default priority for
repositories is 99. The repositories with the lowest
numerical priority number have the highest priority.
Closes-bug: #1590525
Change-Id: I8299b1502775cc68bd1c783487ce7dc802a31a05
If package depends on exact equality of =name+version
we also need to search candidates in release section:
=name+version+(>=release)
eg:
name: foo-1.1-3
Requires: bar == 5.5
then the below package must meet the requiremets:
name: bar-5.5-56.el7
To make this true we need:
* always search for candidates in package.name and package.provides,
package.obsoletes, [check PackagesTree.find_all()]
* make an assumption that foo-1.1 and foo-1.1-33 has intersection,
[check RpmPackageVersion.cmp()]
Tests:
======
gen_package() in stubs.generator must always generate Provides
section, which is always: name=version, eg:
1) Name: my-python-requests
Version: 2.10.0
Release: 1.el7~mos1
will result PROVIDES:
my-python-requests = 2.10.0-1.el7~mos1
2) Name: my-python-urllib3
Version: 1.15.1
Release: 7777
Provides: test
will result PROVIDES:
test
my-python-urllib3 = 1.15.1-7777
Change-Id: Ib26918b2e1d98733fbd49f1fc05403ca5665e3fe
Closes-Bug: #1588399
Rpm package can provides and obsoletes the same package name
but with different versions, for eg:
OBSOLETES:
python-debtcollector < 1.2.0-1.el7~mos1
python-debtcollector < 0.7.0-3
PROVIDES:
python-debtcollector = 1.2.0-1.el7~mos1
python2-debtcollector = 1.2.0-1.el7~mos1
This comes from %python_provide macros, eg:
# rpm --eval '%python_provide python2-foo'
Provides: python-foo(x86-64) = %{version}-%{release}
Provides: python-foo = %{version}-%{release}
Obsoletes: python-foo(x86-64) < %{version}-%{release}
Obsoletes: python-foo < %{version}-%{release}
# rpm --eval '%python_provide python-foo'
Provides: python2-foo = %{version}-%{release}
So we need to align flow
Change-Id: I07b3d8b9a25c5c98e97e697c26e6ae9d1f4960ff
Closes-bug: #1578224
the requirements can contain the following sections:
packages - the list of packages that are needed
repositories - the list of repositories, packages from that are needed
mandatory - boolean flag that uses to automatically copy mandatory packages
Change-Id: Ic26f991c0bf1e9819005cd4bbe7ed40228b2ce1b
Sometimes packetary hangs forever when spawning
mutiple createrepo workers. This patch sets
number of workers to 1.
Change-Id: Ica52245b20343428e663e9397ffa8b52d6f46ffc
Closes-Bug: #1552138
The reletion may ommit the release component of version,
that means any release
Aslo the strignify for PackageVersion was changed,
now ':' is used to separate epoch
Change-Id: I8d74c9cc82720103a5b6d9189f85276bda4ec082
Also keep original group index durring rebuild repository index.
Build only meta-files without package information durring create and fork
repository
Change-Id: I613ce2084750f02035a13c301aa5812e08a90482
Closes-Bug: 1549413
Also make versions as optional field in packages_schema.
Fixed ValidationError formatting when path contains int indexes.
Closes-Bug: 1543503
Change-Id: Idf070b4431bdac2c49340e9e09902a5b39d2a548
The code does not properly handle situation when server returns http error.
Also added option 'retries_delay' to specify timeout between retries
Change-Id: I2908f5d774d6d388085e48a965e5888773578530
Closes-Bug: #1539025
The input data is described in YAML or JSON format
Also implemented support of priorities for repositories
Change-Id: I02f11714ba8880dd06c3ceeadf230c1d812ff0be
Implements: blueprint unify-input-data