Backport patches
Resolves: rhbz#2124793 Resolves: rhbz#2203069 Resolves: rhbz#2189851
This commit is contained in:
parent
b75daf58a4
commit
2e74dd7138
252
0007-Add-reboot-option-to-DNF-Automatic.patch
Normal file
252
0007-Add-reboot-option-to-DNF-Automatic.patch
Normal file
@ -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
|
||||
|
45
0008-Omit-src-RPMs-from-check-update-RhBug-2151910.patch
Normal file
45
0008-Omit-src-RPMs-from-check-update-RhBug-2151910.patch
Normal file
@ -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 @@
|
||||
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
|
||||
|
10
dnf.spec
10
dnf.spec
@ -66,7 +66,7 @@ It supports RPMs, modules and comps groups & environments.
|
||||
|
||||
Name: dnf
|
||||
Version: 4.14.0
|
||||
Release: 5%{?dist}
|
||||
Release: 6%{?dist}
|
||||
Summary: %{pkg_summary}
|
||||
# For a breakdown of the licensing, see PACKAGE-LICENSING
|
||||
License: GPLv2+
|
||||
@ -78,6 +78,9 @@ Patch3: 0003-Move-system-upgrade-plugin-to-core-RhBug-2054235.patch
|
||||
Patch4: 0004-Fix-plugins-unit-tests.patch
|
||||
Patch5: 0005-Ignore-processing-variable-files-with-unsupported-en.patch
|
||||
Patch6: 0006-Update-translations.patch
|
||||
Patch7: 0007-Add-reboot-option-to-DNF-Automatic.patch
|
||||
Patch8: 0008-Omit-src-RPMs-from-check-update-RhBug-2151910.patch
|
||||
Patch9: 0009-automatic-Fix-online-detection-with-proxy-RhBz2022440.patch
|
||||
|
||||
BuildArch: noarch
|
||||
BuildRequires: cmake
|
||||
@ -366,6 +369,11 @@ popd
|
||||
%{python3_sitelib}/%{name}/automatic/
|
||||
|
||||
%changelog
|
||||
* Thu May 11 2023 Jaroslav Rohel <jrohel@redhat.com> - 4.14.0-6
|
||||
- Add reboot option to DNF Automatic (RhBug:2124793)
|
||||
- Omit src RPMs from check-update (RhBug:2151910,2203069)
|
||||
- automatic: Fix online detection with proxy (RhBug:2022440,2189851)
|
||||
|
||||
* Wed Mar 15 2023 Marek Blaha <mblaha@redhat.com> - 4.14.0-5
|
||||
- Update translations
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user