Commit graph

18 commits

Author SHA1 Message Date
Brian C. Lane
2269554829 osbuild-depsolve-dnf5: Fix sslverify setting
It was accidentally switched to being set on repo instead of conf when
it was renamed in commit ffa1e91707
2024-04-27 00:29:02 +02:00
Brian C. Lane
ffbf75073a osbuild-depsolve-dnf5: Handle null transactions and exclude-specs
The JSON output by go will use 'null' for nil slices, so we need to
use a [] when the field is missing, or when it is set to null.
Previously this was handled by checking the value before iterating but
when the code moved for the directory handling it was changed.

This implements the same behavior in a slightly cleaner way.
2024-04-23 07:42:09 +02:00
Michael Vogt
b47ac7f59f tools: fix error when releasever cannot be found
See https://github.com/osbuild/osbuild/pull/1724/files#diff-15816f60793fa39af2d7cbd2c9a78fb4b4a1867f2a60e915e21e1efa8662976eR447
2024-04-18 10:17:22 +02:00
Achilleas Koutsou
8b1e743120 tools/osbuild-depsolve-dnf(5): use url.path to drop scheme
str.removeprefix() is not available in Python 3.6, which we need to
support EL8.

Instead of removing the prefix from the original path string, take the
path property of the parsed URL.  Since we're dealing with file paths,
there will be no params, query, or fragment strings so the path should
be all we need.
2024-04-16 07:38:18 +02:00
Achilleas Koutsou
2b2a560aca tools/osbuild-depsolve-dnf(5): require releasever
Originally, I made releasever required only when root_dir was set.  This
was initially done to maintain backwards compatibility but we broke that
already and osbuild/images will always include releasever in the
request.
2024-04-12 13:23:21 +02:00
Michael Vogt
f26e62b23f tools: fix proxy key error when "proxy" is not set
The "main" branch is failing right now in tests. The reason is
that we do not have a merge queue and when
https://github.com/osbuild/osbuild/pull/1715
was merged we had no test for `osbuild-depsolve-dnf` yet.

We have one now (THANK YOU achilleas-k) and it shows an issue :)

This commit fixes the issue.
2024-04-11 14:50:14 +02:00
Michael Vogt
599d3a8730 tools: rename "nothing" to "pkg-with-no-deps" to make it a bit clearer
Tweak the package name a bit to more it very explicit what it's about.
2024-04-11 12:45:25 +02:00
Sanne Raymaekers
f8299cf57d tools/osbuild-depsolve-dnf(5): support proxy 2024-04-11 12:27:02 +02:00
Achilleas Koutsou
ffa1e91707 tools/osbuild-depsolve-dnf5: match dnf repo props
Some of the repository properties in the request were named differently
than the equivalent properties in the dnf repository configuration.
This can introduce bugs and confusion.

One such issue already existed with osbuild/images using 'gpgcheck' in
the request, osbuild-depsolve-dnf5 checking for 'check_gpg', and the dnf
repository configuration property being 'gpgcheck'.  This didn't cause
any bad behaviour because osbuild/images reused the original (internal)
configuration to set the property in stages and depsolving isn't
affected by the value of this property.

Change the request properties to match the dnf repository configuration
to avoid confusion: gpgcheck, repo_gpgcheck, and sslverify.  Users of
osbuild-depsolve-dnf5  should use property names that match dnf.  Use
the same names in the response.

To maintain the same behaviour for SSL verification, a missing sslverify
default to True.  The previous property had the opposite meaning,
ignore_ssl, and defaulted to False.
2024-04-10 16:22:13 -07:00
Achilleas Koutsou
cd775b540e tools/osbuild-depsolve-dnf5: translate ssl cert paths
Translate root_dir-based ssl cert paths after reading repo configs from
a directory.
2024-04-10 16:22:13 -07:00
Achilleas Koutsou
782c0d907d tools/osbuild-depsolve-dnf5: add gpg keys to repos in response
Add the full gpg keys to the repository configs in the response.

On each repository object from dnf, the gpg keys are URLs, either
file:// or http(s)://.  We need to resolve these and return them with
in the response.

When the URL is a file:// path, and it comes from a .repo config file,
we assume that the path is relative to the root_dir, so we prepend it to
the path in the file.  This is so that repo configs in OS root trees can
be used unmodified.  However, when a key is defined in the request, we
should assume that the path is valid, either because it was defined by
the caller as a URL, or because it was defined in-line in the request
and osbuild-depsolve-dnf5 wrote it to the persistdir itself.

A new exception is defined to identify errors during this process.
2024-04-10 16:22:13 -07:00
Achilleas Koutsou
629f171f72 tools/osbuild-depsolve-dnf5: load repos from dir
Support loading repositories from a root tree instead of supplying them
with the request.  The repositories should be in the standard yum repo
format.  Both repository sources can be defined simultaneously, but at
least one is required.

The root_dir is expected to contain files necessary for depsolving in
the standard paths.

These files are:
- Repository (.repo) configurations in <root_dir>/etc/yum.repos.d/
- GPG key files in <root_dir>/etc/pki/rpm-gpg/
    - This will be used to resolve gpg key paths specified in the .repo
      files that are relative to the root_dir.
- (Optional) Custom dnf config variables in <root_dir>/etc/dnf/vars or
  <root_dir>/usr/share/dnf5/vars.d.
    - This is used by CentOS Stream to set the value of $stream.

Custom repository configurations in arbitrary (non-root) paths will have
to follow this directory structure.

A new variable is added to the request, `releasever`, which is mandatory
when using `root_dir`.  This variable is used in repository URLs and GPG
key paths.  In the default case, dnf reads this variable by inspecting
the rpm database.  We will override it in the Solver the same way we
override the arch and basearch for variable substitution.  In the
future, we will make this variable mandatory in all cases, which will
make the variable available for repo configs defined in the request as
well.

The root_dir is used in three ways:
- Set the base.conf.installroot
- Set the base.conf.varsdir to <root_dir>/usr/share/dnf5/vars.d and
  <root_dir>/etc/dnf/vars to read resolve custom variables when loading
  repositories.
- Call create_repos_from_dir() with <root_dir>/etc/yum.repos.d.

base.setup() should be called before loading repositories otherwise
substitutions might not work.
See https://github.com/rpm-software-management/dnf5/issues/1374#issuecomment-2038995031
2024-04-10 16:22:13 -07:00
Achilleas Koutsou
285db19876 tools/osbuild-depsolve-dnf5: type annotation
Silence the mypy linter.
2024-04-10 16:22:13 -07:00
Michael Vogt
efcecd3867 tools: make osbuild-depsolve-dnf5 pylint clean 2024-02-20 14:52:23 -08:00
Brian C. Lane
b131d3cf57 osbuild-depsolve-dnf5: Fix url substitutions
Substitutions should be set on Base, not per-repo. Discovered this
in lorax's dnf5 code so I am updating it here as well.
2024-02-20 09:42:01 +01:00
Brian C. Lane
4f83cdc434 osbuild-depsolve-dnf5: module_hotfixes wasn't really set
Typo in the previous change, wasn't setting `repo.module_hotfixes`
2024-02-20 09:32:43 +01:00
Brian C. Lane
8389c6302e osbuild-depsolve-dnf5: Add module_hotfixes support 2024-02-12 17:08:32 +01:00
Brian C. Lane
18e5481ae8 osbuild-depsolve-dnf5: Add libdnf5 based depsolving for Fedora 40
dnf5-json will be used for building Fedora 40 and later.  RHEL and
Fedora < 40 will continue to use python3-libdnf via dnf-json.
2024-01-24 09:55:49 -08:00