Files
setlocale--LC_ALL--cannot-c…/readme.md
2026-03-15 20:44:20 +00:00

3.7 KiB

Fix setlocale: LC_ALL: cannot change locale (en_US.UTF-8) in Proxmox LXC

Context

During the execution of Ultimate Updater on a Proxmox VE host, several LXC containers produced the warning:

bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

This happens when:

  • LANG=en_US.UTF-8 or LC_ALL=en_US.UTF-8 is configured
  • but the locale has not been generated inside the container.

Typical symptoms:

locale -a
C
C.utf8
POSIX

The container tries to use en_US.UTF-8 but it does not exist yet.


Affected Containers

The following LXC containers were detected in logs:

VMID Name


21211434 ollama-lxc 21302002 wireshark 21808501 subsai 22101900 cast-relay 22202000 dev-vscodium


Solution

The solution is to:

  1. Install locale packages
  2. Generate the en_US.UTF-8 locale
  3. Set system environment variables
  4. Apply the fix across all containers automatically

Automated Fix Script (Run on Proxmox Host)

for CT in 21211434 21302002 21808501 22101900 22202000; do
  echo "===== CT $CT ====="

  WAS_RUNNING=0
  if [ "$(pct status "$CT" | awk '{print $2}')" = "running" ]; then
    WAS_RUNNING=1
  else
    pct start "$CT"
    sleep 3
  fi

  pct exec "$CT" -- bash -lc 'apt update && apt install -y locales'

  pct exec "$CT" -- bash -lc '
grep -q "^en_US.UTF-8 UTF-8" /etc/locale.gen ||
sed -i "s/^# *en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/" /etc/locale.gen ||
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
'

  pct exec "$CT" -- bash -lc 'locale-gen en_US.UTF-8'

  pct exec "$CT" -- bash -lc '
update-locale LANG=en_US.UTF-8 LANGUAGE=en_US LC_ALL=en_US.UTF-8
'

  pct exec "$CT" -- bash -lc '
printf "LANG=en_US.UTF-8\nLANGUAGE=en_US\nLC_ALL=en_US.UTF-8\n" > /etc/environment
'

  pct exec "$CT" -- bash -lc 'locale'

  if [ "$WAS_RUNNING" -eq 0 ]; then
    pct stop "$CT"
  fi
done

Behavior of the script:

  • If the container is already running, it remains running.
  • If the container was stopped, it is temporarily started, fixed, then stopped again.

Verification Script

After applying the fix:

for CT in 21211434 21302002 21808501 22101900 22202000; do
  echo "===== CT $CT ====="
  
  WAS_RUNNING=0
  if [ "$(pct status "$CT" | awk '{print $2}')" = "running" ]; then
    WAS_RUNNING=1
  else
    pct start "$CT"
    sleep 3
  fi

  pct exec "$CT" -- bash -lc 'locale; echo; locale -a | grep -i en_US'

  if [ "$WAS_RUNNING" -eq 0 ]; then
    pct stop "$CT"
  fi
done

Expected output:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
...
en_US.utf8

Log Verification

To confirm that Ultimate Updater no longer reports the warning:

grep -in "setlocale" /var/log/ultimate-updater.log

The warning should no longer appear for these containers.


Notes

  • The warning may still appear during the fix execution, because the old environment is still loaded.
  • After locale-gen and update-locale, the system configuration is correct.
  • The fix is persistent and survives container reboot.

Result

All containers now correctly use:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

Locale list:

locale -a
en_US.utf8

The Proxmox update process runs without locale warnings.