
На некоторых моих компьютерах автоматическое обновление отправляет мне электронное письмо с сообщением о необходимости перезагрузки, в котором говорится следующее:
[reboot required] unattended-upgrades result for localhost: SUCCESS
В то время как на других он указывает правильное имя хоста вместо localhost. Где я могу изменить это, чтобы он указал имя хоста правильно?
решение1
Насколько я могу судить, в нем используется оператор 127.0.0.1
или .::1
/etc/hosts
Такие строки:
127.0.0.1 server.yourdomain.xx server localhost
::1 server.yourdomain.xx server localhost ip6-localhost ip6-loopback
заставляет его выводить сообщения с помощью server.yourdomain.xx
Tested on Debian testing
решение2
В наших системах это, по-видимому, было связано с различиями в том, как /usr/bin/unattended-upgrade
скрипт python3 пытается определить имя своего хоста.
На некоторых машинах (Ubuntu 18.04) это происходит:
import os
#...
def host():
# type: () -> str
return os.uname()[1]
... тогда как на более новых машинах (Ubuntu 22.04) это происходит:
import socket
#...
def host():
# type: () -> str
return socket.getfqdn()
Это последняя версия, host()
которая просто возвращается, "localhost"
потому что это то, чтоsocket.getfqdn()
без аргументов возвращает.
Это изменение в unattended-upgrade
сценарии быловведенмежду версиями1.3
и1.4
.
Этот запрос на включение уже включает в себя некоторое обсуждениео том, что он представляет наблюдаемую localhost
регрессию, а также намекает на обходной путь, который действительно работает:
Вместо того, чтобы указывать желаемое имя хоста следующим /etc/hosts
образом:
127.0.0.1 localhost
127.0.0.1 my-hostname
... перечислите это как:
127.0.0.1 localhost
127.0.1.1 my-hostname
... все, что мне сейчас нужно, это пониманиепочемуиспользование 127.0.1.1
вместо 127.0.0.1
заставляет это работать ...
https://www.debian.org/doc/manuals/debian-reference/ch05.en.html#_разрешение_имени_хостаЭто действительно служит для придания некоторой дополнительной уверенности в правильности решения, но для меня оно все еще не дает достаточной информации относительно задействованных механизмов и обоснования.
На странице руководства hostname
(1) есть раздел о полном доменном именикоторый помогает разобраться в тонкостях разрешения имен:
Рекомендуемый метод установки FQDN — сделать имя хоста псевдонимом для полного имени с использованием
/etc/hosts
, DNS или NIS. Например, если имя хоста было "ursula
", можно было бы иметь строку, в/etc/hosts
которой читается127.0.1.1 ursula.example.com ursula
Технически: FQDN — это имя, которое
getaddrinfo
(3) возвращает для имени хоста, возвращаемогоgethostname
(2). Имя домена DNS — это часть после первой точки.Поэтому это зависит от конфигурации резолвера (обычно в
/etc/host.conf
), как вы можете изменить его. Обычно файл hosts анализируется до DNS или NIS, поэтому чаще всего меняют FQDN в/etc/hosts
.
решение3
Измените содержимое соответствующего файла:etc/mailname
:
Если вашему пакету необходимо знать, какое имя хоста использовать для (например) исходящих новостей и почтовых сообщений, которые генерируются локально, вам следует использовать файл
/etc/mailname
. Он будет содержать часть после имени пользователя и знак @ (at) для адресов электронной почты пользователей на машине (за которыми следует новая строка).
Обычно это полное доменное имя (FQDN)длинныйимя) сервера, определенное другими системами.
Чтобы упростить задачу, просто перенастройте соответствующий пакет. Для Debian 10 по умолчаниюexim4пакет это на самом делеexim4-config
:
dpkg-reconfigure -pcritical exim4-config
-pcritical
гарантирует, что, вероятно, не будет задан ни один вопрос. Вы можете пропустить его или уменьшить его до , -plow
чтобы увидеть некоторые или все эти вопросы.
Поскольку ОП не используетexim4ноmsmtpв этом случае конфигурация может быть запущена с помощью:
dpkg-reconfigure msmtp
Если этого никогда не делалось ранее, важно, чтобы Create a system wide configuration file?
ответ на первый вопрос ( ) был «Да», чтобы получить последующие вопросы.
Также представляется, что вопрекиexim4, скрипт конфигурации (после установки в /var/lib/dpkg/info/msmtp.config
) не проверяет /etc/mailname
, таким образом не следуя рекомендуемой политике Debian.