debconfを使用するには、dpkg-reconfigureを呼び出す前に、/etc/localtime
およびも削除する必要があり/etc/timezone
ます。良性ではない可能性のある余分なスペース(ご質問のように!)にも注意してください。
(Debian Stretchで)動作する「debconfの方法」は次のようになります。
echo "tzdata tzdata/Areas select Europe" | debconf-set-selections
echo "tzdata tzdata/Zones/Europe select Madrid" | debconf-set-selections
rm -f /etc/localtime /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
その理由は、tzdata構成スクリプトがスマートになり、以前に構成された場合、またはユーザーがタイムゾーンを手動で操作した場合、動作が異なるためです。
追加
同様の問題を自分でデバッグするには、最初に次のことを行います。
export DEBCONF_DEBUG=developer
次の情報を提供します:
# dpkg-reconfigure -f noninteractive tzdata
debconf (developer): starting /var/lib/dpkg/info/tzdata.config reconfigure 2018e-0+deb9u1
debconf (developer): <-- VERSION 2.0
debconf (developer): --> 0 2.0
debconf (developer): <-- CAPB backup
debconf (developer): --> 0 multiselect escape
debconf (developer): <-- SET tzdata/Areas Etc
debconf (developer): --> 0 value set
debconf (developer): <-- SET tzdata/Zones/Etc UTC
debconf (developer): --> 0 value set
debconf (developer): <-- INPUT high tzdata/Areas
debconf (developer): --> 30 question skipped
debconf (developer): <-- GO
debconf (developer): --> 0 ok
debconf (developer): <-- GET tzdata/Areas
debconf (developer): --> 0 Etc
debconf (developer): <-- INPUT high tzdata/Zones/Etc
debconf (developer): --> 30 question skipped
debconf (developer): <-- GO
debconf (developer): --> 0 ok
debconf (developer): starting /var/lib/dpkg/info/tzdata.postinst configure 2018e-0+deb9u1
debconf (developer): <-- VERSION 2.0
debconf (developer): --> 0 2.0
debconf (developer): <-- GET tzdata/Areas
debconf (developer): --> 0 Etc
debconf (developer): <-- GET tzdata/Zones/Etc
debconf (developer): --> 0 UTC
debconf (developer): <-- STOP
それは強制的にことを示すだろう設定します(したがって、あなたが設定した値を上書きし、それらをユーザーに尋ねる前に値をdebconf-set-selections
)。
次に、シェバンを/var/lib/dpkg/info/tzdata.config
から#!/bin/sh
に変更し#!/bin/sh -x
、プログラムフローに従います。
+ [ -L /etc/localtime ]
+ readlink /etc/localtime
+ TIMEZONE=/usr/share/zoneinfo/Etc/UTC
/var/lib/dpkg/info/tzdata.config
あなたを見て いるとこれが見つかります:
# If /etc/localtime is a link, update /etc/timezone
if [ -L /etc/localtime ] ; then
TIMEZONE="$(readlink /etc/localtime)"
@fiction answerが機能する理由を説明しています。また、スクリプトをさらに調べると、「/ etc / localtime」を削除すると、@ andrekellerの回答が新しいDebianバージョンでも機能することがわかります。
Debianの次のバージョンがスクリプトをさらに賢くし、既存の回答も無効になったときに、このデバッグヘルプが役立つことを願っています。debconfのデバッグに関する詳細は、debconf-devel(7)にあります。