The Problem
One problem with virtual machines is, when you clone one you also copy the complete configuration including hostname, static IPs, etc. To fix this you need to boot the cloned VM, edit the config and reboot it. The problem is that you will have at least temporary hostname and/or IP conflicts.
Use DHCP
The better approach is to obtain hostnames and IPs via DHCP. Then when you clone a machine (e.g. using virt-manager) for testing software updates or other changes, you simply remove the external NIC from the cloned VM, and the internal NIC gets a new MAC assigned automatically. Then you update the DHCP server configuration (e.g. /etc/dnsmasq.conf) and add the new MAC, assigned IP and hostname there. Then when booting the new VM it automatically gets the correct hostname and new IP, without the need of changing the VM’s configuration files.
Example:
dhcp-host=52:54:00:B9:C5:06,redmine,192.168.0.14,30m dhcp-host=52:54:00:BF:70:1C,redmine-test,192.168.0.19,30m
After the changes have been tested successfully you can apply the changes to the real system (you still should have a backup). Don’t remove the cloned ‘test-vm’. Just shut it down and keep it for the next time.
When you need to test again some new changes on the machine you have already the complete clone configuration and MAC address DHCP setup. So you simply need to replace the clone’s disk file (e.g. redmine-clone.qcow) with the latest version of your VM’s disk file (e.g. redmine.qcow). Then you can start the test machine and everything should work just fine without any conflicts.
Example SSH Session:
# log into the VM's host system ssh -l root blade7 cd /var/lib/libvirt/images # shutdown the VM before copying the file virsh shutdown Redmine cp redmine.qcow redmine-test.qcow # Restart VM virsh start Redmine # Start Clone-VM virsh start Redmine-test exit
Configuring the DHCP-Client on Debian (VM Guest)
On Debian you simply need to set the hostname in /etc/hostname
to
“localhost” to enable receiving the hostname via DHCP.
The DHCP client itself is already configured to request “host-name”
info via DHCP. See /etc/dhcp/dhclient.conf
. There you should find the
option “host-name” in the list of requested DHCP options.
About DNSmasq
As a side note I should mention that using DNSmasq is a great solution. It is a DHCP server and DNS server in one application. This means no matter if you are adding hostnames manually to the DHCP configuration or getting hostnames via DHCP from any DHCP client, these names can be also resolved via DNS automatically, without any further configuration.
Comments
comments powered by Disqus