我正在尝试在cloudstack中创build模板,但在创build新的VM实例时未设置/etc/hostname和/etc/hosts 。
我正在使用这个脚本:
#!/bin/sh # dhclient change hostname script for Ubuntu oldhostname=$(hostname -s) if [ $oldhostname = 'localhost' ] then sleep 30 # Wait for configuration to be written to disk hostname=$(cat /var/lib/dhcp/dhclient.eth0.leases | awk ' /host-name/ { host = $3 } END { printf host } ' | sed 's/[";]//g' ) fqdn="$hostname.$(cat /var/lib/dhcp/dhclient.eth0.leases | awk ' /domain-name/ { domain = $3 } END { printf domain } ' | sed 's/[";]//g')" ip=$(cat /var/lib/dhcp/dhclient.eth0.leases | awk ' /fixed-address/ { lease = $2 } END { printf lease } ' | sed 's/[";]//g') echo "cloudstack-hostname: Hostname _localhost_ detected. Changing hostname and adding hosts." printf " Hostname: $hostname\n FQDN: $fqdn\n IP: $ip" echo "Hostname: $hostname\n FQDN: $fqdn\n IP: $ip" >> "/var/log/hostchange" # Update /etc/hosts echo "$ip $fqdn $hostname" > /etc/hosts.dhcp.tmp #awk -vi="$ip" -vf="$fqdn" -vh="$hostname" "/^127/{x=1} !/^127/ && x { x=0; print i,f,h; } { print $0; }" /etc/hosts > /etc/hosts.dhcp.tmp mv /etc/hosts /etc/hosts.dhcp.bak mv /etc/hosts.dhcp.tmp /etc/hosts # Rename Host echo $hostname > /etc/hostname hostname -b -F /etc/hostname echo $hostname > /proc/sys/kernel/hostname # Recreate SSH2 export DEBIAN_FRONTEND=noninteractive dpkg-reconfigure openssh-server fi ### End of Script ###
当我将主机名设置为localhost ,并重新启动一切正常。
当我创build一个新的实例时,它不起作用:使用前一个虚拟机的主机名(我用来创build模板的虚拟机)
当我在创build模板之前运行rm -f /var/lib/dhcp/dhclient.* ,主机名将是空白的。 但在租约文件中是正确的数据。
Cloud-init是您的使用案例的更好select。 它具有Cloudstack提供程序支持: http ://docs.cloudstack.apache.org/projects/cloudstack-administration/en/4.8/virtual_machines/user-data.html
当我将主机名设置为本地主机,并重新启动一切正常。
当我创build一个新的实例时,它不起作用:使用前一个虚拟机的主机名(我用来创build模板的虚拟机)
这不表示主机名不是'localhost'
如果[$ oldhostname ='localhost']
是不会工作,因此脚本的其余部分被跳过。
你会不会更好地testing模板的名称? 也许脚本在运行成功后会自行删除 – 那么您不需要检查主机名。