zautomatyzuj dpkg-rekonfiguruj tzdata

60

Używam marionetki do administrowania klastrem serwerów Debiana. Muszę zmienić strefę czasową każdej maszyny w klastrze. Właściwym sposobem na zrobienie tego jest użycie dpkg-reconfigure tzdata. Ale mogę to zmienić tylko wtedy, gdy korzystam z okna dialogowego. Czy jest jakiś sposób na zautomatyzowanie tego z powłoki, żebym mógł po prostu napisać Exec, aby było to łatwe?

Jeśli nie, myślę, że następnym najlepszym sposobem byłoby prawdopodobnie rozprowadzenie marionetek /etc/timezonei /etc/localtimepoprawne dane w klastrze.

Doceniamy każdy wkład!

Elrond
źródło
Pamiętaj, że obecnie akceptowana odpowiedź jest błędna od 2017 r . Prawidłowa odpowiedź to ta .
Dan Dascalescu

Odpowiedzi:

92

Musisz określić interfejs jako „nieinteraktywny”, co spowoduje zapisanie twoich bieżących ustawień.

dpkg-reconfigure weźmie obecne ustawienia systemu jako gospel, więc po prostu zmień strefę czasową tak, jak normalnie i uruchom ją z nieinteraktywną flagą

np. dla mnie przejście na „Europe / Dublin”, gdzie jestem:

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

Oczywiście pozwala to na użycie marionetki / cfengine, tak jak chcesz rozpowszechniać także / etc / timezone.

Philip Reynolds
źródło
5
jako alternatywę dla zmiany uprawnień możesz zrobić coś takiego. echo 'Europe/Dublin' | sudo tee /etc/timezone > /dev/null
gorelative
3
Dla kompletności innym sposobem na echo za pośrednictwem sudo jestsudo bash -c 'echo "Europe/Dublin" > /etc/timezone'
MartyMacGyver
6
Heads-up! Nowsze wersje Ubuntu / Debian już nie działają w ten sposób. Zachowanie się zmieniło. bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
gertvdijk
21

Ponieważ zaakceptowana odpowiedź już nie działa (Debian Jessie, kwiecień 2017 r.), Podejście zmodyfikowane z linku komentarza @ gertvdijk wydaje się teraz działać:

sudo ln -fs /usr/share/zoneinfo/Europe/Dublin /etc/localtime
sudo dpkg-reconfigure -f noninteractive tzdata
szum
źródło
1
To powinna być obecnie akceptowana odpowiedź.
Dan Dascalescu
Świetnie, to działa na ucztę
infomaniac
5

Powinieneś być w stanie użyć opcji debconf-set-set, aby wstępnie ustawić konfigurację. Zainstaluj debconf-utils i uruchom debconf-get-selections | grep tzdatana odpowiednio skonfigurowanym systemie, aby dowiedzieć się, co go ustawić.

Zoredache
źródło
1
W przypadku rzeczy opartych na debconf powinno to działać. Ale tzdata woli konfigurację z / etc / timezone. Więc to nie działa na już zainstalowanym (wheezy) systemie.
Elrond
3

Możesz także użyć przepisu z (obecnie nieistniejącego) Puppet wiki ( archiwum ), który zastępuje /etc/localtimeodpowiedni plik zoneinfo z /usr/share/zoneinfo: -

class timezone {
    package { "tzdata":
        ensure => installed
    }
}

class timezone::central inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Central",
    }
}

class timezone::eastern inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Eastern"
    }
}

class timezone::pacific inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Pacific"
    }
}

class timezone::mountain inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source =>
             "file:///usr/share/zoneinfo/US/Mountain"
    }
}

Nie jestem pewien, czy dpkg-rekonfiguracja robi coś dodatkowego, ale użyłem powyższego przepisu i działa idealnie.

Phred
źródło
-3

To bardzo proste i wystarczy wpisać polecenie i odpowiedzieć na proste pytania.
następnie uruchomić:

/usr/bin/tzselect
f4a65fa46s5fa
źródło
1
man tzselect: „Zauważ, że tzselect nie zmieni dla ciebie strefy czasowej. Użyj 'dpkg-rekonfiguruj tzdata', aby to osiągnąć.”
spinkus