Ubuntu установить имя хоста скрипт

Я пытаюсь создать шаблон в облаке, но /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 и сделать перезагрузку все работает.

Когда я создаю новый экземпляр, он не работает: используется имя хоста предыдущей виртуальной машины (виртуальная машина, которую я использовал для создания шаблона)

Когда я бегу rm -f /var/lib/dhcp/dhclient.* прежде чем я создам шаблон, имя хоста будет пустым. Но в файле аренды есть нужные данные.

2 ответа

Решение

Cloud-init - лучший вариант для вашего случая использования. Он имеет поддержку поставщика Cloudstack: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/4.8/virtual_machines/user-data.html

Когда я устанавливаю имя хоста localhost и делаю перезагрузку, все работает.

Когда я создаю новый экземпляр, он не работает: используется имя хоста предыдущей виртуальной машины (виртуальная машина, которую я использовал для создания шаблона)

Разве это не говорит о том, что имя хоста не "localhost", так

если [ $oldhostname = 'localhost' ]

не будет работать и, следовательно, остальная часть сценария будет пропущена.

Не лучше ли проверить название шаблона? Возможно, скрипт удалится сам после того, как он успешно запустился - тогда вам не нужно проверять имя хоста.

Другие вопросы по тегам