背景


Linuxサーバ(Redhat)にてAWS CLIで『aws s3 sync』を実行したところ、日本語ファイルにてエラーが発生しました。
確認すると、『Shift_JIS』を利用しているファイルがエラーとなっていましたので、ロケールを日本語(Shift_JIS)に変更することで、日本語ファイルを正常に同期することができました。
ロケール追加をするのが初めてでしたので、備忘録的な形で掲載させていただきます。

 

変更手順


① まずは変更前のロケール設定を確認します。

locale
localectl

変更前のLinuxサーバのロケールは、UTF-8であることを確認しました。

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
$
$ localectl
System Locale: LANG=en_US.UTF-8
    VC Keymap: us
   X11 Layout: us

② 日本語(Shift_JIS)への変更に必要なファイルがあることを確認します。

cd /usr/share/i18n/charmaps
ls -la |grep SHIFT_JIS

cd /usr/share/i18n/locales
ls -la | grep ja

 設定可能場合は以下のようにファイルが存在します。

$cd /usr/share/i18n/charmaps
$ ls -la |grep SHIFT_JIS
-rw-r--r--. 1 root root 42081 2月 6 2018 SHIFT_JIS.gz
-rw-r--r--. 1 root root 69772 2月 6 2018 SHIFT_JISX0213.gz
$
$
$cd /usr/share/i18n/locales
$ls -la | grep ja
-rw-r--r--. 1 root root 222115 2月 6 2018 ja_JP
$

③ 設定に必要なファイルがない場合は以下コマンドにてパッケージをインストールをします。

yum install glibc-locale-source
# yum install glibc-locale-source
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs)                                                          36 MB/s |  29 MB     00:00
Red Hat Enterprise Linux 9 for x86_64 - BaseOS from RHUI (RPMs)                                                             24 MB/s |  17 MB     00:00
Red Hat Enterprise Linux 9 Client Configuration                                                                             22 kB/s | 2.0 kB     00:00
Last metadata expiration check: 0:00:01 ago on Tue 27 Feb 2024 03:51:19 PM UTC.
Dependencies resolved.
===========================================================================================================================================================
 Package                                Architecture              Version                              Repository                                     Size
===========================================================================================================================================================
Installing:
 glibc-locale-source                    x86_64                    2.34-83.el9_3.7                      rhel-9-appstream-rhui-rpms                    4.2 M

Transaction Summary
===========================================================================================================================================================
Install  1 Package

Total download size: 4.2 M
Installed size: 15 M

下記コマンドにて、日本語(Shift_JIS)ロケールをサーバに追加します。

localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS

作成時、ASCII互換性がなく、ISO C準拠でない旨の警告が表示されましたが、設定自体は完了しました。
※一部の関数等では、日本語(Shift_JIS)だと想定通りの挙動をしない可能性があります。AWS CLIは特段問題なく動作いたしました。

# localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
[warning] character map `SHIFT_JIS' is not ASCII compatible, locale not ISO C compliant [--no-warnings=ascii]

④ 変更に必要なファイルが生成されたことを確認します。

cd /usr/share/i18n/charmaps
ls -la | grep SHIFT

cd /usr/share/i18n/locales
ls -la | grep ja
$ cd /usr/share/i18n/charmaps
$ ls -la | grep SHIFT
-rw-r--r--. 1 root root  42081 Sep 25 07:48 SHIFT_JIS.gz
-rw-r--r--. 1 root root  69772 Sep 25 07:48 SHIFT_JISX0213.gz
$
$
$ cd /usr/share/i18n/locales
$ ls -la | grep ja
-rw-r--r--. 1 root root  220701 Sep 25 07:48 ja_JP
$

locale -aでも、日本語(Shift_JIS)へ設定変更が可能になりました。

$ locale -a | grep ja
ja_JP
ja_JP.shiftjis
ja_JP.sjis
$

⑤ 日本語(Shift_JIS)にロケール設定を変更します。

sudo localectl set-locale LANG=ja_JP.SJIS

⑥ localeが日本語(Shift_JIS)に変更できたことを確認できました。

$ sudo localectl set-locale LANG=ja_JP.SJIS
$ localectl
System Locale: LANG=ja_JP.SJIS
    VC Keymap: us
   X11 Layout: us
$ locale
LANG=ja_JP.SJIS
LC_CTYPE="ja_JP.SJIS"
LC_NUMERIC="ja_JP.SJIS"
LC_TIME="ja_JP.SJIS"
LC_COLLATE="ja_JP.SJIS"
LC_MONETARY="ja_JP.SJIS"
LC_MESSAGES="ja_JP.SJIS"
LC_PAPER="ja_JP.SJIS"
LC_NAME="ja_JP.SJIS"
LC_ADDRESS="ja_JP.SJIS"
LC_TELEPHONE="ja_JP.SJIS"
LC_MEASUREMENT="ja_JP.SJIS"
LC_IDENTIFICATION="ja_JP.SJIS"
LC_ALL=
$

無事、日本語(Shift_JIS)に変更することができました。
あまり、意図的に変更するケースは多くないかもしれませんが参考になれば幸いです。

 

参考記事