Creando un container con systemd-nspawn
¿qué es un container y para qué usar systemd-nspawn?
Un contenedor o container es una máquina virtual, que comparte el núcleo del sistema operativo con el equipo anfitrión, sin que pueda acceder a sus archivos.
A diferencia de chroot, systemd-nspawn virtualiza totalmente la jerarquía del sistema de archivos, así como el árbol de procesos, el nombre de host y de dominio, entre otros.
Instalando systemd-nspawn en Debian.
Primero que nada tenemos que instalar los paquetes necesarios para realizar el procedimiento.
# aptitude install systemd-container debootstrap
En segundo lugar creamos el directorio donde vamos a alojar a nuestro sistema operativo que iremos a virtualizar con systemd-nspawn.
El directorio /srv es utilizado por los servidores instalados en el ordenador y lo tomamos siguiendo el tutorial del blog de Lennart Poettering.
# mkdir -p /srv/mycontainer
Descargando SO Debian con debootstrap.
Sobre el tipo de arquitectura a elegir, como en este ejemplo la máquina anfitriona funciona sobre un kernel amd64, opte por instalar la misma que su anfitrión para evitar cualquier tipo de problemas ya que, entiendo que ambos sistemas van a compartir el mismo kernel.
Con respecto al tipo de versión de Debian elegí la versión sid.
# debootstrap --arch=amd64 sid /srv/mycontainer/ http://ftp.br.debian.org/debian
Antes de poner en marcha nuestro container tenemos que agregar un pasword para root
# systemd-nspawn --directory=/srv/mycontainer/ passwd
Iniciando el container.
Lo primero que haremos es probar que inicia nuestro container, agregando las opciones b (boot) , D (directorio donde tenemos nuestro container) y --network-macvlan (una interfaz virtual que añade una segunda dirección MAC a una red Ethernet física existente).
# systemd-nspawn -bD /srv/mycontainer --network-macvlan=eth0 --boot
Nos logueamos como root y procedemos a configurar la interfaz de red.
Creamos el archivo mv-eth0.network
# nano /etc/systemd/network/mv-eth0.network
Y agregamos el siguiente texto:
[Match]
nName=mv-eth0
[Network]
DHCP=yes
Enlazamos resolv.conf de systemd con el que se encuentra en /etc.
# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Activamos el demonio systemd-networkd
# systemctl enable systemd-networkd.service systemd-resolved.service
# systemctl start systemd-networkd.service systemd-resolved.service
Ya con la conexión a Internet funcionando, instalamos algunos paquetes necesarios y creamos un usuario para poder loguearnos utilizando machinectl y ssh
# apt-get update
# apt-get install --no-install-recommends ssh
# apt-get install --no-install-recommends dbus locales
# useradd -m -s /bin/bash rocky
# passwd rocky
Desde otra pestaña del emulador de terminal ejecutamos el comando machinectl para comprobar que nuestro container se encuentra en ejecución.
machinectl
MACHINE CLASS SERVICE
mycontainer container systemd-nspawn
1 machines listed.
Con machinectl nos logueamos con la cuenta de usuario creada.
# machinectl login mycontainer
El comando machinectl lo podemos utilizar para saber el estado del container, reiniciarlo o apagarlo o listar todos los container activos.
# machinectl poweroff mycontainer
Configurando nuestro container para que se inicie junto con el sistema operativo anfitrión.
En el sistema operativo anfintrión creamos el archivo mycontainer.service
# nano /etc/systemd/system/mycontainer.service
Dentro colocamos el siguiente texto:
[Unit]
Description=Mi container
[Service]
ExecStart=/usr/bin/systemd-nspawn -jbD /srv/mycontainer --network-macvlan=eth0 3
KillMode=process
Activamos el demonio mycontainer.service
# systemctl daemon-reload
# systemctl enable mycontainer.service
# systemctl start mycontainer.service
Si todo ha salido bien, nuestro container se iniciará junto con el sistema y podremos acceder a él desde shh o con machinectl.
Conclusión.
systemd-nspawn no es una solución tan completa como Docker o LXC, pero como punto a favor podemos destacar que se genera una completa integración entre las herramientas de la maquina anfitriona y el container (si dentro de este se ejecuta un sistema operativo con systemd) sumado a su "simplicidad" a la hora de instalar y configurar.
Fuentes.

- Inicie sesión o regístrese para comentar
- 948 lecturas
te puede interesar

se ve interesante. por lo menos para trastear un rato con el![yes yes]()
We were but stones. Your light made us stars
Muy buen articulo. Gracias rockyiii
Debian y GNU/Linux en el core informatico.