Cómo Gentoo Linux-VServer
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 --->
[ ] Enable Legacy Kernel API
[ ] Enable Legacy Networking Kernel API
[ ] 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 |
# make
# make modules_install
# cp arch/<arch>/boot/bzImage /boot/kernel-<KERNELVERSION>-vserver-<VSERVERVERSION>
# 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 \
-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 |
# 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 |
# vesync myguest
# vesync -all
# vesync -all \
--overlay /usr/local/overlays/myoverlay \
--overlay-host rsync://rsync.myhost.com/myoverlay \
--overlay-only
# 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
/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 |
# vupdateworld myguest -- -vp
# vupdateworld myguest -- -k
# 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 |
# vdispatch-conf myguest
# vdispatch-conf --all
|
Contacto
No dude en contactar con el autor o crear un bug en Bugzilla en caso de cualquier
problema.
El contenido de este documento, a no ser que se especifique
expresamente, está registrado bajo los términos de la licencia
CC-BY-SA-2.5. Se aplican las
Pautas de
Utilización del logotipo y nombre de Gentoo.
|