automatizzare dpkg-reconfigure tzdata


60

Sto usando le marionette per amministrare un cluster di server debian. Ho bisogno di cambiare il fuso orario di ogni macchina sul cluster. Il modo debian appropriato per farlo è usare dpkg-reconfigure tzdata. Ma posso sembrare di cambiarlo solo se uso la finestra di dialogo. C'è un modo per automatizzare questo dalla shell in modo che io possa semplicemente scrivere un Exec per renderlo facile?

In caso contrario, penso che il prossimo modo migliore sarebbe probabilmente quello di distribuire le marionette /etc/timezonee /etc/localtimecon i dati corretti in tutto il cluster.

Qualsiasi input apprezzato!


Si noti che la risposta attualmente accettata è errata dal 2017 . La risposta corretta è questa .
Dan Dascalescu

Risposte:


92

Devi specificare il frontend come `non interattivo 'e salverà le tue impostazioni attuali.

dpkg-reconfigure prenderà le impostazioni di sistema correnti come gospel, quindi cambia semplicemente il tuo fuso orario come faresti normalmente ed eseguilo con il flag non interattivo

ad es. per cambiare in "Europa / Dublino" dove sono:

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

Ovviamente questo ti permette di usare puppet / cfengine come ti piace distribuire anche / etc / timezone.


5
in alternativa alla modifica delle autorizzazioni, potresti fare qualcosa del genere. echo 'Europe/Dublin' | sudo tee /etc/timezone > /dev/null
Gorilla

3
Per completezza, un altro modo di fare eco tramite sudo èsudo bash -c 'echo "Europe/Dublin" > /etc/timezone'
MartyMacGyver

6
Dritta! Le versioni più recenti di Ubuntu / Debian non funzionano più in questo modo. Il comportamento è cambiato. bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
gertvdijk

21

Poiché la risposta accettata non funziona più (Debian Jessie, aprile 2017), un approccio modificato dal link al commento di @ gertvdijk sembra fare il lavoro ora:

sudo ln -fs /usr/share/zoneinfo/Europe/Dublin /etc/localtime
sudo dpkg-reconfigure -f noninteractive tzdata

1
Questa dovrebbe essere la risposta accettata al giorno d'oggi.
Dan Dascalescu

Ottimo, questo funziona a
meraviglia

5

Dovresti essere in grado di usare debconf-set-selections per preimpostare la configurazione. Installa debconf-utils ed eseguilo debconf-get-selections | grep tzdatasu un sistema correttamente configurato per capire cosa impostare anche.


1
Per le cose basate su debconf, questo dovrebbe funzionare. Ma tzdata preferisce la configurazione da / etc / timezone. Quindi questo non funziona su un sistema già installato (wheezy).
Elrond,

3

Puoi anche usare la ricetta dal (ora defunto) Puppet wiki ( archivio ) che sostituisce /etc/localtimecon il file zoneinfo appropriato da /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"
    }
}

Non sono sicuro che dpkg-reconfigure faccia qualcosa in più, ma ho usato la ricetta sopra e funziona perfettamente.


-3

È molto semplice e basta digitare un comando e rispondere alle semplici domande.
quindi eseguire:

/usr/bin/tzselect

1
man tzselect: "Nota che tzselect in realtà non cambierà il fuso orario per te. Usa 'dpkg-reconfigure tzdata' per raggiungere questo obiettivo."
spinkus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.