LoginSignup
6
7

More than 5 years have passed since last update.

dockerイメージにしたArch Linuxでlocale-genに失敗する

Posted at

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.

通った!

6
7
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
6
7