From: Robert Obkircher <r.obkircher@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v2 pve-container 2/2] Propagate prestart-hook warnings to task-log.
Date: Mon, 27 Oct 2025 15:16:55 +0100 [thread overview]
Message-ID: <20251027141752.191696-3-r.obkircher@proxmox.com> (raw)
In-Reply-To: <20251027141752.191696-1-r.obkircher@proxmox.com>
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 <r.obkircher@proxmox.com>
---
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
prev parent reply other threads:[~2025-10-27 14:18 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-27 14:16 [pve-devel] [PATCH v2 pve-container 0/2] warn that nesting may be required Robert Obkircher
2025-10-27 14:16 ` [pve-devel] [PATCH v2 pve-container 1/2] fix 6897: warn that nesting may be required for systemd Robert Obkircher
2025-10-27 14:16 ` Robert Obkircher [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251027141752.191696-3-r.obkircher@proxmox.com \
--to=r.obkircher@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox