Erlang 21 - 11. Inet Configuration

11 इनसेट कॉन्फ़िगरेशन




erlang

11 इनसेट कॉन्फ़िगरेशन

11.1 परिचय

यह खंड बताता है कि आईपी संचार के लिए एरलांग रनटाइम सिस्टम कैसे कॉन्फ़िगर किया गया है। यह यह भी बताता है कि आप कॉन्फ़िगरेशन फ़ाइल द्वारा अपनी आवश्यकताओं के लिए इसे कैसे कॉन्फ़िगर कर सकते हैं। जानकारी मुख्य रूप से विशेष कॉन्फ़िगरेशन आवश्यकताओं या समस्याओं वाले उपयोगकर्ताओं के लिए है। एक सही ढंग से आईपी-कॉन्फ़िगर किए गए प्लेटफ़ॉर्म पर ठीक से काम करने के लिए एरलांग के लिए विशिष्ट सेटिंग्स की कोई आवश्यकता नहीं है।

Erlang शुरू होने पर यह कर्नेल चर inetrc पढ़ता है, जिसे यदि परिभाषित किया गया है, तो उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल का स्थान और नाम निर्दिष्ट करना है। उदाहरण:

% erl -kernel inetrc '"./cfg_files/erl_inetrc"'

ध्यान दें कि .inetrc फ़ाइल का उपयोग, जो पहले Erlang / OTP संस्करणों में समर्थित था, अब अप्रचलित है।

कॉन्फ़िगरेशन फ़ाइल को निर्दिष्ट करने का दूसरा तरीका पर्यावरण चर ERL_INETRC को फ़ाइल के पूर्ण नाम पर सेट करना है। उदाहरण (मार):

% export ERL_INETRC=./cfg_files/erl_inetrc

ध्यान दें कि कर्नेल चर inetrc इस पर्यावरण चर को ओवरराइड करता है।

यदि कोई उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल निर्दिष्ट नहीं है और Erlang को गैर-वितरित या संक्षिप्त नाम वितरित मोड में शुरू किया गया है, तो Erlang डिफ़ॉल्ट कॉन्फ़िगरेशन सेटिंग्स और एक मूल खोज विधि का उपयोग करता है जो अधिकांश परिस्थितियों में सही ढंग से काम करता है। Erlang इन मोड में सिस्टम inet कॉन्फ़िगरेशन फ़ाइलों (जैसे /etc/host.conf और /etc/nsswitch.conf ) से कोई जानकारी नहीं पढ़ता है, केवल /etc/resolv.conf और /etc/hosts को छोड़कर और परिवर्तनों के लिए निगरानी की जाती है आंतरिक DNS क्लाइंट inet_res(3) लिए यूनिक्स प्लेटफार्मों पर।

यदि एरलैंग को लंबे नाम वितरित मोड में शुरू किया गया है, तो उसे कहीं से डोमेन नाम प्राप्त करने की आवश्यकता है और इस जानकारी के लिए सिस्टम inet कॉन्फ़िगरेशन फ़ाइलों को पढ़ता है। पाया गया कोई भी होस्ट और रिज़ॉल्वर जानकारी भी दर्ज की जाती है, लेकिन जब तक Erlang को देशी लुकअप के लिए कॉन्फ़िगर नहीं किया जाता है, तब तक इसका उपयोग नहीं किया जाता है। जानकारी उपयोगी हो जाती है यदि लुकअप विधि को 'file' या 'dns' में बदल दिया जाता है, तो नीचे देखें।

मूल लुकअप (सिस्टम कॉल) हमेशा डिफ़ॉल्ट रिज़ॉल्वर विधि है। यह VxWorks और OSE Delta को छोड़कर सभी प्लेटफार्मों के लिए सही है, जहां 'file' या 'dns' का उपयोग किया जाता है (उस प्राथमिकता क्रम में)।

विंडोज प्लेटफॉर्म पर, एर्लांग लंबे नाम वितरित मोड में शुरू होने पर कॉन्फ़िगरेशन फ़ाइलों की तलाश के बजाय सिस्टम रजिस्ट्री को खोजता है।

11.2 कॉन्फ़िगरेशन डेटा

यदि सिस्टम inet कॉन्फ़िगरेशन फ़ाइलों (या सिस्टम रजिस्ट्री) में पाया जाता है, तो Erlang स्थानीय डेटा में निम्न डेटा रिकॉर्ड करता है:

  • होस्टनाम और होस्ट पते
  • डोमेन नाम
  • नेमसर्वर
  • डोमेन खोजें
  • लुकअप विधि

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

मान्य कॉन्फ़िगरेशन पैरामीटर निम्नानुसार हैं:

{file, Format, File}.

Format = atom()

File = string()

एक सिस्टम फ़ाइल निर्दिष्ट करें जिसे Erlang कॉन्फ़िगरेशन डेटा से पढ़ना है। Format पार्सर को बताता है कि फ़ाइल की व्याख्या कैसे की जाए:

  • resolv (यूनिक्स resolv.conf)
  • host_conf_freebsd (FreeBSD host.conf)
  • host_conf_bsdos (BSDOS host.conf)
  • host_conf_linux (Linux host.conf)
  • nsswitch_conf (यूनिक्स nsswitch.conf)
  • hosts (यूनिक्स होस्ट)

File को पूर्ण पथ के साथ फ़ाइल नाम निर्दिष्ट करना है।

{resolv_conf, File}.

File = string()

एक सिस्टम फ़ाइल निर्दिष्ट करें कि inet_res(3) को आंतरिक DNS क्लाइंट inet_res(3) लिए रिज़ॉल्वर कॉन्फ़िगरेशन पढ़ना है, और परिवर्तनों की निगरानी करना है, भले ही यह मौजूद न हो। रास्ता निश्छल होना चाहिए।

यह कॉन्फ़िगरेशन पैरामीटर nameserver को ओवरराइड कर सकता है और निर्दिष्ट फ़ाइल की सामग्री के आधार पर search सकता है। वे भविष्य में फ़ाइल सामग्री को दर्शाते हुए किसी भी समय बदल सकते हैं।

यदि फ़ाइल को रिक्त स्ट्रिंग "" रूप में निर्दिष्ट किया जाता है, तो भविष्य में कोई फ़ाइल पढ़ी या मॉनिटर नहीं की जाती है। जब लघु नाम वितरित मोड में नोड प्रारंभ होता है, तो DNS क्लाइंट को कॉन्फ़िगर नहीं करने के पुराने व्यवहार का अनुकरण करता है।

यदि यह पैरामीटर निर्दिष्ट नहीं है, तो यह /etc/resolv.conf तब तक डिफॉल्ट /etc/resolv.conf जब तक कि पर्यावरण वैरिएबल ERL_INET_ETC_DIR सेट नहीं हो जाता है, जो इस फ़ाइल के लिए निर्देशिका को कुछ अन्य /etc अलावा परिभाषित करता है।

{hosts_file, File}.

File = string()

एक सिस्टम फ़ाइल निर्दिष्ट करें कि आंतरिक मेजबान रिसॉल्वर के लिए Erlang से रिवाल्वर कॉन्फ़िगरेशन को पढ़ना है, और परिवर्तनों की निगरानी करना, भले ही यह मौजूद न हो। रास्ता निश्छल होना चाहिए।

जब खोज विकल्प file का उपयोग किया जाता है {host, IP, Aliases} इन होस्ट प्रविष्टियों को {file, hosts, File} ऊपर या {host, IP, Aliases} साथ जोड़ा जाता है।

यदि फ़ाइल को रिक्त स्ट्रिंग "" रूप में निर्दिष्ट किया जाता है, तो भविष्य में कोई फ़ाइल पढ़ी या मॉनिटर नहीं की जाती है। जब लघु नाम वितरित मोड में नोड प्रारंभ होता है, तो DNS क्लाइंट को कॉन्फ़िगर नहीं करने के पुराने व्यवहार का अनुकरण करता है।

यदि यह पैरामीटर निर्दिष्ट नहीं है, तो यह /etc/hosts ERL_INET_ETC_DIR लिए ERL_INET_ETC_DIR /etc/hosts जब तक कि पर्यावरण वैरिएबल ERL_INET_ETC_DIR सेट नहीं किया जाता है, जो इस फ़ाइल के लिए निर्देशिका को कुछ अन्य /etc अलावा परिभाषित करता है।

{registry, Type}.

Type = atom()

एक सिस्टम रजिस्ट्री निर्दिष्ट करें जिसे Erlang से कॉन्फ़िगरेशन डेटा पढ़ना है। win32 एकमात्र वैध विकल्प है।

{host, IP, Aliases}.

IP = tuple()

Aliases = [string()]

मेजबान तालिका में मेजबान प्रविष्टि जोड़ें।

{domain, Domain}.

Domain = string()

डोमेन नाम सेट करें।

{nameserver, IP [,Port]}.

IP = tuple()

Port = integer()

inet_res(3) लिए उपयोग करने के लिए प्राथमिक inet_res(3) पता (और पोर्ट, यदि डिफ़ॉल्ट के अलावा inet_res(3)

{alt_nameserver, IP [,Port]}.

IP = tuple()

Port = integer()

inet_res(3) लिए द्वितीयक नेमसर्वर का पता (और पोर्ट, यदि डिफ़ॉल्ट के अलावा inet_res(3)

{search, Domains}.

Domains = [string()]

inet_res(3) लिए खोज डोमेन जोड़ें।

{lookup, Methods}.

Methods = [atom()]

लुकअप विधियों को निर्दिष्ट करें और जिसमें उन्हें आज़माने के लिए। मान्य तरीके निम्न हैं:

  • native (सिस्टम कॉल का उपयोग करें)
  • file (सिस्टम कॉन्फ़िगरेशन फ़ाइलों और / या उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल से पुनर्प्राप्त होस्ट डेटा का उपयोग करें)
  • dns ( inet_res(3) प्रश्नों के लिए inet_res(3) डीएनएस क्लाइंट inet_res(3) उपयोग करें)

लुकअप विधि string होस्टनाम को IPv4 या IPv6 स्ट्रिंग के रूप में पार्स करने की कोशिश करता है और परिणामी आईपी पता वापस करता है। यह स्वचालित रूप से पहली बार आजमाया जाता है जब native Methods सूची में नहीं है। इस मामले में इसे छोड़ने के लिए, छद्म देखने की विधि nostring Methods सूची में कहीं भी डाली जा सकती है।

{cache_size, Size}.

Size = integer()

रिज़ॉल्वर कैश आकार सेट करें। 100 डीएनएस रिकॉर्ड के लिए चूक।

{cache_refresh, Time}.

Time = integer()

सेट करें कि कितनी बार (मिलीसेकंड में) inet_res(3) लिए रिज़ॉल्वर कैश ताज़ा किया जाता है (अर्थात, समाप्त हो चुके DNS रिकॉर्ड हटा दिए जाते हैं)। 1 घंटे तक की कमी।

{timeout, Time}.

Time = integer()

inet_res(3) द्वारा किए गए DNS प्रश्नों के लिए (मिलीसेकंड में) पुनः प्रयास करने तक प्रतीक्षा करने का समय निर्धारित करें। 2 सेकंड के लिए चूक।

{retry, N}.

N = integer()

DNS प्रश्नों की संख्या सेट करें inet_res(3) देने से पहले कोशिश करेंगे। 3 से चूक।

{inet6, Bool}.

Bool = true | false

IPv6 पते देखने के लिए DNS क्लाइंट inet_res(3) को बताता है। false अवहेलना।

{usevc, Bool}.

Bool = true | false

DNS क्लाइंट inet_res(3) को UDP के बजाय TCP (वर्चुअल सर्किट) का उपयोग करने के लिए कहता है। false अवहेलना।

{edns, Version}.

Version = false | 0

EDNS संस्करण सेट करता है जो inet_res(3) का उपयोग करेगा। केवल अनुमत संस्करण शून्य है। false लिए चूक, जिसका अर्थ है ईडीएनएस का उपयोग नहीं करना।

{udp_payload_size, Size}.

N = integer()

अनुमत यूडीपी पेलोड आकार inet_res(3) EDNS प्रश्नों में विज्ञापन सेट करेगा। इसके अलावा सीमा निर्धारित करता है जब यूपीडी के लिए DNS क्वेरी को टीसीपी क्वेरी के बजाय मजबूर करने के लिए डीएनएस क्वेरी को बहुत बड़ा माना जाएगा; यह पूरी तरह से सही नहीं है, क्योंकि व्यक्तिगत नाम देने वाले का यूडीपी पेलोड आकार विज्ञापित है, जिसका उपयोग किया जाना है, लेकिन यह सरल रणनीति तब तक करेगी जब तक कि अधिक बुद्धिमान (जांच, कैशिंग) एल्गोरिदम को लागू करने की आवश्यकता न हो। 1280 से डिफ़ॉल्ट, जो मानक ईथरनेट MTU आकार से उपजा है।

{udp, Module}.

Module = atom()

बता दें कि Erlang inet_udp तुलना में एक और आदिम UDP मॉड्यूल का उपयोग inet_udp

{tcp, Module}.

Module = atom()

बता दें Erlang inet_tcp तुलना में एक और आदिम टीसीपी मॉड्यूल का उपयोग inet_tcp

clear_hosts.

मेजबानों को साफ़ करें।

clear_ns.

रिकॉर्ड किए गए नेमसर्वर (प्राथमिक और माध्यमिक) की सूची को साफ़ करें।

clear_search.

खोज डोमेन की सूची साफ़ करें।

11.3 उपयोगकर्ता विन्यास उदाहरण

मान लें कि कोई उपयोगकर्ता नहीं चाहता कि एर्लैंग देशी लुकअप विधि का उपयोग करे, लेकिन एर्लांग को शुरू से ही आवश्यक सभी जानकारी को पढ़ने और नाम और पते को हल करने के लिए उपयोग करने की इच्छा है। यदि लुकअप विफल हो जाता है, तो एर्लांग एक नेमसेवर से डेटा का अनुरोध करना है (एर्लांग डीएनएस क्लाइंट का उपयोग करके, ईडीएनएस का उपयोग करने के लिए सेट किया गया है) बड़ी प्रतिक्रियाओं की अनुमति देता है। रिज़ॉल्वर कॉन्फ़िगरेशन तब अपडेट किया जाता है जब उसकी कॉन्फ़िगरेशन फ़ाइल बदल जाती है। इसके अलावा, DNS रिकॉर्ड को कभी कैश नहीं किया जाता है। उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल (उदाहरण में erl_inetrc , निर्देशिका में संग्रहीत ./cfg_files ) तब निम्नानुसार दिखाई दे सकती है (यूनिक्स):

%% -- ERLANG INET CONFIGURATION FILE --
%% read the hosts file
{file, hosts, "/etc/hosts"}.
%% add a particular host
{host, {134,138,177,105}, ["finwe"]}.
%% do not monitor the hosts file
{hosts_file, ""}.
%% read and monitor nameserver config from here
{resolv_conf, "/usr/local/etc/resolv.conf"}.
%% enable EDNS
{edns,0}.
%% disable caching
{cache_size, 0}.
%% specify lookup method
{lookup, [file, dns]}.

और उदाहरण के लिए, अर्लंग, निम्नानुसार शुरू किया जा सकता है:

% erl -sname my_node -kernel inetrc '"./cfg_files/erl_inetrc"'