Bug#1071084: locales: update-locale hides error information when invoking 'locale charmap'
Package: locales
Version: 2.38-10
Severity: normal
Tags: newcomer, patch
The perl script update-local internally invokes 'locale charmap' to perform additional checks.
However if this call fails for some reason, update-locale always only prints "Error: invalid locale settings: LANG=...." which can be very misleading when the root-cause is actually different.
I.e. sample output of "sudo /usr/sbin/update-locale LANG=de_AT.UTF-8" on Debian Trixie:
----
*** update-locale: Error: invalid locale settings: LANG=de_AT.UTF-8
----
After applying the following patch:
==========
--- /usr/update-locale 2024-05-13 23:42:46.584127893 +0200
+++ /usr/sbin/update-locale 2024-05-13 23:40:25.160121142 +0200
@@ -88,7 +88,7 @@
{
# Check that this locale does exist
my $charset = `LANG= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION= LC_ALL= $env locale charmap 2>&1`;
- die "*** $progname: Error: invalid locale settings: $env\n"
+ die "*** $progname: Error: invalid locale settings: $env\n\n----------$charset----------\n"
if ($charset =~ m/Cannot set/);
# If LANGUAGE is set, its first value must be compatible with LC_MESSAGES
if (defined $arg{LANGUAGE})
==========
The output contains the actual information why the call to "locale chaarmap" failed, thus making it possible to investigate why the call actually failed:
=======
*** update-locale: Error: invalid locale settings: LANG=de_AT.UTF-8
----------locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
ANSI_X3.4-1968
----------
=======
-- System Information:
Debian Release: trixie/sid
APT prefers testing
APT policy: (500, 'testing')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 6.5.0-2-amd64 (SMP w/2 CPU threads; PREEMPT)
Locale: LANG=de_AT.UTF-8, LC_CTYPE=C.UTF-8 (charmap=locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages locales depends on:
ii debconf [debconf-2.0] 1.5.86
ii libc-bin 2.38-10
ii libc-l10n 2.38-10
locales recommends no packages.
locales suggests no packages.
-- debconf information:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "de_AT.UTF-8",
LC_MONETARY = "de_AT.UTF-8",
LC_CTYPE = "C.UTF-8",
LC_ADDRESS = "de_AT.UTF-8",
LC_TELEPHONE = "de_AT.UTF-8",
LC_NAME = "de_AT.UTF-8",
LC_MEASUREMENT = "de_AT.UTF-8",
LC_IDENTIFICATION = "de_AT.UTF-8",
LC_NUMERIC = "de_AT.UTF-8",
LC_PAPER = "de_AT.UTF-8",
LANG = "de_AT.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locales/locales_to_be_generated:
locales/default_environment_locale: None
Reply to: