archlinuxのbootstrapを展開して、pacmanの初期設定とシステムアップデートしただけのdockerイメージを作った。
https://hub.docker.com/r/minanon/archlinux/
日本語表示したくて、locale-genを実行したが、失敗した。
結論から言うと、これで解決する。
pacman -Sy --noconfirm sed gzip
以下、調査ログ
locale-genを実行、そして失敗
locale.gen
を設定して普通にlocale-gen
したら、失敗した。
locale-gen
実行には、sed
が必要と出るので、先にインストールしておいた。ついでに使っちゃう。
pacman --noconfirm -Sy sed
sed -i -e '/^#\(ja_JP\|en_US\).UTF-8/s/^#//' /etc/locale.gen
locale-gen
Generating locales...
en_US.UTF-8...character map file `UTF-8' not found: No such file or directory
default character map file `ANSI_X3.4-1968' not found: No such file or directory
原因調査
locale-gen
は、ただのシェルスクリプトのようなので、中身を調べてみた。
cat /usr/bin/locale-gen
...
...
localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias $locale
設定ファイルを読み取って、localedef
を実行しているだけ。localedef
で失敗しているようだ。コマンドの情報を調べてみたが、いまいち何をしているのか不明だった。
character map file `UTF-8' not foundとは?
localedef
実行時の変数を埋めるとこんな感じ。
localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
UTF-8に関するエラーメッセージなので、関連しそうな-f
オプションを調べてみると…charmapとか$I18NPATH/charmaps/とか書いてある。
それっぽいファイルはあるよ
ls -l /usr/share/i18n/charmaps/UTF-8.gz
-rw-r--r-- 1 1000 1000 393144 Aug 6 11:16 /usr/share/i18n/charmaps/UTF-8.gz
環境変数設定しても、変わらないエラー
I18NPATH=/usr/share/i18n localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
character map file `UTF-8' not found: No such file or directory
解決
UTF-8.gz
のファイル拡張子を見てて、ふと閃いた。
gzipが無いのではないかということに。
pacman -Sy --noconfirm gzip
locale-gen
Generating locales...
en_US.UTF-8... done
ja_JP.UTF-8... done
Generation complete.
通った!