From Fedora Project Wiki

Revision as of 22:43, 7 January 2019 by Zbyszek (talk | contribs) (push to wrangler)

Reset locale if not available

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

Current status

  • Targeted release: Fedora 30
  • Last updated: 2019-01-07
  • Tracker bug:

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

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").

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
  • 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.

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.