
在我的一些機器上,無人值守升級會發送一封電子郵件告訴我需要重新啟動,並說:
[reboot required] unattended-upgrades result for localhost: SUCCESS
而在其他情況下,它指定正確的主機名稱而不是本機。我可以在哪裡更改它以使其正確指定主機名稱?
答案1
據我所知,它使用127.0.0.1
or 。::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
在 Debian 測試中透過 Tested輸出訊息
答案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#_the_hostname_resolution確實為解決方案的正確性提供了一些額外的可信度,但對我來說,它仍然無法提供有關所涉及機制和理由的足夠背景。
(1)的線上說明頁中hostname
有一個關於 FQDN 的部分這有助於掌握名稱解析的複雜性:
/etc/hosts
設定 FQDN 的建議方法是使主機名稱成為使用、DNS 或 NIS 的完全限定名稱的別名。例如,如果主機名稱是“ursula
”,則可能有一行內容/etc/hosts
為127.0.1.1 ursula.example.com ursula
從技術上講:FQDN 是
getaddrinfo
(3) 傳回的 (2) 傳回的主機名稱的名稱gethostname
。 DNS 網域名稱是第一個點之後的部分。因此,這取決於解析器的配置(通常在 中
/etc/host.conf
)如何更改它。通常,hosts 檔案在 DNS 或 NIS 之前解析,因此最常見的是更改/etc/hosts
.
答案3
更改相關文件的內容:etc/mailname
:
如果您的程式包需要知道在本地產生的傳出新聞和郵件訊息上使用什麼主機名,您應該使用該檔案
/etc/mailname
。它將包含用戶名和@(at)符號之後的部分,表示電腦上用戶的電子郵件地址(後跟換行符)。
通常這是 FQDN 名稱(長的由其他系統解析的伺服器的名稱)。
為了簡單起見,只需重新配置相關套件即可。對於 Debian 10 的預設設置出口4包其實是exim4-config
:
dpkg-reconfigure -pcritical exim4-config
-pcritical
確保可能不會提出任何問題。您可以忽略它或降低它以-plow
查看部分或全部這些問題。
由於OP沒有使用出口4但郵件傳輸協定,對於這種情況,可以透過以下方式觸發配置:
dpkg-reconfigure msmtp
如果以前從未這樣做過,那麼第一個問題 ( Create a system wide configuration file?
) 的答案是“是”,這一點很重要,以便獲得後續問題。
似乎也與出口4,配置腳本(安裝後,在 中/var/lib/dpkg/info/msmtp.config
)不會檢查/etc/mailname
,因此不遵循建議的 Debian 策略。