때 dpkg-재구성을 호출하기 전에, 어떤 debconf를 사용하기 위해, 당신은 또한 제거해야 /etc/localtime
하고 /etc/timezone
. 또한 양성이 아닌 가능한 여분의 공간 (질문과 같이!)을주의하십시오.
따라서 (데비안 스트레치에서) 작동하는 "debconf 방식"은 다음과 같습니다.
echo "tzdata tzdata/Areas select Europe" | debconf-set-selections
echo "tzdata tzdata/Zones/Europe select Madrid" | debconf-set-selections
rm -f /etc/localtime /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
그 이유는 tzdata 구성 스크립트가 현명 해 지려고 시도하기 때문에 이전에 구성되었거나 사용자가 시간대를 수동으로 조정 한 경우 다르게 동작합니다.
특별한
비슷한 문제를 직접 디버깅하려면 먼저 다음을 수행하십시오.
export DEBCONF_DEBUG=developer
다음 정보를 제공합니다.
# dpkg-reconfigure -f noninteractive tzdata
debconf (developer): starting /var/lib/dpkg/info/tzdata.config reconfigure 2018e-0+deb9u1
debconf (developer): <-- VERSION 2.0
debconf (developer): --> 0 2.0
debconf (developer): <-- CAPB backup
debconf (developer): --> 0 multiselect escape
debconf (developer): <-- SET tzdata/Areas Etc
debconf (developer): --> 0 value set
debconf (developer): <-- SET tzdata/Zones/Etc UTC
debconf (developer): --> 0 value set
debconf (developer): <-- INPUT high tzdata/Areas
debconf (developer): --> 30 question skipped
debconf (developer): <-- GO
debconf (developer): --> 0 ok
debconf (developer): <-- GET tzdata/Areas
debconf (developer): --> 0 Etc
debconf (developer): <-- INPUT high tzdata/Zones/Etc
debconf (developer): --> 30 question skipped
debconf (developer): <-- GO
debconf (developer): --> 0 ok
debconf (developer): starting /var/lib/dpkg/info/tzdata.postinst configure 2018e-0+deb9u1
debconf (developer): <-- VERSION 2.0
debconf (developer): --> 0 2.0
debconf (developer): <-- GET tzdata/Areas
debconf (developer): --> 0 Etc
debconf (developer): <-- GET tzdata/Zones/Etc
debconf (developer): --> 0 UTC
debconf (developer): <-- STOP
그것은 강제로 당신을 보여줄 것이다 세트 (따라서 당신이 설정 한 값을 덮어 그들을 위해 사용자가 요청하기 전에 값을 debconf-set-selections
).
그런 다음 shebang을 /var/lib/dpkg/info/tzdata.config
에서 #!/bin/sh
로 변경 #!/bin/sh -x
하고 프로그램 흐름을 따르십시오.
+ [ -L /etc/localtime ]
+ readlink /etc/localtime
+ TIMEZONE=/usr/share/zoneinfo/Etc/UTC
/var/lib/dpkg/info/tzdata.config
당신을 보면 이것을 찾을 수 있습니다 :
# If /etc/localtime is a link, update /etc/timezone
if [ -L /etc/localtime ] ; then
TIMEZONE="$(readlink /etc/localtime)"
@fiction answer가 작동하는 이유를 설명합니다. 또한 스크립트를 더 살펴보면 '/ etc / localtime'을 제거하면 @andrekeller answer가 최신 데비안 버전에서도 작동한다는 것을 알 수 있습니다.
다행스럽게도이 디버깅 도움말이 다음 버전의 데비안에서 스크립트를 더 똑똑하게 만들고 기존 답변도 유효하지 않은 경우에 도움이되기를 바랍니다. debconf 디버깅에 대한 자세한 내용은 debconf-devel (7)을 참조하십시오.