dpkg-reconfigure tzdata और debconf-set-selections के साथ बदलते समय


18

मैं एक स्क्रिप्ट सेट करना चाहता हूं जो स्वचालित रूप से टाइमज़ोन को एक मशीन पर बदल देता है (ubuntu 11.10 पर चल रहा है) और debconfडेटाबेस के लिए सही मान भी सेट करता है। मैंने निम्नलिखित की कोशिश की है, लेकिन यह काम नहीं करता है (अंत में, वर्तमान समयक्षेत्र अपरिवर्तित रहता है, और यदि मैं मैन्युअल रूप से dpkg-reconfigure tzdataकमांड चलाता हूं , तो चयनित मान वास्तव में पुराने हैं):

#!/bin/sh -e
echo "tzdata    tzdata/Areas    select  Europe" | debconf-set-selections
echo "tzdata    tzdata/Zones/Europe select  Madrid" | debconf-set-selections
echo "tzdata    tzdata/Zones/America    select  " | debconf-set-selections
dpkg-reconfigure -f noninteractive tzdata

इसलिए, अब तक, मैं इसे फ़ाइलों /etc/localtimeऔर /etc/timezoneसीधे के साथ खिलवाड़ कर रहा हूं , लेकिन मैं dpkg-reconfigureऔर debconfतरीका पसंद करूंगा ।

जवाबों:


26

सबसे सरल तरीका जो मुझे पता है:

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

wbat dpkg-reconfigure माध्य के मापदंडों को करते हैं?
serengeti12

5
ध्यान रखें कि चल रही प्रक्रियाएँ बिना पुनरारंभ किए परिवर्तन को नहीं उठा सकती हैं। जब तक आप डेमॉन को फिर से शुरू नहीं करते हैं, सर्वर डेमोंस से लॉग टाइमस्टैम्प गलत होने की संभावना है।
mc0e

6

मुझे अभी पता चला है कि डेबियन स्ट्रेच (9) के साथ आपको / आदि / स्थानीय समय को भी बदलने की जरूरत है, इस प्रकार कुछ:

ln -fs /usr/share/zoneinfo/`cat /etc/timezone` /etc/localtime

जरूरत है। संशोधन करने के लिए ट्रेकर के उत्तर की जरूरत है:

echo "Europe/Zurich" > /etc/timezone 
ln -fs /usr/share/zoneinfo/`cat /etc/timezone` /etc/localtime
dpkg-reconfigure -f noninteractive tzdata

मेरा दिन बचाया! अन्य समाधान डेबियन 9 में काम नहीं करते हैं
ब्रैंडन

2
वास्तव में केवल लिंकिंग आदि / स्थानीय समय की आवश्यकता है, क्योंकि कॉलिंग dpkg-reconfigure सेट / etc / timezone सही ढंग से करेगा
डैनियल डिनेंस

@DanielDinnyes या वैकल्पिक रूप से आप उस अनजाने ln -fs ....लाइन को सरल से बदल सकते हैं rm -f /etc/localtime, और यह अभी भी काम करेगा (और डिबेंक /etc/localtimeसही मानों के साथ फिर से बनाएगा ); विवरण के लिए मेरा उत्तर देखें।
मतिजा नलिस

4

डीपकाक-रीकॉन्फ़िगर कॉल करने से पहले डिबेंकफ़ का उपयोग करने के लिए, आपको हटाने /etc/localtimeऔर /etc/timezone। इसके अलावा संभावित अतिरिक्त स्थान से सावधान रहें (जैसा कि आपके प्रश्न में!) जो सौम्य नहीं हैं।

तो "डेबोनफ रास्ता" जो काम करता है (डेबियन स्ट्रेच में) होगा:

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 config स्क्रिप्ट स्मार्ट होने की कोशिश करती है, और यदि इसे पहले कभी कॉन्फ़िगर किया गया था या उपयोगकर्ता ने टाइमज़ोन के साथ मैन्युअल रूप से मध्यस्थता की है, तो अलग तरीके से व्यवहार करेगा।

अतिरिक्त

इसी तरह की समस्या को ख़ुद करने के लिए, आप सबसे पहले करेंगे:

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 उत्तर क्यों काम करता है। इसके अलावा स्क्रिप्ट में अधिक देखने पर, आप पाएंगे कि @andrekeller का उत्तर नए डेबियन संस्करणों में भी काम करता है यदि आप '/ etc / टाइमटाइम' को हटाते हैं।

उम्मीद है कि यह डिबगिंग मदद आपको तब मदद करेगी जब डेबियन का अगला संस्करण स्क्रिप्ट को और भी स्मार्ट बनाता है और मौजूदा उत्तर भी अमान्य हो गए। डीबगिंग पर अधिक जानकारी डिबेंक-डेवेल (7) में मिल सकती है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.