सवाल होस्टनाम सेट करना: एफक्यूडीएन या संक्षिप्त नाम?


मैंने देखा है कि सिस्टम होस्टनाम सेट करने की "पसंदीदा" विधि मूल रूप से Red Hat / CentOS और डेबियन / उबंटू सिस्टम के बीच अलग है।

CentOS दस्तावेज और यह आरएचईएल तैनाती गाइड होस्टनाम कहो एफक्यूडीएन होना चाहिए:

HOSTNAME=<value>, कहा पे <value> पूरी तरह से योग्य डोमेन होना चाहिए   नाम (एफक्यूडीएन), जैसे कि hostname.example.com, लेकिन जो कुछ भी हो सकता है   होस्टनाम आवश्यक है।

आरएचईएल स्थापित गाइड थोड़ा और अस्पष्ट है:

सेटअप आपको इस कंप्यूटर के लिए होस्ट नाम प्रदान करने के लिए संकेत देता है, या तो एक के रूप में    पूरी तरह से योग्य कार्यक्षेत्र नाम (एफक्यूडीएन) प्रारूप में hostname.domainname   या प्रारूप में एक लघु होस्ट नाम के रूप में होस्ट नाम

डेबियन संदर्भ मेजबाननाम कहते हैं एफक्यूडीएन का उपयोग नहीं करना चाहिए:

3.5.5। होस्टनाम

कर्नेल सिस्टम को बनाए रखता है होस्ट नाम। रनलेवल में init स्क्रिप्ट   एस जो सिम्लिंक किया गया है "/etc/init.d/hostname.sh"सिस्टम सेट करता है   बूट समय पर होस्टनाम (का उपयोग कर होस्ट नाम आदेश) संग्रहीत नाम के लिए   में "/ Etc / होस्ट नाम"इस फाइल में होना चाहिए केवल सिस्टम होस्टनाम,   पूरी तरह योग्य डोमेन नाम नहीं है।

मैंने आईबीएम से उपयोग करने के लिए किसी भी विशिष्ट सिफारिशों को नहीं देखा है, लेकिन कुछ सॉफ्टवेयर प्रतीत होता है प्रतीत होता है।

मेरे सवाल:

  • एक विषम वातावरण में, क्या विक्रेता की सिफारिश का उपयोग करना बेहतर है, या एक चुनना और सभी मेजबानों में सुसंगत होना बेहतर है?
  • आपने किस सॉफ्टवेयर का सामना किया है जो मेजबाननाम को FQDN या संक्षिप्त नाम पर सेट किया गया है या नहीं?

164
2017-11-17 13:07


मूल




जवाब:


मैं पूरे पर्यावरण में एक सतत दृष्टिकोण का चयन करूंगा। दोनों समाधान ठीक काम करते हैं और अधिकांश अनुप्रयोगों के साथ संगत बने रहेंगे। प्रबंधन में एक अंतर है, यद्यपि।

मैं HOSTNAME सेटिंग के रूप में संक्षिप्त नाम के साथ जाता हूं, और FQDN को पहले कॉलम के रूप में सेट करता हूं /etc/hosts सर्वर के आईपी के लिए, संक्षिप्त नाम के बाद।

मुझे कई सॉफ्टवेयर पैकेजों का सामना नहीं हुआ है जो दोनों के बीच प्राथमिकता को लागू या प्रदर्शित करते हैं। मुझे कुछ अनुप्रयोगों के लिए क्लीनर होने का संक्षिप्त नाम मिलता है, विशेष रूप से लॉगिंग। शायद मैं आंतरिक डोमेन देखने में दुर्भाग्यपूर्ण रहा हूं server.northside.chicago.rizzomanufacturing.com। कौन लॉग इन या ए में देखना चाहता है खोल संकेत?

कभी-कभी, मैं कंपनी अधिग्रहण या पुनर्गठन में शामिल हूं जहां आंतरिक डोमेन और / या सबडोमेन बदलते हैं। मुझे इन मामलों में लघु होस्टनाम का उपयोग करना पसंद है क्योंकि लॉगिंग, किकस्टार्ट, प्रिंटिंग, सिस्टम मॉनिटरिंग इत्यादि को नए डोमेन नामों के लिए खाते में पूर्ण पुनर्गठन की आवश्यकता नहीं है।

आंतरिक डोमेन "ifp.com" के साथ "rizzo" नामक सर्वर के लिए एक सामान्य RHEL / CentOS सर्वर सेटअप, ऐसा दिखाई देगा:

/etc/sysconfig/network:
HOSTNAME=rizzo
...

-

/etc/hosts:
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.100.13   rizzo.ifp.com rizzo

-

[root@rizzo ~]# hostname 
rizzo

-

/var/log/messages snippet:
Dec 15 10:10:13 rizzo proftpd[19675]: 172.16.100.13 (::ffff:206.15.236.182[::ffff:206.15.236.182]) - Preparing to               
 chroot to directory '/app/upload/GREEK'
Dec 15 10:10:51 rizzo proftpd[20660]: 172.16.100.13 (::ffff:12.28.170.2[::ffff:12.28.170.2]) - FTP session opened.
Dec 15 10:10:51 rizzo proftpd[20660]: 172.16.100.13 (::ffff:12.28.170.2[::ffff:12.28.170.2]) - Preparing to chroot                
to directory '/app/upload/ftp/SRRID'

96
2017-11-17 13:20



आप की तरह, मैं संक्षिप्त नाम पसंद करता हूं, हालांकि मैंने हाल ही में खोज की है कि कुछ ओरेकल अनुप्रयोगों के उत्पादन की आवश्यकता है hostname एफक्यूडीएन होने के लिए। बस इसमें है /etc/hosts पर्याप्त अच्छा नहीं है। यह मेरी स्थिरता के साथ गड़बड़ है। - James O'Gorman
इस उदाहरण में मेजबाननामों के पूंजीकरण में अंतर निश्चित रूप से एक सर्वोत्तम अभ्यास रेफरी नहीं है: tools.ietf.org/search/rfc1178 - teknopaul
नहीं करना चाहिए /etc/sysconfig/network इस तरह की रेखाएं हैं: NETWORKING=yes, NETWORKING_IPV6=no, HOSTNAME=example.com, NISDOMAIN=example ? - Jasmine Lognnes
@JasmineLognnes ठीक है, मैंने इसे सही किया है। मुझे आशा है कि ईश्वर को कोई फर्क नहीं पड़ता। - kubanczyk
यह सिर्फ वरीयता के बारे में नहीं है। देख hostname(1) किसी भी लिनक्स मशीन पर।


मेजबाननाम को सही ढंग से सेट करने के लिए बहुत अधिक सॉफ्टवेयर संवेदनशील है। जबकि मैं डिग में काम कर रहा था, मैं एक बार पूरी तरह से निर्दोष परिवर्तन करने के कारण पूरी साइट को 2 घंटे तक नीचे लाया /etc/hostsजिसने मेजबाननाम की प्रणाली की धारणा को प्रभावित किया। धीरे से रास्ता बनाना। उस ने कहा, आप यहां थोड़ा उलझन में हो सकते हैं। मुझे नहीं लगता HOSTNAME= सेटिंग सीधे डेबियन-आधारित वितरण का उपयोग करने के बराबर है /etc/hostname

एक विषम वातावरण में मेरे लिए क्या काम करता है:

  1. अपने कॉन्फ़िगरेशन प्रबंधन सॉफ़्टवेयर में सशर्त उपयोग करके, विक्रेता द्वारा अनुशंसित तरीके से होस्टनाम सेट करें।
  2. उपयोग hostname कर्नेल, आदि द्वारा उपयोग किए गए होस्टनाम को सेट करने के लिए कमांड
  3. में /etc/hosts:

    127.0.0.1    localhost
    10.0.0.1     hostname.example.com     hostname
    

यह कॉन्फ़िगरेशन अभी तक मुझे विफल नहीं हुआ है।


36
2017-11-21 18:48



यह काम पर उपयोग करने वाला सेटअप है। संक्षिप्त नाम तब तक ठीक होना चाहिए जब तक कि डोमेन नाम आपके पर्यावरण में प्रासंगिक मशीनों के लिए डीएनए खोज पथ (/etc/resolv.conf) में है - gWaldo
क्या आप विशेष रूप से एक स्थानीय नेटवर्क आईपी के रूप में एक सार्वजनिक नेटवर्क आईपी की सिफारिश करते हैं? - code_monk


आपको निश्चित रूप से संदर्भ ऑनलाइन खोजने में कोई समस्या नहीं होगी जो आपको निश्चित रूप से इसे एक या दूसरे तरीके से करने के लिए कहेंगे। ऐसा लगता है कि हालांकि मेजबाननाम के रूप में संक्षिप्त नाम है, और / etc / hosts में पूरी तरह से योग्य नाम है, निश्चित रूप से अधिक प्रचलित है। यह अधिक समझदार तरीके की तरह लगता है, तब सेवाओं को पूरी तरह से योग्य नाम की आवश्यकता है जिसे कॉल करने के लिए अनुकूलित किया जा सकता है hostname --fqdn बजाय।

मैं हाल ही में सॉफ्टवेयर के एक टुकड़े में आया हूं जो कठोर रूप से एक fqdn द्वारा वापस लौटने की आवश्यकता है hostname, जो गैनेटी था। वे इसे दस्तावेज करते हैं यहाँ। मुझे कोई कारण नहीं दिखता है जिसे वे अनुकूलित नहीं कर सकते हैं hostname --fqdn, हालाँकि।


29
2017-12-15 14:45



एक उदाहरण प्रदान करने के लिए बोनस! धन्यवाद। - Cakemox
"मुझे कोई कारण नहीं दिखता है जिसे वे अनुकूलित नहीं कर सकते हैं hostname --fqdn"पहले पैराग्राफ में" पूरी तरह योग्य योग्य होस्ट नाम "के तहत उत्तर दिया गया है - इसे अनुमान लगाने की आवश्यकता है, और एक कार्यरत रिज़ॉल्यूवर की आवश्यकता है। कर्नेल से पूछना सबसे सुरक्षित और सबसे विश्वसनीय विकल्प है। - womble♦
@womble - जब तक / etc / hosts फ़ाइल में मशीन के लिए प्रविष्टि होती है (10.0.0.1 hostname.example.com hostname) और /etc/nsswitch.conf DNS से ​​पहले स्थानीय रिज़ॉल्यूशन निर्दिष्ट करता है (hosts: files dns) तो एक कार्यकारी समाधानकर्ता स्थानीय मेजबान फ़ाइल द्वारा पूरा किया जाता है। जैसे कि मेजबाननाम के बजाय एक एफक्यूडीएन का उपयोग करने के लिए तर्क शायद ही कभी पानी रखता है। इसके अलावा, सॉफ़्टवेयर का एक और उदाहरण जो कठोर रूप से आवश्यक है hostname एक एफक्यूडीएन वापस करने के लिए जिम्बा मेल सर्वर पैकेज है। - crashmaxed
@ क्रैशमैक्स: यह कई अतिरिक्त आवश्यकताएं हैं, जिनमें से कोई भी किसी दिए गए वातावरण में संभव नहीं है या गलती से खराब हो सकता है। कर्नेल डेटा संरचनाओं में FQDN होने के बाद बहुत आसान है। - womble♦


कुछ हद तक मजबूती से, इस सवाल पर शोध करते समय, मैं "मेजबाननाम" के स्रोत कोड की जांच करने के लिए पर्याप्त पागल हो रहा हूं और जांच परिणामों को मुद्रित करने के लिए एक स्क्रिप्ट लिख रहा हूं (फेडोरा 1 9)। क्या लापता है "/ etc / hosts" पर एक नज़र है, जो मेरी नम्र राय में इसे पहले से ही नरक में रखा जाना चाहिए।

#!/bin/bash

function pad {
   if [[ $1 == '?' ]]; then
      printf "%-23s" "?"
   else
      printf "%-23s" "'$1'"
   fi
}

# ----- Kernel -----

# Two ways to configure the kernel values: 
# 1) Put FQDN into "kernel.hostname" and nothing into "kernel.domainname"
# 2) Put machine name into "kernel.hostname" and DNS domain name into "kernel.domainname" (makes more sense)

echo "== Kernel values =="
echo

H=`/sbin/sysctl -n kernel.hostname`
D=`/sbin/sysctl -n kernel.domainname`

echo "Kernel hostname: '$H'"
echo "Kernel domainname: '$D'"

# ----- What does bash say -----

echo
echo "== According to bash =="
echo

echo "HOSTNAME = '$HOSTNAME'"

# ----- Hostname config file ------

echo
echo "== Hostname config file =="
echo

ETCH="/etc/hostname"

if [[ -f $ETCH ]]; then
   CONTENTS=`cat $ETCH`
   echo "File '$ETCH' contains: '$CONTENTS'"
else
   echo "File '$ETCH' does not exist"
fi

# ----- Network config file ------

echo
echo "== Network config file =="
echo

SYSN="/etc/sysconfig/network"

if [[ -f $SYSN ]]; then
   LINE=`grep -e "^HOSTNAME=" $SYSN`
   if [[ -n $LINE ]]; then
      echo "File '$SYSN' contains: '$LINE'"
   else 
      echo "File '$SYSN' exists but does not contain a line for 'HOSTNAME'"
   fi
else
   echo "File '$SYSN' does not exist"
fi

# ----- Nodename -------

echo
echo "== Nodename =="
echo

UNAME=`uname --nodename` # On Linux, this is the hostname

echo "The 'nodename' given by 'uname --nodename' is: '$UNAME'"

# ----- The 'hostname' mess ------

THE_HOSTNAME=`hostname`
SHORT_NAME=`hostname --short`
NIS_DNAME=`domainname`     
YP_DNAME=`hostname --yp`    # Same as `nisdomainname` ; this may fail with "hostname: Local domain name not set"

if [[ $? != 0 ]]; then
   YP_DNAME="?"
fi

echo
echo "== 'hostname' directly obtained values =="
echo
echo "The result of gethostname();"
echo "...obtained by running 'hostname'"
echo "Hostname: $(pad $THE_HOSTNAME)"
echo
echo "The part before the first '.' of the value returned by gethostname();"
echo "...obtained by running 'hostname --short'"
echo "Short name: $(pad $SHORT_NAME)"
echo
echo "The result of getdomainname(); the code of 'hostname' seems to call this the 'NIS domain name';"
echo "...on Linux, this is the kernel-configured domainname;"
echo "...obtained by running 'domainname'"
echo "NIS domain name: $(pad $NIS_DNAME)"
echo
echo "The result of yp_get_default_domain(), which may fail;"
echo "...obtained by running 'ĥostname --yp'"
echo "YP default domain: $(pad $YP_DNAME)"

DNS_DNAME=`hostname --domain`  # Same as `dnsdomainname`'
FQDN_NAME=`hostname --fqdn`
ALIAS_NAME=`hostname --alias`

echo
echo "== 'hostname' values obtained via DNS =="
echo
echo "The part after the first '.' of the 'canonical name' value returned by getaddrinfo(gethostname());"
echo "...obtained by running 'hostname --domain'"
echo "DNS domain name: $(pad $DNS_DNAME)"
echo
echo "The 'canonical name' value returned by getaddrinfo(gethostname());"
echo "...obtained by running 'hostname --fqdn'"
echo "Fully qualified hostname: $(pad $FQDN_NAME)"
echo
echo "Alias obtained by gethostbyname(gethostname());"
echo "...obtained by running 'hostname --alias'"
echo "Hostname alias: $(pad $ALIAS_NAME)"

BY_IP_ADDR=`hostname --ip-address`
ALL_IP_ADDR=`hostname --all-ip-addresses`
ALL_FQDN_NAMES=`hostname --all-fqdn`

echo
echo "== 'hostname' values obtained by collecting configured network addresses =="
echo
echo "Collect the IP addresses from getaddrinfo(gethostname()), apply getnameinfo(ip) to all those addresses;"
echo "...obtained by running 'hostname --ip-address'"
echo "By IP address: $BY_IP_ADDR"
echo
echo "Call getnameinfo(NI_NUMERICHOST) on all addresses snarfed from active interfaces;"
echo "...obtained by running 'hostname --all-ip-addresses'"
echo "All IP addresses: $ALL_IP_ADDR"
echo
echo "Call getnameinfo(NI_NAMEREQD) on all addresses snarfed from active interfaces (involves lookup in /etc/hosts);"
echo "...obtained by running 'hostname --all-fqdn'"
echo "All fully qualified hostnames: $ALL_FQDN_NAMES"

अमेज़ॅन ईसी 2 वीएम पर आउटपुट फेडोरा 1 9 चला रहा है, कर्नेल मान मैन्युअल रूप से सेट करने और भरने के बाद /etc/hostname, लेकिन इसमें कोई बदलाव नहीं है /etc/hosts तो इस तरह हो सकता है:

== Kernel values ==

Kernel hostname: 'kyubee'
Kernel domainname: 'homelinux.org'

== According to bash ==

HOSTNAME = 'ip-172-31-24-249.localdomain'

== Hostname config file ==

File '/etc/hostname' contains: 'kyubee.homelinux.org'

== Network config file ==

File '/etc/sysconfig/network' exists but does not contain a line for 'HOSTNAME'

== Nodename ==

The 'nodename' given by 'uname --nodename' is: 'kyubee'

== 'hostname' directly obtained values ==

The result of gethostname();
...obtained by running 'hostname'
Hostname: 'kyubee'

The part before the first '.' of the value returned by gethostname();
...obtained by running 'hostname --short'
Short name: 'kyubee'

The result of getdomainname(); the code of 'hostname' seems to call this the 'NIS domain name';
...on Linux, this is the kernel-configured domainname;
...obtained by running 'domainname'
NIS domain name: 'homelinux.org'

The result of yp_get_default_domain(), which may fail;
...obtained by running 'ĥostname --yp'
YP default domain: 'homelinux.org'

== 'hostname' values obtained via DNS ==

The part after the first '.' of the 'canonical name' value returned by getaddrinfo(gethostname());
...obtained by running 'hostname --domain'
DNS domain name: ''

The 'canonical name' value returned by getaddrinfo(gethostname());
...obtained by running 'hostname --fqdn'
Fully qualified hostname: 'kyubee'

Alias obtained by gethostbyname(gethostname());
...obtained by running 'hostname --alias'
Hostname alias: ''

== 'hostname' values obtained by collecting configured network addresses ==

Collect the IP addresses from getaddrinfo(gethostname()), apply getnameinfo(ip) to all those addresses;
...obtained by running 'hostname --ip-address'
By IP address: fe80::8f6:8eff:fe49:9e21%eth0 172.31.24.249

Call getnameinfo(NI_NUMERICHOST) on all addresses snarfed from active interfaces;
...obtained by running 'hostname --all-ip-addresses'
All IP addresses: 172.31.24.249

Call getnameinfo(NI_NAMEREQD) on all addresses snarfed from active interfaces (involves lookup in /etc/hosts);
...obtained by running 'hostname --all-fqdn'
All fully qualified hostnames: ip-172-31-24-249.eu-west-1.compute.internal

पर्ल में पूरी तरह योग्य योग्य होस्टनाम प्राप्त करने का लचीला तरीका तब होगा:

sub getHostname {

   my $hostname_short = `/bin/hostname --short`;
   if ($? != 0) { print STDERR "Could not execute 'hostname --short' -- exiting\n"; exit 1 }
   chomp $hostname_short;

   my $hostname_long  = `/bin/hostname`;
   if ($? != 0) { print STDERR "Could not execute 'hostname' -- exiting\n"; exit 1 }
   chomp $hostname_long;

   if ($hostname_long =~ /^${hostname_short}\..+$/) {
      # "hostname_long" is a qualified version of "hostname_short"
      return $hostname_long
   }
   else {
      # both hostnames are "short" (and are equal)
      die unless ($hostname_long eq $hostname_short);

      my $domainname = `/bin/domainname`;
      if ($? != 0) { print STDERR "Could not execute 'domainname' -- exiting\n"; exit 1 }
      chomp $domainname;

      if ($domainname eq "(none)") {
         # Change according to taste
         return "${hostname_short}.localdomain"
      }
      else {
         return "${hostname_short}.${domainname}"
      }
   }
}

और बाश में यह होगा:

function getHostname {

   local hostname_short=`/bin/hostname --short`

   if [ $? -ne 0 ]; then
      echo "Could not execute 'hostname --short' -- exiting" >&2; exit 1
   fi

   local hostname_long=`/bin/hostname`

   if [ $? -ne 0 ]; then
      echo "Could not execute 'hostname' -- exiting" >&2; exit 1
   fi

   if [[ $hostname_long =~ ^"$hostname_short"\..+$ ]]; then
      # "hostname_long" is a qualified version of "hostname_short"
      echo $hostname_long
   else
      # both hostnames are "short" (and are equal)
      if [[ $hostname_long != $hostname_short ]]; then
         echo "Cannot happen: '$hostname_long' <> '$hostname_short' -- exiting" >&2; exit 1
      fi

      local domainname=`/bin/domainname`

      if [ $? -ne 0 ]; then
         echo "Could not execute 'domainname' -- exiting" >&2; exit 1
      fi

      if [[ domainname == '(none)' ]]; then
         # Change according to taste
         echo "${hostname_short}.localdomain"
      else
         echo "${hostname_short}.${domainname}"
      fi
   fi
}

टिप्पणियाँ 

नोट 1: HOSTNAME एक शेल वेरिएबल है जो बैश प्रदान करता है ("वर्तमान होस्ट के नाम पर स्वचालित रूप से सेट करें।") लेकिन उस मूल्य पर बैश आने के बारे में कोई संकेत नहीं है।

नोट 2: /boot/initrams-FOO.img में कभी भी / etc / hostname को भूलें ...


10
2017-10-03 11:39



क्षमा करें अगर यह स्पष्ट होना चाहिए, लेकिन होस्टनाम को सेट करने के साथ इनमें से किसी को क्या करना है? - Chris S
मूल रूप से नोट्स मैंने अपने फेडोरा 1 9 ईसी 2 उदाहरणों पर होस्टनाम सेट करने के शोध के दौरान किया था। परिणाम के लिए: 1) FQHN को / etc / hostname में सेट करें 2) स्पर्श / etc / hosts को स्पर्श न करें 3) यदि आप मान को अनसेट करते हैं तो आप 'कर्नेल होस्टनाम' को या तो FQHN या अयोग्य होस्टनाम पर सेट कर सकते हैं / etc / hostname 4) आप डोमेन नाम पर 'कर्नेल डोमेननाम' सेट कर सकते हैं, जो कि '(none)' से बेहतर है। - David Tonhofer


/ Etc / होस्ट विकल्प अच्छी तरह से काम करता है।

लेकिन आप यह सुनिश्चित करना चाहते हैं कि सभी उचित फाइलें अपडेट की जाएंगी सेट अप साधन


-4
2017-11-25 11:56



मेरे वितरण में "सेटअप" उपकरण नहीं है; आप किस वितरण का उपयोग कर रहे हैं जिसमें एक है? - nickgrim
किसी भी रेडहाट आधारित ओएस में सेटअप टूल रेल / सेंटोस / फेडोरा व्हायर ओएस है जिसका आप उपयोग कर रहे हैं? - Riaan
चूंकि सवाल आरएचईएल-आधारित और डेबियन-आधारित डिस्ट्रोज़ के बीच मतभेदों के बारे में बात करता है, इसलिए हमें यह मानना ​​चाहिए कि पूछताछ दोनों का उपयोग करता है। डेबियन आधारित distros पर कोई 'सेटअप' उपकरण नहीं है। - Martijn Heemels


एचएम ... लिनक्स होस्ट्स में, यदि आप HOSTNAME और FQDN को बदलना चाहते हैं, तो आपको 3 चरणों का हल करना चाहिए (उदाहरण के लिए, नया होस्ट है rizzo.ifp.com):

चरण 1 नेटवर्क्स गुण कॉन्फ़िगरेशन में HOST मान बदलें:

sudo vi /etc/sysconfig/network

स्ट्रिंग बदलें या जोड़ें:

HOSTNAME=rizzo.ifp.com

चरण 2 अपने मेजबान विन्यास संपादित करें

sudo vim /etc/hosts
#IPv4
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
[External IP]   rizzo rizzo.ifp.com

चरण 3 अपने मेजबान को रिबूट करें ठीक है, बस नई विन्यास की जांच करें

[rizzo@rizzo]# hostname -f
rizzo.ifp.com

-4
2017-12-22 10:56





आदेश सही नहीं है। इसे होना चाहिए:

1.2.3.4 full.example.com full

तो उदाहरण यह पसंद कर सकता है:

[External IP] rizzo.example.com rizzo 

-4
2018-04-05 07:23



इस सवाल में पहले से ही वास्तव में गुणवत्ता के जवाब हैं। यह कुछ भी नया नहीं जोड़ता है। - Esa Jokinen