Để sử dụng debconf, trước khi gọi dpkg-cấu hình lại, bạn cũng cần xóa /etc/localtime
và /etc/timezone
. Ngoài ra, hãy cẩn thận với không gian thừa có thể (như trong câu hỏi của bạn!) Không lành tính.
Vì vậy, "cách gỡ lỗi" hoạt động (trong Debian Stretch) sẽ là:
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
Lý do là tập lệnh cấu hình tzdata cố gắng trở nên thông minh và nếu nó đã được cấu hình trước đó hoặc người dùng đã tự điều chỉnh bằng các múi giờ, sẽ hành xử khác đi.
THÊM
Để tự gỡ lỗi vấn đề tương tự, trước tiên bạn sẽ làm:
export DEBCONF_DEBUG=developer
cung cấp thông tin sau:
# 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
trong đó sẽ cho bạn thấy rằng nó mạnh mẽ bộ các giá trị trước khi yêu cầu người dùng cho họ (do đó ghi đè lên giá trị mà bạn thiết lập với debconf-set-selections
).
Sau đó, bạn sẽ thay đổi shebang /var/lib/dpkg/info/tzdata.config
từ #!/bin/sh
sang #!/bin/sh -x
và theo dòng chương trình, nơi bạn sẽ thấy rằng nó thực hiện:
+ [ -L /etc/localtime ]
+ readlink /etc/localtime
+ TIMEZONE=/usr/share/zoneinfo/Etc/UTC
nhìn vào /var/lib/dpkg/info/tzdata.config
bạn sẽ thấy điều này:
# If /etc/localtime is a link, update /etc/timezone
if [ -L /etc/localtime ] ; then
TIMEZONE="$(readlink /etc/localtime)"
trong đó giải thích tại sao câu trả lời @fiction hoạt động. Cũng tìm kiếm trong tập lệnh nhiều hơn, bạn sẽ thấy rằng câu trả lời @andrekeller cũng hoạt động trong các phiên bản Debian mới hơn nếu bạn xóa '/ etc / localtime'.
Hy vọng rằng trợ giúp gỡ lỗi này sẽ giúp bạn khi phiên bản Debian tiếp theo làm cho tập lệnh thậm chí thông minh hơn và các câu trả lời hiện tại cũng trở nên không hợp lệ. Thông tin thêm về gỡ lỗi gỡ lỗi có thể được tìm thấy trong debconf-devel (7)