arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
211 lines (124 loc) • 10.3 kB
Markdown
Related articles
* [systemd (Español)](/index.php/Systemd_(Espa%C3%B1ol) "Systemd (Español)")
* [Linux Containers](/index.php/Linux_Containers "Linux Containers")
* [systemd-networkd (Español)](/index.php/Systemd-networkd_(Espa%C3%B1ol) "Systemd-networkd (Español)")
* [Docker](/index.php/Docker "Docker")
* [Lxc-systemd](/index.php/Lxc-systemd "Lxc-systemd")
*systemd-nspawn* es parecido al comando [chroot](/index.php/Change_root_(Espa%C3%B1ol) "Change root (Español)"), pero es un *chroot en esteroides*.
*systemd-nspawn* puede ser usado para ejecutar un comando o un sistema operativo en contenedor de *namespace* muy ligero. Es mas poderoso que [chroot](/index.php/Change_root_(Espa%C3%B1ol) "Change root (Español)") 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`, `/proc/sys` o `/sys/fs/selinux` 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-systemd](/index.php/Lxc-systemd "Lxc-systemd") o [Libvirt](/index.php/Libvirt "Libvirt")-lxc, ya que es una herramienta mucho mas fácil de configurar.
## Contents
* [1 Instalación](#Instalaci.C3.B3n)
* [2 Ejemplos](#Ejemplos)
* [2.1 Crear e iniciar Arch Linux en un contenedor](#Crear_e_iniciar_Arch_Linux_en_un_contenedor)
* [2.1.1 Crear un Arch Linux i686 dentro de un anfitrión x86_64](#Crear_un_Arch_Linux_i686_dentro_de_un_anfitri.C3.B3n_x86_64)
* [2.2 Crear un ambiente Debian o Ubuntu](#Crear_un_ambiente_Debian_o_Ubuntu)
* [2.3 Activar inicio automático de los contenedores](#Activar_inicio_autom.C3.A1tico_de_los_contenedores)
* [3 Manejo de contenedores](#Manejo_de_contenedores)
* [3.1 machinectl](#machinectl)
* [3.2 Utilidades de systemd](#Utilidades_de_systemd)
## Instalación
*systemd-nspawn* es parte y viene empaquetado con [systemd](https://www.archlinux.org/packages/?name=systemd).
## Ejemplos
### Crear e iniciar Arch Linux en un contenedor
En primer lugar [instale](/index.php/Help:Reading_(Espa%C3%B1ol)#Instalaci.C3.B3n_de_paquetes "Help:Reading (Español)") [arch-install-scripts](https://www.archlinux.org/packages/?name=arch-install-scripts).
Cree un directorio para mantener el contenedor. En este ejemplo se usará `~/MyContainer`.
Use *pacstrap* para instalar un sistema básico de arch dentro del contenedor. Como mínimo es necesario instalar el grupo de paquetes [base](https://www.archlinux.org/groups/x86_64/base/).
```
# pacstrap -i -c -d ~/MyContainer base [pkgs/grupos adicionales]
```
**Tip:** 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](/index.php/Pacman_(Espa%C3%B1ol)#Utilizaci.C3.B3n "Pacman (Español)").
**Nota:** El paquete [linux-firmware](https://www.archlinux.org/packages/?name=linux-firmware) requerido por [linux](https://www.archlinux.org/packages/?name=linux), que esta incluido en el grupo de paquetes [base](https://www.archlinux.org/groups/x86_64/base/) no es necesario para ejecutar el contenedor. Este causa algunos problemas con `systemd-tmpfiles-setup.service` durante el arranque del contenedor con `systemd-nspawn`. Es posible instalar el grupo [base](https://www.archlinux.org/groups/x86_64/base/) excluyendo el paquete [linux](https://www.archlinux.org/packages/?name=linux) y sus dependecias al construir el contenedor con `# pacstrap -i -c -d ~/MyContainer base --ignore linux [additional pkgs/groups]`. El parámetro `--ignore` es pasado a [pacman](https://www.archlinux.org/packages/?name=pacman). Vea [FS#46591](https://bugs.archlinux.org/task/46591) para más información.
Cuando la instalación ha finalizado, arranque el contenedor ejecutando:
```
# systemd-nspawn -b -D ~/MyContainer
```
El parámetro `-b` arranca el contenedor (v.g. ejecuta `systemd` 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 `poweroff` desde dentro del contenedor. Desde el sistema anfitrión, los contenedores se pueden controlar con la herramienta [machinectl](#machinectl).
**Nota:** Para terminar la *sesión* estando dentro del contenedor, oprima `Ctrl` y rápidamente presione `]` tres veces. Teclados con disposición diferente a US, deben usar `%` en lugar de `]`.
#### 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](/index.php/Change_root_(Espa%C3%B1ol) "Change root (Español)") o [virtualización](/index.php/Virtualization "Virtualization"). Esto es útil para examinar la compilación de `PKGBUILD` en un sistema de i686\. Este seguro de usar `pacman.conf` **sin** el repositorio `multilib`.
```
# 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 `linux` 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](/index.php/Help:Reading_(Espa%C3%B1ol)#Instalaci.C3.B3n_de_paquetes "Help:Reading (Español)") [debootstrap](https://www.archlinux.org/packages/?name=debootstrap), [gnupg1](https://aur.archlinux.org/packages/gnupg1/), y uno de estos paquetes: [debian-archive-keyring](https://www.archlinux.org/packages/?name=debian-archive-keyring) o [ubuntu-keyring](https://www.archlinux.org/packages/?name=ubuntu-keyring) (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 `/usr/share/debootstrap/scripts`.
En caso de una imagen de Debian la "url-repositorio" puede ser `[http://deb.debian.org/debian/](http://deb.debian.org/debian/)`. Para Ubuntu la "url-repositorio" puede ser `[http://archive.ubuntu.com/ubuntu/](http://archive.ubuntu.com/ubuntu/)`.
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 `-b` 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](/index.php/Systemd_(Espa%C3%B1ol)#Usar_las_unidades "Systemd (Español)") el target `machines.target`, después ejecute `systemd-nspawn@*myContainer*.service`, donde `myContainer` es un contenedor de nspawn ubicado en `/var/lib/machines`.
**Tip:** Para personalizar el arranque de los contenedores, edite `/etc/systemd/nspawn/*myContainer*.nspawn`. Vea [systemd.nspawn(5)](https://jlk.fjfi.cvut.cz/arch/manpages/man/systemd.nspawn.5) para todas las opciones.
## Manejo de contenedores
### machinectl
**Nota:** La herramienta *machinectl* requiere [systemd](/index.php/Systemd_(Espa%C3%B1ol) "Systemd (Español)") y que el paquete [dbus](https://www.archlinux.org/packages/?name=dbus) este instalado en el contenedor. Vea [[1]](https://github.com/systemd/systemd/issues/685) para más detalles en la discusión.
El manejo de contenedores es efectuado principalmente con el comando `machinectl`. Vea [machinectl(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/machinectl.1) 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*
```
**Tip:** 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
```