10

Я использую Ubuntu 10.04 LTS, и когда я набираю команду hostname --fqdn , я получаю сообщение: hostname: Name or service not known .

Из-за этого я не могу установить global успешно, и при попытке получить следующую ошибку:

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)

Мой /etc/nsswitch.conf находится ниже.

# /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

У кого-нибудь есть идеи о том, что это значит и как я могу это исправить?

3 ответа3

11

Можете ли вы предоставить содержимое /etc/nsswitch.conf ?

Похоже, что /etc/nsswitch.conf имеет плохое значение для строки "hosts". Это начинается с "файлов"?

В противном случае полное доменное имя устанавливается путем редактирования /etc /hosts и размещения полного доменного имени в строке, где отображается имя хоста. Предположим, у вас есть имя хоста "foo", и вы найдете строку:

127.0.0.1 foo

Вы бы отредактировали это так:

127.0.0.1 foo.localdomain foo

foo.localdomain будет вашим новым полным доменным именем .

6

отредактируйте /etc /hosts, чтобы добавить ваше полное доменное имя

Информация о синтаксисе находится здесь:http://www.faqs.org/docs/securing/chap9sec95.html.

обновление: перечитывание вашего вопроса снова звучит так, как будто вы либо не правильно указали путь, либо что-то не так с программой hostname.

сделать "какое имя хоста"

должен возвращаться с путем '/bin/hostname'

если это работает, попробуйте команду снова, как,

'/bin/hostname --fqdn'

0

В отличие от простого вызова команды hostname , вызов hostname --fqdn попытается сделать еще несколько вещей, что часто приводит к некоторым поискам DNS.

Возьмем, к примеру, следующий (успешный) вызов (это из коробки Red Hat, но я бы предположил, что он должен быть таким же для 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

Обратите внимание на очень полезную опцию --verbose .

Короче говоря, все, кроме простого hostname , вероятно, делает больше, чем вы ожидаете. Вот еще один пример:

# 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

И округлить это:

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

Обратите внимание, что имя хоста системы (возвращаемое gethostname) может содержать безусловное имя хоста, например просто «myserver». Вот почему программа, которую вы хотите установить, использует вместо hostname --fqdn .

Сообщение об ошибке hostname: Name or service not known происходят из функций распознавателя : это части системной библиотеки, которые выполняют преобразование между именами и адресами (обычно это DNS-имена и IP-адреса).

На самом деле, распознаватель делает больше, чем просто DNS (и больше, чем просто перевод между именами хостов и IP-адресами); его поведение частично настраивается с помощью файла /etc/nsswitch.conf , и обычно он обращается к следующему, обычно в следующем порядке:

  • 'hosts' (в Linux это означает /etc /hosts)
  • (иногда) nscd (демон кэширования службы имен)
  • 'DNS'

(обратите внимание, вы также можете иметь кеширующий DNS-сервер, такой как dnsmasqd --- для вышеприведенного пункта, который все еще находится под механизмом 'dns').

Стоит отметить, что такие инструменты, как dig, host и Venserable nslookup, не следуют этому порядку; они явно являются инструментами DNS-запросов. Это означает, что если вы полагаетесь на них (например, в сценарии), вы можете получить другой результат, чем то, что будут делать обычные клиентские программы (использующие системный преобразователь). По этой причине используйте программу getent в сценариях, особенно если у вас есть компонент кэширования, такой как nscd.

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

Итак, ключевым моментом здесь является то, что а) если у вас /etc /hosts хорошо настроена запись для вашей собственной машины, и б) ваш /etc/nsswitch.conf имеет обычную конфигурацию - hosts: files dns в этом порядке, затем c) даже если у вас нет хорошо настроенного DNS в вашей среде, тогда hostname --fqdn должно работать.

В правильно сконфигурированном DNS вы должны иметь один "обратный" адрес ("запись PTR"), который дает "каноническое" имя вашего сервера, и это имя также можно будет найти (« Запись "для IPv4).

Короткая версия: добавить --verbose ; это укажет вам на то, чего вам не хватает.

Надеюсь, что это поможет вам понять, что происходит.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .