DevHeads.net

F30 System-Wide Change proposal: Reset locale if not available

<a href="https://fedoraproject.org/wiki/Changes/Reset-locale-if-not-available" title="https://fedoraproject.org/wiki/Changes/Reset-locale-if-not-available">https://fedoraproject.org/wiki/Changes/Reset-locale-if-not-available</a>

== Summary ==
When logging in over ssh or another mechanism, locale settings are
forwarded. If the destination does not support that locale, C.UTF-8
will be used instead.

== Owner ==

* Name: [[User:Zbyszek | Zbigniew Jędrzejewski-Szmek]]
* Email: <a href="mailto: ... at in dot waw.pl"> ... at in dot waw.pl</a>

== Detailed Description ==

This is a continuation of [[Changes/Remove glibc-langpacks-all from
buildroot]]. With that change implemented, it is much more likely for
a system to only support C.UTF-8 or some other small set of locales.
When logging in into such an image from a normal system that uses a
"full" locale like en_US.UTF-8 or the equivalent for another language,
those locale settings are forwarded, resulting in a session with
invalid locale settings and errors from various tools.

The same problem could occur previously, for example when logging in
from a desktop with LANG=fr_FR.UTF-8 to a container with only
en_EN.UTF-8 installed.

To avoid this, the locale setting will be reset to C.UTF-8 if the
current setting is "invalid" (not found).

We already have a mechanism to reset locale information if it is
unusable. `/etc/profile.d/lang.sh` will unset
Japanese/Korean/Chinese/... locales only the tty, because the kernel
cannot display such fonts properly, so we switch to `en_US.UTF-8` to
get ''something'' displayed. The same mechanism will be used for this.

== Benefit to Fedora ==

Avoid stupid warnings like

<pre>
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_CTYPE = "fr_FR.UTF-8",
LANG = "en_US.UTF-8"
...
are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
</pre>

== Scope ==
* Proposal owners:
** Provide a patch to `/etc/profile.d/lang.{sh,csh}` to check if the
inherited locale is present, and if not, reset to C.UTF-8.
* Other developers: n/a
* Release engineering: <a href="https://pagure.io/releng/issue/8036" title="https://pagure.io/releng/issue/8036">https://pagure.io/releng/issue/8036</a>
** List of deliverables: N/A
* Policies and guidelines: no changes needed
* Trademark approval: N/A (not needed for this Change)

== Upgrade/compatibility impact ==
I ''think'' this should be beneficial in all cases. I doubt that
anyone runs with broken locale settings on purpose.

== How To Test ==
Login to a different machine with a locale not installed on that
machine. Verify that the locale is set to C.UTF-8. If the locale is
installed on the target machine, it should not be reset.

== User Experience ==
Slightly easier ssh sessions.
See also [https://bugzilla.redhat.com/show_bug.cgi?id=1432426 1432426].

== Dependencies ==
None.

== Contingency Plan ==
Revert the change to `/etc/profile.d/lang.*`.

* Contingency mechanism: revert the patch, rebuild `setup` package
* Contingency deadline: any time before relase
* Blocks release? no
* Blocks product? no

== Documentation ==
None needed.

== Release Notes ==
Locale settings will be reset to C.UTF-8 when logging into a machine
which does not have the locale that is used on the source machine.