dpkg-reconfigure tzdata ve debconf-set-selection ile saat dilimini değiştirme


18

Ben otomatik olarak bir makinede (ubuntu 11.10 çalışan) saat dilimini değiştirir ve aynı zamanda debconfveritabanına doğru değerleri ayarlar bir komut dosyası ayarlamak istiyorum . Aşağıdaki denedim, ama çalışmıyor (sonunda, geçerli saat dilimi değişmeden kalır ve dpkg-reconfigure tzdatakomutu el ile çalıştırırsam , seçilen değerler gerçekten eskileri):

#!/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

Yani, şimdiye kadar, ben dosyaları /etc/localtimeve /etc/timezonedoğrudan karışıklık yapıyorum , ama tercih dpkg-reconfigureve debconfyolu tercih ederim .

Yanıtlar:


26

Bildiğim en basit yol:

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

dpkg-reconfigure parametreleri ne anlama geliyor?
serengeti12

5
Çalışan işlemlerin yeniden başlatmadan değişikliği almayabileceğini unutmayın. Örneğin, sunucu cinlerinden gelen günlük zaman damgaları, siz cinleri yeniden başlatana kadar yanlış olabilir.
mc0e

6

Ben sadece Debian Stretch (9) ile de / etc / localtime, böylece gibi bir şey değiştirmeniz gerektiğini öğrendim:

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

gereklidir. Andrekeller'ın cevabını değiştirmek için ihtiyacınız olan:

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

Günümü kurtardım! Diğer çözümler Debian 9
Brandon

2
Aslında sadece etc / localtime bağlantısı gereklidir, çünkü dpkg-reconfigure çağrıldığında / etc / timezone doğru şekilde ayarlanır
Daniel Dinnyes

@DanielDinnyes veya alternatif olarak bu hantal ln -fs ....çizgiyi basitle değiştirebilirsiniz rm -f /etc/localtimeve yine de çalışır (ve debconf /etc/localtimedoğru değerlerle yeniden yaratır ); ayrıntılar için cevabım bakın.
Matija Nalis

4

Dpkg-reconfigure çağırmadan önce, debconf ile için ayrıca kaldırmak gerekir /etc/localtimeve /etc/timezone. Ayrıca iyi huylu olmayan olası ekstra alanlara (sorunuzda olduğu gibi!) Dikkat edin.

Yani (Debian Stretch'te) çalışan "debconf yolu" şöyle olur:

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

Bunun nedeni, tzdata yapılandırma betiğinin akıllı olmaya çalışmasıdır ve daha önce yapılandırılmışsa veya kullanıcı saat dilimleriyle manuel olarak karışmışsa, farklı davranır.

EKSTRA

Benzer sorunu kendiniz hata ayıklamak için önce şunları yaparsınız:

export  DEBCONF_DEBUG=developer

aşağıdaki bilgileri sağlar:

# 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

bu , kullanıcıya sormadan önce değerleri zorla ayarladığını gösterir (böylece, ayarladığınız değerlerin üzerine yazılır)debconf-set-selections ).

Sonra sen shebang değiştirecek /var/lib/dpkg/info/tzdata.configgelen #!/bin/shetmek #!/bin/sh -xve bunu yaptığı görecekti program akışını, izleyin:

+ [ -L /etc/localtime ]
+ readlink /etc/localtime
+ TIMEZONE=/usr/share/zoneinfo/Etc/UTC

/var/lib/dpkg/info/tzdata.configsize baktığınızda bu bulacaksınız:

# If /etc/localtime is a link, update /etc/timezone
if [ -L /etc/localtime ] ; then
    TIMEZONE="$(readlink /etc/localtime)"

@fiction cevabının neden çalıştığını açıklar. Ayrıca betiğe daha fazla baktığınızda, '/ etc / localtime' öğesini kaldırırsanız @andrekeller yanıtının daha yeni Debian sürümlerinde de çalıştığını görürsünüz.

Umarım bu hata ayıklama yardımı, Debian'ın bir sonraki sürümü betiği daha akıllı hale getirdiğinde ve mevcut yanıtlar da geçersiz olduğunda size yardımcı olacaktır. Debconf hata ayıklama hakkında daha fazla bilgi debconf-devel'de bulunabilir (7)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.