LoginSignup
2
1

More than 5 years have passed since last update.

glibc更新時のカスタムロケールについて

Last updated at Posted at 2017-09-20

脆弱性が見つかったなどglibcを更新する機会があり、カスタムロケールが元に戻ってしまったためメモしておきます。

似たような事象情報
https://access.redhat.com/ja/node/1335543

glibcはご存知の通りlinux系OSの根幹をなすプログラム群で、さまざまなパッケージに対して被依存関係があります。予想外の場所も影響がありました。。

内容

ロケールに文字コード(sjisなど)を追加して運用しているシステムにおいて、glibcを更新した場合、ロケール情報が追加前(デフォルト)に戻った

glibcの依存関係
以下のようにglibcを更新する場合、common/devel/headersも更新となります。

Dependencies Resolved
Updating:
 glib
Updating for dependencies:
 glibc-common
 glibc-devel
 glibc-headers

更新前と後のロケール情報比較
ロケールにsjisを追加していた場合

$ localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
$ locale -a | grep ja
ja_JP
ja_JP.eucjp
ja_JP.sjis <==入ってる
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc

$ sudo yum update glibc
(1/4): glibc-2.17-196.el7.x86_64.rpm
(2/4): glibc-common-2.17-196.el7.x86_64.rpm
(3/4): glibc-devel-2.17-196.el7.x86_64.rpm
(4/4): glibc-headers-2.17-196.el7.x86_64.rpm
・・・中略・・・
Complete!

$ locale -a | grep ja
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc

更新後、追加済みのsjisが消えました。これはロケール情報の実体である「/usr/lib/locale/locale-archive」がglibc-commonに含まれていて、rpmの更新時に現行OSのファイルを上書きしたためと思われます。
(ロケール追加時に利用したlocaledefコマンドによってlocale-archiveが作り直されたことも合わせて確認しました)

参考)glibc-commonに含まれているファイル

$ rpm -ql glibc-common | grep locale-archive
/usr/lib/locale/locale-archive

glibc-common更新時にロケール情報戻りを許容するのか
sjisの定義をlocale-archiveではなく外に出力した場合glibc-commonを更新した場合であっても追加したロケール情報は保持されたままでした。きちんと検証できていませんが、追加時には以下のようにしておくのがより良いのかもしれません。後日glibcの更新ポリシーや、ドキュメントをもう少し確認してみようと思います。

localedefコマンドの引数と結果

$ date
2017年 9月 21日 木曜日 00:00:55 JST
$ localedef -f SHIFT_JIS -i ja_JP /usr/lib/locale/ja_JP.SJIS
$ ls -lh /usr/lib/locale/locale-archive
-rw-r--r-- 1 root root 102M  9月 20 23:55 /usr/lib/locale/locale-archive
$ ls -lh /usr/lib/locale/ja_JP.SJIS
-rw-r--r-- 1 root root  107  9月 21 00:01 LC_ADDRESS
-rw-r--r-- 1 root root 294K  9月 21 00:01 LC_COLLATE
-rw-r--r-- 1 root root 511K  9月 21 00:01 LC_CTYPE
-rw-r--r-- 1 root root  345  9月 21 00:01 LC_IDENTIFICATION
-rw-r--r-- 1 root root   27  9月 21 00:01 LC_MEASUREMENT
drwxr-xr-x 2 root root 4.0K  9月 21 00:01 LC_MESSAGES
-rw-r--r-- 1 root root  294  9月 21 00:01 LC_MONETARY
-rw-r--r-- 1 root root   79  9月 21 00:01 LC_NAME
-rw-r--r-- 1 root root   58  9月 21 00:01 LC_NUMERIC
-rw-r--r-- 1 root root   38  9月 21 00:01 LC_PAPER
-rw-r--r-- 1 root root   55  9月 21 00:01 LC_TELEPHONE
-rw-r--r-- 1 root root 4.9K  9月 21 00:01 LC_TIME
2
1
0

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
2
1