mengotomatiskan dpkg-mengkonfigurasi ulang tzdata

60

Saya menggunakan boneka untuk admin sekelompok server debian. Saya perlu mengubah zona waktu setiap mesin di kluster. Cara debian yang tepat untuk melakukan ini adalah menggunakan dpkg-reconfigure tzdata. Tapi sepertinya saya hanya bisa mengubahnya jika saya menggunakan dialog. Apakah ada cara untuk mengotomatisasi ini dari shell sehingga saya bisa menulis Exec untuk membuatnya mudah?

Jika tidak, saya pikir cara terbaik berikutnya mungkin untuk memiliki distribusi boneka /etc/timezonedan /etc/localtimedengan data yang benar di seluruh cluster.

Masukan apa pun dihargai!

Elrond
sumber
Perhatikan bahwa jawaban yang saat ini diterima telah salah sejak 2017 . Jawaban yang benar adalah yang ini .
Dan Dascalescu

Jawaban:

92

Anda perlu menentukan frontend sebagai `noninteractive 'dan itu akan menyimpan pengaturan Anda saat ini.

dpkg-reconfigure akan menjadikan pengaturan sistem saat ini sebagai Injil, jadi cukup ubah zona waktu Anda seperti biasanya dan jalankan dengan flag non-interaktif

mis. bagi saya untuk berubah ke "Eropa / Dublin" di mana saya berada:

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

Jelas ini memungkinkan Anda untuk menggunakan boneka / cfengine yang Anda suka untuk mendistribusikan / etc / timezone juga.

Philip Reynolds
sumber
5
sebagai alternatif untuk mengubah izin, Anda dapat melakukan sesuatu seperti ini. echo 'Europe/Dublin' | sudo tee /etc/timezone > /dev/null
gorelatif
3
Untuk kelengkapan, cara lain untuk menggema melalui sudo adalahsudo bash -c 'echo "Europe/Dublin" > /etc/timezone'
MartyMacGyver
6
Kepala! Versi Ubuntu / Debian yang lebih baru tidak berfungsi seperti ini lagi. Perilaku berubah. bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
gertvdijk
21

Karena jawaban yang diterima tidak lagi berfungsi (Debian Jessie, April 2017), pendekatan yang dimodifikasi dari tautan komentar @ gertvdijk tampaknya berfungsi sekarang:

sudo ln -fs /usr/share/zoneinfo/Europe/Dublin /etc/localtime
sudo dpkg-reconfigure -f noninteractive tzdata
scruss
sumber
1
Ini harus menjadi jawaban yang diterima saat ini.
Dan Dascalescu
Hebat, ini berhasil
infomaniac
5

Anda harus dapat menggunakan debconf-set-selection untuk mempraset konfigurasi. Instal debconf-utils dan jalankan debconf-get-selections | grep tzdatapada sistem yang dikonfigurasikan dengan benar untuk mencari tahu apa yang mengaturnya juga.

Sakit kepala
sumber
1
Untuk hal-hal yang berbasis debconf, ini harusnya berfungsi. Tetapi tzdata lebih memilih konfigurasi dari / etc / timezone. Jadi ini tidak bekerja pada sistem yang sudah terpasang (mengi).
Elrond
3

Anda juga dapat menggunakan resep dari wiki Wayang ( arsip ) yang diganti /etc/localtimedengan file zoneinfo yang sesuai dari /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"
    }
}

Saya tidak yakin apakah dpkg-mengkonfigurasi melakukan sesuatu yang ekstra, tetapi saya telah menggunakan resep di atas dan itu berfungsi dengan baik.

phred
sumber
-3

Sangat sederhana dan hanya perlu mengetikkan perintah dan menjawab pertanyaan-pertanyaan sederhana.
lalu lari:

/usr/bin/tzselect
f4a65fa46s5fa
sumber
1
man tzselect: "Perhatikan bahwa tzselect tidak akan benar-benar mengubah zona waktu untuk Anda. Gunakan 'dpkg-reconfigure tzdata' untuk mencapai ini."
spinkus