

debianで `LANG` や `LC_ALL` を設定してないと`apt-get install`しただけで下記のようなperlのエラーがでます。

[code]

    $ sudo apt-get install foo
    ...
    perl: warning: Setting locale failed.
    perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "en_US.UTF-8"
        are supported and installed on your system.
    perl: warning: Falling back to the standard locale ("C").
    
[/code]

現状は下記のshell scriptで対応しているのですがrebootが必要になってしまいます。

[code]

    if ! grep -Fq "LC_ALL" /etc/environment; then
      sed -i 's/.*ja_JP.UTF-8 UTF-8.*/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
      locale-gen
      cat < /etc/environment
    LANG=ja_JP.UTF-8
    LC_ALL=ja_JP.UTF-8
    EOF
      source /etc/environment
    fi
    
[/code]

（`en_US.UTF-8` でもかまいません）

reboot無しで上記warningを出さないようにする方法はありますでしょうか。

宜しくお願いします。

<http://docs.komagata.org/5227>


CC BY-SA 3.0
2014-12-26T07:26:31.497
2624
2015-02-05T13:17:16.960
2014-12-26T09:51:04.553
4978
133
question
linux debian
rebootなしでシステム全体のLANGやLC_ALLを変更するには？


reboot を回避するということで、質問のなかに既に書かれている、`source /etc/environment`
をされるのがダメということであれば、環境変数の有効範囲を限定してはどうでしょうか。

コマンド実行単位だと、以下のようになります。

[code]

    $ LC_ALL=en_US.UTF-8 apt-get install foo
    
[/code]

その後、コマンド実行単位ではなく、「必要なサービスが特定のロケールを必要としている」という必要が生まれてたなら :

  * サービス起動スクリプト毎に上記のような変更をする
  * 専用ユーザを作り、必要なロケールを設定したうえで、サービスはそのユーザが実行する

のどちらかで対処できるはずです。

（複数サービスが起動する環境で、１つのサービスがシステム全体のロケールの変更を求める状態は、あまりよくないので。。。）


CC BY-SA 3.0
2014-12-26T08:07:05.347
2629
2014-12-26T08:07:05.347
4978
2624
answer