Gentoo Logo

Cómo Gentoo Linux-VServer

Contenido:

1.  Introducción

El concepto Linux-VServer

El concepto básico de una solución Linux-VServer es dividir el entorno de espacio de usuario en unidades separadas (llamadas a veces Servidores Virtuales Privados, "Virtual Private Servers" en inglés) de tal forma que cada VPS parece y se comporta como un servidor verdadero de cara a los procesos contenidos dentro.

Terminología usada en este Cómo

Término Descripción
Linux-VServer, VServer Linux-VServer es el nombre oficial del proyecto y es usado en este documento de la misma manera
servidor virtual, vserver, sistema huésped, guest Son todos términos intercambiables y se refieren a una instancia de un servidor (es decir, un servidor virtual)
sistema anfitrión, host La máquina física que ejecuta Gentoo Linux y albergará todos los servidores virtuales
util-vserver El paquete util-vserver contiene todos los programas necesarios para mantener los servidores virtuales

2.  Configuración del anfitrión

Instalación del núcleo VServer

Listado de Código 2.1: Instalación de vserver-sources

# emerge vserver-sources

Después de que las vserver-sources se hayan instalado es el momento de configurarlas usando make menuconfig. A continuación se muestra una configuración común para versiones 2.1.1 y posteriores. Si usa 2.0.x algunas opciones de configuración pude que no estén presentes.

Listado de Código 2.2: Configuración de vserver-sources

# cd /usr/src/linux-<KERNELVERSION>-vserver-<VSERVERVERSION>
# make menuconfig

Linux VServer --->
(No habilite las opciones "legacy")
  [ ] Enable Legacy Kernel API
  [ ] Enable Legacy Networking Kernel API
(Lea la ayuda)
  [ ] Remap Source IP Address
  [*] Enable COW Immutable Link Breaking
  [ ] Enable Virtualized Guest Time
  [*] Enable Proc Security
  [*] Enable Hard CPU Limits
  [*]   Avoid idle CPUs by skipping Time
  [*]   Limit the IDLE tas
      Persistent Inode Context Tagging (UID24/GID24)  --->
  [ ] Tag NFSD User Auth and Files
  [*] Enable Inode Tag Propagation
  [*] Honor Privacy Aspects of Guests
  [ ] VServer Debugging Code

Nota: Si utilizamos reiserfs como sistema de ficheros en la partición donde se almacenan las imágenes de loa huéspedes, deberemos habilitar los atributos extendidos de reiserfs en la configuración del núcleo y adicionalmente añadir la opción attrs en /etc/fstab.

Listado de Código 2.3: Configurar las opciones de reiserfs

File systems  --->
  <*> Reiserfs support
  [*]   ReiserFS extended attributes

Listado de Código 2.4: Ejemplo de fstab con atributos extendidos

/dev/hdb1 /vservers reiserfs noatime,attrs 0 0

Después de haber compilado e instalado el núcleo, hay que actualizar el gestor de arranque y finalmente reiniciar para ver si el núcleo arranca correctamente.

Listado de Código 2.5: Instalación del núcleo

(Compilar el núcleo)
# make
(Instalación)
# make modules_install
# cp arch/<arch>/boot/bzImage /boot/kernel-<KERNELVERSION>-vserver-<VSERVERVERSION>
(Editar el fichero de configuración del gestor de arranque como se necesite y)
# reboot

Configuración del entorno del anfitrión

Para mantener los servidores virtuales se necesita el paquete util-vserver que contiene todos los programas necesarios y algunas utilidades prácticas.

Listado de Código 2.6: Instalar util-vserver

# emerge >=sys-cluster/util-vserver-0.30.212

Se debe ejecutar la orden vprocunhide después de cada reinicio para establecer los permisos adecuados en /proc para los huéspedes vserver. util-vserver acaba de instalar dos guiones de inicio que ejecutan la orden vprocunhide y tienen cuidado de los servidores virtuales durante el apagado del anfitrión.

Listado de Código 2.7: Guiones de inicio de util-vserver

# rc-update add vprocunhide default
# /etc/init.d/vprocunhide start
# rc-update add util-vserver default
# /etc/init.d/util-vserver start

3.  Creación de un huésped

Descargar un stage3 precompilado

Puesto que muchas órdenes relacionadas con el hardware no están disponibles dentro de un servidor virtual, se ha parcheado una versión del baselayout llamada baselayout-vserver. Sin embargo, desde baselayout-2/openrc, todos los cambios necesarios se han integrado, eliminado la necesidad de tener stages, perfiles y baselayout de vserver diferentes. Los ficheros tarball de stage se pueden descargar desde nuestros servidores réplica.

Debido a que el stage3 contiene un sistema de ficheros completo, puede utilizar el método de construcción basado en plantillas de util-vserver. Sin embargo, este método solo funciona correctamente desde la versión util-vserver-0.30.213_rc5, por lo tanto, debe asegurarse de que ha instalado la versión correcta.

Hay que elegir un ID de contexto para el vserver (no se aconsejan los IDs de contexto dinámicos) así como la información necesaria para el dispositivo de red (en este ejemplo eth0 se configura con 192.168.1.253/24 y el ID de contexto es igual a las dos últimas partes de la IP de los servidores virtuales).

Nota: El ID de contexto debe ser 1 < ID < 49152.

Uso del método de creación por plantilla

Desde hace mucho tiempo, el único estilo de inicio disponible en gentoo ha sido el estilo de inicio sencillo, es decir un proceso normal de inicio será iniciado dentro del huésped, tal como se hace en cualquier sistema Unix común. Sin embargo, este método tiene algunos inconvenientes:

  • No es posible ver la salida de los guiones init/rc
  • Recursos malgastados para los procesos de inicio idle en cada huésped
  • Molestos conflictos para /etc/inittab

Por lo tanto, muchos usuarios han pedido que se implemente de nuevo el estilo de inicio de Gentoo, que fue abandonado porque suponía una implementación poco limpia y más o menos funcionaba por casualidad debido a otras modificaciones hechas entonces en el baselayout. Sin embargo, desde util-vserver-0.30.21 el estilo de inicio de Gentoo ha sido puesto en práctica de nuevo de una manera concisa y será el predeterminado en el futuro.

Nota: Si no hay una buena razón par usar un proceso de inicio suplementario por cada huésped o si no sabe qué hacer aquí, debería utilizar el estilo de inicio de gentoo.

Listado de Código 3.1: Inicio de la instalación de un stage3

# vserver myguest build \
  --context 1253 \
  --hostname gentoo \
  --interface eth0:192.168.1.253/24 \
  --initstyle gentoo \ (cámbielo si lo necesita)
  -m template -- \
    -d gentoo \
    -t /path/to/stage4-<arch>-<version>.tar.bz2

Nota: Para reflejar la configuración de red se deben cambiar dentro del huésped /etc/conf.d/hostname, /etc/conf.d/domainname y /etc/hosts tal como se necesite. Se puede consultar el capítulo 8.b.1 y el capítulo 8.b.4. El resto de la configuración de red del servidor virtual se hará en el anfitrión.

Deberíamos poder iniciar y entrar en el servidor virtual usando las siguientes órdenes.

Listado de Código 3.2: Probar el servidor virtual

# vserver myguest start

   OpenRC 0.4.3 is starting up Gentoo Linux (x86_64) [VSERVER]

Press I to enter interactive boot mode

* /proc is already mounted, skipping
* Setting hostname to myguest...                     [ ok ]
* Creating user login records...                     [ ok ]
* Cleaning /var/run...                               [ ok ]
* Wiping /tmp directory...                           [ ok ]
* Updating /etc/mtab...                              [ ok ]
* Initializing random number generator...            [ ok ]
* Starting syslog-ng...                              [ ok ]
* Starting fcron...                                  [ ok ]
* Starting Name Service Cache Daemon...              [ ok ]
* Starting local...                                  [ ok ]
# vserver-stat
CTX   PROC    VSZ    RSS  userTIME   sysTIME    UPTIME NAME
0       90   1.4G 153.4K  14m00s11   6m45s17   2h59m59 root server
1252     2     3M   286    0m00s45   0m00s42   0m02s91 myguest
# vserver myguest enter
# ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:04 init [3]
27637 ?        Ss     0:00 /usr/sbin/syslog-ng
27656 ?        Ss     0:00 /usr/sbin/fcron -c /etc/fcron/fcron.conf
27676 ?        Ssl    0:00 /usr/sbin/nscd
27713 ?        S+     0:00 login
27737 pts/15   Ss     0:00 /bin/bash
27832 pts/15   R+     0:00 ps ax
# logout

4.  Mantenimiento sencillo

Arrancar huéspedes al inicio

Podemos arrancar algunos huéspedes durante el inicio. Cada guest puede tener asignada una MARCA (MARK). Entonces, todo lo que hay que hacer es configurar esas MARCAs en la configuración de los huéspedes y añadir los guiones de inicio apropiados al nivel de ejecución default.

Listado de Código 4.1: Configurar las MARCAs en cada huésped

(Hay que hacer esto en cada huésped que se quiera
iniciar)
# mkdir -p /etc/vservers/myguest/apps/init
# echo "default" > /etc/vservers/myguest/apps/init/mark

Listado de Código 4.2: Añadir el guión de inicio al nivel de ejecución default

# rc-update add vservers.default default

Mantener portage sincronizado

El guión vesync nos ayudará a mantener la memoria temporal de metadatos y recubrimiento sincronizada. vemerge es un simple envoltorio para emerge en los huéspedes.

Listado de Código 4.3: Ejemplos

(Sincronizar los metadatos en 'myguest')
# vesync myguest
(Sincronizar los metadatos en todos los huéspedes)
# vesync -all
(Sincronizar 'myoverlay' en todos los huéspedes)
# vesync -all \
  --overlay /usr/local/overlays/myoverlay \
  --overlay-host rsync://rsync.myhost.com/myoverlay \
  --overlay-only
(emerge app-editors/vim en 'myguest')
# vemerge myguest -- app-editors/vim -va

Actualizar huéspedes

Los huéspedes Gentoo pueden compartir paquetes para ahorrar tiempo de compilación. Para usar paquetes compartidos, deberemos crear un directorio centralizado para los paquetes en el anfitrión. Usaremos /var/cache/vpackages en el anfitrión y lo montaremos en cada huésped en /usr/portage/packages.

Listado de Código 4.4: Enlazar la configuración del huésped

# mkdir -p /var/cache/vpackages
# $EDITOR /etc/vservers/myguest/fstab
(Añadiremos esta línea al final)
/var/cache/vpackages /usr/portage/packages none bind,rw 0 0

Ahora utilizaremos vupdateworld para actualizar cada huésped. La orden es equivalente a algo como emerge --deep --update --newuse world.

Listado de Código 4.5: Ejemplos de vupdateworld

(Prueba de actualización para 'myguest')
# vupdateworld myguest -- -vp
(Actualización de 'myguest' usando paquetes binarios)
# vupdateworld myguest -- -k
(Actualización de todos los huéspedes usando paquetes binarios)
# vupdateworld --all -- -k

Nota: Para obtener paquetes binarios podemos usar, tanto PORTAGE_BINHOST (ver man make.conf) o establecer FEATURES="buildpkg" en uno o más huéspedes.

Después de haber actualizado con éxito, podemos actualizar fácilmente todos los archivos de configuración con vdispatch-conf, que es un simple envoltorio para dispatch-conf, comportándose de la misma forma.

Listado de Código 4.6: Ejemplos de vdispatch-conf

(Actualizar los ficheros de configuración de 'myguest')
# vdispatch-conf myguest
(Actualizar los ficheros de configuración de todos los huéspedes)
# vdispatch-conf --all

Contacto

No dude en contactar con el autor o crear un bug en Bugzilla en caso de cualquier problema.



Imprimir

Página actualizada 10 de octubre, 2012

Sumario: En este Cómo aprenderemos a poner en marcha un servidor virtual básico usando la Tecnología Linux-VServer

Benedikt Boehm
Autor

Shyam Mani
Editor

John Christian Stoddart
Traductor

José Luis Rivero
Traductor

Carles Ferrer Peris
Traductor

José María Alonso
Traductor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.