标题几乎说明了一切。我在 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 是兄弟,但并不是每个人在搜索解决方案时都会搜索所有同义词)。
答案1
好吧。我大概花了五个小时才找到答案。@Sirex 建议卸载 cloud-init,这是个线索。本质上,cloud-init 是大多数 EC2 映像 (AMI) 中的内置服务,包括 AMI Linux 和 CentOS。该系统可以做很多事情(谷歌搜索),可能对某些配置和维护有用。因此,我犹豫着是否要简单地禁用它。但是,它似乎也在设置 EC2 主机名。因此,要用您喜欢的主机名覆盖它,只需执行以下操作:
(1)创建一个名为 99_...cfg 的文件(我将它命名为 99_hostname.cfg),并将以下内容写入其中:
#cloud-config
hostname: foo
fqdn: foo.bar.baz
当然,用您的主机名和完全限定域名替换“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
(4)重新启动虚拟机,新的主机名应该设置好了。如果你不信任你的 bash 提示符,你可以检查一下,例如,执行以下任一操作:
hostnamectl
或者
cat /etc/hostname
答案2
卸载 cloud-init。
这促使我精神的第一次 :-)
仍在寻找时间来研究如何让 cloud-init 按预期设置主机名(从标签或类似物) - 我自己还没有做到这一点。