31
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CentOS 7 コンテナに消えない日本語ロケールを追加する

Last updated at Posted at 2018-07-03

はじめに

Docker の centos:centos7 は locale -a | grep -c ja_JP がゼロ、つまり日本語ロケールが定義されていません。
これはイメージサイズを縮小するための措置です。
ロケールは /usr/lib/locale/locale-archive に記録されていますが、フルサイズでは 102M というサイズです。コンテナ観点では、これが大きすぎる、というのは自然な発想かと思います。

そして、日本語ロケールは localedef で登録することが可能ですが、glibc-common を yum update すると消えてしまいますw

で、本ポストは「俺のロケールを消した奴は誰だ?」の回答・対処法と、localectl コマンド(非特権コンテナでは実行できないコマンド)によってロケール設定を操作した結果を紹介します。

犯人の紹介

まずは犯人から。最初からクライマ(略

/etc/yum.conf
(略)
override_install_langs=en_US.utf8
(略)

これです。この指定(ホワイトリスト)によってロケールを制限しています。

にしても「/usr/share/doc が空っぽ」と同じ犯人です。やってくれるぜ。

対処法

まず、前述の設定を消してしまえば、ロケールが制限されなくなります。ただし locale-archive が 102M になってしまいます。
なので、丁寧なのは "ja_JP.utf8" を追記することかと思います。

sed -i -e '/override_install_langs/s/$/,ja_JP.utf8/g' /etc/yum.conf

その後 glibc-common をアップデートすれば日本語ロケールが出現します。

glibc-common が既に最新という場合は rpm --force で強制的にインストールしましょう。
(nodocs と同じで、そもそも rpm コマンドを使えば yum.conf の影響は受けないんですけれども。。。)

# locale -a
C
POSIX
en_US.utf8
ja_JP.utf8

# ls -lh /usr/lib/locale/locale-archive
-rw-r--r-- 1 root root 2.5M Jul  3 12:34 /usr/lib/locale/locale-archive

なお、glibc-common の postinstall scriptlet を実行しただけでは日本語ロケールは出現しません。
これは、locale-archive が locale-archive.tmpl から間引く形で生成されていて、一度 scriptlet が動いてしまうと locale-archive.tmpl が空になってしまうためです。

localectl 結果

日本語ロケールを出現させることが出来でも、それを使用する設定は別途必要です。
簡単には環境変数 LANG を設定すれば終わりなんですが、フル機能の OS のシステム設定がどうなるか、気になりますよね。私は気になります。

なので、localectl コマンドの結果を載せておきます。

(言いつつ /etc を grep しただけの差分なので、網羅されてないかも知れません。誰かソース見て処理を追いかけてくださいな。)

# localectl set-locale LANG=ja_JP.UTF-8
# cat /etc/locale.conf
LANG=ja_JP.UTF-8

# localectl set-x11-keymap jp
# cat /etc/vconsole.conf
KEYMAP=jp106
FONT=latarcyrheb-sun16

# cat /etc/X11/xorg.conf.d/00-keyboard.conf
# Read and parsed by systemd-localed. It's probably wise not to edit this file
# manually too freely.
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "jp"
EndSection

対比用に初期値(コンテナイメージ centos:centos7 の初期値)も載せておきます。

# cat /etc/locale.conf
LANG="en_US.UTF-8"

# cat /etc/vconsole.conf
KEYMAP="us"
FONT="latarcyrheb-sun16"

# cat /etc/X11/xorg.conf.d/00-keyboard.conf
# Read and parsed by systemd-localed. It's probably wise not to edit this file
# manually too freely.
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "us"
EndSection

そういえば、インストーラでインストールした CentOS 7.5 では vconsole.conf の KEYMAP は jp でした。

31
25
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?