автоматизувати dpkg-налаштування tzdata


60

Я використовую лялечку, щоб адмініструвати кластер серверів debian. Мені потрібно змінити часовий пояс кожної машини на кластері. Правильний метод Debian для цього - використовувати dpkg-reconfigure tzdata. Але я можу, здається, змінити його лише в тому випадку, якщо використовую діалогове вікно. Чи є спосіб автоматизувати це з оболонки, щоб я міг просто написати Exec, щоб зробити це просто?

Якщо ні, я думаю, що наступним найкращим способом було б, мабуть, розповсюдження ляльок /etc/timezoneта /etc/localtimeправильні дані по кластеру.

Будь-який внесок оцінений!


Зауважте, що прийнята на даний момент відповідь була невірною з 2017 року . Правильна відповідь - це ця .
Дан Даскалеску

Відповіді:


92

Вам потрібно вказати фронтенд як "неінтерактивний", і він збереже ваші поточні налаштування.

dpkg-конфігурація сприйме поточні параметри системи як євангелію, тому просто змініть свій часовий пояс так, як ви зазвичай працювали, і запустіть його неінтерактивним прапором

наприклад, для мене, щоб перейти на "Європа / Дублін", де я є:

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

Очевидно, це дозволяє вам використовувати лялечку / cfengine, як вам подобається також розподіляти / etc / timezone.


5
замість зміни дозволів ви можете зробити щось подібне. echo 'Europe/Dublin' | sudo tee /etc/timezone > /dev/null
горілатив

3
Для повноти, ще один спосіб відлуння через sudo bash -c 'echo "Europe/Dublin" > /etc/timezone'
судо

6
Голова вгору! Новіші версії Ubuntu / Debian більше не працюють таким чином. Поведінка змінилася. bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
gertvdijk

21

Оскільки прийнята відповідь більше не працює (Debian Jessie, квітень 2017 р.), Схоже , підхід, змінений із посилання на коментарі @ gertvdijk, виконує цю роботу зараз:

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

1
На сьогодні це має бути прийнятою відповіддю.
Дан Даскалеску


5

Ви повинні мати можливість використовувати вибрані параметри debconf для встановлення конфігурації. Встановіть debconf-utils і запустіть debconf-get-selections | grep tzdataу правильно налаштованій системі, щоб зрозуміти, що також встановити.


1
Для речей, що базуються на дебконфі, це має працювати. Але tzdata надає перевагу конфігурації з / etc / timezone. Тож це не працює на вже встановленій (хрипкій) системі.
Елронд

3

Ви також можете скористатись рецептом з (зараз неіснуючого) віконечного вікі ( архіву ), який замінює /etc/localtimeвідповідний файл zoneinfo від /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"
    }
}

Я не впевнений, чи переконфігурування dpkg робить щось зайве, але я використав описаний вище рецепт, і він працює чудово.


-3

Його дуже просто і потрібно лише набрати команду і відповісти на прості запитання.
потім запустіть:

/usr/bin/tzselect

1
man tzselect: "Зауважте, що tzselect насправді не змінить часовий пояс для вас. Для цього використовуйте" dpkg-переконфігуруйте tzdata "."
шпигун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.