systemd-nspawn (Español)

systemd-nspawn es parecido al comando chroot, pero es un chroot en esteroides.

Esta traducción de Systemd-nspawn fue revisada el 2018-01-04. Si existen cambios puede actualizarla o avisar al equipo de traducción.

systemd-nspawn puede ser usado para ejecutar un comando o un sistema operativo en contenedor de namespace muy ligero. Es mas poderoso que chroot ya que virtualiza toda estructura del sistema de archivos, así como el árbol de procesos, los sub sistemas IPC y los nombres de dominio y del servidor.

systemd-nspawn limita el acceso a varias interfaces del kernel como /sys, o en modo de lectura unicamente. Interfaces de red y el tiempo del sistema no se pueden modificar desde el contenedor. Nodos de dispositivos no se pueden crear. El sistema anfitrión no se puede reiniciar y módulos del kernel no se pueden montar desde el contenedor.

Este mecanismo difiere de LXC o Libvirt, ya que es una herramienta mucho mas fácil de configurar.

Instalación

systemd-nspawn es parte y viene empaquetado con .

Ejemplos

Crear e iniciar Arch Linux en un contenedor

En primer lugar instale .

Cree un directorio para mantener el contenedor. En este ejemplo se usará .

Use pacstrap para instalar un sistema básico de arch dentro del contenedor. Como mínimo es necesario instalar el grupo de paquetes .

# pacstrap -i -c -d ~/MyContainer base [pkgs/grupos adicionales]
Sugerencia: El parametro -i omitira auto confirmación en la selección de paquetes. Ya que no es necesario instalar el kernel en el contenedor, lo puede remover de la lista de selección para ahorrar espacio. Vea pacman#Utilización.

Cuando la instalación ha finalizado, arranque el contenedor ejecutando:

# systemd-nspawn -b -D ~/MyContainer

El parámetro arranca el contenedor (v.g. ejecuta como PID=1), en lugar de simplemente iniciar una shell, y el parámetro -D especifica el directorio que se usara como directorio raíz del contenedor.

Después que el contenedor arranque, inicie sesión con el usuario "root" sin contraseña.

El contenedor se puede apagar ejecutando desde dentro del contenedor. Desde el sistema anfitrión, los contenedores se pueden controlar con la herramienta machinectl.

Crear un Arch Linux i686 dentro de un anfitrión x86_64

Es posible instalar un sistema mínimo de Arch Linux i686 dentro de un directorio y usarlo como un contenedor de systemd-nspawn en lugar de usar chroot o virtualización. Esto es útil para examinar la compilación de en un sistema de i686. Este seguro de usar sin el repositorio .

 # pacman_conf=/tmp/pacman.conf # este es pacman.conf sin multilib
 # mkdir /mnt/i686-archlinux
 # linux32 pacstrap -C "$pacman_conf" -di /mnt/i686-archlinux base base-devel

Se puede dejar el paquete fuera del grupo base, ya que el sistema creado no pretende ser encendido en hardware real o virtual.

Para arrancar el sistema i686 resultante como una instancia de systemd-nspawn, ejecute:

 # linux32 systemd-nspawn -D /mnt/i686-archlinux

Crear un ambiente Debian o Ubuntu

Instale , , y uno de estos paquetes: o (obviamente instale el llavero del distro que quiere).

Nota: systemd-nspawn requiere que el sistema operativo dentro del contenedor ejecute systemd como PID 1 y que systemd-nspawn este instalado en el contenedor. Esto quiere decir que Ubuntu antes de la version 15.04 no funcionaran, y configuraciones extras para cambiar de upstart a systemd son necesarias. También asegurese que el paquete systemd-container esta instalado en el contenedor.

Desde este punto es relativamente trivial crear un ambiente con Debian o Ubuntu:

# cd /var/lib/machines
# debootstrap <nombrecodigo> myContainer <url-repositorio>

Para Debian nombres código validos son "stable" o "testing", también nombres de publicaciones "stretch" and "sid". Para Ubuntu el nombre código puede ser "xenial" o "zesty". Una lista completa de nombres codigo esta en .

En caso de una imagen de Debian la "url-repositorio" puede ser . Para Ubuntu la "url-repositorio" puede ser .

A diferencia de Arch, Debian y Ubuntu no dejaran iniciar sesión sin una contraseña. Para establecer la contraseña de root inicie sesión con el parámetro y cambie la contraseña:

# systemd-nspawn -D myContainer
# passwd
# logout

Si los comandos de arriba no funcionaron, es posible arrancar el contenedor y ejecutar estos comandos:

# systemd-nspawn -b -D myContainer  # Arranca el contenedor
# machinectl shell root@myContainer /bin/bash  # Obtenga una shell con root
# passwd
# logout

Activar inicio automático de los contenedores

Al usar un contenedor frecuentemente, seria deseable iniciarlo al arrancar el sistema anfitrión.

Active el target , después ejecute systemd-nspawn@myContainer.service, donde es un contenedor de nspawn ubicado en .

Manejo de contenedores

machinectl

El manejo de contenedores es efectuado principalmente con el comando . Vea para más detalles.

Ejemplos:

Inicie una shell dentro de un contenedor que ya ha iniciado:

$ machinectl login MyContainer

Mostrar informacion detallada sobre un contenedor:

$ machinectl status MyContainer

Reinicie un contenedor:

$ machinectl reboot MyContainer

Apague un contenedor:

$ machinectl poweroff MyContainer
Sugerencia: Apagar y reiniciar se pueden ejecutar desde dentro de una sesión del contenedor, ejecutando los comandos de systemctl poweroff o reboot.

Descargar una imagen:

# machinectl pull-tar URL name

Utilidades de systemd

Bastantes de las utilidades de systemd han sido actualizadas para que funcionen con contenedores. Herramientas que generalmente proporcionan un parámetro -M, --machine= tomaran el nombre del contenedor como argumento.

Ejemplos.

Ver el histórico de una maquina especifica:

# journalctl -M MyContainer

Mostrar el contenido del grupo de control:

$ systemd-cgls -M MyContainer

Mostrar el tiempo de arranque del contenedor:

$ systemd-analyze -M MyContainer

Para una perspectiva de los recursos usados:

$ systemd-cgtop
gollark: You can handle overflow in a bunch of different ways.
gollark: So does Rust.
gollark: ... sure?
gollark: If it does NOT wrap in some cases, then you do not want to have it be consistent and not just UB.
gollark: If EVERYTHING just wraps, then this portability is entirely worthless.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.