데비안에서 로케일 문제의 원인은 무엇입니까?

데비안에서 로케일 문제의 원인은 무엇입니까?

내 질문은 문제를 해결하는 방법이 아니라 실행에 관한 것입니다 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로케일이 설정되지 않았다는 경고가 더 이상 발행되지 않습니다.

이 문제의 원인이 무엇인지 알고 싶습니다. 새로 설치한 후 이런 일이 발생했습니다. 테스트 목적으로 가상 상자에 여러 가지 설치를 수행했습니다. 그리고 설치할 때마다 이런 문제가 발생합니다. 그리고 다시 시작한 후에 문제가 다시 발생합니까? 이는 우분투에서도 마찬가지이다.

그렇다면 로케일 문제의 원인이 무엇인지 말해 줄 수 있는 사람이 있습니까?

답변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.gen. dpkg-reconfigure locales업데이트한 /etc/locale.gen다음 에 전화하세요 locale-gen.

우분투에는 동일한 명령이 있지만 locale-gen그 구현은 데비안과 상당히 다른 것 같습니다. /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_*

관련 정보