如何覆盖 DHCP 在 AWS 的 CentOS7 机器上配置的主机名?

JJC*_*JJC 7 dhcp linux fedora centos amazon-ec2

标题几乎说明了一切。我在 EC2 中有一个运行 CentOS 7 的 VM。它使用 DHCP,这似乎是 EC2 的要求。无论我尝试什么,DHCP 都会在重新启动时不断覆盖主机名。我不会列举它,但我已经尝试了几乎所有的建议:覆盖 RHEL5/CentOS/Amazon Linux 上的 DHCP 主机名以及在谷歌搜索出现的其他几个站点上找到的那些。我不明白这是特定的操作系统版本还是 AWS/EC2 环境,但我无法更改主机名并使其在重新启动后保持不变。甚至通过 /etc/rc.d/rc.local 强制执行它(添加“/bin/hostnamectl set-hotname foo.bar.baz”也没有用。我不敢相信其他 AWS/EC2 用户没有想到这一点出来了请帮忙

更新:这也不起作用:http : //docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-hostname.html 即,为 AWS 的 Route53 中的框添加 DNS A 记录(并验证它是否有效) ,并在 /etc/sysconfig/network 中设置 HOSTNAME=foo.bar.baz (重新启动后检查)也是徒劳的。

更新 2:针对Fedora 20回答了类似的问题。那里接受的解决方案还涉及重新配置 cloud-init,但方式不同。此外,尚不清楚该问题/解决方案是否适用于其他发行版。因此,我觉得我的问题可能应该留给其他运行 CentOS 并以这种方式搜索它的人(是的,我知道 Fedora 和 CentOS 是兄弟姐妹,但并不是每个人在搜索解决方案时都用谷歌搜索所有同义词)。

JJC*_*JJC 7

好吧。在得出答案之前,我在这个问题上总共花了五个小时。@Sirex 建议卸载 cloud-init 是线索。从本质上讲,cloud-init 是一种内置于大多数 EC2 映像 (AMI) 中的服务,包括 AMI Linux 和 CentOS。该系统做了很多事情(谷歌它),并且可能对某些配置和维护 foo 很有用。因此,我不愿简单地禁用它。但是,它似乎也在设置 EC2 主机名。因此,要使用您首选的主机名覆盖它,只需执行以下操作:

(1)创建一个类似于 99_...cfg 的文件(我命名为 99_hostname.cfg),并将以下内容写入其中:

#cloud-config
hostname: foo
fqdn: foo.bar.baz
Run Code Online (Sandbox Code Playgroud)

当然,用您的主机名和完全限定的域名替换“foo”和“foo.bar.baz”。

(2)把这个文件放在/etc/cloud/cloud.cfg.d/99_hostname.cfg

(3)确保通过以下命令正确设置文件权限/所有者/selinux 上下文(如果您有 SELinux 强制执行):

sudo su -
cd /etc/cloud/cloud.cfg.d/
chown root: 99_hostname.cfg
chmod 644 99_hostname.cfg
chcon system_u:object_r:etc_t:s0 99_hostname.cfg
Run Code Online (Sandbox Code Playgroud)

(4)重启你的虚拟机,新的主机名就应该设置好了。如果您不信任您的 bash 提示符,您可以检查这一点,例如,执行以下任一操作:

hostnamectl
Run Code Online (Sandbox Code Playgroud)

或者

cat /etc/hostname
Run Code Online (Sandbox Code Playgroud)