UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

211 lines (124 loc) 10.3 kB
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 ```