import CS dnf-plugins-core-4.3.0-20.el9
This commit is contained in:
parent
0f05b3a37b
commit
02b5eb093a
@ -0,0 +1,26 @@
|
||||
From 1177f339dc3c428d57aef9ec6ae5d1db09ff7b95 Mon Sep 17 00:00:00 2001
|
||||
From: Pavla Kratochvilova <pkratoch@redhat.com>
|
||||
Date: Wed, 24 Jul 2024 11:05:18 +0200
|
||||
Subject: [PATCH] reposync: Respect --norepopath with --metadata-path
|
||||
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-40914
|
||||
---
|
||||
plugins/reposync.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/plugins/reposync.py b/plugins/reposync.py
|
||||
index 0ff936f..ab513e7 100644
|
||||
--- a/plugins/reposync.py
|
||||
+++ b/plugins/reposync.py
|
||||
@@ -180,7 +180,7 @@ class RepoSyncCommand(dnf.cli.Command):
|
||||
|
||||
def metadata_target(self, repo):
|
||||
if self.opts.metadata_path:
|
||||
- return _pkgdir(self.opts.metadata_path, repo.id)
|
||||
+ return _pkgdir(self.opts.metadata_path, repo.id if not self.opts.norepopath else '')
|
||||
else:
|
||||
return self.repo_target(repo)
|
||||
|
||||
--
|
||||
2.46.2
|
||||
|
@ -0,0 +1,159 @@
|
||||
From 8cf40027b920b3760d6d1df9eb280b4f3772f290 Mon Sep 17 00:00:00 2001
|
||||
From: Evan Goode <mail@evangoo.de>
|
||||
Date: Thu, 3 Oct 2024 21:37:58 +0000
|
||||
Subject: [PATCH] needs-restarting: Get boot time from systemd
|
||||
UnitsLoadStartTimestamp
|
||||
|
||||
Resolves https://issues.redhat.com/browse/RHEL-35577.
|
||||
|
||||
Get the boot time from UnitsLoadStartTimestamp if systemd is available,
|
||||
but make sure to use the kernel boot time for calculating process start
|
||||
times using data from procfs. The previous attempt [1] at this failed to
|
||||
do so and introduced a regression [2].
|
||||
|
||||
Also, get the kernel boot time from the btime field of /proc/stat instead of
|
||||
calculating it from /proc/uptime, to be consistent with what procps-ng
|
||||
does.
|
||||
|
||||
[1] https://github.com/rpm-software-management/dnf-plugins-core/pull/527
|
||||
[2] https://issues.redhat.com/browse/RHEL-39775
|
||||
---
|
||||
plugins/needs_restarting.py | 106 +++++++++++++++++++++++++++---------
|
||||
1 file changed, 81 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/plugins/needs_restarting.py b/plugins/needs_restarting.py
|
||||
index 309a216..9c77af7 100644
|
||||
--- a/plugins/needs_restarting.py
|
||||
+++ b/plugins/needs_restarting.py
|
||||
@@ -203,36 +203,89 @@ class OpenedFile(object):
|
||||
return match.group(1)
|
||||
return self.name
|
||||
|
||||
-
|
||||
class ProcessStart(object):
|
||||
def __init__(self):
|
||||
- self.boot_time = self.get_boot_time()
|
||||
- self.sc_clk_tck = self.get_sc_clk_tck()
|
||||
+ self.kernel_boot_time = ProcessStart.get_kernel_boot_time()
|
||||
+ self.boot_time = ProcessStart.get_boot_time(self.kernel_boot_time)
|
||||
+ self.sc_clk_tck = ProcessStart.get_sc_clk_tck()
|
||||
+
|
||||
+ @staticmethod
|
||||
+ def get_kernel_boot_time():
|
||||
+ try:
|
||||
+ with open('/proc/stat', 'r') as file:
|
||||
+ for line in file:
|
||||
+ if line.startswith("btime "):
|
||||
+ key, value = line.split()
|
||||
+ return float(value)
|
||||
+ except OSError as e:
|
||||
+ logger.debug("Couldn't read /proc/stat: %s", e)
|
||||
+ return 0
|
||||
|
||||
@staticmethod
|
||||
- def get_boot_time():
|
||||
+ def get_boot_time(kernel_boot_time):
|
||||
"""
|
||||
- We have two sources from which to derive the boot time. These values vary
|
||||
+ We have three sources from which to derive the boot time. These values vary
|
||||
depending on containerization, existence of a Real Time Clock, etc.
|
||||
- For our purposes we want the latest derived value.
|
||||
+ - UnitsLoadStartTimestamp property on /org/freedesktop/systemd1
|
||||
+ The start time of the service manager, according to systemd itself.
|
||||
+ Seems to be more reliable than UserspaceTimestamp when the RTC is
|
||||
+ in local time. Works unless the system was not booted with systemd,
|
||||
+ such as in (most) containers.
|
||||
- st_mtime of /proc/1
|
||||
- Reflects the time the first process was run after booting
|
||||
- This works for all known cases except machines without
|
||||
- a RTC - they awake at the start of the epoch.
|
||||
- - /proc/uptime
|
||||
- Seconds field of /proc/uptime subtracted from the current time
|
||||
- Works for machines without RTC iff the current time is reasonably correct.
|
||||
- Does not work on containers which share their kernel with the
|
||||
- host - there the host kernel uptime is returned
|
||||
+ Reflects the time the first process was run after booting. This
|
||||
+ works for all known cases except machines without a RTC---they
|
||||
+ awake at the start of the epoch.
|
||||
+ - btime field of /proc/stat
|
||||
+ Reflects the time when the kernel started. Works for machines
|
||||
+ without RTC iff the current time is reasonably correct. Does not
|
||||
+ work on containers which share their kernel with the host---there,
|
||||
+ the host kernel uptime is returned.
|
||||
"""
|
||||
|
||||
- proc_1_boot_time = int(os.stat('/proc/1').st_mtime)
|
||||
- if os.path.isfile('/proc/uptime'):
|
||||
- with open('/proc/uptime', 'rb') as f:
|
||||
- uptime = f.readline().strip().split()[0].strip()
|
||||
- proc_uptime_boot_time = int(time.time() - float(uptime))
|
||||
- return max(proc_1_boot_time, proc_uptime_boot_time)
|
||||
- return proc_1_boot_time
|
||||
+ units_load_start_timestamp = None
|
||||
+ try:
|
||||
+ # systemd timestamps are the preferred method to determine boot
|
||||
+ # time. max(proc_1_boot_time, kernel_boot_time) does not allow us
|
||||
+ # to disambiguate between an unreliable RTC (e.g. the RTC is in
|
||||
+ # UTC+1 instead of UTC) and a container with a proc_1_boot_time >
|
||||
+ # kernel_boot_time. So we use UnitsLoadStartTimestamp if it's
|
||||
+ # available, else fall back to the other methods.
|
||||
+ bus = dbus.SystemBus()
|
||||
+ systemd1 = bus.get_object(
|
||||
+ 'org.freedesktop.systemd1',
|
||||
+ '/org/freedesktop/systemd1'
|
||||
+ )
|
||||
+ props = dbus.Interface(
|
||||
+ systemd1,
|
||||
+ dbus.PROPERTIES_IFACE
|
||||
+ )
|
||||
+ units_load_start_timestamp = props.Get(
|
||||
+ 'org.freedesktop.systemd1.Manager',
|
||||
+ 'UnitsLoadStartTimestamp'
|
||||
+ )
|
||||
+ if units_load_start_timestamp != 0:
|
||||
+ systemd_boot_time = units_load_start_timestamp / (1000 * 1000)
|
||||
+ logger.debug("Got boot time from systemd: %s", systemd_boot_time)
|
||||
+ return systemd_boot_time
|
||||
+ except dbus.exceptions.DBusException as e:
|
||||
+ logger.debug("D-Bus error getting boot time from systemd: %s", e)
|
||||
+
|
||||
+ logger.debug("Couldn't get boot time from systemd, checking st_mtime of /proc/1 and btime field of /proc/stat.")
|
||||
+
|
||||
+ try:
|
||||
+ proc_1_boot_time = float(os.stat('/proc/1').st_mtime)
|
||||
+ except OSError as e:
|
||||
+ logger.debug("Couldn't stat /proc/1: %s", e)
|
||||
+ proc_1_boot_time = 1
|
||||
+ kernel_boot_time = kernel_boot_time
|
||||
+
|
||||
+ boot_time = max(proc_1_boot_time, kernel_boot_time)
|
||||
+
|
||||
+ logger.debug("st_mtime of /proc/1: %s", proc_1_boot_time)
|
||||
+ logger.debug("btime field of /proc/stat: %s", kernel_boot_time)
|
||||
+ logger.debug("Using %s as the system boot time.", boot_time)
|
||||
+
|
||||
+ return boot_time
|
||||
|
||||
@staticmethod
|
||||
def get_sc_clk_tck():
|
||||
@@ -241,10 +294,13 @@ class ProcessStart(object):
|
||||
def __call__(self, pid):
|
||||
stat_fn = '/proc/%d/stat' % pid
|
||||
with open(stat_fn) as stat_file:
|
||||
- stats = stat_file.read().strip().split()
|
||||
- ticks_after_boot = int(stats[21])
|
||||
- secs_after_boot = ticks_after_boot // self.sc_clk_tck
|
||||
- return self.boot_time + secs_after_boot
|
||||
+ stats = stat_file.read().split()
|
||||
+ ticks_after_kernel_boot = int(stats[21])
|
||||
+ secs_after_kernel_boot = ticks_after_kernel_boot / self.sc_clk_tck
|
||||
+
|
||||
+ # The process's start time is always measured relative to the kernel
|
||||
+ # start time, not either of the other methods we use to get "boot time".
|
||||
+ return self.kernel_boot_time + secs_after_kernel_boot
|
||||
|
||||
|
||||
@dnf.plugin.register_command
|
||||
--
|
||||
2.47.0
|
||||
|
@ -0,0 +1,45 @@
|
||||
From 275b858c8b90f880fe71c99bd07aeb76637a0926 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Curtin <ecurtin@redhat.com>
|
||||
Date: Wed, 7 Jun 2023 20:04:25 +0100
|
||||
Subject: [PATCH] "dnf copr enable" on "Asahi Fedora Linux Remix" guesses
|
||||
epel..x86_64
|
||||
|
||||
Resolves https://issues.redhat.com/browse/RHEL-56143.
|
||||
|
||||
On Asahi Fedora Linux Remix, this can occur when doing a dnf copr
|
||||
enable:
|
||||
|
||||
Repository 'epel-37-x86_64' does not exist in project '@asahi/mesa'
|
||||
|
||||
There are two bugs here, the code doesn't recongize this as a Fedora
|
||||
distro and defaults to x86_64 when in this case it's actually an aarch64
|
||||
system.
|
||||
---
|
||||
plugins/copr.py | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/plugins/copr.py b/plugins/copr.py
|
||||
index 16946b7..ae4f2e0 100644
|
||||
--- a/plugins/copr.py
|
||||
+++ b/plugins/copr.py
|
||||
@@ -444,7 +444,7 @@ Bugzilla. In case of problems, contact the owner of this repository.
|
||||
dist = linux_distribution()
|
||||
# Get distribution architecture
|
||||
distarch = self.base.conf.substitutions['basearch']
|
||||
- if any([name in dist for name in ["Fedora", "Fedora Linux"]]):
|
||||
+ if "Fedora" in dist[0]:
|
||||
if "Rawhide" in dist:
|
||||
chroot = ("fedora-rawhide-" + distarch)
|
||||
# workaround for enabling repos in Rawhide when VERSION in os-release
|
||||
@@ -470,7 +470,7 @@ Bugzilla. In case of problems, contact the owner of this repository.
|
||||
else:
|
||||
chroot = ("opensuse-leap-{0}-{1}".format(dist[1], distarch))
|
||||
else:
|
||||
- chroot = ("epel-%s-x86_64" % dist[1].split(".", 1)[0])
|
||||
+ chroot = ("epel-{}-{}".format(dist[1].split(".", 1)[0], distarch if distarch else "x86_64"))
|
||||
return chroot
|
||||
|
||||
def _download_repo(self, project_name, repo_filename):
|
||||
--
|
||||
2.47.1
|
||||
|
@ -34,7 +34,7 @@
|
||||
|
||||
Name: dnf-plugins-core
|
||||
Version: 4.3.0
|
||||
Release: 16%{?dist}
|
||||
Release: 20%{?dist}
|
||||
Summary: Core Plugins for DNF
|
||||
License: GPLv2+
|
||||
URL: https://github.com/rpm-software-management/dnf-plugins-core
|
||||
@ -54,6 +54,9 @@ Patch12: 0012-RHEL-6394-Fix-incorrect-spanish-translation-file.patch
|
||||
Patch13: 0013-Fix-for-issue-with-binary-garbage-in-smaps-files.patch
|
||||
Patch14: 0014-needs-restarting-Add-microcode_ctl-to-a-reboot-list.patch
|
||||
Patch18: 0018-system-upgrade-change-http-to-https-in-unit-file.patch
|
||||
Patch19: 0019-reposync-Respect-norepopath-with-metadata-path.patch
|
||||
Patch20: 0020-needs-restarting-Get-boot-time-from-systemd-UnitsLoa.patch
|
||||
Patch21: 0021-dnf-copr-enable-on-Asahi-Fedora-Linux-Remix-guesses.patch
|
||||
|
||||
BuildArch: noarch
|
||||
BuildRequires: cmake
|
||||
@ -801,6 +804,18 @@ ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Mon Dec 16 2024 Jan Kolarik <jkolarik@redhat.com> - 4.3.0-20
|
||||
- Add forgotten changelog
|
||||
|
||||
* Mon Dec 16 2024 Jan Kolarik <jkolarik@redhat.com> - 4.3.0-19
|
||||
- Backport patch: "dnf copr enable" on "Asahi Fedora Linux Remix" guesses (RHEL-56143)
|
||||
|
||||
* Thu Nov 21 2024 Evan Goode <egoode@redhat.com> - 4.3.0-18
|
||||
- needs-restarting: Get boot time from systemd UnitsLoadStartTimestamp (RHEL-14900)
|
||||
|
||||
* Thu Oct 10 2024 Pavla Kratochvilova <pkratoch@redhat.com> - 4.3.0-17
|
||||
- reposync: Respect --norepopath with --metadata-path (RHEL-40914)
|
||||
|
||||
* Thu Jun 06 2024 Petr Pisar <ppisar@redhat.com> - 4.3.0-16
|
||||
- Revert needs-restarting prefers to obtain a boot time from systemd to deal
|
||||
with RTCs running in local time (RHEL-39775)
|
||||
|
Loading…
Reference in New Issue
Block a user