web-dev-qa-db-ja.com

dpkg-reconfigure tzdataの非インタラクティブな方法

Ubuntuサーバーを最初にセットアップするとき、aptitude install tzdata、次にdpkg-reconfigure tzdataこれで、タイムゾーンが適切に設定されます。

スクリプトを使用してサーバーのセットアップを自動化しようとしていますが、ユーザーの介入による対話型セッションが必要なため、この種のレンチが自動化されていることに気付きました。

対話的でなくてもdpkg-reconfigureを使用する方法はありますか?

69
kenny

[〜#〜] update [〜#〜]:この質問はStackOverflowのトピック外になりました。
ServerFaultの正解 をご覧ください。

84
swill

Swillによる答えは、それが適切に行われる方法ではありません。パッケージの無人/スクリプトdpkg構成が必要な場合は、debconf preseedメカニズムを使用します。

あなたの場合、これは次のことをしなければならないことを意味します。

  • 次の環境変数を設定して、debconfがユーザーに質問をすることを回避します。

    export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
    
  • 次に、次のpreseed.txtファイル(または他の必要な設定)でdebconfをpreseedします。

    tzdata tzdata/Areas select Europe
    tzdata tzdata/Zones/Europe select Berlin
    
  • 次を実行して上記のpreseedファイルを設定します。

    debconf-set-selections /your/preseed.txt
    
  • apt経由でtzdataをインストールできる(まだインストールされていない場合)か、dpkg-reconfigureを実行できます。最終的に、tzdataは、debconf preseedファイルで指定した内容に従ってセットアップされます。

Debconf preseedを使用すると、さらに多くを自動化できることに注意してください。たとえば、私のpreseedsで私は常に設定します:

locales locales/locales_to_be_generated multiselect     en_US.UTF-8 UTF-8
locales locales/default_environment_locale      select  en_US.UTF-8

debconf-get-selectionsを実行することにより、現在のシステムのdebconf設定をいつでも検査できます。出力は、debconf preseedを使用してシステム構成をどれだけ自動化できるかを示しているはずです。

55
josch

16.04にはバグがあり( https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806 、この回答を書いている時点では修正されていません)、内容が発生します/etc/timezoneの実行時に古い値で上書きされるdpkg-reconfigure -f noninteractive tzdata。修正は次のとおりです(上記のバグレポートから)。

$ Sudo ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime
$ Sudo dpkg-reconfigure --frontend noninteractive tzdata
Current default time zone: 'America/New_York'
Local time is now:      Mon Feb 20 07:30:33 EST 2017.
Universal Time is now:  Mon Feb 20 12:30:33 UTC 2017.
$ cat /etc/timezone
America/New_York

/etc/timezoneの内容を手動で変更する必要はありません。これは、Ubuntu 16.04.2 LTSで機能しました。

24
tdenniston

Dockerfileでこれを行う:

FROM ubuntu:xenial

## for apt to be noninteractive
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN true

## preesed tzdata, update package index, upgrade packages and install needed software
RUN echo "tzdata tzdata/Areas select Europe" > /tmp/preseed.txt; \
    echo "tzdata tzdata/Zones/Europe select Berlin" >> /tmp/preseed.txt; \
    debconf-set-selections /tmp/preseed.txt && \
    rm /etc/timezone && \
    rm /etc/localtime && \
    apt-get update && \
    apt-get install -y tzdata

## cleanup of files from setup
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

私の実験では、/etcに必要なファイルの削除を決定しました。

18
Nils Ballmann

前進 josch の答え; debconf db値を設定し、remove /etc/{localtime,timezone}実行前dpkg-reconfigure:-

$ echo "tzdata tzdata/Areas select Europe" > some/file.txt
$ echo "tzdata tzdata/Zones/Europe select Berlin" >> some/file.txt
$ Sudo debconf-set-selections some/file.txt
$ Sudo rm /etc/timezone
$ Sudo rm /etc/localtime
$ Sudo dpkg-reconfigure -f noninteractive tzdata
Current default time zone: 'Europe/Berlin'
Local time is now:      Thu Sep  1 17:13:16 CEST 2016.
Universal Time is now:  Thu Sep  1 15:13:16 UTC 2016.

この方法は以下で動作することが知られています:

  • Ubunty Trusty(14.04.5 LTS)
10
jah

これは、@ NilsBallmannの回答を元にした最新のUbuntu 18.04 LTSディストリビューションのDockerfileです。また、一時ファイルの作成を削除し、パッケージインストールを1つのレイヤーに圧縮しました。

FROM ubuntu:bionic

RUN export DEBIAN_FRONTEND=noninteractive; \
    export DEBCONF_NONINTERACTIVE_SEEN=true; \
    echo 'tzdata tzdata/Areas select Etc' | debconf-set-selections; \
    echo 'tzdata tzdata/Zones/Etc select UTC' | debconf-set-selections; \
    apt-get update -qqy \
 && apt-get install -qqy --no-install-recommends \
        tzdata \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*
6
sergei_ivanov