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.eb...@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 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel