From: Fabian Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH container 2/2] setup: also set contents of /etc/timezone
Date: Thu, 7 Oct 2021 12:48:03 +0200 [thread overview]
Message-ID: <20211007104803.40204-2-f.ebner@proxmox.com> (raw)
In-Reply-To: <20211007104803.40204-1-f.ebner@proxmox.com>
Some distributions like CentOS 8 and Gentoo don't have the file, so
only update if it already existed.
A slight change in behavior in set_timezone is that the warning will
now trigger if /etc/localtime is a link to $tz_path, but $tz_path does
not exist. Previously, it would return early if the link matched.
Programs that rely on /etc/timezone within the container will now see
the configured timezone too. While that is more correct, it's still a
change that might be unexpected.
Reported in the community forum:
https://forum.proxmox.com/threads/pct-create-command-with-timezone-host-option-fails-to-create-a-container.97538/
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---
Does this need to wait until PVE 8.0, because of potential breakage?
src/PVE/LXC/Setup.pm | 1 +
src/PVE/LXC/Setup/Base.pm | 16 +++++++++++-----
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/PVE/LXC/Setup.pm b/src/PVE/LXC/Setup.pm
index 7c377ab..5cc56af 100644
--- a/src/PVE/LXC/Setup.pm
+++ b/src/PVE/LXC/Setup.pm
@@ -114,6 +114,7 @@ sub new {
# Cache some host files we need access to:
$plugin->{host_resolv_conf} = PVE::INotify::read_file('resolvconf');
+ $plugin->{host_timezone} = PVE::INotify::read_file('timezone');
abs_path('/etc/localtime') =~ m|^(/.+)| or die "invalid /etc/localtime\n"; # untaint
$plugin->{host_localtime} = $1;
diff --git a/src/PVE/LXC/Setup/Base.pm b/src/PVE/LXC/Setup/Base.pm
index 04332ea..dafd69a 100644
--- a/src/PVE/LXC/Setup/Base.pm
+++ b/src/PVE/LXC/Setup/Base.pm
@@ -469,12 +469,18 @@ sub set_timezone {
$tz_path = $self->{host_localtime};
}
- return if abs_path('/etc/localtime') eq $tz_path;
-
if ($self->ct_file_exists($tz_path)) {
- my $tmpfile = "localtime.$$.new.tmpfile";
- $self->ct_symlink($tz_path, $tmpfile);
- $self->ct_rename($tmpfile, "/etc/localtime");
+ if (abs_path('/etc/localtime') ne $tz_path) {
+ my $tmpfile = "localtime.$$.new.tmpfile";
+ $self->ct_symlink($tz_path, $tmpfile);
+ $self->ct_rename($tmpfile, "/etc/localtime");
+ }
+
+ # not all distributions have /etc/timezone
+ if ($self->ct_file_exists('/etc/timezone')) {
+ my $contents = $zoneinfo eq 'host' ? $self->{host_timezone} : $zoneinfo;
+ $self->ct_file_set_contents('/etc/timezone', "$contents\n");
+ }
} else {
warn "container does not have $tz_path, timezone can not be modified\n";
}
--
2.30.2
next prev parent reply other threads:[~2021-10-07 10:48 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-07 10:48 [pve-devel] [PATCH container 1/2] setup: untaint path to host timezone Fabian Ebner
2021-10-07 10:48 ` Fabian Ebner [this message]
2021-10-07 12:34 ` [pve-devel] applied: [PATCH container 2/2] setup: also set contents of /etc/timezone Thomas Lamprecht
2021-10-07 12:33 ` [pve-devel] applied: [PATCH container 1/2] setup: untaint path to host timezone Thomas Lamprecht
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=20211007104803.40204-2-f.ebner@proxmox.com \
--to=f.ebner@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 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.