सवाल डेबियन स्ट्रेच पर बूट पर होस्टनाम बदलना


मैं एक डेबियन स्ट्रेच मशीन को कॉन्फ़िगर करना चाहता हूं ताकि यह मशीन के सीरियल नंबर के आधार पर बूट पर अपना होस्टनाम सेट कर सके। यह इस तथ्य के कारण है कि जिस मशीन को मैं कॉन्फ़िगर कर रहा हूं उस पर ओएस कई अन्य मशीनों पर कॉपी किया जाएगा, और वे बूट पर अपने (अद्वितीय) होस्टनाम को स्वचालित रूप से सेट करने में सक्षम होना चाहिए।

मैंने ऐसा करने के लिए एक व्यवस्थित सेवा बनाई है। सेवा एक स्क्रिप्ट को कॉल करती है जो मशीन के सीरियल नंबर की जांच करती है, उस मशीन के लिए सही होस्टनाम निर्धारित करती है, और फिर दो फाइलों को संपादित करती है /etc/hosts तथा /etc/hostname तदनुसार। मैंने फाइल सिस्टम तैयार होने के बाद चलाने के लिए सेवा स्थापित की है से पहले नेटवर्किंग कॉन्फ़िगर किया गया है। यह रहा:

[Unit]
DefaultDependencies=no
Requires=local-fs.target
After=local-fs.target
Before=network-pre.target
Wants=network-pre.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/set-hostname.sh
RemainAfterExit=yes

[Install]
WantedBy=network.target

जब मशीन बूट करता है तो मैं देख सकता हूं कि दो फाइलों को सही ढंग से संपादित किया गया है। हालांकि, कमांड लाइन प्रॉम्प्ट अभी भी पुराना होस्टनाम दिखाता है (जिसमें था /etc/hostname रिबूट करने से पहले) और यदि मैं कमांड चलाता हूं hostnamectl मुझे निम्नलिखित जानकारी मिलती है:

Static hostname: new_correct_hostname
Transient hostname: old_hostname

कहा पे new_correct_hostname मेरी लिपि द्वारा उत्पन्न एक और लिखा है /etc/hostname तथा /etc/hosts बूट पर, जबकि old_hostname वह है जो उन फाइलों में था से पहले रिबूट।

जब नेटवर्क ऊपर जाता है तो क्षणिक होस्टनाम सही तरीके से अपडेट क्यों नहीं होता है? क्या कोई अन्य सेवा है जो मेरी लिपि में बदलाव करने से पहले इसे स्थापित करती है?


3
2017-11-11 18:59


मूल




जवाब:


इसके अनुसार man hostnamectl के लिए पृष्ठ क्षणिक होस्टनाम नेटवर्क कॉन्फ़िगरेशन से पढ़ा जाता है और यदि स्थिर होस्टनाम कॉन्फ़िगर और मान्य है तो इसका उपयोग नहीं किया जाता है।

इससे पता चलता है कि पिछले होस्टनाम के साथ कुछ कैश्ड नेटवर्क कॉन्फ़िगरेशन हो सकता है जो आपके क्षणिक होस्टनाम को पुराने में सेट करता है। आगे की जांच नेटवर्क से कनेक्ट करने के लिए उपयोग की जाने वाली विधि और सेवा पर निर्भर करेगी।

वैकल्पिक रूप से, यदि आप पूरी तरह से सुनिश्चित करना चाहते हैं कि आपका रनटाइम होस्टनाम सही ढंग से सेट किया गया है, तो आप लिनक्स कर्नेल को या तो कमांड से जान सकते हैं /bin/hostname द्वारा उपलब्ध कराया गया hostname पैकेज या मैन्युअल रूप से नया नाम डालने से /proc/sys/kernel/hostname, उदाहरण के लिए .:

echo myhost > /proc/sys/kernel/hostname

कोई भी नया खोला गया लॉगिन खोल निष्पादित होने के बाद अद्यतन होस्टनाम दिखाएगा।


1
2017-11-11 21:03