all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH container] fix #4192: add new architecture-dependent path to check for newer versions of systemd
@ 2022-09-09 11:45 Leo Nunner
  2022-09-12  9:13 ` Thomas Lamprecht
  0 siblings, 1 reply; 6+ messages in thread
From: Leo Nunner @ 2022-09-09 11:45 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Leo Nunner <l.nunner@proxmox.com>
---
In newer versions, libsystemd-shared-*.so is placed in an
architecture-specific folder (e.g. /usr/lib/x86_64-linux-gnu/systemd/). 
I adapted the code to include the current architecture while searching, as 
well as allowing for the addition of further paths, should it change again 
in the future.

 src/PVE/LXC/Setup.pm           |  2 +-
 src/PVE/LXC/Setup/Alpine.pm    |  2 +-
 src/PVE/LXC/Setup/Base.pm      | 33 +++++++++++++++++++++++++--------
 src/PVE/LXC/Setup/Devuan.pm    |  2 +-
 src/PVE/LXC/Setup/Plugin.pm    |  2 +-
 src/PVE/LXC/Setup/Unmanaged.pm |  2 +-
 6 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/PVE/LXC/Setup.pm b/src/PVE/LXC/Setup.pm
index b72a18e..6446094 100644
--- a/src/PVE/LXC/Setup.pm
+++ b/src/PVE/LXC/Setup.pm
@@ -285,7 +285,7 @@ sub post_create_hook {
 sub unified_cgroupv2_support {
     my ($self) = @_;
 
-    return $self->protected_call(sub { $self->{plugin}->unified_cgroupv2_support() });
+    return $self->protected_call(sub { $self->{plugin}->unified_cgroupv2_support($self->{conf}) });
 }
 
 # os-release(5):
diff --git a/src/PVE/LXC/Setup/Alpine.pm b/src/PVE/LXC/Setup/Alpine.pm
index b56d895..5d22e69 100644
--- a/src/PVE/LXC/Setup/Alpine.pm
+++ b/src/PVE/LXC/Setup/Alpine.pm
@@ -102,7 +102,7 @@ sub setup_network {
 
 # non systemd based containers work with pure cgroupv2
 sub unified_cgroupv2_support {
-    my ($self) = @_;
+    my ($self, $conf) = @_;
 
     return 1;
 }
diff --git a/src/PVE/LXC/Setup/Base.pm b/src/PVE/LXC/Setup/Base.pm
index cc12914..f58edf8 100644
--- a/src/PVE/LXC/Setup/Base.pm
+++ b/src/PVE/LXC/Setup/Base.pm
@@ -517,20 +517,36 @@ sub clear_machine_id {
 # tries to guess the systemd (major) version based on the existence of
 # (/usr)?/lib/systemd/libsystemd-shared<version>.so. It was introduced in v231.
 sub get_systemd_version {
-    my ($self) = @_;
+    my ($self, $conf) = @_;
 
-    my $sd_lib_dir = $self->ct_is_directory("/lib/systemd") ?
-	"/lib/systemd" : "/usr/lib/systemd";
-    my $libsd = PVE::Tools::dir_glob_regex($sd_lib_dir, "libsystemd-shared-.+\.so");
-    if (defined($libsd) && $libsd =~ /libsystemd-shared-(\d+)(?:\..*)?\.so/) {
-	return $1;
+    my $current_arch = $conf->{arch};
+    my %arch_full_names = (
+	"amd64" => "x86_64",
+	"i386" => "i386",
+	"arm64" => "aarch64",
+	"armhf" => "arm"
+    );
+
+    my @search_dirs = (
+	"/lib/systemd", 
+	"/usr/lib/systemd", 
+	"/usr/lib/" . $arch_full_names{$current_arch} . "-linux-gnu/systemd/"
+    );
+
+    foreach my $sd_lib_dir ( @search_dirs ) {
+	next if !$self->ct_is_directory($sd_lib_dir);
+
+	my $libsd = PVE::Tools::dir_glob_regex($sd_lib_dir, "libsystemd-shared-.+\.so");
+	if (defined($libsd) && $libsd =~ /libsystemd-shared-(\d+)(?:\..*)?\.so/) {
+	    return $1;
+	}
     }
 
     return undef;
 }
 
 sub unified_cgroupv2_support {
-    my ($self) = @_;
+    my ($self, $conf) = @_;
 
     # https://www.freedesktop.org/software/systemd/man/systemd.html
     # systemd is installed as symlink to /sbin/init
@@ -542,7 +558,8 @@ sub unified_cgroupv2_support {
     }
 
     # systemd version 232 (e.g. debian stretch) supports the unified hierarchy
-    my $sdver = $self->get_systemd_version();
+    my $sdver = $self->get_systemd_version($conf);
+
     if (!defined($sdver) || $sdver < 232) {
 	return 0;
     }
diff --git a/src/PVE/LXC/Setup/Devuan.pm b/src/PVE/LXC/Setup/Devuan.pm
index 3e15bb2..18cb9cf 100644
--- a/src/PVE/LXC/Setup/Devuan.pm
+++ b/src/PVE/LXC/Setup/Devuan.pm
@@ -42,7 +42,7 @@ sub new {
 
 # non systemd based containers work with pure cgroupv2
 sub unified_cgroupv2_support {
-    my ($self) = @_;
+    my ($self, $conf) = @_;
 
     return 1;
 }
diff --git a/src/PVE/LXC/Setup/Plugin.pm b/src/PVE/LXC/Setup/Plugin.pm
index 8458ad8..d8b3f1f 100644
--- a/src/PVE/LXC/Setup/Plugin.pm
+++ b/src/PVE/LXC/Setup/Plugin.pm
@@ -48,7 +48,7 @@ sub set_user_password {
 }
 
 sub unified_cgroupv2_support {
-    my ($self) = @_;
+    my ($self, $conf) = @_;
     croak "implement me in sub-class\n";
 }
 
diff --git a/src/PVE/LXC/Setup/Unmanaged.pm b/src/PVE/LXC/Setup/Unmanaged.pm
index 3b9febf..e2dd517 100644
--- a/src/PVE/LXC/Setup/Unmanaged.pm
+++ b/src/PVE/LXC/Setup/Unmanaged.pm
@@ -45,7 +45,7 @@ sub set_user_password {
 }
 
 sub unified_cgroupv2_support {
-    my ($self) = @_;
+    my ($self, $conf) = @_;
     return 1; # faking it won't normally hurt ;-)
 }
 
-- 
2.30.2





^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-09-12  9:44 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-09 11:45 [pve-devel] [PATCH container] fix #4192: add new architecture-dependent path to check for newer versions of systemd Leo Nunner
2022-09-12  9:13 ` Thomas Lamprecht
2022-09-12  9:30   ` Dominik Csapak
2022-09-12  9:30     ` Dominik Csapak
2022-09-12  9:43       ` Thomas Lamprecht
2022-09-12  9:37     ` Dominik Csapak

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal