Este Sábado 26 de Abril se realiza en Buenos Aires el “Festival Latinoamericano de instalación de Software Libre” o Flisol para simplificar.

Como en muchas ocasiones en ediciones anteriores me he encargado de la configuración y administración de red, mirror, repositorios, etc (con mayor o menor éxito) aunque puedo decir que cada año he utilizado una configuración cada vez mas sofisticada.

Para este año he decidido publicar con tiempo toda la configuración que usará el server el día del evento en un repositorio de Github con la idea de que cualquiera pueda armar algo similar y con la remota esperanza de que también sea de utilidad a otras sedes, pueden verlo en el siguiente link: https://github.com/Mstaaravin/flisol-ipxe

Pero he aqui que no todo el mundo tiene la posibilidad de disponer de hardware dedicado (switches, PCs, etc) a armar un laboratorio para probar que el booteo por PXE funcione para todas las distribuciones por lo que decidí simplificar utilizando KVM + Libvirt mas un pequeño hack en la configuración de red que utiliza libvirt para simular una red real.

Utilizo KVM para virtualizar y libvirt + virt-manager para administrar todas las VMs en mi desktop/server personal.

Por default cuando utilizamos KVM tenemos disponible una red “default”

root@lhome:~# virsh net-list
Name                 State      Autostart
-----------------------------------------
default              active     yes

Que podemos ver con mas detalles en virt-manager

El objetivo de este post no es explicar todo lo relacionado a la configuración de red que utiliza libvirt, sino modificar la red x default para que nos permita tener booteo PXE en esa red virtual.

Lo primero que debemos hacer es detener la red y su bridge asociado (virbr0)

root@lhome:~# virsh net-destroy default
Network default destroyed

Vemos la configuración que está usando por default

root@lhome:~# virsh net-dumpxml default
<network>
  <name>default</name>
  <uuid>5a014735-f658-7a87-c7d4-e6b0f488c332</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0' />
  <mac address='52:54:00:B5:24:7B'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.99' />
    </dhcp>
  </ip>
</network>

Y le agregamos soporte para PXE con 2 nuevos parámetros “tftp root=” y “bootp file=”

Hay 2 formas de editar la red (siempre que esté apagada), con:

root@lhome:~# virsh net-edit default

O manualmente en /etc/libvirt/qemu/networks/default.xml

Y debería quedar así:

root@lhome:~# virsh net-dumpxml default
<network>
  <name>default</name>
  <uuid>5a014735-f658-7a87-c7d4-e6b0f488c332</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0' />
  <mac address='52:54:00:B5:24:7B'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <tftp root='/home/tftp' />
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.99' />
      <bootp file='pxelinux.0' />
    </dhcp>
  </ip>
</network>

tftp root=’/home/tftp’ Por supuesto es el root path donde tenemos todos los archivos necesarios para que PXE funcione, hay muchos tutoriales en internet que explicar cómo utilizar dnsmasq (es lo que utiliza libvirt para sus redes) también pueden descargarse toda la configuración desde mi repositorio github mencionado al inicio del post.

Probamos que funcione (no olvidar seleccionar PXE como primera opción de boot en virt-manager)