18.04 LTS 中重启后主机名恢复为旧名称

18.04 LTS 中重启后主机名恢复为旧名称

这可能与将 18.04 LTS 作为虚拟机运行有关(主机是 Win 2016 DC),但我不知道如何解决。我尝试了所有我知道的方法来更改主机名,但它总是在重新启动时恢复到我构建机器时输入的主机名。我尝试了以下方法:

  1. hostnamectl 设置主机名 xxx。
  2. 直接编辑主机名。
  3. 向 hostnamectl 添加 --static。
  4. 编辑主机文件并添加所需的主机名。
  5. 重新启动之前搜索驱动器以查找对旧主机名的引用。
  6. 我在网上还发现了一些其他奇怪的建议,不值得一提。

我目前没有该服务器的 DNS。

例子:

XXXX@iwrxmail:~# hostnamectl
Static hostname: iwrxmail
Pretty hostname: Interwrx Ubuntu Mail Server
Transient hostname: ctl
     Icon name: computer-vm
       Chassis: vm
    Machine ID: 01ef0d836d2c4945b51a4fab8e506381
       Boot ID: e6608fe238d843f883cde52af7631a79
Virtualization: microsoft
Operating System: Ubuntu 18.04 LTS
        Kernel: Linux 4.15.0-20-generic
  Architecture: x86-64
XXXX@iwrxmail:~# hostnamectl set-hostname test
XXXX@iwrxmail:~# hostnamectl
Static hostname: test
     Icon name: computer-vm
       Chassis: vm
    Machine ID: 01ef0d836d2c4945b51a4fab8e506381
       Boot ID: e6608fe238d843f883cde52af7631a79
Virtualization: microsoft
Operating System: Ubuntu 18.04 LTS
        Kernel: Linux 4.15.0-20-generic
  Architecture: x86-64
root@iwrxmail:~# cat /etc/hostname
test
root@iwrxmail:~# cat /etc/hosts
127.0.0.1       localhost.localdomain   localhost
::1             localhost6.localdomain6 localhost6
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts 

However on reboot I get this again ....

XXXX@iwrxmail:~# hostnamectl
Static hostname: iwrxmail
     Icon name: computer-vm
       Chassis: vm
    Machine ID: 01ef0d836d2c4945b51a4fab8e506381
       Boot ID: 25a00676b22048eb8d43492c9de4f147
Virtualization: microsoft
Operating System: Ubuntu 18.04 LTS
        Kernel: Linux 4.15.0-20-generic
Architecture: x86-64

我在使用 18.04 测试版时就遇到过这个问题,但我想我会等待发布版本。我还认为这可能是因为我克隆了虚拟机,但这是一个使用刚刚发布的发行版从头构建的全新版本。

我错过了什么?

提前致谢。

答案1

首先编辑 /etc/cloud/cloud.cfg 并将参数“preserve_hostname”从“false”设置为“true”,然后编辑 /etc/hostname。

答案2

主机名正在被重置,cloud-init可以通过以下方式禁用(之后您可以以正常方式设置主机名,例如使用hostnamectl):

sudo touch /etc/cloud/cloud-init.disabled

或者您可以使用 cloud-init 并创建/修改文件user-data(通常位于:)/var/lib/cloud/seed/nocloud-net/user-data,以便将hostname:条目设置为所需的主机名(假设preserve_hostname:未设置)。首先,您需要清除现有配置:

sudo cloud-init clean

然后从新的/修改后的用户数据文件重新初始化 cloud-init 的配置:

sudo cloud-init init

然后重新启动。参见cloud-init 文档更多细节。

答案3

对于像我这样的“懒人”,一个复制粘贴的解决方案:)

sudo sed -i '/preserve_hostname: false/c\preserve_hostname: true' /etc/cloud/cloud.cfg && sudo hostnamectl set-hostname ReplaceThisWithTheHostnamePreferred

第一个命令允许操作系统记住新的主机名。

第二部分(&& 之后)仅当第一部分成功完成后才会运行,并将主机名设置为所需的值。

问候! 大号

答案4

如果您不想将旧版本保留在某处,则只需打开文件/var/lib/cloud/seed/nocloud-net/user-data,然后在以下行更改您的主机名:

hostname: cm-lc-nc

然后运行:

cloud-init clean
cloud-init init

然后它将设置/etc/hostname为新值,并在重新启动后保持一致。这将删除以前主机名的所有痕迹,并且如果preserve_hostname由于某种原因重置或忽略,您仍然不会丢失新主机名。

相关内容