Ubuntu

ubuntu 設置主機名腳本

  • September 5, 2016

我正在嘗試在 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’ $$

不會工作,因此腳本的其餘部分被跳過。

你不是更好地測試模板的名稱嗎?也許腳本在成功執行一次後自行刪除 - 然後您不需要檢查主機名。

引用自:https://serverfault.com/questions/801064