dpkg-tzdata 재구성 및 debconf-set-selections를 사용하여 시간대 변경


18

우분투 11.10을 실행하는 컴퓨터의 시간대를 자동으로 변경하고 올바른 값을 debconf데이터베이스 에 설정하는 스크립트를 설정하고 싶습니다 . 다음을 시도했지만 작동하지 않습니다 (결국 현재 시간대는 변경되지 않고 dpkg-reconfigure tzdata명령을 수동으로 실행 하면 선택한 값이 실제로 이전 값입니다).

#!/bin/sh -e
echo "tzdata    tzdata/Areas    select  Europe" | debconf-set-selections
echo "tzdata    tzdata/Zones/Europe select  Madrid" | debconf-set-selections
echo "tzdata    tzdata/Zones/America    select  " | debconf-set-selections
dpkg-reconfigure -f noninteractive tzdata

그래서, 지금, 나는 파일 장난을하고 있어요 /etc/localtime/etc/timezone직접,하지만 난 오히려 원합니다 dpkg-reconfiguredebconf방법을.

답변:


26

내가 아는 가장 간단한 방법은 다음과 같습니다.

echo "Europe/Zurich" > /etc/timezone 
dpkg-reconfigure -f noninteractive tzdata

wbat는 dpkg-reconfigure에 대한 매개 변수를 의미합니까?
serengeti12

5
실행중인 프로세스는 다시 시작하지 않고 변경 사항을 선택하지 못할 수 있습니다. 예를 들어 서버 데몬의 로그 타임 스탬프는 데몬을 다시 시작할 때까지 잘못되었을 수 있습니다.
mc0e

6

방금 Debian Stretch (9)를 사용하면 / etc / localtime도 변경해야한다는 것을 알았습니다.

ln -fs /usr/share/zoneinfo/`cat /etc/timezone` /etc/localtime

필요합니다. andrekeller의 답변 을 수정하려면 다음이 필요합니다.

echo "Europe/Zurich" > /etc/timezone 
ln -fs /usr/share/zoneinfo/`cat /etc/timezone` /etc/localtime
dpkg-reconfigure -f noninteractive tzdata

내 하루를 구했다! 다른 솔루션은 Debian 9
Brandon

2
실제로 단지 등 연결 / localtime으로 올바르게 시간대의 / etc / 때 dpkg-재구성 설정됩니다 호출로, 필요
다니엘 Dinnyes을

@DanielDinnyes 또는 대안으로 그 불합리한 ln -fs ....줄을 simple로 바꿀 수 있으며 rm -f /etc/localtime여전히 작동합니다 (debconf는 /etc/localtime올바른 값으로 다시 만듭니다 ). 자세한 내용은 내 답변을 참조하십시오.
Matija Nalis

4

때 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)을 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.