Las plantillas en virtualización suelen facilitar la vida en entornos corporativos, que por volumen de máquinas sería imposible estar realizando instalaciones desde cero.
Al final una plantilla no es más que una máquina virtual “estándar”, que adaptas a tu entorno y la sellas para que puedas realizar clones a partir de ella. Nosotros disponemos de dos tipos de máquinas virtuales, las máquinas que realizan una determinada función (dns, oracle, weblogic, sql,…) y están “vivas” y máquinas que están creadas como plantillas de vmware (sólo el sistema operativo y programas estándar[antivirus, parches,…]) que residen en los datastores y en los hosts, pero que no consumen más recurso que el espacio que ocupan.
Nosotros en nuestro entorno tenemos tanto máquinas Windows como máquinas Linux, con lo que tenemos plantillas de varios tipos.
Actualmente estamos trabajando en la implantación de Redhat 6. Y tenemos la plantilla estándar montada, pero nos hemos encontrado con una curiosidad que ahora os cuento, a la cual le hemos tenido que buscar una solución.
Como podemos ver la plantilla de RHEL 6 que tenemos montada, cuando está en formato máquina virtual, tiene red con un interfaz ETH0:
PLANTILLA
[root@plantilla ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:A1:43:A1
inet addr:10.238.2.105 Bcast:10.238.255.255 Mask:255.255.0.0
inet6 addr: fe80::250:56ff:fea1:43a1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:13169 errors:0 dropped:0 overruns:0 frame:0
TX packets:519 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:489393 (477.9 KiB) TX bytes:79971 (78.0 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:960 (960.0 b) TX bytes:960 (960.0 b)
Podemos comprobar que sólo dispone de esos dispositivos con este comando:
[root@plantilla ~]# ls /sys/class/net/
eth0 lo
Si creamos una máquina virtual desde dicha plantilla y revisamos sus interfaces, nos encontraremos con que nos ha creado un ETH1 cuando esperábamos un ETH0. Generando un error. Esto se debe a que cambia la MAC:
Cuando lanzamos un reinicio del servicio de red nos da un error al intentar levantar el interfaz:
[root@maquinavirtual ~]# /etc/init.d/network restart
Interrupción de la interfaz eth1: [ OK ]
Interrupción de la interfaz de loopback: [ OK ]
Activación de la interfaz de loopback: [ OK ]
Activando interfaz eth0: El dispositivo eth0 no parece estar presente, retrasando la inicialización.
[FALLÃ]
RTNETLINK answers: File exists
RTNETLINK answers: File exists
RTNETLINK answers: File exists
RTNETLINK answers: File exists
MAQUINA VIRTUAL DESDE PLANTILLA
Revisamos los interface lanzando el comando cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
# PCI device 0x15ad:0x07b0 (vmxnet3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:a1:43:a1", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x15ad:0x07b0 (vmxnet3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:a1:07:93", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
Y volvemos a revisar que en este caso no existe ETH0:
[root@clon ~]# ls /sys/class/net/
eth1/ lo/
SOLUCIÓN
Deberemos editar el fichero /etc/udev/rules.d/70-persistent-net.rules de la plantilla y comentar la línea como os muestro. UDEV se implementa desde RHEL 4 y permite a redhat utilizar nombre de dispositivos consistentes, aunque haya dispositivos removibles (impresoras, etc.):
PLANTILLA
Editamos el fichero y comentamos la línea de ETH0. Ahora apagamos la plantilla y la sellamos:
[root@plantilla ~]# vi /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
# PCI device 0x15ad:0x07b0 (vmxnet3)
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:a1:43:a1", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
MAQUINA VIRTUAL DESDE PLANTILLA
Posteriormente, en los clones veremos que se ha creado un nuevo interfaz que corresponde a la MAC de nuestra nueva tarjeta. Pero ya no es utilizado eth1 sino eth0:
[root@maquinavirtual ~]# vi /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
# PCI device 0x15ad:0x07b0 (vmxnet3)
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:a1:43:a1", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x15ad:0x07b0 (vmxnet3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:a1:07:97", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
Hay que tener cuidado con modificar la plantilla o arrancarla, ya que deberemos repetir la operación porque en los reinicios vuelve a crearse el interfaz y la línea que hemos comentado.
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?
Hola, y si este mismo problema te da cuando estás instalando rhel8 en una maquina virtual por medio de red y servidor PXE?