我已经从关闭的虚拟机创建了一个映像。从新的 XML 模板中,我能够使用 virsh create newvm.xml 创建一个新虚拟机。基本上,该映像是通过复制从 Ubuntu OS 映像构建的关闭虚拟机的映像创建的 - 显然在安装过程中我必须指定主机名。现在我关闭虚拟机并复制映像以将其用作我的新虚拟机客户机的基础映像。问题是我不知道如何自动更改该死的主机名。现在每个新创建的虚拟机都以与创建映像的机器相同的主机名开始。有什么办法可以解决这个问题吗?
<domain type='kvm' id='10'>
<name>sensu.gc.example.com</name>
<uuid>3d638021-1fd5-96c4-5b7b-a5c11d69c314</uuid>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='pc-1.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/kvm/sensu/tmpZ2yf6n.qcow2'/>
<target dev='hda' bus='ide'/>
<alias name='ide0-0-0'/>
<address type='drive' controller='0' bus='0' unit='0'/>
</disk>
<controller type='ide' index='0'>
<alias name='ide0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:50:89:7b'/>
<source bridge='br0'/>
<target dev='vnet0'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<source path='/dev/pts/0'/>
<target port='0'/>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/0'>
<source path='/dev/pts/0'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>
<listen type='address' address='127.0.0.1'/>
</graphics>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<alias name='video0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<alias name='balloon0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</memballoon>
</devices>
<seclabel type='dynamic' model='apparmor' relabel='yes'>
<label>libvirt-3d638021-1fd5-96c4-5b7b-a5c11d69c314</label>
<imagelabel>libvirt-3d638021-1fd5-96c4-5b7b-a5c11d69c314</imagelabel>
</seclabel>
</domain>
我以为通过在标签中指定主机名,它会在创建虚拟机时自动更改。有什么方法可以实现我想要的效果吗?谢谢。
答案1
您无法从虚拟机的 XML 文件或 KVM 更改主机名。此 XML 文件仅列出虚拟机的属性,主机名不属于此类属性。主机名是在启动过程中在虚拟机操作系统(您的情况是 Ubuntu)中设置的。
要更改主机名,你应该查看/etc/hostname
Ubuntu 服务器中的文件(请参阅详细示例)。
如果您使用 dhcp 设置服务器的 IP 地址(我推荐这样做),dhcp-client
则可以使用一些钩子在收到 IP 地址时运行脚本。这样,您就可以在启动过程中动态更改主机名。 以下是如何做到这一点的示例。
另一个选择,就像 pedro 建议的那样,是在每个新的 XML 文件中设置服务器的 MAC 地址(您可以这样做,因为它是 VM 属性),并在启动时运行一个脚本,该脚本将分配一个 IP 地址和一个从该 MAC 地址派生的主机名。
答案2
我这样做是在创建虚拟机时设置 MAC 地址,并调整 /etc/rc.local 以查看 MAC 并根据其值设置 IP/主机名。问候,佩德罗