Signed-off-by: Leo Nunner <l.nun...@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 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel