恢复/阻止主机名更改

恢复/阻止主机名更改

这是一次盲目的尝试……

我正在使用一项名为 Strato-Server-Cloud 的服务,它基本上是 AWS 或 Google-Compute 的初级版本。他们最近更改了界面和/或引擎。从那时起,我创建的所有新 Ubuntu 16 实例都存在其主机名在重启时被恢复的问题。

这是我通常做的事情:

/etc/主机名

www.example.com

/etc/hosts

127.0.0.1 www.example.com www
[...]

在 Ubuntu 16 上另外:

hostnamectl set-hostname www

完成上述步骤后:

hostname -> www
hostname -f -> www.example.com

主机名控制

Static hostname: www
Icon name: computer-vm
Chassis: vm
Machine ID: [ID]
Boot ID: [ID]
Virtualization: microsoft
Operating System: Ubuntu 16.04.1 LTS
Kernel: Linux 4.4.0-59-generic
Architecture: x86-64

重启后重启

hostname -> XXX
hostname -f -> XXX.strato.net

主机名控制

Static hostname: www
Transient hostname: XXX
Icon name: computer-vm
Chassis: vm
Machine ID: [ID]
Boot ID: [ID]
Virtualization: microsoft
Operating System: Ubuntu 16.04.1 LTS
Kernel: Linux 4.4.0-59-generic
Architecture: x86-64

记下临时主机名

奇怪的是,主机和主机名文件是完整的。

我还尝试将 /etc/init/hostname.conf 更改为以下内容

description     "set system hostname"

start on startup

task
exec hostname -b -F /etc/hostname.mod; full=$(cat /etc/hostname.mod);short=(${full//./ }); hostnamectl set-hostname $short

我还将主机名放入 /etc/hostname.mod 中,以确保不会发生覆盖。手动执行上述 exec 语句可以修复所有问题,但在启动过程中似乎不起作用...

不幸的是,我在这里很迷茫……我假设 /etc/init/hostname.conf 在启动期间执行,但主机名被另一个脚本覆盖?有没有人遇到过这样的问题并知道如何解决?我想我可以研究一下某个 Linux 版本的文件间谍,记录哪些进程接触了哪些文件,然后通过这种方式找到有问题的脚本……然而,这听起来确实需要做很多工作……

如果有人至少可以指出主机名的生命周期,即如何确定它的步骤以及在哪里可以挂钩它,这将对我有很大帮助。

提前感谢您的时间和精力

编辑

我想这也有助于解释为什么这很糟糕 :-) 如果主机名配置不正确,OpenLDAP 会拒绝在 STARTTLS 模式下正常工作。由于我从未遇到过无法更改主机名的问题,所以我不知道其他哪些服务也可能出现故障。因此,在启动 OpenLDAP 等服务之前,必须先对该问题进行最小限度的解决方案。

答案1

对于通过 dchp 获取其 IP 地址的计算机,默认客户端文件/etc/dhcp/dhclient.conf包括询问host-name请求中应包含的内容:

request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers;

您可以从请求中删除它:

request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search,
        dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers;

我不确定:是否可能会产生意想不到的副作用;域名也应该从请求中删除。

答案2

我知道这是旧帖子,但这篇文章帮助我解决了同样的问题。我正在更新这篇文章,以便将来遇到同样问题的搜索引擎用户能够使用。

这次不是 hostnamectl 的错。

如果您尝试更改 VPS 服务器上的主机名但它不想更改 - 您的 VM 可能正在从主机/虚拟机管理程序获取其主机名。

就我而言,我必须登录 VPS 提供商仪表板并在那里更改主机名。

答案3

这个答案可能会对那些试图制作 liveCD 的人有所帮助。

如果您要制作由 isolinux+casper 启动的 liveCD,则需要小心。在您的 liveCD 上安装 casper 将更改 initrd 的内容。因此,当系统启动时,它将主要使用 casper 的配置来生成主机名(或其他内容),而不是读取 /etc/hostname。

我参考了 Casper 的源代码,发现以下几行

# Allow to override USERNAME and HOST based on media information
# make it skipable by setting FLAVOUR= in casper.conf
if [ -f /cdrom/.disk/info ] && [ -z "$FLAVOUR" ]; then
    FLAVOUR="$(cut -d' ' -f1 "/cdrom/.disk/info" 2>/dev/null | tr '[A-Z]' '[a-z]')" || FLAVOUR=
    if [ -n "$FLAVOUR" ]; then
        HOST=$FLAVOUR
        USERNAME=$FLAVOUR
        export HOST USERNAME
        sed -i "s,USERNAME=.*,USERNAME=\"$FLAVOUR\",g; s,HOST=.*,HOST=\"$FLAVOUR\",g" /etc/casper.conf
    fi
fi

因此,您可以创建一个“ .disk”文件夹或直接更改 /etc/casper.conf 来更改主机名。

vim gen-image.sh
================
#!/bin/bash
cd IMAGE_DIR
rm -rf .disk
mkdir .disk
touch base_installable
echo "full_cd/single" >cd_type
echo "YOUR_CUSTOM_HOST_NAME" >info
echo "YOUR_CUSTOM_URL" >release_nots_url
cd ..
# GENERATE IMAGE HERE

相关内容