web-dev-qa-db-ja.com

apt-getエラー:「ロケール:LC_CTYPEをデフォルトのロケールに設定できません:そのようなファイルまたはディレクトリはありません」

Apt-getを実行すると、エラーlocale: Cannot set LC_CTYPE to default locale: No such file or directoryが表示されます。このエラーを修正するにはどうすればよいですか?

Mac OSXを実行しているボックスから接続しています。

4
intlect

OS Xに間違いなく何か問題があります(Lionのみの可能性があります)

何が問題ですか?

OSXがロケール環境を正しく設定していません。また、OS Xは、Linuxとは異なるロケールの組み合わせ構文でUTF-8文字セットを呼び出します。

それを修正する方法は?

Googleには多数の「修正」がありますが、それらのほとんどは実際には機能しないか、問題の一部にすぎません。これは、同じまたは類似のエラーを作成する別の問題を対象としているためです。

最も合理的な方法は、OSXクライアントでローカル環境を修正することだと思います。 OSXクライアントでlocaleコマンドを実行すると、不完全な環境が表示されます。言語が設定されていません。

osx-client:~$ locale
LANG=           << EMPTY!
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=         << EMPTY!

したがって、localマシンの~/.bash_profileファイルに、追加するだけです。

export LANG="en_US"
export LANGUAGE=$LANG
export LC_ALL=$LANG

もちろん、en_USを希望の言語に置き換えることもできますが、そのロケールもサーバーにインストールしてください(たとえば、Debianでdpkg-reconfigure localesを使用)。ターミナルを閉じてから再度開くことを忘れないでください。

ただし、しないでください.UTFバリアントを使用してください。それらはサーバー上またはローカルでのみ機能します。 OS XとLinuxサーバーでは、language.charset構文を組み合わせたUTF-8の名前が異なります。たとえば、en_US.utf8を使用すると、リモートで「正常に」機能しているときにローカルでエラーが発生します。en_US.utf-8を使用すると、ローカルで機能しますが、サーバーでエラーが発生します。プレーンランゲージの定義を使用するだけです。とにかく、文字セットはUTF-8になるはずです。

サーバーでlocaleを再度実行するだけで機能するかどうかをテストできます。上部に恐ろしいメッセージが表示されている場合は、機能しません。ローカルで混乱した場合、新しいターミナルウィンドウを開くとすぐにエラーが表示されます。

サーバーにロケールがありません

それでも機能しない場合は、サーバー上で選択したロケールが欠落している可能性があります。 「en_US」はほとんど間違いありませんが、別のものが必要な場合があります。ロケールのインストール方法は、サーバーのディストリビューションによって異なります。

  • Debianでは、dpkg-reconfigure localesを呼び出してから、ロケールを選択します。
    • デフォルトの言語を選択するように求められた場合は、言語を選択するか、そのままにしておくことができます。ここでは関係ありません。
4
dualed

Sshでこのエラーが表示されているときにMacOS Xを実行している場合、解決は簡単です。

Sudo nano/etc/ssh_config次の行をコメントアウトします: "SendEnv LANG LC_ *"

1
intlect

Ubuntuでdpkg-reconfigure localesを実行し、選択範囲の少なくとも1つが選択されていることを確認します。何を選ぶべきかわからない場合は、en_US.UTF-8をお勧めします。

システムからSSH経由で接続している場合は、接続するクライアントシステムで使用されるロケールが生成されていることを確認する必要があります。必要に応じて、生成するロケールをいくつでも選択できます。

あなたが答えで述べたように、LC *変数を送信または受け入れるためにSSHを防ぐことを確実に選択できます。

Sshクライアントからこれを無効にします。

ssh_config:    SendEnv LANG LC_*

SSHサーバーでは、これを削除することで変数の受け入れをブロックできます。

sshd_config:AcceptEnv LANG LC_*
1
Zoredache