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

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

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

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

7 ответов

Решение

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

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

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

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

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

Поскольку принятый ответ больше не работает (Debian Jessie, апрель 2017 г.), подход, модифицированный из ссылки на комментарий @gertvdijk, по-видимому, делает эту работу сейчас:

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

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

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

      sudo EDITOR='sed -Ei "
    s|tzdata/Areas=.+|tzdata/Areas=\"Asia\"|;
    s|tzdata/Zones/Asia=.+|tzdata/Zones/Asia=\"Shanghai\"|
    "' dpkg-reconfigure -f editor tzdata

Ответ по теме: Как установить локаль в неинтерактивном режиме в Debian/Ubuntu?

dpkg-reconfigure -f noninteractiveне очень интуитивно понятно.

Я хочу указать на другой способ.

Интерфейс A. debconf: телетайп

Это скрытая опция (кажется, это встроенный интерфейс debconf).

      echo -e 'Asia\nTokyo' | sudo dpkg-reconfigure tzdata -f teletype

Легко читать и писать.

интерфейсы debconf

увидеть все интерфейсы (но нетteletypeв списке)

dpkg-reconfigure debconf
или
dpkg-reconfigure debconf -f teletype

  1. Диалог
  2. Readline
  3. Гном
  4. Кде
  5. редактор
  6. Неинтерактивный

проверить часовой пояс

      $ ll /etc/localtime; tail -v /etc/timezone
lrwxrwxrwx 1 root root 30 Apr 30 02:59 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
==> /etc/timezone <==
Asia/Tokyo

ПРИМЕЧАНИЕ: иногда может понадобитьсяrm /etc/localtimeсначала (если ссылка битая).

B. редактировать файл вручную

возможно не по теме

      ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
echo 'Asia/Tokyo' > /etc/timezone

ИЛИ

      ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
apt install tzdata        # it will use the linked timezone

ИЛИ

      ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
dpkg-reconfigure tzdata   # it will use the linked timezone



проверено на Ubuntu18 и 20

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

/usr/bin/tzselect
Другие вопросы по тегам