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

And*_*lde 49 18.04

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

  1. hostnamectl set-hostname xxx.
  2. 直接编辑主机名。
  3. 将 --static 添加到 hostnamectl。
  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
Run Code Online (Sandbox Code Playgroud)

我在 18.04 的测试版中遇到了这个问题,但我想我会等待发布副本。我还认为这可能是因为我克隆了 VM 的事实,但这是一个全新的版本,使用刚刚发布的发行版从头开始构建。

我错过了什么?

提前致谢。

小智 66

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

  • 奇迹般有效。我永远不会从它上面的注释行中得到它:“#这将导致 set+update 主机名模块无法运行(如果为真)”。非常感谢,网上有很多不正确的方法。 (6认同)

Pie*_*erz 25

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

sudo touch /etc/cloud/cloud-init.disabled
Run Code Online (Sandbox Code Playgroud)

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

sudo cloud-init clean
Run Code Online (Sandbox Code Playgroud)

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

sudo cloud-init init
Run Code Online (Sandbox Code Playgroud)

然后重启。有关更多详细信息,请参阅cloud-init 文档

  • 它还会更新您的 SSH 主机密钥,这可能是有害的(客户端需要在重新连接之前接受新的主机密钥) (5认同)
  • 小心运行 `cloud-init clean` 或 `cloud-init init` 它可以重写你的 /etc/netplan/ yaml 文件。 (4认同)

lin*_*4kb 7

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

sudo sed -i '/preserve_hostname: false/c\preserve_hostname: true' /etc/cloud/cloud.cfg && sudo hostnamectl set-hostname ReplaceThisWithTheHostnamePreferred
Run Code Online (Sandbox Code Playgroud)

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

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

问候!升


小智 6

1- 编辑vi /etc/cloud/cloud.cfg和更改

preserve_hostname: false
Run Code Online (Sandbox Code Playgroud)

preserve_hostname: true
Run Code Online (Sandbox Code Playgroud)

保存并退出。

2- 编辑vi /etc/hostname并替换此文件中的新名称,或者您可以使用以下命令执行此步骤。

hostnamectl set-hostname NEWNAME
Run Code Online (Sandbox Code Playgroud)

好好享受 :)


小智 1

我遇到了同样的问题,发现删除云包后,您可以更改主机名。

apt remove cloud-init cloud-initramfs-copymods cloud-initramfs-dyn-netconf
Run Code Online (Sandbox Code Playgroud)