Ubuntu
ubuntu 設置主機名腳本
我正在嘗試在 cloudstack 中創建一個模板,但在創建新的 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 -v i="$ip" -v f="$fqdn" -v h="$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
並重新啟動時,一切正常。當我創建一個新實例時它不起作用:使用前一個 VM 的主機名(我用來創建模板的 VM)
當我
rm -f /var/lib/dhcp/dhclient.*
在創建模板之前執行時,主機名將為空白。但在租賃文件中是正確的數據。
Cloud-init是您的案例的更好選擇。它有 Cloudstack 提供商支持:http ://docs.cloudstack.apache.org/projects/cloudstack-administration/en/4.8/virtual_machines/user-data.html
當我將主機名設置為 localhost 並重新啟動時,一切正常。
當我創建一個新實例時它不起作用:使用前一個 VM 的主機名(我用來創建模板的 VM)
這是否表明主機名不是’localhost’所以
如果
$$ $oldhostname = ’localhost’ $$
不會工作,因此腳本的其餘部分被跳過。
你不是更好地測試模板的名稱嗎?也許腳本在成功執行一次後自行刪除 - 然後您不需要檢查主機名。