背景
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)に変更することができました。
あまり、意図的に変更するケースは多くないかもしれませんが参考になれば幸いです。