From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 5FBB11FF15E for ; Mon, 27 Oct 2025 15:18:04 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 764037706; Mon, 27 Oct 2025 15:18:35 +0100 (CET) From: Robert Obkircher To: pve-devel@lists.proxmox.com Date: Mon, 27 Oct 2025 15:16:55 +0100 Message-ID: <20251027141752.191696-3-r.obkircher@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251027141752.191696-1-r.obkircher@proxmox.com> References: <20251027141752.191696-1-r.obkircher@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1761574701141 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.000 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH v2 pve-container 2/2] Propagate prestart-hook warnings to task-log. X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" Replace RESTEnvironment::log_warn in the setup plugins with the callback that writes them to a file during the prestart-hook. Also improve the callback so it works inside the protected_call chroot. Calls to "warn" are left unmodified for now. Signed-off-by: Robert Obkircher --- src/PVE/LXC/Setup.pm | 2 +- src/PVE/LXC/Setup/Base.pm | 2 +- src/PVE/LXC/Setup/Debian.pm | 5 ++--- src/PVE/LXC/Setup/Plugin.pm | 2 +- src/PVE/LXC/Setup/Ubuntu.pm | 5 ++--- src/lxc-pve-prestart-hook | 25 +++++++++++-------------- 6 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/PVE/LXC/Setup.pm b/src/PVE/LXC/Setup.pm index da2df5d..500b63c 100644 --- a/src/PVE/LXC/Setup.pm +++ b/src/PVE/LXC/Setup.pm @@ -124,7 +124,7 @@ sub new { my $plugin_class = $plugins->{$type} || die "no such OS type '$type'\n"; - my $plugin = $plugin_class->new($conf, $rootdir, $os_release); + my $plugin = $plugin_class->new($conf, $rootdir, $os_release, $log_warn); $self->{plugin} = $plugin; $self->{in_chroot} = 0; diff --git a/src/PVE/LXC/Setup/Base.pm b/src/PVE/LXC/Setup/Base.pm index 671e8c8..829b685 100644 --- a/src/PVE/LXC/Setup/Base.pm +++ b/src/PVE/LXC/Setup/Base.pm @@ -24,7 +24,7 @@ use PVE::LXC::Tools; use base qw(PVE::LXC::Setup::Plugin); sub new { - my ($class, $conf, $rootdir, $os_release) = @_; + my ($class, $conf, $rootdir, $os_release, $log_warn) = @_; return bless { conf => $conf, rootdir => $rootdir, os_release => $os_release }, $class; } diff --git a/src/PVE/LXC/Setup/Debian.pm b/src/PVE/LXC/Setup/Debian.pm index 030d934..dbb5050 100644 --- a/src/PVE/LXC/Setup/Debian.pm +++ b/src/PVE/LXC/Setup/Debian.pm @@ -6,7 +6,6 @@ use warnings; use PVE::Tools qw($IPV6RE); use PVE::LXC; use PVE::Network; -use PVE::RESTEnvironment qw(log_warn); use File::Path; @@ -20,7 +19,7 @@ use constant { }; sub new { - my ($class, $conf, $rootdir) = @_; + my ($class, $conf, $rootdir, $os_release, $log_warn) = @_; my $version = PVE::Tools::file_read_firstline("$rootdir/etc/debian_version"); @@ -47,7 +46,7 @@ sub new { die "Container Debian version '$version' is too old\n" if $version < DEBIAN_MINIMUM_RELEASE; if ($version >= (DEBIAN_MAXIMUM_RELEASE + 1)) { # also allow all MAX.X point releases. - log_warn("The container's Debian version '$version' is newer than the tested version '" + $log_warn->("The container's Debian version '$version' is newer than the tested version '" . DEBIAN_MAXIMUM_RELEASE . "'. While everything may work fine, full compatibility cannot be guaranteed." . " Please check for PVE system updates.\n"); diff --git a/src/PVE/LXC/Setup/Plugin.pm b/src/PVE/LXC/Setup/Plugin.pm index b9d9c2d..fbcfa8e 100644 --- a/src/PVE/LXC/Setup/Plugin.pm +++ b/src/PVE/LXC/Setup/Plugin.pm @@ -8,7 +8,7 @@ use warnings; use Carp; sub new { - my ($class, $conf, $rootdir, $os_release) = @_; + my ($class, $conf, $rootdir, $os_release, $log_warn) = @_; croak "implement me in sub-class\n"; } diff --git a/src/PVE/LXC/Setup/Ubuntu.pm b/src/PVE/LXC/Setup/Ubuntu.pm index e364fa8..a213541 100644 --- a/src/PVE/LXC/Setup/Ubuntu.pm +++ b/src/PVE/LXC/Setup/Ubuntu.pm @@ -5,7 +5,6 @@ use warnings; use PVE::Tools; use PVE::LXC; -use PVE::RESTEnvironment qw(log_warn); use File::Path; @@ -43,7 +42,7 @@ my $known_versions = { }; sub new { - my ($class, $conf, $rootdir) = @_; + my ($class, $conf, $rootdir, $os_release, $log_warn) = @_; my $lsb_fn = "$rootdir/etc/lsb-release"; my $lsbinfo = PVE::Tools::file_get_contents($lsb_fn); @@ -64,7 +63,7 @@ sub new { # cannot support 16.10 or older, their systemd is not cgroupv2 ready die "unsupported ancient Ubuntu version '$version'\n" if $major < 17; - log_warn("The container's Ubuntu version '$version' is not in the known version list." + $log_warn->("The container's Ubuntu version '$version' is not in the known version list." . " As it's newer than the minimum supported version it's likely to work OK, but full" . " compatibility cannot be guaranteed. Please check for PVE system updates.\n"); } else { diff --git a/src/lxc-pve-prestart-hook b/src/lxc-pve-prestart-hook index 0e69630..6520a1c 100755 --- a/src/lxc-pve-prestart-hook +++ b/src/lxc-pve-prestart-hook @@ -28,17 +28,6 @@ eval { $have_sdn = 1; }; -my $WARNFD; - -sub log_warn { - my ($vmid, $message) = @_; - - if (!defined($WARNFD)) { - open($WARNFD, '>', "/run/pve/ct-${vmid}.warnings"); - } - print $WARNFD "$message\n"; -} - PVE::LXC::Tools::lxc_hook( 'pre-start', 'lxc', @@ -53,6 +42,15 @@ PVE::LXC::Tools::lxc_hook( PVE::RESTEnvironment->setup_default_cli_env(); + my $warn_file = "/run/pve/ct-${vmid}.warnings"; + # open eagerly so logging works inside the protected_call chroot + open(my $warnfd, '>', $warn_file) or die "Failed to open $warn_file: $!"; + my $log_warn = sub { + my ($message) = @_; + print $warnfd "$message\n"; + $warnfd->flush; # required because protected_call calls POSIX::_exit + }; + return undef if !-f PVE::LXC::Config->config_file($vmid); my $conf = PVE::LXC::Config->load_config($vmid); @@ -155,13 +153,12 @@ PVE::LXC::Tools::lxc_hook( PVE::LXC::Config->foreach_passthrough_device($conf, $setup_passthrough_device); - my $warn_sub = sub { log_warn($vmid, @_); }; - my $lxc_setup = PVE::LXC::Setup->new($conf, $rootdir, undef, $warn_sub); + my $lxc_setup = PVE::LXC::Setup->new($conf, $rootdir, undef, $log_warn); $lxc_setup->pre_start_hook(); if (PVE::CGroup::cgroup_mode() == 2) { if (!$lxc_setup->unified_cgroupv2_support()) { - log_warn( + $log_warn->( $vmid, "old systemd (< v232) detected, container won't run in a pure cgroupv2" . " environment! Please see documentation -> container -> cgroup version.", -- 2.47.3 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel