Toshaan Bharvani
4 months ago
commit
6db376e08c
12 changed files with 10935 additions and 0 deletions
@ -0,0 +1,62 @@
@@ -0,0 +1,62 @@
|
||||
From 5e082d74b73bf1b3565cfd72a3e1ba7a45a00a8b Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= <lhrazky@redhat.com> |
||||
Date: Wed, 7 Sep 2022 14:40:32 +0200 |
||||
Subject: [PATCH 1/2] Pass whole URL in relativeUrl to PackageTarget for RPM |
||||
URL download |
||||
|
||||
The PackageTarget supports baseUrl and relativeUrl on the API, but then |
||||
the relativeUrl is just a path fragment with no definition on whether it |
||||
should be encoded. It's being passed unencoded paths from other places, |
||||
and so there's a conditional encode (only if not full URL) in libdnf. |
||||
|
||||
But full URLs are actually supported in relativeUrl (in that case |
||||
baseUrl should be empty) and in that case the URL is expected to be |
||||
encoded and is not encoded for the second time. |
||||
|
||||
Hence, pass the full URL to relativeUrl instead of splitting it. We also |
||||
need to decode the file name we store, as on the filesystem the RPM file |
||||
name is also decoded. |
||||
|
||||
= changelog = |
||||
msg: Don't double-encode RPM URLs passed on CLI |
||||
type: bugfix |
||||
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103015 |
||||
--- |
||||
dnf/repo.py | 7 ++++--- |
||||
1 file changed, 4 insertions(+), 3 deletions(-) |
||||
|
||||
diff --git a/dnf/repo.py b/dnf/repo.py |
||||
index ec1a2537..86fb2bf4 100644 |
||||
--- a/dnf/repo.py |
||||
+++ b/dnf/repo.py |
||||
@@ -47,6 +47,7 @@ import string |
||||
import sys |
||||
import time |
||||
import traceback |
||||
+import urllib |
||||
|
||||
_PACKAGES_RELATIVE_DIR = "packages" |
||||
_MIRRORLIST_FILENAME = "mirrorlist" |
||||
@@ -295,7 +296,7 @@ class RemoteRPMPayload(PackagePayload): |
||||
self.local_path = os.path.join(self.pkgdir, self.__str__().lstrip("/")) |
||||
|
||||
def __str__(self): |
||||
- return os.path.basename(self.remote_location) |
||||
+ return os.path.basename(urllib.parse.unquote(self.remote_location)) |
||||
|
||||
def _progress_cb(self, cbdata, total, done): |
||||
self.remote_size = total |
||||
@@ -308,8 +309,8 @@ class RemoteRPMPayload(PackagePayload): |
||||
|
||||
def _librepo_target(self): |
||||
return libdnf.repo.PackageTarget( |
||||
- self.conf._config, os.path.basename(self.remote_location), |
||||
- self.pkgdir, 0, None, 0, os.path.dirname(self.remote_location), |
||||
+ self.conf._config, self.remote_location, |
||||
+ self.pkgdir, 0, None, 0, None, |
||||
True, 0, 0, self.callbacks) |
||||
|
||||
@property |
||||
-- |
||||
2.37.3 |
||||
|
@ -0,0 +1,96 @@
@@ -0,0 +1,96 @@
|
||||
From a41c3aefaa4f982511363645f5608e270094cadf Mon Sep 17 00:00:00 2001 |
||||
From: Jan Kolarik <jkolarik@redhat.com> |
||||
Date: Tue, 1 Nov 2022 09:15:08 +0000 |
||||
Subject: [PATCH 2/2] Document changes to offline-upgrade command |
||||
(RhBug:1939975) |
||||
|
||||
A support for security filters was added to the offline-upgrade command. This commit adds the documentation into the man pages. |
||||
|
||||
= changelog = |
||||
type: bugfix |
||||
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1939975 |
||||
--- |
||||
doc/command_ref.rst | 28 ++++++++++++++-------------- |
||||
1 file changed, 14 insertions(+), 14 deletions(-) |
||||
|
||||
diff --git a/doc/command_ref.rst b/doc/command_ref.rst |
||||
index f39f2c71..3ee66bac 100644 |
||||
--- a/doc/command_ref.rst |
||||
+++ b/doc/command_ref.rst |
||||
@@ -114,7 +114,7 @@ Options |
||||
|
||||
``--advisory=<advisory>, --advisories=<advisory>`` |
||||
Include packages corresponding to the advisory ID, Eg. FEDORA-2201-123. |
||||
- Applicable for the install, repoquery, updateinfo and upgrade commands. |
||||
+ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. |
||||
|
||||
``--allowerasing`` |
||||
Allow erasing of installed packages to resolve dependencies. This option could be used as an alternative to the ``yum swap`` command where packages to remove are not explicitly defined. |
||||
@@ -130,12 +130,12 @@ Options |
||||
solver may use older versions of dependencies to meet their requirements. |
||||
|
||||
``--bugfix`` |
||||
- Include packages that fix a bugfix issue. Applicable for the install, repoquery, updateinfo and |
||||
- upgrade commands. |
||||
+ Include packages that fix a bugfix issue. |
||||
+ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. |
||||
|
||||
``--bz=<bugzilla>, --bzs=<bugzilla>`` |
||||
- Include packages that fix a Bugzilla ID, Eg. 123123. Applicable for the install, repoquery, |
||||
- updateinfo and upgrade commands. |
||||
+ Include packages that fix a Bugzilla ID, Eg. 123123. |
||||
+ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. |
||||
|
||||
``-C, --cacheonly`` |
||||
Run entirely from system cache, don't update the cache and use it even in case it is expired. |
||||
@@ -153,8 +153,8 @@ Options |
||||
|
||||
``--cve=<cves>, --cves=<cves>`` |
||||
Include packages that fix a CVE (Common Vulnerabilities and Exposures) ID |
||||
- (http://cve.mitre.org/about/), Eg. CVE-2201-0123. Applicable for the install, repoquery, updateinfo, |
||||
- and upgrade commands. |
||||
+ (http://cve.mitre.org/about/), Eg. CVE-2201-0123. |
||||
+ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. |
||||
|
||||
``-d <debug level>, --debuglevel=<debug level>`` |
||||
Debugging output level. This is an integer value between 0 (no additional information strings) and 10 (shows all debugging information, even that not understandable to the user), default is 2. Deprecated, use ``-v`` instead. |
||||
@@ -217,8 +217,8 @@ Options |
||||
specified multiple times. |
||||
|
||||
``--enhancement`` |
||||
- Include enhancement relevant packages. Applicable for the install, repoquery, updateinfo and |
||||
- upgrade commands. |
||||
+ Include enhancement relevant packages. |
||||
+ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. |
||||
|
||||
.. _exclude_option-label: |
||||
|
||||
@@ -289,8 +289,8 @@ Options |
||||
``--setopt`` using configuration from ``/path/dnf.conf``. |
||||
|
||||
``--newpackage`` |
||||
- Include newpackage relevant packages. Applicable for the install, repoquery, updateinfo and |
||||
- upgrade commands. |
||||
+ Include newpackage relevant packages. |
||||
+ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. |
||||
|
||||
``--noautoremove`` |
||||
Disable removal of dependencies that are no longer used. It sets |
||||
@@ -362,11 +362,11 @@ Options |
||||
|
||||
``--sec-severity=<severity>, --secseverity=<severity>`` |
||||
Includes packages that provide a fix for an issue of the specified severity. |
||||
- Applicable for the install, repoquery, updateinfo and upgrade commands. |
||||
+ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. |
||||
|
||||
``--security`` |
||||
- Includes packages that provide a fix for a security issue. Applicable for the |
||||
- upgrade command. |
||||
+ Includes packages that provide a fix for a security issue. |
||||
+ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. |
||||
|
||||
.. _setopt_option-label: |
||||
|
||||
-- |
||||
2.38.1 |
||||
|
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
From e5732ab22f092bb3fc6ce6e8f94aad72f3654383 Mon Sep 17 00:00:00 2001 |
||||
From: Jan Kolarik <jkolarik@redhat.com> |
||||
Date: Wed, 31 Aug 2022 07:49:39 +0200 |
||||
Subject: [PATCH 1/2] Move system-upgrade plugin to core (RhBug:2054235) |
||||
|
||||
Just doc fix. |
||||
|
||||
= changelog = |
||||
type: bugfix |
||||
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2054235 |
||||
--- |
||||
doc/command_ref.rst | 3 +-- |
||||
1 file changed, 1 insertion(+), 2 deletions(-) |
||||
|
||||
diff --git a/doc/command_ref.rst b/doc/command_ref.rst |
||||
index 996ae3b4..f39f2c71 100644 |
||||
--- a/doc/command_ref.rst |
||||
+++ b/doc/command_ref.rst |
||||
@@ -189,8 +189,7 @@ Options |
||||
``--downloaddir=<path>, --destdir=<path>`` |
||||
Redirect downloaded packages to provided directory. The option has to be used together with the \-\ |
||||
:ref:`-downloadonly <downloadonly-label>` command line option, with the |
||||
- ``download``, ``modulesync`` or ``reposync`` commands (dnf-plugins-core) or with the ``system-upgrade`` command |
||||
- (dnf-plugins-extras). |
||||
+ ``download``, ``modulesync``, ``reposync`` or ``system-upgrade`` commands (dnf-plugins-core). |
||||
|
||||
.. _downloadonly-label: |
||||
|
||||
-- |
||||
2.38.1 |
||||
|
@ -0,0 +1,94 @@
@@ -0,0 +1,94 @@
|
||||
From 3ef5ec915ea4b5e6fe7d25542f0daccef278c01e Mon Sep 17 00:00:00 2001 |
||||
From: Jan Kolarik <jkolarik@redhat.com> |
||||
Date: Tue, 13 Sep 2022 14:35:10 +0200 |
||||
Subject: [PATCH] Fix plugins unit tests + unload plugins upon their deletion |
||||
|
||||
--- |
||||
dnf/plugin.py | 8 ++++++-- |
||||
tests/api/test_dnf_base.py | 24 +++++++++++++++++++----- |
||||
2 files changed, 25 insertions(+), 7 deletions(-) |
||||
|
||||
diff --git a/dnf/plugin.py b/dnf/plugin.py |
||||
index b083727d..d2f46ce3 100644 |
||||
--- a/dnf/plugin.py |
||||
+++ b/dnf/plugin.py |
||||
@@ -98,6 +98,9 @@ class Plugins(object): |
||||
self.plugin_cls = [] |
||||
self.plugins = [] |
||||
|
||||
+ def __del__(self): |
||||
+ self._unload() |
||||
+ |
||||
def _caller(self, method): |
||||
for plugin in self.plugins: |
||||
try: |
||||
@@ -164,8 +167,9 @@ class Plugins(object): |
||||
self._caller('transaction') |
||||
|
||||
def _unload(self): |
||||
- logger.debug(_('Plugins were unloaded')) |
||||
- del sys.modules[DYNAMIC_PACKAGE] |
||||
+ if DYNAMIC_PACKAGE in sys.modules: |
||||
+ logger.log(dnf.logging.DDEBUG, 'Plugins were unloaded.') |
||||
+ del sys.modules[DYNAMIC_PACKAGE] |
||||
|
||||
def unload_removed_plugins(self, transaction): |
||||
""" |
||||
diff --git a/tests/api/test_dnf_base.py b/tests/api/test_dnf_base.py |
||||
index e84e272b..19754b07 100644 |
||||
--- a/tests/api/test_dnf_base.py |
||||
+++ b/tests/api/test_dnf_base.py |
||||
@@ -7,10 +7,23 @@ from __future__ import unicode_literals |
||||
import dnf |
||||
import dnf.conf |
||||
|
||||
+import tests.support |
||||
+ |
||||
from .common import TestCase |
||||
from .common import TOUR_4_4 |
||||
|
||||
|
||||
+def conf_with_empty_plugins(): |
||||
+ """ |
||||
+ Use empty configuration to avoid importing plugins from default paths |
||||
+ which would lead to crash of other tests. |
||||
+ """ |
||||
+ conf = tests.support.FakeConf() |
||||
+ conf.plugins = True |
||||
+ conf.pluginpath = [] |
||||
+ return conf |
||||
+ |
||||
+ |
||||
class DnfBaseApiTest(TestCase): |
||||
def setUp(self): |
||||
self.base = dnf.Base(dnf.conf.Conf()) |
||||
@@ -75,13 +88,12 @@ class DnfBaseApiTest(TestCase): |
||||
self.assertHasType(self.base.transaction, dnf.db.group.RPMTransaction) |
||||
|
||||
def test_init_plugins(self): |
||||
- # Base.init_plugins(disabled_glob=(), enable_plugins=(), cli=None) |
||||
+ # Base.init_plugins() |
||||
self.assertHasAttr(self.base, "init_plugins") |
||||
|
||||
- # disable plugins to avoid calling dnf.plugin.Plugins._load() multiple times |
||||
- # which causes the tests to crash |
||||
- self.base.conf.plugins = False |
||||
- self.base.init_plugins(disabled_glob=(), enable_plugins=(), cli=None) |
||||
+ self.base._conf = conf_with_empty_plugins() |
||||
+ |
||||
+ self.base.init_plugins() |
||||
|
||||
def test_pre_configure_plugins(self): |
||||
# Base.pre_configure_plugins() |
||||
@@ -99,6 +111,8 @@ class DnfBaseApiTest(TestCase): |
||||
# Base.unload_plugins() |
||||
self.assertHasAttr(self.base, "unload_plugins") |
||||
|
||||
+ self.base._conf = conf_with_empty_plugins() |
||||
+ |
||||
self.base.init_plugins() |
||||
self.base.unload_plugins() |
||||
|
||||
-- |
||||
2.38.1 |
||||
|
@ -0,0 +1,50 @@
@@ -0,0 +1,50 @@
|
||||
From 490cf87dd27926d16fb10735b467cbc490d5c9f1 Mon Sep 17 00:00:00 2001 |
||||
From: Jan Kolarik <jkolarik@redhat.com> |
||||
Date: Wed, 23 Nov 2022 08:44:41 +0000 |
||||
Subject: [PATCH] Ignore processing variable files with unsupported encoding |
||||
(RhBug:2141215) |
||||
|
||||
This issue could be seen for example when there are some temporary files stored by text editors in the `/etc/dnf/vars` folder. These files could be in the binary format and causes `UnicodeDecodeError` exception to be thrown during processing of the var files. |
||||
|
||||
= changelog = |
||||
type: bugfix |
||||
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2141215 |
||||
--- |
||||
dnf/conf/substitutions.py | 9 ++++++--- |
||||
1 file changed, 6 insertions(+), 3 deletions(-) |
||||
|
||||
diff --git a/dnf/conf/substitutions.py b/dnf/conf/substitutions.py |
||||
index 1281bdf0..4d0f0d55 100644 |
||||
--- a/dnf/conf/substitutions.py |
||||
+++ b/dnf/conf/substitutions.py |
||||
@@ -18,13 +18,15 @@ |
||||
# Red Hat, Inc. |
||||
# |
||||
|
||||
+import logging |
||||
import os |
||||
import re |
||||
|
||||
-import dnf |
||||
-import dnf.exceptions |
||||
+from dnf.i18n import _ |
||||
|
||||
ENVIRONMENT_VARS_RE = re.compile(r'^DNF_VAR_[A-Za-z0-9_]+$') |
||||
+logger = logging.getLogger('dnf') |
||||
+ |
||||
|
||||
class Substitutions(dict): |
||||
# :api |
||||
@@ -60,7 +62,8 @@ class Substitutions(dict): |
||||
val = fp.readline() |
||||
if val and val[-1] == '\n': |
||||
val = val[:-1] |
||||
- except (OSError, IOError): |
||||
+ except (OSError, IOError, UnicodeDecodeError) as e: |
||||
+ logger.warning(_("Error when parsing a variable from file '{0}': {1}").format(filepath, e)) |
||||
continue |
||||
if val is not None: |
||||
self[fsvar] = val |
||||
-- |
||||
2.39.0 |
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,252 @@
@@ -0,0 +1,252 @@
|
||||
From 56d3e10ecb666da53a77d17e9ac7524f3e1341d8 Mon Sep 17 00:00:00 2001 |
||||
From: Evan Goode <mail@evangoo.de> |
||||
Date: Tue, 24 Jan 2023 09:53:47 -0500 |
||||
Subject: [PATCH 1/4] Add reboot option to DNF Automatic (RhBug:2124793) |
||||
|
||||
Add ability in DNF Automatic to automatically trigger a reboot after an |
||||
upgrade. The `reboot` option supports three settings: ``never`` does not |
||||
reboot the system (current behavior). ``when-changed`` triggers a reboot |
||||
after any upgrade. ``when-needed`` triggers a reboot only when rebooting |
||||
is necessary to apply changes, such as when systemd or the kernel is |
||||
upgraded. The `reboot_command` option allows customizing the command |
||||
used to reboot (default is `shutdown -r`). |
||||
|
||||
= changelog = |
||||
msg: Add `reboot` option to DNF Automatic |
||||
type: enhancement |
||||
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2124793 |
||||
--- |
||||
dnf/automatic/main.py | 9 +++++++++ |
||||
dnf/base.py | 14 ++++++++++++++ |
||||
doc/automatic.rst | 12 ++++++++++++ |
||||
etc/dnf/automatic.conf | 9 +++++++++ |
||||
tests/automatic/test_main.py | 4 ++++ |
||||
5 files changed, 48 insertions(+) |
||||
|
||||
diff --git a/dnf/automatic/main.py b/dnf/automatic/main.py |
||||
index b53d9c00..b68962c2 100644 |
||||
--- a/dnf/automatic/main.py |
||||
+++ b/dnf/automatic/main.py |
||||
@@ -24,6 +24,7 @@ from __future__ import unicode_literals |
||||
|
||||
import argparse |
||||
import logging |
||||
+import os |
||||
import random |
||||
import socket |
||||
import time |
||||
@@ -179,6 +180,9 @@ class CommandsConfig(Config): |
||||
libdnf.conf.VectorString(['default', 'security']))) |
||||
self.add_option('random_sleep', libdnf.conf.OptionNumberInt32(300)) |
||||
self.add_option('network_online_timeout', libdnf.conf.OptionNumberInt32(60)) |
||||
+ self.add_option('reboot', libdnf.conf.OptionEnumString('never', |
||||
+ libdnf.conf.VectorString(['never', 'when-changed', 'when-needed']))) |
||||
+ self.add_option('reboot_command', libdnf.conf.OptionString('shutdown -r')) |
||||
|
||||
def imply(self): |
||||
if self.apply_updates: |
||||
@@ -340,6 +344,11 @@ def main(args): |
||||
base.do_transaction() |
||||
emitters.notify_applied() |
||||
emitters.commit() |
||||
+ |
||||
+ if (conf.commands.reboot == 'when-changed' or |
||||
+ (conf.commands.reboot == 'when-needed' and base.reboot_needed())): |
||||
+ if os.waitstatus_to_exitcode(os.system(conf.commands.reboot_command)) != 0: |
||||
+ return 1 |
||||
except dnf.exceptions.Error as exc: |
||||
logger.error(_('Error: %s'), ucd(exc)) |
||||
return 1 |
||||
diff --git a/dnf/base.py b/dnf/base.py |
||||
index 154eb4e3..24c5a444 100644 |
||||
--- a/dnf/base.py |
||||
+++ b/dnf/base.py |
||||
@@ -2790,6 +2790,20 @@ class Base(object): |
||||
|
||||
return skipped_conflicts, skipped_dependency |
||||
|
||||
+ def reboot_needed(self): |
||||
+ """Check whether a system reboot is recommended following the transaction |
||||
+ |
||||
+ :return: bool |
||||
+ """ |
||||
+ if not self.transaction: |
||||
+ return False |
||||
+ |
||||
+ # List taken from DNF needs-restarting |
||||
+ need_reboot = frozenset(('kernel', 'kernel-rt', 'glibc', |
||||
+ 'linux-firmware', 'systemd', 'dbus', |
||||
+ 'dbus-broker', 'dbus-daemon')) |
||||
+ changed_pkgs = self.transaction.install_set | self.transaction.remove_set |
||||
+ return any(pkg.name in need_reboot for pkg in changed_pkgs) |
||||
|
||||
def _msg_installed(pkg): |
||||
name = ucd(pkg) |
||||
diff --git a/doc/automatic.rst b/doc/automatic.rst |
||||
index b8e47ad1..ade0ca1a 100644 |
||||
--- a/doc/automatic.rst |
||||
+++ b/doc/automatic.rst |
||||
@@ -90,6 +90,18 @@ Setting the mode of operation of the program. |
||||
|
||||
What kind of upgrades to look at. ``default`` signals looking for all available updates, ``security`` only those with an issued security advisory. |
||||
|
||||
+``reboot`` |
||||
+ either one of ``never``, ``when-changed``, ``when-needed``, default: ``never`` |
||||
+ |
||||
+ When the system should reboot following upgrades. ``never`` does not reboot the system. ``when-changed`` triggers a reboot after any upgrade. ``when-needed`` triggers a reboot only when rebooting is necessary to apply changes, such as when systemd or the kernel is upgraded. |
||||
+ |
||||
+``reboot_command`` |
||||
+ string, default: ``shutdown -r`` |
||||
+ |
||||
+ Specify the command to run to trigger a reboot of the system. For example, add a 5-minute delay and a wall message by using ``shutdown -r +5 'Rebooting after upgrading packages'`` |
||||
+ |
||||
+ |
||||
+ |
||||
---------------------- |
||||
``[emitters]`` section |
||||
---------------------- |
||||
diff --git a/etc/dnf/automatic.conf b/etc/dnf/automatic.conf |
||||
index 1f7e9402..9735447f 100644 |
||||
--- a/etc/dnf/automatic.conf |
||||
+++ b/etc/dnf/automatic.conf |
||||
@@ -21,6 +21,15 @@ download_updates = yes |
||||
# install.timer override this setting. |
||||
apply_updates = no |
||||
|
||||
+# When the system should reboot following upgrades: |
||||
+# never = don't reboot after upgrades |
||||
+# when-changed = reboot after any changes |
||||
+# when-needed = reboot when necessary to apply changes |
||||
+reboot = never |
||||
+ |
||||
+# The command that is run to trigger a system reboot. |
||||
+reboot_command = "shutdown -r" |
||||
+ |
||||
|
||||
[emitters] |
||||
# Name to use for this system in messages that are emitted. Default is the |
||||
diff --git a/tests/automatic/test_main.py b/tests/automatic/test_main.py |
||||
index 27ffa407..dc4acd52 100644 |
||||
--- a/tests/automatic/test_main.py |
||||
+++ b/tests/automatic/test_main.py |
||||
@@ -49,3 +49,7 @@ class TestConfig(tests.support.TestCase): |
||||
conf = dnf.automatic.main.AutomaticConfig(FILE, downloadupdates=True, installupdates=False) |
||||
self.assertTrue(conf.commands.download_updates) |
||||
self.assertFalse(conf.commands.apply_updates) |
||||
+ |
||||
+ # test that reboot is "never" by default |
||||
+ conf = dnf.automatic.main.AutomaticConfig(FILE) |
||||
+ self.assertEqual(conf.commands.reboot, 'never') |
||||
-- |
||||
2.40.0 |
||||
|
||||
|
||||
From 8d7608f3462deddf36d5a75ff66f847a30b78026 Mon Sep 17 00:00:00 2001 |
||||
From: Evan Goode <mail@evangoo.de> |
||||
Date: Tue, 24 Jan 2023 09:59:22 -0500 |
||||
Subject: [PATCH 2/4] Add Evan Goode to AUTHORS |
||||
|
||||
--- |
||||
AUTHORS | 1 + |
||||
1 file changed, 1 insertion(+) |
||||
|
||||
diff --git a/AUTHORS b/AUTHORS |
||||
index 50bff95b..e802a51e 100644 |
||||
--- a/AUTHORS |
||||
+++ b/AUTHORS |
||||
@@ -69,6 +69,7 @@ DNF CONTRIBUTORS |
||||
Dave Johansen <davejohansen@gmail.com> |
||||
Dylan Pindur <dylanpindur@gmail.com> |
||||
Eduard Cuba <ecuba@redhat.com> |
||||
+ Evan Goode <egoode@redhat.com> |
||||
Filipe Brandenburger <filbranden@gmail.com> |
||||
Frank Dana <ferdnyc@gmail.com> |
||||
George Machitidze <giomac@gmail.com> |
||||
-- |
||||
2.40.0 |
||||
|
||||
|
||||
From 9deed331cb7a1890e1f11a57c989c300b1641a88 Mon Sep 17 00:00:00 2001 |
||||
From: Evan Goode <mail@evangoo.de> |
||||
Date: Tue, 24 Jan 2023 17:12:46 -0500 |
||||
Subject: [PATCH 3/4] DNF Automatic reboot: 5-minute delay and wall by default |
||||
|
||||
--- |
||||
dnf/automatic/main.py | 2 +- |
||||
doc/automatic.rst | 4 ++-- |
||||
etc/dnf/automatic.conf | 2 +- |
||||
3 files changed, 4 insertions(+), 4 deletions(-) |
||||
|
||||
diff --git a/dnf/automatic/main.py b/dnf/automatic/main.py |
||||
index b68962c2..a03c359f 100644 |
||||
--- a/dnf/automatic/main.py |
||||
+++ b/dnf/automatic/main.py |
||||
@@ -182,7 +182,7 @@ class CommandsConfig(Config): |
||||
self.add_option('network_online_timeout', libdnf.conf.OptionNumberInt32(60)) |
||||
self.add_option('reboot', libdnf.conf.OptionEnumString('never', |
||||
libdnf.conf.VectorString(['never', 'when-changed', 'when-needed']))) |
||||
- self.add_option('reboot_command', libdnf.conf.OptionString('shutdown -r')) |
||||
+ self.add_option('reboot_command', libdnf.conf.OptionString('shutdown -r +5 \'Rebooting after applying package updates\'')) |
||||
|
||||
def imply(self): |
||||
if self.apply_updates: |
||||
diff --git a/doc/automatic.rst b/doc/automatic.rst |
||||
index ade0ca1a..329c2f46 100644 |
||||
--- a/doc/automatic.rst |
||||
+++ b/doc/automatic.rst |
||||
@@ -96,9 +96,9 @@ Setting the mode of operation of the program. |
||||
When the system should reboot following upgrades. ``never`` does not reboot the system. ``when-changed`` triggers a reboot after any upgrade. ``when-needed`` triggers a reboot only when rebooting is necessary to apply changes, such as when systemd or the kernel is upgraded. |
||||
|
||||
``reboot_command`` |
||||
- string, default: ``shutdown -r`` |
||||
+ string, default: ``shutdown -r +5 'Rebooting after applying package updates'`` |
||||
|
||||
- Specify the command to run to trigger a reboot of the system. For example, add a 5-minute delay and a wall message by using ``shutdown -r +5 'Rebooting after upgrading packages'`` |
||||
+ Specify the command to run to trigger a reboot of the system. For example, to skip the 5-minute delay and wall message, use ``shutdown -r`` |
||||
|
||||
|
||||
|
||||
diff --git a/etc/dnf/automatic.conf b/etc/dnf/automatic.conf |
||||
index 9735447f..e61b12af 100644 |
||||
--- a/etc/dnf/automatic.conf |
||||
+++ b/etc/dnf/automatic.conf |
||||
@@ -28,7 +28,7 @@ apply_updates = no |
||||
reboot = never |
||||
|
||||
# The command that is run to trigger a system reboot. |
||||
-reboot_command = "shutdown -r" |
||||
+reboot_command = "shutdown -r +5 'Rebooting after applying package updates'" |
||||
|
||||
|
||||
[emitters] |
||||
-- |
||||
2.40.0 |
||||
|
||||
|
||||
From b002f47a763e442277913a06df963b0ca91deb54 Mon Sep 17 00:00:00 2001 |
||||
From: Evan Goode <mail@evangoo.de> |
||||
Date: Wed, 25 Jan 2023 09:47:59 -0500 |
||||
Subject: [PATCH 4/4] DNF Automatic: error message for failed reboot command |
||||
|
||||
--- |
||||
dnf/automatic/main.py | 4 +++- |
||||
1 file changed, 3 insertions(+), 1 deletion(-) |
||||
|
||||
diff --git a/dnf/automatic/main.py b/dnf/automatic/main.py |
||||
index a03c359f..11c35ecf 100644 |
||||
--- a/dnf/automatic/main.py |
||||
+++ b/dnf/automatic/main.py |
||||
@@ -347,7 +347,9 @@ def main(args): |
||||
|
||||
if (conf.commands.reboot == 'when-changed' or |
||||
(conf.commands.reboot == 'when-needed' and base.reboot_needed())): |
||||
- if os.waitstatus_to_exitcode(os.system(conf.commands.reboot_command)) != 0: |
||||
+ exit_code = os.waitstatus_to_exitcode(os.system(conf.commands.reboot_command)) |
||||
+ if exit_code != 0: |
||||
+ logger.error('Error: reboot command returned nonzero exit code: %d', exit_code) |
||||
return 1 |
||||
except dnf.exceptions.Error as exc: |
||||
logger.error(_('Error: %s'), ucd(exc)) |
||||
-- |
||||
2.40.0 |
||||
|
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
From b0caa16589763699174f47a3e36a703e1af32ed4 Mon Sep 17 00:00:00 2001 |
||||
From: Kyle Walker <kwalker@redhat.com> |
||||
Date: Tue, 20 Dec 2022 08:42:03 -0500 |
||||
Subject: [PATCH] Omit src RPMs from check-update (RhBug: 2151910) |
||||
|
||||
The current check-update operation relies on src RPMs not being included |
||||
in the available repos. When those repos are enabled, *.src RPMs can be |
||||
emitted as updates that are available. Those RPMs are not updated in the |
||||
traditional fashion and can cause confusion to end users. |
||||
|
||||
This change unconditionally filters out src packages in the |
||||
_list_patterns() callpath. |
||||
|
||||
= changelog = |
||||
type: bugfix |
||||
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2151910 |
||||
--- |
||||
dnf/base.py | 4 ++++ |
||||
1 file changed, 4 insertions(+) |
||||
|
||||
diff --git a/dnf/base.py b/dnf/base.py |
||||
index 24c5a44..7e97e21 100644 |
||||
--- a/dnf/base.py |
||||
+++ b/dnf/base.py |
||||
@@ -1543,6 +1543,8 @@ class Base(object): |
||||
updates = query_for_repo(q).filterm(upgrades_by_priority=True) |
||||
# reduce a query to security upgrades if they are specified |
||||
updates = self._merge_update_filters(updates, upgrade=True) |
||||
+ # reduce a query to remove src RPMs |
||||
+ updates.filterm(arch__neq=['src', 'nosrc']) |
||||
# reduce a query to latest packages |
||||
updates = updates.latest().run() |
||||
|
||||
@@ -1595,6 +1597,8 @@ class Base(object): |
||||
self.sack.query()).filter(obsoletes_by_priority=inst) |
||||
# reduce a query to security upgrades if they are specified |
||||
obsoletes = self._merge_update_filters(obsoletes, warning=False, upgrade=True) |
||||
+ # reduce a query to remove src RPMs |
||||
+ obsoletes.filterm(arch__neq=['src', 'nosrc']) |
||||
obsoletesTuples = [] |
||||
for new in obsoletes: |
||||
obsoleted_reldeps = new.obsoletes |
||||
-- |
||||
libgit2 1.3.2 |
||||
|
@ -0,0 +1,66 @@
@@ -0,0 +1,66 @@
|
||||
From fcc21cf217a7dfaaf79ca36b5afab6344380eae1 Mon Sep 17 00:00:00 2001 |
||||
From: Marek Blaha <mblaha@redhat.com> |
||||
Date: Mon, 3 Apr 2023 12:19:40 +0200 |
||||
Subject: [PATCH] automatic: Fix online detection with proxy (RhBz:2022440) |
||||
|
||||
In case the proxy is configured (either for a repo of globally) it is |
||||
used also for detecting whether the system is online. |
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2022440 |
||||
--- |
||||
dnf/automatic/main.py | 23 ++++++++++++++++------- |
||||
1 file changed, 16 insertions(+), 7 deletions(-) |
||||
|
||||
diff --git a/dnf/automatic/main.py b/dnf/automatic/main.py |
||||
index 11c35ec..756531e 100644 |
||||
--- a/dnf/automatic/main.py |
||||
+++ b/dnf/automatic/main.py |
||||
@@ -182,7 +182,8 @@ class CommandsConfig(Config): |
||||
self.add_option('network_online_timeout', libdnf.conf.OptionNumberInt32(60)) |
||||
self.add_option('reboot', libdnf.conf.OptionEnumString('never', |
||||
libdnf.conf.VectorString(['never', 'when-changed', 'when-needed']))) |
||||
- self.add_option('reboot_command', libdnf.conf.OptionString('shutdown -r +5 \'Rebooting after applying package updates\'')) |
||||
+ self.add_option('reboot_command', libdnf.conf.OptionString( |
||||
+ 'shutdown -r +5 \'Rebooting after applying package updates\'')) |
||||
|
||||
def imply(self): |
||||
if self.apply_updates: |
||||
@@ -255,21 +256,29 @@ def wait_for_network(repos, timeout): |
||||
'http': 80, |
||||
'https': 443, |
||||
'ftp': 21, |
||||
+ 'socks': 1080, |
||||
+ 'socks5': 1080, |
||||
} |
||||
|
||||
def remote_address(url_list): |
||||
for url in url_list: |
||||
parsed_url = dnf.pycomp.urlparse.urlparse(url) |
||||
- if parsed_url.hostname and parsed_url.scheme in remote_schemes: |
||||
- yield (parsed_url.hostname, |
||||
- parsed_url.port or remote_schemes[parsed_url.scheme]) |
||||
+ if (not parsed_url.hostname) \ |
||||
+ or (not parsed_url.port and parsed_url.scheme not in remote_schemes): |
||||
+ # skip urls without hostname or without recognized port |
||||
+ continue |
||||
+ yield (parsed_url.hostname, |
||||
+ parsed_url.port or remote_schemes[parsed_url.scheme]) |
||||
|
||||
# collect possible remote repositories urls |
||||
addresses = set() |
||||
for repo in repos.iter_enabled(): |
||||
- addresses.update(remote_address(repo.baseurl)) |
||||
- addresses.update(remote_address([repo.mirrorlist])) |
||||
- addresses.update(remote_address([repo.metalink])) |
||||
+ if repo.proxy: |
||||
+ addresses.update(remote_address([repo.proxy])) |
||||
+ else: |
||||
+ addresses.update(remote_address(repo.baseurl)) |
||||
+ addresses.update(remote_address([repo.mirrorlist])) |
||||
+ addresses.update(remote_address([repo.metalink])) |
||||
|
||||
if not addresses: |
||||
# there is no remote repository enabled so network connection should not be needed |
||||
-- |
||||
libgit2 1.3.2 |
||||
|
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
From e62164e450c05d626e4ca2b5dc2728939686b423 Mon Sep 17 00:00:00 2001 |
||||
From: Jan Kolarik <jkolarik@redhat.com> |
||||
Date: Thu, 20 Apr 2023 10:10:14 +0000 |
||||
Subject: [PATCH] automatic: Return an error when transaction fails |
||||
(RhBug:2170093) |
||||
|
||||
In case of no global error occurred within the transaction, we still need to check state of individual transaction items for any failure. |
||||
|
||||
This is matching the logic in `BaseCli.do_transaction` method, where the error is emitted after printing the transaction summary. |
||||
|
||||
= changelog = |
||||
msg: automatic: Return an error when transaction fails |
||||
type: bugfix |
||||
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2170093 |
||||
--- |
||||
dnf/automatic/main.py | 7 +++++++ |
||||
1 file changed, 7 insertions(+) |
||||
|
||||
diff --git a/dnf/automatic/main.py b/dnf/automatic/main.py |
||||
index 756531e7..f6f4049b 100644 |
||||
--- a/dnf/automatic/main.py |
||||
+++ b/dnf/automatic/main.py |
||||
@@ -351,6 +351,13 @@ def main(args): |
||||
|
||||
gpgsigcheck(base, trans.install_set) |
||||
base.do_transaction() |
||||
+ |
||||
+ # In case of no global error occurred within the transaction, |
||||
+ # we need to check state of individual transaction items. |
||||
+ for tsi in trans: |
||||
+ if tsi.state == libdnf.transaction.TransactionItemState_ERROR: |
||||
+ raise dnf.exceptions.Error(_('Transaction failed')) |
||||
+ |
||||
emitters.notify_applied() |
||||
emitters.commit() |
||||
|
||||
-- |
||||
2.40.1 |
||||
|
@ -0,0 +1,63 @@
@@ -0,0 +1,63 @@
|
||||
From 0f979bd00d22d52f4970897207bd43a74db90bcc Mon Sep 17 00:00:00 2001 |
||||
From: Evan Goode <mail@evangoo.de> |
||||
Date: Tue, 30 May 2023 20:48:54 +0000 |
||||
Subject: [PATCH] Document symbols in `dnf history list` output |
||||
|
||||
This patch adds documentation for the symbols shown in the "Action(s)" |
||||
and "Altered" columns of `dnf history list` |
||||
|
||||
The "Action(s)" column abbreviates the names of transaction actions when |
||||
there was more than one action, e.g. a transaction that both installs |
||||
and upgrades packages would be displayed as "I, U". |
||||
|
||||
The "Altered" column prints some extra symbols when something unusual |
||||
happened with the transaction, like if any warnings were printed or if |
||||
it completed with a non-zero status. |
||||
|
||||
Some language was taken from the yum man pages: |
||||
https://github.com/rpm-software-management/yum/blob/master/docs/yum.8. |
||||
It appears we no longer use the "P" or "s" symbols. |
||||
|
||||
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=2172067 |
||||
(RhBug:2172067) |
||||
|
||||
= changelog = |
||||
msg: Document the symbols in the output of `dnf history list` |
||||
type: bugfix |
||||
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2172067 |
||||
--- |
||||
doc/command_ref.rst | 18 ++++++++++++++++++ |
||||
1 file changed, 18 insertions(+) |
||||
|
||||
diff --git a/doc/command_ref.rst b/doc/command_ref.rst |
||||
index 3ee66bac..0e6cea01 100644 |
||||
--- a/doc/command_ref.rst |
||||
+++ b/doc/command_ref.rst |
||||
@@ -710,6 +710,24 @@ transactions and act according to this information (assuming the |
||||
which specifies a transaction by a package which it manipulated. When no |
||||
transaction is specified, list all known transactions. |
||||
|
||||
+ The "Action(s)" column lists each type of action taken in the transaction. The possible values are: |
||||
+ |
||||
+ * Install (I): a new package was installed on the system |
||||
+ * Downgrade (D): an older version of a package replaced the previously-installed version |
||||
+ * Obsolete (O): an obsolete package was replaced by a new package |
||||
+ * Upgrade (U): a newer version of the package replaced the previously-installed version |
||||
+ * Remove (E): a package was removed from the system |
||||
+ * Reinstall (R): a package was reinstalled with the same version |
||||
+ * Reason change (C): a package was kept in the system but its reason for being installed changed |
||||
+ |
||||
+ The "Altered" column lists the number of actions taken in each transaction, possibly followed by one or two the following symbols: |
||||
+ |
||||
+ * ``>``: The RPM database was changed, outside DNF, after the transaction |
||||
+ * ``<``: The RPM database was changed, outside DNF, before the transaction |
||||
+ * ``*``: The transaction aborted before completion |
||||
+ * ``#``: The transaction completed, but with a non-zero status |
||||
+ * ``E``: The transaction completed successfully, but had warning/error output |
||||
+ |
||||
``--reverse`` |
||||
The order of ``history list`` output is printed in reverse order. |
||||
|
||||
-- |
||||
2.40.1 |
||||
|
Loading…
Reference in new issue