автоматизировать dpkg-переконфигурировать tzdata

60

Я использую Puppet для администрирования кластера серверов Debian. Мне нужно изменить часовой пояс каждой машины в кластере. Правильный способ сделать это - использовать dpkg-reconfigure tzdata. Но я могу только изменить его, если использую диалог. Есть ли способ автоматизировать это из оболочки, чтобы я мог просто написать Exec, чтобы сделать это легко?

Если нет, то я думаю, что следующим лучшим способом будет распределение марионеток /etc/timezoneи /etc/localtimeправильные данные по кластеру.

Любой вклад приветствуется!

Элронд
источник
Обратите внимание, что принятый в настоящее время ответ неверен с 2017 года . Правильный ответ таков .
Дан Дакалеску

Ответы:

92

Вам необходимо указать интерфейс как «неинтерактивный», и он сохранит ваши текущие настройки.

dpkg-reconfigure примет текущие настройки системы как госпел, поэтому просто измените часовой пояс, как обычно, и запустите его с неинтерактивным флагом

например, для меня, чтобы перейти на "Европа / Дублин", где я нахожусь:

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

Очевидно, это позволяет вам использовать puppet / cfengine так, как вам нравится, для распространения / etc / timezone.

Филип Рейнольдс
источник
5
В качестве альтернативы изменению разрешений вы можете сделать что-то вроде этого. echo 'Europe/Dublin' | sudo tee /etc/timezone > /dev/null
Горелат
3
Для полноты, еще один способ эхо через sudosudo bash -c 'echo "Europe/Dublin" > /etc/timezone'
MartyMacGyver
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
scruss
источник
1
Это должен быть принятый ответ в наше время.
Дан Дакалеску
Отлично, это работает удовольствие
Infomaniac
5

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

Zoredache
источник
1
Для вещей, которые основаны на debconf, это должно работать. Но тздата предпочитает конфиг из / etc / timezone. Так что это не работает на уже установленной (wheezy) системе.
Элронд
3

Вы также можете использовать рецепт из (ныне несуществующего) Puppet wiki ( архива ), который заменяется /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 -configure делает что-то еще, но я использовал приведенный выше рецепт, и он отлично работает.

Phred
источник
-3

Это очень просто и нужно всего лишь набрать команду и ответить на простые вопросы.
затем запустите:

/usr/bin/tzselect
f4a65fa46s5fa
источник
1
man tzselect: «Обратите внимание, что tzselect на самом деле не изменит часовой пояс для вас. Используйте« dpkg -configure tzdata »для достижения этой цели».
Спинкус