Почему «hostname --fqdn» не работает на моем компьютере с Ubuntu?

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

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

RadiantHex
источник
1
Почему вы хотите полное доменное имя? Если вам нужно спросить, вы, вероятно, не хотите один или не можете использовать один или оба.
2010 г.

Ответы:

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 будет вашим новым полным доменным именем.

Рафаэль Герцог
источник
Я включил содержимое этого файла, как вы просили! Спасибо за ответ!! :)
RadiantHex
@Rapael Я изменил файл / etc / hosts, но он начал давать мне Временный сбой в разрешении имен. Есть идеи, почему это происходит?
Мухаммед Адель Захид
6

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

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

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

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

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

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

'/ bin / hostname --fqdn'

Mudfly
источник
Спасибо!!! Извините, если я спрашиваю об этом, но как мне узнать мое полное доменное имя?
RadiantHex
1
ну, это означает «Полное доменное имя». superuser.com - это полное доменное имя. Если у вас есть домен, вы можете использовать его, в противном случае вы можете просто что-то придумать, если находитесь во внутренней сети.
Mudfly
1
Спасибо @Mudfly! Я попробовал ваши инструкции, последние команды снова возвращают "имя хоста: имя или служба не известны"!
RadiantHex
Без дополнительной информации трудно понять условия вашей проблемы. EG: это локальная установка, вы вошли в систему через ssh, используете ли вы учетную запись пользователя или вы вошли в систему как root? Возможно, вы захотите посетить ubuntuforums.org и искать других людей, которые решили подобные проблемы.
Mudfly
1
Это просто дикий прыжок, но Ubuntu предпочитает использовать sudo, а не root. Вполне возможно, что оболочка не настроена правильно. Проверить это очень просто. Сначала вы можете сделать 'ls -al / root /' и посмотреть, сможете ли вы увидеть .bashrc. Во-вторых, если у вас нет .bashrc, скопируйте его из skel 'cp /etc/skel/.bashrc ./', который вы можете сделать. это даже если у вас уже есть файл. В-третьих, выполните '/ bin / bash', чтобы убедиться, что вы используете bash. Наконец, попробуйте свою исходную команду еще раз, вы должны работать в полностью настроенной оболочке bash.
Mudfly
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 и уважаемый nslookup , не следуют этому порядку; они явно являются инструментами DNS-запросов. Это означает, что если вы полагаетесь на них (например, в сценарии), вы можете в итоге получить результат, отличный от результатов обычных клиентских программ (использующих системный преобразователь). По этой причине используйте программу getent в сценариях, особенно если у вас есть компонент кэширования, такой как nscd.

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

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

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

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

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

Кэмерон Керр
источник