CentOS और डेबियन के बीच नाम रिज़ॉल्यूशन अंतर


13

मेरे पास एक छोटा जावा प्रोग्राम है जो हर सेकंड InetAddress.getByName ("example.com") को कॉल करता है। जब मैं इसे f स्ट्रेस-एफ ’का उपयोग करते हुए एक CentOS 6.4 बॉक्स पर चलाता हूं, तो मैं देखता हूं कि /etc/resolv.conf एक बार खोला और पढ़ा जाता है:

$ grep /etc/resolv.conf strace.out
[pid 24810] open("/etc/resolv.conf", O_RDONLY) = 6

जब मैं इसे डेबियन 7 पर चलाता हूं तो मैं देखता हूं कि /etc/resolv.conf को बार-बार खोला जाता है या स्टेट (): d

$ grep  /etc/resolv.conf strace.out
[pid 41821] open("/etc/resolv.conf", O_RDONLY) = 10
[pid 41821] stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=92, ...}) = 0
[pid 41821] open("/etc/resolv.conf", O_RDONLY) = 10
[pid 41821] stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=92, ...}) = 0
[pid 41821] stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=92, ...}) = 0

दोनों सिस्टम में /etc/nsswitch.conf के साथ कॉन्फ़िगर किया गया है

होस्ट: फाइलें डीएनएस

न तो सिस्टम में नाम है, कैशिंग डेमॉन चल रहा है।

मैंने किसी भी जावा मतभेदों का पता लगाने के लिए दोनों मशीनों पर ओरेकल हॉटशॉट जावा जेवीएम के एक ही संस्करण का उपयोग किया।

CentOS 6.4 बॉक्स में 2.12 स्थापित किया गया है। डेबियन 7 बॉक्स में 2.13 स्थापित किया गया है।

खोलने और पठन /etc/resolv.conf के संबंध में दो ऑपरेटिंग सिस्टम के बीच विभिन्न व्यवहार के लिए क्या खाते हैं?


क्या आप प्लीबिन को पूर्ण निशान दे सकते हैं
डेनिला लैडनर

जवाबों:


10

RedHat glibc डेवलपर्स अपने सॉफ़्टवेयर के कुछ बगों को बग नहीं मानते हैं। इनमें से एक बग को बदलने के बाद resolv.conf का फिर से पढ़ना है। glibc मानता है कि आवेदन की जिम्मेदारी, इसलिए प्रत्येक और हर आवेदन को इसके लिए अपना तर्क बनाने की आवश्यकता होगी।

चूँकि यह पूरी तरह से बोनर्स है, इसलिए ईगलिब डेवलपर्स ने इस मुद्दे को तय किया है। इसलिए नॉन-इग्लिबक सिस्टम पर आपके एप्लिकेशन को nss_dns को फिर से संगठित करने के लिए अपने स्वयं के तर्क की आवश्यकता होगी, अन्यथा इसे resolv.conf परिवर्तन के बाद पुनः आरंभ करने की आवश्यकता होगी। एग्लिबेक सिस्टम (डेबियन और डेबियन पर आधारित चीजें) पर, आपको कम बग्गी लिबास मिलता है।

हमने resolv.conf को बदलने के बाद, पुराने DNS सर्वरों को डिकम्पोजिशन करने और फिर 1200+ mysql सर्वर को रिस्टार्ट करने के बाद यह कठिन रास्ता खोज लिया। कहने की जरूरत नहीं है, यह मजेदार नहीं है।


इसे "बिल्कुल बोनर्स" क्यों माना जाता है? और glibc ने ऐसा क्यों किया?
माइकल हैम्पटन

1
क्योंकि ग्लिबेक को ठीक करने के बजाय, वे हर आवेदन पर बोझ डालते हैं ... क्योंकि वे ऐसा क्यों करते हैं? मुझे नहीं पता। मैं ड्रेपर मन को नहीं पढ़ सकता हूं, और मुझे यकीन नहीं है कि मैं जानना चाहता हूं कि वहां क्या हो रहा है ...
डेनिस करसेमेकर

1
बात यह है: मुझे यकीन नहीं है कि glibc वास्तव में टूट गया है। /etc/resolv.confप्रत्येक DNS लुकअप पर फिर से क्यों पढ़ा जाना चाहिए? क्या यह वास्तव में अक्सर बदलने की उम्मीद है? अब अगर व्यवहार किया गया था undocumented तो मैं समझता हूँ सकता है ...
माइकल हैम्पटन

1
यह हर लुकअप पर फिर से निर्भर नहीं करता है, साथ ही टूट जाएगा :) व्यवहार अनैच्छिक है और वास्तव में प्रतिस्पद्र्धात्मक है: glibc nss_dns लाइब्रेरी को आरम्भ करने के लिए ज़िम्मेदारी लेता है, लेकिन बाद में एप्लिकेशन को इसे फिर से शुरू करने के लिए ज़िम्मेदार बनाता है, भले ही वे अनुप्रयोग न हों nss और यह कैसे काम करता है, इसके बारे में किसी भी जानकारी को जानें। यह कैसे नहीं है?
डेनिस करसेमेकर

1
डेनिस सही है, EL6 में gai जानबूझकर टूट गया है क्योंकि छोटी गाड़ी व्यवहार "अपेक्षित व्यवहार" बन गया है - access.redhat.com/site/solutions/541163
suprjami

4

न केवल सी लाइब्रेरी संस्करण अलग हैं, लेकिन CentOS GNU C लाइब्रेरी ( glibc) का उपयोग करता है जबकि डेबियन एंबेडेड GLIBC ( eglibc) का उपयोग करता है , इसलिए नाम लुकअप सिस्टम कॉल का वास्तविक कार्यान्वयन पूरी तरह से अलग है।

शायद इन दो वितरणों के बीच अलग-अलग प्रणाली कॉल व्यवहार के लिए जिम्मेदार होगा।

मैं मानती हूं कि इसमें InetAddress.getByNameअनुवाद है getaddrinfo()। आप प्रासंगिक सी लाइब्रेरी कार्यान्वयन और संस्करणों में प्रत्येक syscall के स्रोत को पढ़कर शुरू कर सकते हैं।

सुनिश्चित करें कि आप जिस वास्तविक पैकेज संस्करण का उपयोग कर रहे हैं, उससे स्रोत को पढ़ें। ईएल 6.4 में पैकेजों में उनके मूल अपस्ट्रीम संस्करणों की तुलना में 2 साल के सुधार किए गए हैं। मुझे लगता है वही है जो डेबियन पैकेज के बारे में सच है।

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