Debian のロケール問題の原因は何ですか?

Debian のロケール問題の原因は何ですか?

私の質問は問題を解決するのではなく、実行に関するものですapt-get install。この問題を解決するために見つけた最も簡単な方法は次のとおりです。

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen
dpkg-reconfigure locales

これが完了すると、apt-get install --reinstallロケールが設定されていないという警告は発行されなくなります。

この問題の原因が何であるかを知りたいです。新規インストール後にこれが発生しました。テスト目的で、仮想ボックスにいくつかのインストールを行いました。そしてインストールするたびにこの問題が発生します。そして、再起動後に問題が再発生しますか?これはUbuntuでも同じです。

それでは、ロケール問題の原因が何であるかを教えてくれる人はいますか?

答え1

Perlは、起動時に環境変数(および他の変数)で指定されたロケールでコンパイルされたロケールデータが見つからないときに大声で文句を言うこと/usr/lib/locale/...//usr/lib/locale/locale-archive知られていますLANG。次のように簡単に再現できます。

$ LANG=xyz perl /dev/null
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_PAPER = "ja_JP.UTF-8",
    LC_ADDRESS = "ja_JP.UTF-8",
    LC_MONETARY = "ja_JP.UTF-8",
    LC_NUMERIC = "ja_JP.UTF-8",
    LC_TELEPHONE = "ja_JP.UTF-8",
    LC_IDENTIFICATION = "ja_JP.UTF-8",
    LC_MEASUREMENT = "ja_JP.UTF-8",
    LC_TIME = "ja_JP.UTF-8",
    LC_NAME = "ja_JP.UTF-8",
    LANG = "xyz"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

したがって、デフォルトで上記の警告が表示されたら、システムで使用可能なロケールと環境変数のロケールを確認する必要があります。

locale -a利用可能なすべてのロケールを表示、一覧localedef表示/追加/削除するために使用できますlocale-archive

$ localedef --list-archive
en_US.utf8
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc

locale-genlocaledefDebian固有の設定ファイルラッパースクリプトです/etc/locale.gendpkg-reconfigure locales更新して/etc/locale.genから電話してくださいlocale-gen

Ubuntuには同じコマンドがありますが、locale-genその実装はDebianとはかなり異なるようです。/var/lib/locales/supported.d/設定は表示できますが、dpkg-reconfigure localesUbuntuには影響しません。また、見ることができますコミュニティウィキの説明

ロケール関連変数は、さまざまなプログラムによってユーザー環境で明示的または暗黙的に設定されます。通常、セッション開始pam_env.so/etc/default/localeまたは~/.pam_environmentセッション開始時に初期化されます。具体的には、sshDebian/Ubuntu では、デフォルトでローカルロケール設定が自動的にリモートホストセッションに送信されます。マニュアルページ/etc/ssh/ssh_configに次の行が表示されます。ssh_config

    SendEnv LANG LC_*

関連情報