Esta pagina se ve mejor con JavaScript habilitado

lxd-p2c

 ·  🎃 kr0m

Poder migrar una máquina física a contenedor es muy útil sobretodo cuando hay que actualizar el SO o las librerías de este modo podremos hacer un snapshot antes de tocar el sistema, si algo sale mal tan solo habrá que revertir al snapshot.

En LXD3.X se incorporó la utilidad lxd-p2c para poder migrar una máquina existente a contenedor de forma rápida y sencilla.

En este artículo explicaremos como llevar a cabo una migración de una Gentoo física a LXD.

Instalamos todo lo necesario para compilar:

emerge -av dev-lang/go app-emulation/lxc dev-db/sqlite dev-go/go-sqlite3

Nos bajamos el código fuente de la herramienta en nuestro equipo y la compilamos:

export GOPATH=/root/go
export GOPATH=$(go env GOPATH)

vi .bashrc

export GOPATH=/root/go  
export GOPATH=$(go env GOPATH)
go get github.com/lxc/lxd/lxd-p2c
cd /root/go/src/github.com/lxc/lxd/
make lxd-p2c

La copiamos al servidor que vamos a convertir a LXD:

scp /root/go/bin/lxd-p2c SERVER:/root/

En el servidor iniciamos el proceso de dumpeo indicando cada una de las particiones que tenga el servidor físico con la excepción de /boot ya que no será necesario por tratarse de un CT:

df -h

S.ficheros Tamaño Usados Disp Uso% Montado en
df -h
S.ficheros                         Tamaño Usados  Disp Uso% Montado en
/dev/sda4                             39G    13G   24G  35% /
/dev/sda2                             97M    22M   71M  24% /boot
/dev/mapper/volgroup_01-volumen_01   183G   117G   56G  68% /var
./lxd-p2c https://LXDSERVER:8443 CTNAME / /var
Generating a temporary client certificate. This may take a minute...
Admin password for https://LXDSERVER:8443: 
Transferring container: CTNAME: 686.81MB (9.50MB/s)

Podemos ver el CT en el servidor LXD:

lxc list

| CTNAME             | STOPPED |                              |      | PERSISTENT | 0         |

Arrancamos el CT:

lxc start CTNAME

Remapping container filesystem

Comprobamos que está arrancado:

lxc list

| CTNAME             | RUNNING |                              |      | PERSISTENT | 0         |

Entramos dentro del CT:

lxc exec CTNAME -- bash -l

Editamos la configuración de red ya que el nombre de las interfaces seguramente haya cambiado:

sed -i ’s/enp6s0f1/eth0/g’ /etc/conf.d/net

Quitamos del boot la interfaz de red antigua y metemos la nueva:

cd /etc/init.d
rm net.enp6s0f1
rc-update del net.enp6s0f1 default
ln -s net.lo net.eth0
rc-update add net.eth0 default

Para que Gentoo funcione dentro de LXD correctamente debemos modificar un script de devfs, a priori no parece necesario pero en posteriores actualizaciones del SO dará problemas si no lo hacemos, eliminamos el ‘-’ de lxc:

vi /etc/init.d/devfs

keyword -docker lxc -prefix -systemd-nspawn -vserver

Además comentamos el arranque de las terminales ya que no tienen sentido en un CT:

vi /etc/inittab

# TERMINALS  
#x1:12345:respawn:/sbin/agetty 38400 console linux  
#c1:12345:respawn:/sbin/agetty 38400 tty1 linux  
#c2:2345:respawn:/sbin/agetty 38400 tty2 linux  
#c3:2345:respawn:/sbin/agetty 38400 tty3 linux  
#c4:2345:respawn:/sbin/agetty 38400 tty4 linux  
#c5:2345:respawn:/sbin/agetty 38400 tty5 linux  
#c6:2345:respawn:/sbin/agetty 38400 tty6 linux
Si te ha gustado el artículo puedes invitarme a un RedBull aquí