fix(build): map Etc/* timezones to 'host' for pct compatibility (#10020)

This commit is contained in:
CanbiZ 2025-12-16 11:28:12 +01:00 committed by GitHub
parent 51ba8ca7c8
commit 7ab0327376
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -440,6 +440,7 @@ base_settings() {
ENABLE_MKNOD=${var_mknod:-"0"} ENABLE_MKNOD=${var_mknod:-"0"}
PROTECT_CT=${var_protection:-"no"} PROTECT_CT=${var_protection:-"no"}
CT_TIMEZONE=${var_timezone:-"$timezone"} CT_TIMEZONE=${var_timezone:-"$timezone"}
[[ "${CT_TIMEZONE:-}" == Etc/* ]] && CT_TIMEZONE="host" # pct doesn't accept Etc/* zones
# Since these 2 are only defined outside of default_settings function, we add a temporary fallback. TODO: To align everything, we should add these as constant variables (e.g. OSTYPE and OSVERSION), but that would currently require updating the default_settings function for all existing scripts # Since these 2 are only defined outside of default_settings function, we add a temporary fallback. TODO: To align everything, we should add these as constant variables (e.g. OSTYPE and OSVERSION), but that would currently require updating the default_settings function for all existing scripts
if [ -z "$var_os" ]; then if [ -z "$var_os" ]; then
@ -1072,7 +1073,10 @@ advanced_settings() {
elif [ -f /etc/timezone ]; then elif [ -f /etc/timezone ]; then
_host_timezone=$(cat /etc/timezone 2>/dev/null || echo "") _host_timezone=$(cat /etc/timezone 2>/dev/null || echo "")
fi fi
# Map Etc/* timezones to "host" (pct doesn't accept Etc/* zones)
[[ "${_host_timezone:-}" == Etc/* ]] && _host_timezone="host"
local _ct_timezone="${var_timezone:-$_host_timezone}" local _ct_timezone="${var_timezone:-$_host_timezone}"
[[ "${_ct_timezone:-}" == Etc/* ]] && _ct_timezone="host"
# Helper to show current progress # Helper to show current progress
show_progress() { show_progress() {
@ -1692,6 +1696,7 @@ advanced_settings() {
--inputbox "\nSet container timezone.\n\nExamples: Europe/Berlin, America/New_York, Asia/Tokyo\n\nHost timezone: ${_host_timezone:-unknown}\n\nLeave empty to inherit from host." 16 62 "$_ct_timezone" \ --inputbox "\nSet container timezone.\n\nExamples: Europe/Berlin, America/New_York, Asia/Tokyo\n\nHost timezone: ${_host_timezone:-unknown}\n\nLeave empty to inherit from host." 16 62 "$_ct_timezone" \
3>&1 1>&2 2>&3); then 3>&1 1>&2 2>&3); then
_ct_timezone="$result" _ct_timezone="$result"
[[ "${_ct_timezone:-}" == Etc/* ]] && _ct_timezone="host" # pct doesn't accept Etc/* zones
((STEP++)) ((STEP++))
else else
((STEP--)) ((STEP--))
@ -2081,6 +2086,7 @@ install_script() {
else else
timezone="UTC" timezone="UTC"
fi fi
[[ "${timezone:-}" == Etc/* ]] && timezone="host" # pct doesn't accept Etc/* zones
# Show APP Header # Show APP Header
header_info header_info
@ -2682,10 +2688,12 @@ $PCT_OPTIONS_STRING"
-protection 1" -protection 1"
fi fi
# Timezone flag (if var_timezone was set) # Timezone (map Etc/* to "host" as pct doesn't accept them)
if [ -n "${CT_TIMEZONE:-}" ]; then if [ -n "${CT_TIMEZONE:-}" ]; then
local _pct_timezone="$CT_TIMEZONE"
[[ "$_pct_timezone" == Etc/* ]] && _pct_timezone="host"
PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING
-timezone $CT_TIMEZONE" -timezone $_pct_timezone"
fi fi
# Password (already formatted) # Password (already formatted)
@ -3036,8 +3044,9 @@ EOF'
export LANG=\$locale_line" export LANG=\$locale_line"
if [[ -z "${tz:-}" ]]; then if [[ -z "${tz:-}" ]]; then
tz=$(timedatectl show --property=Timezone --value 2>/dev/null || echo "Etc/UTC") tz=$(timedatectl show --property=Timezone --value 2>/dev/null || echo "UTC")
fi fi
[[ "${tz:-}" == Etc/* ]] && tz="UTC" # Normalize Etc/* to UTC for container setup
if pct exec "$CTID" -- test -e "/usr/share/zoneinfo/$tz"; then if pct exec "$CTID" -- test -e "/usr/share/zoneinfo/$tz"; then
# Set timezone using symlink (Debian 13+ compatible) # Set timezone using symlink (Debian 13+ compatible)