Dlaczego „nazwa hosta - fqdn” nie działa na moim komputerze z systemem Ubuntu?

10

Używam Ubuntu 10.04 LTS, a po wpisaniu polecenia hostname --fqdn, pojawia się komunikat: hostname: Name or service not known.

Z tego powodu nie mogę zainstalować globalpomyślnie i podczas próby pojawia się następujący błąd:

Setting up global (5.7.1-1) ...
hostname: Name or service not known
dpkg: error processing global (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 global
E: Sub-process /usr/bin/dpkg returned an error code (1)

Mój /etc/nsswitch.confjest poniżej.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Czy ktoś ma jakieś pomysły na temat tego, co to znaczy i jak mogę to naprawić?

RadiantHex
źródło
1
Dlaczego chcesz FQDN? Jeśli musisz zapytać, prawdopodobnie nie chcesz jednego lub nie możesz skorzystać z jednego lub obu.
msw

Odpowiedzi:

11

Czy możesz podać treść /etc/nsswitch.conf?

Wygląda na to, że /etc/nsswitch.conf ma złą wartość dla linii „hosts”. Czy zaczyna się od „plików”?

W przeciwnym razie nazwę FQDN ustawia się, edytując plik / etc / hosts i umieszczając nazwę FQDN w wierszu, w którym pojawia się nazwa hosta. Załóżmy, że masz nazwę hosta „foo” i znajdziesz wiersz:

127.0.0.1 foo

Zmodyfikowałbyś to w ten sposób:

127.0.0.1 foo.localdomain foo

foo.localdomain będzie twoja nowa nazwa FQDN.

Raphaël Hertzog
źródło
Dołączyłem zawartość tego pliku, tak jak prosiłeś! Dziękuję za odpowiedź!! :)
RadiantHex,
@Rapael Zmieniłem plik / etc / hosts, ale zaczął powodować tymczasową awarię rozpoznawania nazw. Wszelkie pomysły, dlaczego tak się dzieje?
Muhammad Adeel Zahid
6

edytuj / etc / hosts, aby dodać swoją FQDN

Informacje dotyczące składni znajdują się tutaj: http://www.faqs.org/docs/securing/chap9sec95.html

aktualizacja: ponowne przeczytanie pytania brzmi prawie tak, jakbyś nie miał właściwej ścieżki lub coś jest nie tak z programem nazw hostów.

zrób „jaka nazwa hosta”

powinien powrócić ze ścieżką „/ bin / hostname”

jeśli to zadziała, spróbuj ponownie wykonać polecenie,

„/ bin / hostname --fqdn”

Błoto
źródło
Dzięki!!! Przepraszam, jeśli o to zapytam, ale jak mogę znaleźć moją nazwę FQDN?
RadiantHex,
1
cóż, to oznacza „w pełni kwalifikowana nazwa domeny” superuser.com to nazwa FQDN. Jeśli jesteś właścicielem domeny, możesz jej użyć, w przeciwnym razie możesz po prostu coś wymyślić, jeśli jesteś w sieci wewnętrznej.
Mudfly,
1
Dzięki @Mudfly! Próbowałem twoich instrukcji, ostatnie polecenia ponownie zwracają „nazwa hosta: nazwa lub usługa nieznana” ponownie!
RadiantHex,
Bez dodatkowych informacji trudno jest poznać warunki Twojego problemu. EG: czy jest to instalacja lokalna, czy jesteś zalogowany przez ssh, czy używasz konta użytkownika lub zalogowałeś się jako root? Możesz odwiedzić stronę ubuntuforums.org i poszukać innych, którzy rozwiązali podobne problemy.
Mudfly,
1
To tutaj gwałtowny skok, ale Ubuntu preferuje używanie sudo zamiast rootowania. Jest całkiem możliwe, że powłoka nie jest poprawnie skonfigurowana. Testowanie jest bardzo proste. Najpierw możesz zrobić „ls -al / root /” i sprawdzić, czy możesz zobaczyć plik .bashrc. Po drugie, jeśli nie masz pliku .bashrc, skopiuj go ze skel „cp /etc/skel/.bashrc ./” możesz zrobić nawet jeśli masz już plik. Po trzecie wykonaj polecenie „/ bin / bash”, aby upewnić się, że korzystasz z bash. Na koniec spróbuj ponownie oryginalnego polecenia, powinieneś działać w pełni skonfigurowanej powłoce bash.
Mudfly,
0

W przeciwieństwie do prostego hostnamewywołania polecenia, wywołanie hostname --fqdnbędzie próbowało zrobić jeszcze kilka rzeczy, co często spowoduje wyszukiwanie DNS.

Weźmy na przykład następujące (udane) wywołanie (pochodzi z pudełka Red Hat, ale wyobrażam sobie, że powinno być tak samo dla Ubuntu):

# hostname --fqdn --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
myserver.example.com

Zwróć uwagę na bardzo pomocną --verboseopcję.

Krótko mówiąc, wszystko inne niż proste hostnameprawdopodobnie robi więcej niż się spodziewasz. Oto inny przykład:

# hostname --ip --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
10.1.2.3

I podsumowując:

# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com

Zauważ, że nazwa hosta systemu (zwrócona przez gethostname) może mi dać niekwalifikowaną nazwę hosta, na przykład „myserver”. Dlatego program, który chcesz zainstalować, używa hostname --fqdnzamiast tego.

Komunikat o błędzie hostname: Name or service not knownpochodzi z funkcji resolvera : są to części biblioteki systemowej, które tłumaczą nazwy i adresy (zazwyczaj nazwy DNS i adresy IP).

W rzeczywistości resolver robi więcej niż tylko DNS (i więcej niż tylko translację między nazwami hostów a adresami IP); jego zachowanie jest częściowo skonfigurowane przez plik /etc/nsswitch.confi zwykle sprawdza następujące, zwykle w tej kolejności:

  • „hosts” (w systemie Linux oznacza / etc / hosts)
  • (czasami) nscd (demon buforowania usługi nazw)
  • „dns”

(uwaga, możesz również mieć buforujący serwer DNS, taki jak dnsmasqd --- w powyższym punkcie, który wciąż jest objęty mechanizmem „dns”).

Warto zauważyć, że narzędzia takie jak dig , host i czcigodny nslookup nie przestrzegają tej kolejności; są to jawnie narzędzia do wysyłania zapytań DNS. Oznacza to, że jeśli na nich polegasz (na przykład w skrypcie), możesz uzyskać inny wynik niż zwykłe programy klienckie (korzystające z resolvera systemu). Z tego powodu używaj programu getent w skryptach, szczególnie jeśli masz komponent buforujący, taki jak nscd.

# getent hosts myserver.example.com
10.1.2.3    myserver.example.com

Kluczową kwestią tutaj jest to, że: a) jeśli dobrze skonfigurujesz / etc / hosts z wpisem dla twojego komputera, i b) twój /etc/nsswitch.conf ma zwykłą konfigurację - hosts: files dnsw tej kolejności, to c) nawet jeśli nie masz dobrze skonfigurowanego DNS w swoim środowisku, hostname --fqdnpowinno działać.

W dobrze skonfigurowanym systemie DNS można oczekiwać, że będzie miał jeden „zwrotny” adres („rekord PTR”), który nadaje „kanoniczną” nazwę serwera, a nazwę tę można również wyszukać („ Rekord „dla IPv4).

Wersja skrócona: dodaj --verbose; wskaże ci to, czego ci brakuje.

Mam nadzieję, że pomożesz zrozumieć, co się dzieje.

Cameron Kerr
źródło