web-dev-qa-db-ja.com

dpkg-reconfigure tzdataを自動化する

私は人形を使用してdebianサーバーのクラスターを管理しています。クラスター上の各マシンのタイムゾーンを変更する必要があります。これを行う適切なdebianの方法は、dpkg-reconfigure tzdataを使用することです。しかし、ダイアログを使用しないと変更できないようです。これをシェルから自動化して、Execを作成してこれを簡単にする方法はありますか?

そうでない場合、次の最良の方法はおそらく、puppetに/etc/timezone/etc/localtimeをクラスター全体で正しいデータとともに配布させることだと思います。

任意の入力を歓迎します!

60
razor

フロントエンドを「非インタラクティブ」として指定する必要があります。これにより、現在の設定が保存されます。

dpkg-reconfigureは現在のシステム設定をゴスペルとして取得するため、通常の方法でタイムゾーンを変更し、非インタラクティブフラグで実行します。

例えば私が「ヨーロッパ/ダブリン」に変更するために私はここにいます:

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

もちろん、これにより/ etc/timezoneも配布したいので、puppet/cfengineを使用できます。

93
Philip Reynolds

受け入れられた回答 が機能しないため(Debian Jessie、2017年4月)、@ gertvdijkの comment リンクから変更されたアプローチが今すぐ機能するようです:

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

debconf-set-selections を使用して構成を事前設定できるはずです。 debconf-utilsをインストールし、適切に構成されたシステムでdebconf-get-selections | grep tzdataを実行して、何を設定するかを把握します。

5
Zoredache

(現在は廃止されています) Puppet wikiarchive )のレシピを使用して、/etc/localtime/usr/share/zoneinfoの適切な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"
    }
}

Dpkg-reconfigureが追加の処理を行うかどうかはわかりませんが、上記のレシピを使用して完全に機能します。

3
phred