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 kernel |
# 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 el comando 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 el comando 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 muchos comandos relacionados 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,
eliminando la necesidad de stages, perfiles y baselayout de vserver
separados. El único (temporalmente) inconveniente es que
baselayout-2/openrc todavía está en etapa de prueba (~arch) y aún no
se encuentran stages con baselayout-2/openrc en los servidores espejo.
Tan pronto baselayout-2/openrc se considere estable, puede usar un
stage3 precompilado de uno de nuestros servidores espejo. Mientras tanto,
por favor descarge un fichero stage3 o gentoo-vserver de aquí.
Puesto que un stage3 contiene un sistema de ficheros root completo,
puede usar el método de creación por plantilla de util-vserver. Sin
embargo, este método sólo funciona de forma segura desde
util-vserver-0.30.213_rc5, por tanto asegúrese de tener instalada 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 reimplementar 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 los
siguientes comandos.
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. El comando 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 logo y nombre de Gentoo.
|