Я наблюдал эту проблему с каплями Ubuntu 16.04, но я полагаю, что это происходит с другими каплями на основе Debian. Больше объяснений ниже.
После создания нового экземпляра я заметил, что hostname --fqdn
не возвращает полное доменное имя (полное доменное имя), как я ожидал, а возвращает только имя хоста без добавления к нему имени домена.
$ hostname
mydroplet
$ hostname --fqdn
mydroplet
Я ожидал увидеть что-то вроде этого:
$ hostname --fqdn
mydroplet.example.com
Это потенциально серьезная проблема, поскольку для правильной работы многих служб требуется полное доменное имя.
Как решить эту проблему?
mydroplet.example.com
- это полное доменное имя нет. Окончание FQDN в точке (.
) обозначает верхнюю часть дерева DNS. mydroplet.example.com.
и localhost.
являются полными доменными именами. Когда присутствует точка, преобразователь не следует добавляет суффиксы к путям поиска. Другое дело, чей DNS вы используете. Также см. Расширенное программирование в среде UNIX У. Ричарда Стивенса.
@jww hostname --fqdn
не добавляет точку в конце, что бы ни говорилось в RFC.
Потому что точка неявная. Это не его присутствие, которое обязательно говорит о том, что имя является FQDN или нет, вопреки тому, что говорит @jww. См. RFC 8499: «Но поскольку каждое имя в конечном итоге имеет общий корень, имена часто записываются относительно корня (например,« www.example.net ») и по-прежнему называются« полностью определенными ».
@ Патрик Мевзек: Ничего страшного. Я только что показал вывод команды, чтобы читатели могли понять, в чем проблема, что можно было бы ожидать в результате вывода команды (независимо от того, стоит ли начальная точка или нет) и что нужно сделать, чтобы устранить проблему. Большое спасибо за ваше объяснение. :-)
Эти команды ниже устраняют проблему с существующей каплей:
echo "domain example.com" | sudo tee /etc/resolvconf/resolvconf.d/head
sudo service resolvconf restart
Команда hostname --fqdn
должна вернуть FQDN (полное доменное имя), например:
$ hostname --fqdn
mydroplet.example.com
Если вы не видите полное доменное имя, а только имя хоста ... ну ... у вас есть проблема, которая рано или поздно повредит вашему приложению, сценариям оболочки или службам.
$ hostname --fqdn
mydroplet
Хьюстон у нас проблема!
Вкратце, нам нужно сделать так, чтобы /etc/resolv.conf
выглядел так:
$ cat /etc/resolv.conf
domain example.com
nameserver 8.8.8.8
nameserver 8.8.4.4
Если вы не видите в нем domain example.com
, рано или поздно у вас возникнут проблемы.
Вы можете подумать, что это просто вопрос редактирования файла, верно? Не так быстро! ... Мы не можем изменить этот файл вручную, потому что он поддерживается самим Debian. Если вы измените его вручную, через некоторое время он сам вернется в исходное состояние.
Добавьте следующий фрагмент кода в текстовую область, зарезервированную для пользовательских данных облако-инициализация:
#cloud-config
manage_etc_hosts: false
write_files:
- path: /etc/resolvconf/resolv.conf.d/head
content: |
domain example.com
runcmd:
- service resolvconf restart
Приведенный выше фрагмент гарантирует, что hostname --fqdn
вернет то, что вы ожидаете, сразу после первого входа в систему.
Не используйте вслепую 8.8.8.8
или 8.8.4.4
, и это совершенно не имеет отношения к установке имени локального хоста.
@Patrick Mevzek :: Я сам не использую Google DNS. Это просто пример.
Stack Overflow - это сайт для вопросов по программированию и разработке. Этот вопрос кажется не по теме, потому что он не о программировании или разработке. См. О каких темах я могу спросить здесь в Справочном центре. Возможно, лучше спросить Суперпользователь или Обмен стеков Unix и Linux.