%global project_version_prime 5 %global project_version_major 2 %global project_version_minor 7 %global project_version_micro 0 %bcond dnf5_obsoletes_dnf %[0%{?fedora} > 40 || 0%{?rhel} > 11] Name: dnf5 Version: 5.2.7.0 Release: 20241116010504.0.g708604c8%{?dist} Summary: Command-line package manager License: GPL-2.0-or-later URL: https://github.com/rpm-software-management/dnf5 Source0: dnf5-5.2.7.0-20241116010504.0.g708604c8.tar.xz Requires: libdnf5%{?_isa} = %{version}-%{release} Requires: libdnf5-cli%{?_isa} = %{version}-%{release} %if %{without dnf5_obsoletes_dnf} Requires: dnf-data %endif Recommends: (dnf5-plugins if dnf-plugins-core) Recommends: bash-completion Requires: coreutils %if 0%{?fedora} || 0%{?rhel} > 10 Provides: microdnf = %{version}-%{release} Obsoletes: microdnf < 4 %endif %if %{with dnf5_obsoletes_dnf} Provides: dnf = %{version}-%{release} Obsoletes: dnf < 5 Provides: yum = %{version}-%{release} Obsoletes: yum < 5 Conflicts: python3-dnf-plugins-core < 4.7.0 %endif Provides: dnf5-command(advisory) Provides: dnf5-command(autoremove) Provides: dnf5-command(check) Provides: dnf5-command(check-upgrade) Provides: dnf5-command(clean) Provides: dnf5-command(distro-sync) Provides: dnf5-command(downgrade) Provides: dnf5-command(download) Provides: dnf5-command(environment) Provides: dnf5-command(group) Provides: dnf5-command(history) Provides: dnf5-command(info) Provides: dnf5-command(install) Provides: dnf5-command(leaves) Provides: dnf5-command(list) Provides: dnf5-command(makecache) Provides: dnf5-command(mark) Provides: dnf5-command(module) Provides: dnf5-command(offline) Provides: dnf5-command(provides) Provides: dnf5-command(reinstall) Provides: dnf5-command(replay) Provides: dnf5-command(remove) Provides: dnf5-command(repo) Provides: dnf5-command(repoquery) Provides: dnf5-command(search) Provides: dnf5-command(swap) Provides: dnf5-command(system-upgrade) Provides: dnf5-command(upgrade) Provides: dnf5-command(versionlock) # ========== build options ========== %bcond_without dnf5daemon_client %bcond_without dnf5daemon_server %bcond_without libdnf_cli %bcond_without dnf5 %bcond_without dnf5_plugins %bcond_without plugin_actions %bcond_without plugin_rhsm %bcond_without python_plugins_loader %bcond_without comps %bcond_without modulemd %if 0%{?rhel} %bcond_with zchunk %else %bcond_without zchunk %endif %bcond_without systemd %bcond_with html %if 0%{?rhel} == 8 %bcond_with man %else %bcond_without man %endif # TODO Go bindings fail to build, disable for now %bcond_with go %bcond_without perl5 %bcond_without python3 %bcond_without ruby %bcond_with clang %bcond_with sanitizers %bcond_without tests %bcond_with performance_tests %bcond_with dnf5daemon_tests # Disable SOLVER_FLAG_FOCUS_NEW only for RHEL %if 0%{?rhel} && 0%{?rhel} < 10 %bcond_with focus_new %else %bcond_without focus_new %endif %if %{with clang} %global toolchain clang %endif # ========== versions of dependencies ========== %global libmodulemd_version 2.5.0 %global librepo_version 1.18.0 %if %{with focus_new} %global libsolv_version 0.7.30 %else %global libsolv_version 0.7.25 %endif %global sqlite_version 3.35.0 %global swig_version 4 %global zchunk_version 0.9.11 # ========== build requires ========== %if 0%{?fedora} > 40 || 0%{?rhel} > 10 BuildRequires: bash-completion-devel %else BuildRequires: bash-completion %endif BuildRequires: cmake BuildRequires: doxygen BuildRequires: gettext BuildRequires: pkgconfig(check) BuildRequires: pkgconfig(fmt) BuildRequires: pkgconfig(json-c) BuildRequires: pkgconfig(libcrypto) BuildRequires: pkgconfig(librepo) >= %{librepo_version} BuildRequires: pkgconfig(libsolv) >= %{libsolv_version} BuildRequires: pkgconfig(libsolvext) >= %{libsolv_version} BuildRequires: pkgconfig(rpm) >= 4.17.0 BuildRequires: pkgconfig(sqlite3) >= %{sqlite_version} BuildRequires: toml11-static %if %{with clang} BuildRequires: clang %else BuildRequires: gcc-c++ >= 10.1 %endif %if %{with tests} BuildRequires: createrepo_c BuildRequires: pkgconfig(cppunit) BuildRequires: rpm-build %endif %if %{with comps} BuildRequires: pkgconfig(libcomps) %endif %if %{with modulemd} BuildRequires: pkgconfig(modulemd-2.0) >= %{libmodulemd_version} %endif %if %{with zchunk} BuildRequires: pkgconfig(zck) >= %{zchunk_version} %endif %if %{with systemd} BuildRequires: pkgconfig(sdbus-c++) >= 0.8.1 BuildRequires: systemd-devel # We need to get the SYSTEMD_SYSTEM_UNIT_DIR from # /usr/share/pkgconfig/systemd.pc BuildRequires: systemd %endif %if %{with html} || %{with man} BuildRequires: python3dist(breathe) BuildRequires: python3dist(sphinx) >= 4.1.2 BuildRequires: python3dist(sphinx-rtd-theme) %endif %if %{with sanitizers} # compiler-rt is required by sanitizers in clang BuildRequires: compiler-rt BuildRequires: libasan BuildRequires: liblsan BuildRequires: libubsan %endif %if %{with libdnf_cli} # required for libdnf5-cli BuildRequires: pkgconfig(smartcols) %endif %if %{with dnf5_plugins} BuildRequires: libcurl-devel >= 7.62.0 %endif %if %{with dnf5daemon_server} # required for dnf5daemon-server BuildRequires: pkgconfig(sdbus-c++) >= 0.9.0 BuildRequires: systemd-rpm-macros %if %{with dnf5daemon_tests} BuildRequires: dbus-daemon BuildRequires: polkit BuildRequires: python3-devel BuildRequires: python3dist(dbus-python) %endif %endif %if %{with plugin_rhsm} BuildRequires: pkgconfig(librhsm) >= 0.0.3 BuildRequires: pkgconfig(glib-2.0) >= 2.44.0 %endif # ========== language bindings section ========== %if %{with perl5} || %{with ruby} || %{with python3} BuildRequires: swig >= %{swig_version} %endif %if %{with perl5} # required for perl-libdnf5 and perl-libdnf5-cli BuildRequires: perl-devel BuildRequires: perl-generators %if %{with tests} BuildRequires: perl(strict) BuildRequires: perl(Test::More) BuildRequires: perl(Test::Exception) BuildRequires: perl(warnings) %endif %endif %if %{with ruby} # required for ruby-libdnf5 and ruby-libdnf5-cli BuildRequires: pkgconfig(ruby) %if %{with tests} BuildRequires: rubygem-test-unit %endif %endif %if %{with python3} # required for python3-libdnf5 and python3-libdnf5-cli BuildRequires: python3-devel %endif %description DNF5 is a command-line package manager that automates the process of installing, upgrading, configuring, and removing computer programs in a consistent manner. It supports RPM packages, modulemd modules, and comps groups & environments. %post %systemd_post dnf5-makecache.timer %preun %systemd_preun dnf5-makecache.timer %postun %systemd_postun_with_restart dnf5-makecache.timer %files -f dnf5.lang %{_bindir}/dnf5 %if %{with dnf5_obsoletes_dnf} %{_bindir}/dnf %{_bindir}/yum %endif %{_unitdir}/dnf5-makecache.service %{_unitdir}/dnf5-makecache.timer %if 0%{?fedora} || 0%{?rhel} > 10 %{_bindir}/microdnf %endif %dir %{_sysconfdir}/dnf/dnf5-aliases.d %doc %{_sysconfdir}/dnf/dnf5-aliases.d/README %dir %{_datadir}/dnf5 %dir %{_datadir}/dnf5/aliases.d %{_datadir}/dnf5/aliases.d/compatibility.conf %dir %{_libdir}/dnf5 %dir %{_libdir}/dnf5/plugins %dir %{_datadir}/dnf5/dnf5-plugins %dir %{_sysconfdir}/dnf/dnf5-plugins %doc %{_libdir}/dnf5/plugins/README %dir %{_libdir}/libdnf5/plugins %dir %{_datadir}/bash-completion/ %dir %{_datadir}/bash-completion/completions/ %{_datadir}/bash-completion/completions/dnf* %dir %{_prefix}/lib/sysimage/libdnf5 %verify(not md5 size mtime) %ghost %{_prefix}/lib/sysimage/libdnf5/* %license COPYING.md %license gpl-2.0.txt %{_mandir}/man8/dnf5.8.* %if %{with dnf5_obsoletes_dnf} %{_mandir}/man8/dnf.8.* %endif %{_mandir}/man8/dnf*-advisory.8.* %{_mandir}/man8/dnf*-autoremove.8.* %{_mandir}/man8/dnf*-check.8.* %{_mandir}/man8/dnf*-check-upgrade.8.* %{_mandir}/man8/dnf*-clean.8.* %{_mandir}/man8/dnf*-distro-sync.8.* %{_mandir}/man8/dnf*-downgrade.8.* %{_mandir}/man8/dnf*-download.8.* %{_mandir}/man8/dnf*-environment.8.* %{_mandir}/man8/dnf*-group.8.* %{_mandir}/man8/dnf*-history.8.* %{_mandir}/man8/dnf*-info.8.* %{_mandir}/man8/dnf*-install.8.* %{_mandir}/man8/dnf*-leaves.8.* %{_mandir}/man8/dnf*-list.8.* %{_mandir}/man8/dnf*-makecache.8.* %{_mandir}/man8/dnf*-mark.8.* %{_mandir}/man8/dnf*-module.8.* %{_mandir}/man8/dnf*-offline.8.* %{_mandir}/man8/dnf*-provides.8.* %{_mandir}/man8/dnf*-reinstall.8.* %{_mandir}/man8/dnf*-remove.8.* %{_mandir}/man8/dnf*-replay.8.* %{_mandir}/man8/dnf*-repo.8.* %{_mandir}/man8/dnf*-repoquery.8.* %{_mandir}/man8/dnf*-search.8.* %{_mandir}/man8/dnf*-swap.8.* %{_mandir}/man8/dnf*-system-upgrade.8.* %{_mandir}/man8/dnf*-upgrade.8.* %{_mandir}/man8/dnf*-versionlock.8.* %{_mandir}/man7/dnf*-aliases.7.* %{_mandir}/man7/dnf*-caching.7.* %{_mandir}/man7/dnf*-comps.7.* %{_mandir}/man7/dnf*-filtering.7.* %{_mandir}/man7/dnf*-forcearch.7.* %{_mandir}/man7/dnf*-installroot.7.* %{_mandir}/man7/dnf*-modularity.7.* %{_mandir}/man7/dnf*-specs.7.* %{_mandir}/man7/dnf*-system-state.7.* %{_mandir}/man7/dnf*-changes-from-dnf4.7.* %{_mandir}/man5/dnf*.conf.5.* %{_mandir}/man5/dnf*.conf-todo.5.* %{_mandir}/man5/dnf*.conf-deprecated.5.* %if %{with systemd} %{_unitdir}/dnf5-offline-transaction.service %{_unitdir}/dnf5-offline-transaction-cleanup.service %{_unitdir}/system-update.target.wants/dnf5-offline-transaction.service %endif # ========== libdnf5 ========== %package -n libdnf5 Summary: Package management library License: LGPL-2.1-or-later #Requires: libmodulemd{?_isa} >= {libmodulemd_version} Requires: libsolv%{?_isa} >= %{libsolv_version} Requires: librepo%{?_isa} >= %{librepo_version} Requires: sqlite-libs%{?_isa} >= %{sqlite_version} %if %{with dnf5_obsoletes_dnf} Conflicts: dnf-data < 4.20.0 %endif %description -n libdnf5 Package management library. %files -n libdnf5 -f libdnf5.lang %if %{with dnf5_obsoletes_dnf} %config(noreplace) %{_sysconfdir}/dnf/dnf.conf %dir %{_sysconfdir}/dnf/vars %dir %{_sysconfdir}/dnf/protected.d %else %exclude %{_sysconfdir}/dnf/dnf.conf %endif %ghost %{_sysconfdir}/dnf/versionlock.toml %dir %{_datadir}/dnf5/libdnf.conf.d %dir %{_sysconfdir}/dnf/libdnf5.conf.d %dir %{_datadir}/dnf5/repos.override.d %dir %{_sysconfdir}/dnf/repos.override.d %dir %{_sysconfdir}/dnf/libdnf5-plugins %dir %{_datadir}/dnf5/repos.d %dir %{_datadir}/dnf5/vars.d %dir %{_libdir}/libdnf5 %{_libdir}/libdnf5.so.2* %license lgpl-2.1.txt %ghost %attr(0755, root, root) %dir %{_var}/cache/libdnf5 # ========== libdnf5-cli ========== %if %{with libdnf_cli} %package -n libdnf5-cli Summary: Library for working with a terminal in a command-line package manager License: LGPL-2.1-or-later Requires: libdnf5%{?_isa} = %{version}-%{release} %description -n libdnf5-cli Library for working with a terminal in a command-line package manager. %files -n libdnf5-cli -f libdnf5-cli.lang %{_libdir}/libdnf5-cli.so.2* %license COPYING.md %license lgpl-2.1.txt %endif # ========== dnf5-devel ========== %package -n dnf5-devel Summary: Development files for dnf5 License: LGPL-2.1-or-later Requires: dnf5%{?_isa} = %{version}-%{release} Requires: libdnf5-devel%{?_isa} = %{version}-%{release} Requires: libdnf5-cli-devel%{?_isa} = %{version}-%{release} %description -n dnf5-devel Development files for dnf5. %files -n dnf5-devel %{_includedir}/dnf5/ %license COPYING.md %license lgpl-2.1.txt # ========== libdnf5-devel ========== %package -n libdnf5-devel Summary: Development files for libdnf License: LGPL-2.1-or-later Requires: libdnf5%{?_isa} = %{version}-%{release} Requires: libsolv-devel%{?_isa} >= %{libsolv_version} %description -n libdnf5-devel Development files for libdnf. %files -n libdnf5-devel %{_includedir}/libdnf5/ %dir %{_libdir}/libdnf5 %{_libdir}/libdnf5.so %{_libdir}/pkgconfig/libdnf5.pc %license COPYING.md %license lgpl-2.1.txt # ========== libdnf5-cli-devel ========== %package -n libdnf5-cli-devel Summary: Development files for libdnf5-cli License: LGPL-2.1-or-later Requires: libdnf5-cli%{?_isa} = %{version}-%{release} %description -n libdnf5-cli-devel Development files for libdnf5-cli. %files -n libdnf5-cli-devel %{_includedir}/libdnf5-cli/ %{_libdir}/libdnf5-cli.so %{_libdir}/pkgconfig/libdnf5-cli.pc %license COPYING.md %license lgpl-2.1.txt # ========== perl-libdnf5 ========== %if %{with perl5} %package -n perl-libdnf5 Summary: Perl 5 bindings for the libdnf library License: LGPL-2.1-or-later Requires: libdnf5%{?_isa} = %{version}-%{release} %description -n perl-libdnf5 Perl 5 bindings for the libdnf library. %files -n perl-libdnf5 %{perl_vendorarch}/libdnf5 %{perl_vendorarch}/auto/libdnf5 %license COPYING.md %license lgpl-2.1.txt %endif # ========== perl-libdnf5-cli ========== %if %{with perl5} && %{with libdnf_cli} %package -n perl-libdnf5-cli Summary: Perl 5 bindings for the libdnf5-cli library License: LGPL-2.1-or-later Requires: libdnf5-cli%{?_isa} = %{version}-%{release} %description -n perl-libdnf5-cli Perl 5 bindings for the libdnf5-cli library. %files -n perl-libdnf5-cli %{perl_vendorarch}/libdnf5_cli %{perl_vendorarch}/auto/libdnf5_cli %license COPYING.md %license lgpl-2.1.txt %endif # ========== python3-libdnf5 ========== %if %{with python3} %package -n python3-libdnf5 %{?python_provide:%python_provide python3-libdnf} Summary: Python 3 bindings for the libdnf library License: LGPL-2.1-or-later Requires: libdnf5%{?_isa} = %{version}-%{release} %description -n python3-libdnf5 Python 3 bindings for the libdnf library. %files -n python3-libdnf5 %{python3_sitearch}/libdnf5 %{python3_sitearch}/libdnf5-*.dist-info %license COPYING.md %license lgpl-2.1.txt %endif # ========== python3-libdnf5-cli ========== %if %{with python3} && %{with libdnf_cli} %package -n python3-libdnf5-cli %{?python_provide:%python_provide python3-libdnf5-cli} Summary: Python 3 bindings for the libdnf5-cli library License: LGPL-2.1-or-later Requires: libdnf5-cli%{?_isa} = %{version}-%{release} %description -n python3-libdnf5-cli Python 3 bindings for the libdnf5-cli library. %files -n python3-libdnf5-cli %{python3_sitearch}/libdnf5_cli %{python3_sitearch}/libdnf5_cli-*.dist-info %license COPYING.md %license lgpl-2.1.txt %endif # ========== ruby-libdnf5 ========== %if %{with ruby} %package -n ruby-libdnf5 Summary: Ruby bindings for the libdnf library License: LGPL-2.1-or-later Provides: ruby(libdnf) = %{version}-%{release} Requires: libdnf5%{?_isa} = %{version}-%{release} Requires: ruby(release) %description -n ruby-libdnf5 Ruby bindings for the libdnf library. %files -n ruby-libdnf5 %{ruby_vendorarchdir}/libdnf5 %license COPYING.md %license lgpl-2.1.txt %endif # ========== ruby-libdnf5-cli ========== %if %{with ruby} && %{with libdnf_cli} %package -n ruby-libdnf5-cli Summary: Ruby bindings for the libdnf5-cli library License: LGPL-2.1-or-later Provides: ruby(libdnf_cli) = %{version}-%{release} Requires: libdnf5-cli%{?_isa} = %{version}-%{release} Requires: ruby(release) %description -n ruby-libdnf5-cli Ruby bindings for the libdnf5-cli library. %files -n ruby-libdnf5-cli %{ruby_vendorarchdir}/libdnf5_cli %license COPYING.md %license lgpl-2.1.txt %endif # ========== libdnf5-plugin-actions ========== %if %{with plugin_actions} %package -n libdnf5-plugin-actions Summary: Libdnf5 plugin that allows to run actions (external executables) on hooks License: LGPL-2.1-or-later Requires: libdnf5%{?_isa} = %{version}-%{release} %description -n libdnf5-plugin-actions Libdnf5 plugin that allows to run actions (external executables) on hooks. %files -n libdnf5-plugin-actions -f libdnf5-plugin-actions.lang %{_libdir}/libdnf5/plugins/actions.* %config %{_sysconfdir}/dnf/libdnf5-plugins/actions.conf %dir %{_sysconfdir}/dnf/libdnf5-plugins/actions.d %{_mandir}/man8/libdnf5-actions.8.* %endif # ========== libdnf5-plugin-plugin_rhsm ========== %if %{with plugin_rhsm} %package -n libdnf5-plugin-rhsm Summary: Libdnf5 rhsm (Red Hat Subscription Manager) plugin License: LGPL-2.1-or-later Requires: libdnf5%{?_isa} = %{version}-%{release} %description -n libdnf5-plugin-rhsm Libdnf5 plugin with basic support for Red Hat subscriptions. Synchronizes the the enrollment with the vendor system. This can change the contents of the repositories configuration files according to the subscription levels. %files -n libdnf5-plugin-rhsm -f libdnf5-plugin-rhsm.lang %{_libdir}/libdnf5/plugins/rhsm.* %config %{_sysconfdir}/dnf/libdnf5-plugins/rhsm.conf %endif # ========== python3-libdnf5-plugins-loader ========== %if %{with python_plugins_loader} %package -n python3-libdnf5-python-plugins-loader Summary: Libdnf5 plugin that allows loading Python plugins License: LGPL-2.1-or-later Requires: libdnf5%{?_isa} = %{version}-%{release} Requires: python3-libdnf5%{?_isa} = %{version}-%{release} %description -n python3-libdnf5-python-plugins-loader Libdnf5 plugin that allows loading Python plugins. %files -n python3-libdnf5-python-plugins-loader %{_libdir}/libdnf5/plugins/python_plugins_loader.* %dir %{python3_sitelib}/libdnf_plugins/ %doc %{python3_sitelib}/libdnf_plugins/README %endif # ========== dnf5daemon-client ========== %if %{with dnf5daemon_client} %package -n dnf5daemon-client Summary: Command-line interface for dnf5daemon-server License: GPL-2.0-or-later Requires: libdnf5%{?_isa} = %{version}-%{release} Requires: libdnf5-cli%{?_isa} = %{version}-%{release} Requires: dnf5daemon-server %description -n dnf5daemon-client Command-line interface for dnf5daemon-server. %files -n dnf5daemon-client -f dnf5daemon-client.lang %{_bindir}/dnf5daemon-client %license COPYING.md %license gpl-2.0.txt %{_mandir}/man8/dnf5daemon-client.8.* %endif # ========== dnf5daemon-server ========== %if %{with dnf5daemon_server} %package -n dnf5daemon-server Summary: Package management service with a DBus interface License: GPL-2.0-or-later Requires: libdnf5%{?_isa} = %{version}-%{release} Requires: libdnf5-cli%{?_isa} = %{version}-%{release} Requires: dbus Requires: polkit %if %{without dnf5_obsoletes_dnf} Requires: dnf-data %endif %description -n dnf5daemon-server Package management service with a DBus interface. %post -n dnf5daemon-server %systemd_post dnf5daemon-server.service %preun -n dnf5daemon-server %systemd_preun dnf5daemon-server.service %postun -n dnf5daemon-server %systemd_postun_with_restart dnf5daemon-server.service %files -n dnf5daemon-server -f dnf5daemon-server.lang %{_sbindir}/dnf5daemon-server %{_unitdir}/dnf5daemon-server.service %{_datadir}/dbus-1/system.d/org.rpm.dnf.v0.conf %{_datadir}/dbus-1/system-services/org.rpm.dnf.v0.service %{_datadir}/dbus-1/interfaces/org.rpm.dnf.v0.*.xml %{_datadir}/polkit-1/actions/org.rpm.dnf.v0.policy %license COPYING.md %license gpl-2.0.txt %{_mandir}/man8/dnf5daemon-server.8.* %{_mandir}/man8/dnf5daemon-dbus-api.8.* %endif # ========== dnf5-plugins ========== %if %{with dnf5_plugins} %package -n dnf5-plugins Summary: Plugins for dnf5 License: LGPL-2.1-or-later Requires: dnf5%{?_isa} = %{version}-%{release} Requires: libcurl%{?_isa} >= 7.62.0 Requires: libdnf5%{?_isa} = %{version}-%{release} Requires: libdnf5-cli%{?_isa} = %{version}-%{release} Provides: dnf5-command(builddep) Provides: dnf5-command(changelog) Provides: dnf5-command(config-manager) Provides: dnf5-command(copr) Provides: dnf5-command(needs-restarting) Provides: dnf5-command(repoclosure) %description -n dnf5-plugins Core DNF5 plugins that enhance dnf5 with builddep, changelog, config-manager, copr, and repoclosure commands. %files -n dnf5-plugins -f dnf5-plugin-builddep.lang -f dnf5-plugin-changelog.lang -f dnf5-plugin-config-manager.lang -f dnf5-plugin-copr.lang -f dnf5-plugin-needs-restarting.lang -f dnf5-plugin-repoclosure.lang %{_libdir}/dnf5/plugins/builddep_cmd_plugin.so %{_libdir}/dnf5/plugins/changelog_cmd_plugin.so %{_libdir}/dnf5/plugins/config-manager_cmd_plugin.so %{_libdir}/dnf5/plugins/copr_cmd_plugin.so %{_libdir}/dnf5/plugins/needs_restarting_cmd_plugin.so %{_libdir}/dnf5/plugins/repoclosure_cmd_plugin.so %{_mandir}/man8/dnf*-builddep.8.* %{_mandir}/man8/dnf*-changelog.8.* %{_mandir}/man8/dnf*-config-manager.8.* %{_mandir}/man8/dnf*-copr.8.* %{_mandir}/man8/dnf*-needs-restarting.8.* %{_mandir}/man8/dnf*-repoclosure.8.* %{_datadir}/dnf5/aliases.d/compatibility-plugins.conf # ========== dnf5-automatic plugin ========== %package plugin-automatic Summary: Package manager - automated upgrades License: LGPL-2.1-or-later Requires: dnf5%{?_isa} = %{version}-%{release} Requires: libcurl-full%{?_isa} Requires: libdnf5%{?_isa} = %{version}-%{release} Requires: libdnf5-cli%{?_isa} = %{version}-%{release} Provides: dnf5-command(automatic) %if %{with dnf5_obsoletes_dnf} Provides: dnf-automatic = %{version}-%{release} Obsoletes: dnf-automatic < 5 %else Conflicts: dnf-automatic < 5 %endif %description plugin-automatic Alternative command-line interface "dnf upgrade" suitable to be executed automatically and regularly from systemd timers, cron jobs or similar. %files plugin-automatic -f dnf5-plugin-automatic.lang %ghost %{_sysconfdir}/motd.d/dnf5-automatic %{_libdir}/dnf5/plugins/automatic_cmd_plugin.so %{_datadir}/dnf5/dnf5-plugins/automatic.conf %ghost %config(noreplace) %{_sysconfdir}/dnf/automatic.conf %ghost %config(noreplace) %{_sysconfdir}/dnf/dnf5-plugins/automatic.conf %{_mandir}/man8/dnf*-automatic.8.* %{_unitdir}/dnf5-automatic.service %{_unitdir}/dnf5-automatic.timer %{_unitdir}/dnf-automatic.service %{_unitdir}/dnf-automatic.timer %if %{with dnf5_obsoletes_dnf} %{_bindir}/dnf-automatic %else %exclude %{_bindir}/dnf-automatic %endif %endif # ========== unpack, build, check & install ========== %prep %autosetup -p1 -n dnf5-%{version} -n dnf5-5.2.7.0-20241116010504.0.g708604c8 %build %cmake \ -DPACKAGE_VERSION=%{version} \ -DPERL_INSTALLDIRS=vendor \ \ -DENABLE_SOLV_FOCUSNEW=%{?with_focus_new:ON}%{!?with_focus_new:OFF} \ \ -DWITH_DNF5DAEMON_CLIENT=%{?with_dnf5daemon_client:ON}%{!?with_dnf5daemon_client:OFF} \ -DWITH_DNF5DAEMON_SERVER=%{?with_dnf5daemon_server:ON}%{!?with_dnf5daemon_server:OFF} \ -DWITH_LIBDNF5_CLI=%{?with_libdnf_cli:ON}%{!?with_libdnf_cli:OFF} \ -DWITH_DNF5=%{?with_dnf5:ON}%{!?with_dnf5:OFF} \ -DWITH_PLUGIN_ACTIONS=%{?with_plugin_actions:ON}%{!?with_plugin_actions:OFF} \ -DWITH_PLUGIN_RHSM=%{?with_plugin_rhsm:ON}%{!?with_plugin_rhsm:OFF} \ -DWITH_PYTHON_PLUGINS_LOADER=%{?with_python_plugins_loader:ON}%{!?with_python_plugins_loader:OFF} \ \ -DWITH_COMPS=%{?with_comps:ON}%{!?with_comps:OFF} \ -DWITH_MODULEMD=%{?with_modulemd:ON}%{!?with_modulemd:OFF} \ -DWITH_ZCHUNK=%{?with_zchunk:ON}%{!?with_zchunk:OFF} \ -DWITH_SYSTEMD=%{?with_systemd:ON}%{!?with_systemd:OFF} \ \ -DWITH_HTML=%{?with_html:ON}%{!?with_html:OFF} \ -DWITH_MAN=%{?with_man:ON}%{!?with_man:OFF} \ \ -DWITH_GO=%{?with_go:ON}%{!?with_go:OFF} \ -DWITH_PERL5=%{?with_perl5:ON}%{!?with_perl5:OFF} \ -DWITH_PYTHON3=%{?with_python3:ON}%{!?with_python3:OFF} \ -DWITH_RUBY=%{?with_ruby:ON}%{!?with_ruby:OFF} \ \ -DWITH_SANITIZERS=%{?with_sanitizers:ON}%{!?with_sanitizers:OFF} \ -DWITH_TESTS=%{?with_tests:ON}%{!?with_tests:OFF} \ -DWITH_PERFORMANCE_TESTS=%{?with_performance_tests:ON}%{!?with_performance_tests:OFF} \ -DWITH_DNF5DAEMON_TESTS=%{?with_dnf5daemon_tests:ON}%{!?with_dnf5daemon_tests:OFF} \ \ -DVERSION_PRIME=%{project_version_prime} \ -DVERSION_MAJOR=%{project_version_major} \ -DVERSION_MINOR=%{project_version_minor} \ -DVERSION_MICRO=%{project_version_micro} %cmake_build %if %{with man} %cmake_build --target doc-man %endif %check %if %{with tests} %ctest %endif %install %cmake_install %if %{with dnf5_obsoletes_dnf} ln -sr %{buildroot}%{_bindir}/dnf5 %{buildroot}%{_bindir}/dnf ln -sr %{buildroot}%{_bindir}/dnf5 %{buildroot}%{_bindir}/yum ln -sr %{buildroot}%{_datadir}/bash-completion/completions/dnf5 %{buildroot}%{_datadir}/bash-completion/completions/dnf for file in %{buildroot}%{_mandir}/man[578]/dnf5[-.]*; do dir=$(dirname $file) filename=$(basename $file) ln -sr $file $dir/${filename/dnf5/dnf} done %endif # own dirs and files that dnf5 creates on runtime mkdir -p %{buildroot}%{_prefix}/lib/sysimage/libdnf5 for file in \ environments.toml groups.toml modules.toml nevras.toml packages.toml \ system.toml \ transaction_history.sqlite transaction_history.sqlite-shm \ transaction_history.sqlite-wal do touch %{buildroot}%{_prefix}/lib/sysimage/libdnf5/$file done mkdir -p %{buildroot}%{_prefix}/lib/sysimage/libdnf5/comps_groups mkdir -p %{buildroot}%{_prefix}/lib/sysimage/libdnf5/offline touch %{buildroot}%{_sysconfdir}/dnf/versionlock.toml %if 0%{?fedora} || 0%{?rhel} > 10 ln -sr %{buildroot}%{_bindir}/dnf5 %{buildroot}%{_bindir}/microdnf %endif %if %{with systemd} mkdir -p %{buildroot}%{_unitdir}/system-update.target.wants/ pushd %{buildroot}%{_unitdir}/system-update.target.wants/ ln -sr ../dnf5-offline-transaction.service popd %endif %find_lang dnf5 %find_lang dnf5-plugin-automatic %find_lang dnf5-plugin-builddep %find_lang dnf5-plugin-changelog %find_lang dnf5-plugin-config-manager %find_lang dnf5-plugin-copr %find_lang dnf5-plugin-needs-restarting %find_lang dnf5-plugin-repoclosure %find_lang dnf5daemon-client %find_lang dnf5daemon-server %find_lang libdnf5 %find_lang libdnf5-cli %find_lang libdnf5-plugin-actions %find_lang libdnf5-plugin-rhsm %ldconfig_scriptlets %changelog * Tue Nov 12 2024 rpm-gitoverlay - 5.2.7.0-20241116010504.0.g708604c8 - [708604c8] Release 5.2.7.0 (evan-goode) - [488b3dd2] Update translations from weblate (GitHub Workflow) - [4ebad766] dnfdaemon: resolve and do_transaction cannot run simultaneously (Marek Blaha) - [7bc0a1c8] dnfdaemon: Base.reset() API (Marek Blaha) - [3bd37829] dnfdaemon: Call base.setup() after setting releasever (Marek Blaha) - [d7d024d8] dnfdaemon: Move base initialization to special method (Marek Blaha) - [fdc68c60] dnfdaemon: Store session goal in unique_ptr (Marek Blaha) - [279f9f69] dnfdaemon: Add transaction mutex to the Session class (Marek Blaha) - [28f21c39] daemon tests: Adjust tests to current behavior (Marek Blaha) - [5f3cfa69] daemon tests: Drop test_repoconf.py (Marek Blaha) - [0a1c3e54] repo: Fix invalid free() (Marek Blaha) - [8fbbeb20] Optimise multi_progress_bar tty control sequences (Giedrius Jonikas) - [9d3edff4] MultiProgressBar now buffers the output text to a single write (Giedrius Jonikas) - [fb72a757] Clear up changes doc about optional subcommands (Aleš Matěj) - [1e6c03ef] PackageDownloader unit tests: Number of add_new_download and end calls (Jaroslav Rohel) - [b9581506] DownloadCallbacks: Ensure `end` for every successful `add_new_download` (Jaroslav Rohel) - [d4c74147] Behave more like the old service, with the "--timer" option. (Gordon Messmer) - [abf3b275] Run "makecache" periodically to keep the cache ready. (Gordon Messmer) - [1c5f28ce] Add couple progress bar unit tests (Aleš Matěj) - [dd79abfd] When `multi_progress_bar` finishes print new line automatically (Aleš Matěj) - [01d4df82] Fix parsing of offline transaction JSON file (Marek Blaha) - [f1e8d1be] Optimize getting counts of transaction items (Aleš Matěj) - [956c46e9] Add `get_base()` to `libdnf::transaction::Transaction` (Aleš Matěj) - [47bd21dc] historydb: Prevent insertion of duplicate group packages (Marek Blaha) - [bce0365d] Update dnf5.conf.5 to reflect change in fastestmirror behavior (Kenneth Finnegan) - [1a57764b] Return `ConfigMain::get_errorlevel_option()` API (Aleš Matěj) - [0dc0063b] build: Remove an explicit swig option -ruby (Petr Písař) - [b2c83008] Document dropped `--disableexcludepkgs` option (Aleš Matěj) - [cc8a0f95] Drop `errorlevel` config option (Aleš Matěj) - [03fa9535] Test that both pkg_gpgcheck and gpgcheck point to the same OptionBool (Aleš Matěj) - [c9e96713] Change `gpgcheck` option to `pkg_gpgcheck` but stay compatible (Aleš Matěj) - [bed44b77] chore: Clean up Fedora 37-related conditionals in RPM spec (Byoungchan Lee) - [5268783a] log: Preserve log messages during RPM transaction (Marek Blaha) - [b977f592] Recommend --use-host-config if --installroot is used and not all repositories can be enabled (Petr Písař) - [766032a1] test: Normalize Python code (Petr Písař) - [44b412b9] Make most descriptions for dnf5 --help translatable. (Byoungchan Lee) - [00615105] test python3: improve comps tests (Maxwell G) - [204ddfa0] comps: add get_base() to {Group,Environment}{,Query} (Maxwell G) - [8227ce4a] doc: "dnf repoquery --unsatisfied" is not supported (Petr Písař) - [463742d9] Unit tests for libdnf5::utils::[is_glob_pattern | is_file_pattern] (Jaroslav Rohel) - [f3840483] [swig] Bindings for libdnf5::utils::[is_glob_pattern | is_file_pattern] (Jaroslav Rohel) - [2594423c] Allow unlimited number of arguments for history `list` and `info` (Aleš Matěj) - [e80fbbbf] `history store` command: move arg verificion above user confirmation (Aleš Matěj) - [48cd6bbd] libdnf5::utils::patterns: No inline API functions, mark noexcept (Jaroslav Rohel) - [ac45377f] Fix libdnf5::utils::patterns: Include missing headers (Jaroslav Rohel) - [b2a54614] When writing main solv file (primary.xml) don't store filelists (Aleš Matěj) - [68eaef54] Set `POOL_FLAG_ADDFILEPROVIDESFILTERED` only when not loading filelists (Aleš Matěj) - [e053a0f2] i18n: Fix plural forms for "Warning: skipped PGP checks..." message (Petr Písař) - [126a07a6] i18n: Update translation templates from Weblate (Petr Písař) - [61a0e357] dnf5: OfflineExecuteCommand needs to set transaction (Marek Blaha) - [bb29332c] dnf5: Print RPM logs to the user (Marek Blaha) - [81886bd4] dnf5: Refactor scriptlet output printing (Marek Blaha) - [a8845c04] dnf5: script_output_to_progress() return number of lines (Marek Blaha) - [178dce60] rpm.Transaction: Handle RPM transaction log messages (Marek Blaha) - [541a8479] transaction: Store RPM log messages (Marek Blaha) - [7c9143d4] RpmLogGuard: Add a buffer for recently emitted logs (Marek Blaha) - [74706c1a] comps: Fix memory issues in group serialization (Marek Blaha) - [e93df4a3] Add --allmirros option for `dnf download --url` (Ali Mirjamali) - [ce289e94] Consistently use "removing" instead of "erasing" packages (Petr Písař) - [f27f1d41] dnfdaemon: D-Bus API to reset the goal (Marek Blaha) - [b86b12af] dnfdaemon: Add reset_goal() method (Marek Blaha) - [41a9c036] goal: Add missing members to reset() method (Marek Blaha) - [3c96fa49] man: Package changes from DNF4 doc as man page (Marek Blaha) - [03311a53] doc: Rename the file documenting changes from DNF4 (Marek Blaha) - [9d57058d] copr: use pubkey URL returned by Copr API (Jakub Kadlcik)