如何永久地在GCE中设置实例的主机名?我可以通过主机名设置它,但重新启动后它会再次消失。
我尝试输入元数据(主机名:f.q.d.n),但是没有完成这项工作。但它应该通过元数据(https://github.com/GoogleCloudPlatform/compute-image-packages/tree/master/google-startup-scripts)工作。
有人有想法吗?
答案 0 :(得分:13)
实现它的最简单方法是创建一个简单的脚本,这就是我所做的。
我已将主机名存储在实例元数据中,然后每次系统重新启动时都会检索它,以便使用cron作业设置主机名。
$ gcloud compute instances add-metadata <instance> --metadata hostname=<new_hostname>
$ sudo crontab -e
这是必须附加在crontab中的行
@reboot hostname $(curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google")
完成这些步骤后,每次重新启动实例时,都会有主机名<new_hostname>
。
您可以在提示中或使用以下命令进行检查:hostname
答案 1 :(得分:10)
编辑rc.local
sudo nano /etc/rc.local
在其余部分添加您的行:
hostname *your.hostname.com*
确保在执行脚本之后运行以下命令
chmod +x /etc/rc.d/rc.local
重新启动,并获利。
答案 2 :(得分:6)
需要删除文件/etc/dhcp/dhclient.d/google_hostname.sh
答案 3 :(得分:5)
这是不可能的。 Please take a look at this answer.以下article解释了&#34;主机名&#34;是默认元数据条目的一部分,无法手动编辑任何默认元数据对。因此,每次系统重新启动时,您都需要使用脚本或其他内容来更改主机名,否则每次重新启动时都会自动与元数据服务器重新同步。
您可以在this article中找到有关GCE启动脚本的信息。您可以visit this one获取有关如何将脚本应用于实例的信息。
答案 4 :(得分:3)
您还可以创建一个简单的启动脚本来完成这些工作:
$ gcloud compute instances add-metadata <instance-name> --zone <instance-zone> --metadata startup-script='#! /bin/bash
hostname <hostname>'
请注意,如果您已经有一个启动脚本,则需要添加到下面的现有启动脚本命令,否则您将替换所有启动脚本:
$ hostname instance-name
答案 5 :(得分:2)
如果有人发现此解决方案在GCS实例上不起作用。然后我建议你尝试使用谷歌支持所描述的退出钩子。
事实上,像CentOS和Debian这样的Linux的一些发行版使用 dhclient-script脚本用来配置网络参数 机。这个脚本是由dhclient不时调用的 动态主机配置协议客户端并提供了一种方法 使用DHCP协议配置一个或多个网络接口, BOOTP协议,或者如果这些协议失败,则通过静态分配 地址。
以下文字是来自人(手册)页面的引用 dhclient的脚本:
完成所有处理后,/ usr / sbin / dhclient-script 检查是否存在可执行文件 / etc / dhcp / dhclient-exit-hooks脚本,如果存在则使用'。'命令调用。退出状态 dhclient-script将传递给exit_status shell变量中的dhclient-exit-hooks,并且始终为零 如果脚本成功执行了调用它的任务。如上所述的其余环境 对于dhclient-enter-hooks也存在。 / etc / dhcp / dhclient-exit-hooks脚本可以修改有效值 exit_status更改dhclient-script的退出状态。
话虽如此,通过查看代码片段 dhclient-script,我们可以看到脚本检查是否存在 可执行文件/ etc / dhcp / dhclient-up-hooks脚本和所有脚本 /etc/dhcp/dhclient-exit-hooks.d/目录。
ETCDIR="/etc/dhcp" 193 exit_with_hooks() { 194 exit_status="${1}" 195 196 if [ -x ${ETCDIR}/dhclient-exit-hooks ]; then 197 . ${ETCDIR}/dhclient-exit-hooks 198 fi 199 200 if [ -d ${ETCDIR}/dhclient-exit-hooks.d ]; then 201 for f in ${ETCDIR}/dhclient-exit-hooks.d/*.sh ; do 202 if [ -x ${f} ]; then 203 . ${f}204 fi 205 done 206 fi 207 208 exit ${exit_status}209 }
因此,为了修改Linux VM的主机名,您可以 创建一个扩展名为.sh的自定义脚本并将其放入 /etc/dhcp/dhclient-exit-hooks.d/目录。如果这个目录没有 存在,你可以创建它。自定义脚本的内容将是:
hostname YourFQDN.sh
&GT;
请务必使这个新的.sh文件可执行:
chmod +x YourFQDN.sh
资料来源:(https://groups.google.com/d/msg/gce-discussion/olG_nXZ-Jaw/Y9HMl4mlBwAJ)
答案 6 :(得分:1)
我不确定我理解阿德里安的答案。这似乎过于复杂,因为你必须为每次启动运行一个脚本,为什么不只是使用主机名?
vi /etc/rc.local
添加:
hostname your_hostname
就是这样。经过测试和工作。无需摆弄元数据等。
答案 7 :(得分:1)
非cron /元数据/脚本解决方案。
编辑/etc/dhclient-(network-interface).conf或创建一个,如果它不存在。
示例:
sudo nano /etc/dhclient-eth0.conf
然后添加以下行,在双引号之间替换所需的FQDN:
supersede host-name "hostname.domain-name";
重新启动和主机名之间以及主机名-f 之间保持不变。
答案 8 :(得分:1)
我很幸运能够在运行CentOS的GCE上设置主机名。 资料来源:desantolo.com
hostname
+ your.hostname.tld
(将“your.hostname.tld”更改为您的实际主机名curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google"
sudo env EDITOR=nano crontab -e
以编辑crontab @reboot hostname $(curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google")
Ctrl
+ X
Y
Enter
reboot
hostname
并查看是否已应用更改答案 9 :(得分:1)
在Debian上测试。
dhclient
使用DHCP设置主机名
您可以通过在/etc/dhcp/dhclient-exit-hooks.d/custom_set_hostname
中创建一个自定义挂钩脚本来覆盖此操作,该脚本将从/etc/hostname
读取主机名:
if [ -f "/etc/hostname" ]; then
new_host_name=$(cat /etc/hostname)
fi
脚本必须具有执行权限。
设置new_host_name
变量并且不直接调用hostname
命令非常重要,因为对hostname
命令的任何调用都将被另一个钩子或{{ 1}}使用此变量
答案 10 :(得分:0)
在我的CentOS虚拟机中,我发现由/etc/dhcp/dhclient.d/google_hostname.sh
RPM安装的脚本google-compute-engine
实际上更改了主机名。当实例在引导期间获取其IP地址时会发生这种情况。
虽然这不是我真正想要的长期解决方案,但现在我只是删除了这个脚本。我在hostnamectl
设置的主机名现在在重新启动后仍然存在。
该脚本可能与Debian / Ubuntu VM完全相同,但我当然不会运行任何这些脚本。
答案 11 :(得分:0)
创建VM时,可以将自定义FQDN主机名指定为可选参数。此功能当前处于Beta中。
$ gcloud beta compute instances create INSTANCE_NAME --hostname example.hostname
这应可在所有OS上使用,并避免需要变通方法脚本。 在docs中有更多信息。
-Sirui(Google Compute Engine产品经理)
答案 12 :(得分:0)
有一些技巧可以像我一样实现。只要做:
sudo chattr +i /etc/hosts
此命令实际上使文件“(i)可变”,这意味着即使root也不能更改它(当然,除非root首先做chattr -i / etc / hosts)。
如上所述,您可以使用sudo chattr -i / etc / hosts取消此操作
加油!
答案 13 :(得分:0)
解决此问题的一种简单方法是使用自定义元数据设置启动脚本。
Key :startup-script
Value:
#! /bin/bash
hostname <desired hostname>