Una vez que tenemos instalado y actualizado FreeBSD 9 el siguiente paso es dotarlo de aplicaciones para convertirlo en un sistema útil.
En los últimos años, he estado trabajando con sistemas bajo Solaris 10, donde los servicios que tenía en producción estaban encapsulados en Solaris Containers. Dado mi reciente interés en FreeBSD resulta natural que intente reproducir un ambiente de ejecución similar, que tan buenos resultados me brindó en el pasado.
Por otra parte, me parece interesante la posibilidad de incluir la capacidad de ejecutar aplicaciones Linux y tener una jaula -jail- específicamente diseñada para tal fin.
En este caso, en vez de instalar en una Jaula el userland propio de FreeBSD, vamos a instalar Debian GNU/kFreeBSD, que proporciona un userland alternativo para el kernel de FreeBSD.
Creando nuestra Jaula
1.- Instalamos la herramienta Debootstrap, que instala Debian en subdirectorio dentro de otro sistema.root@morsa:/root # portsnap fetch update2.- Definimos el sistema de ficheros donde vamos a instalar la Jaula.
root@morsa:/root # portmaster sysutils/debootstrap
root@morsa:/root # zfs create -o mountpoint=/jailz fbsdzpool1/jailz3.- Cargamos los módulos necesarios para la compatibilidad binaria con Linux.
root@morsa:/root # zfs create fbsdzpool1/jailz/deb-master
root@morsa:/root # mkdir /jailz/etc
root@morsa:/root # kldload fdescfs linprocfs linsysfs tmpfs4.-Instalamos squeeze Debian en la ruta de la Jaula.
root@morsa:/root # debootstrap squeeze /jailz/deb-master http://cdn.debian.net/debian
I: Retrieving Release5.- Creamos una tabla con los puntos de montaje para la Jaula, en /jailz/etc/fstab.deb-master:
W: Cannot check Release signature; keyring file not available /usr/share/keyring
s/debian-archive-keyring.gpg
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional required dependencies: insserv libbsd0 libbz2-1.0 libcam0 li
bdb4.8 libedit2 libexpat1 libgeom0 libkiconv4 libkvm0 libsbuf0 libslang2 ufsutils
I: Found additional base dependencies: libipx2 libmemstat3 libnetgraph4 libsqlite3-0
I: Checking component main on http://cdn.debian.net/debian...
I: Retrieving libacl1 2.2.49-4
.........
I: Configuring gnupg...
I: Configuring debian-archive-keyring...
I: Configuring apt...
I: Configuring libept1...
I: Configuring apt-utils...
I: Configuring aptitude...
I: Configuring tasksel-data...
I: Configuring tasksel...
I: Base system installed successfully.
//Comienza el Fichero /jailz/etc/fstab.deb-master
linsys /jailz/deb-master/sys linsysfs rw 0 0//fin del Fichero /jailz/etc/fstab.deb-master
linproc /jailz/deb-master/proc linprocfs rw 0 0
tmpfs /jailz/deb-master/lib/init/rw tmpfs rw,mode=777 0 0
6.- Habilitamos las Jaulas.
root@morsa:/root # echo 'jail_enable="YES"' >> /etc/rc.conf7.- En el fichero de configuración /jailz/etc/jail.conf incluimos la entrada:
//Comienza fragmento
deb-master {//Fin de fragmento
path = /jailz/deb-master;
allow.mount;
mount.devfs;
host.hostname = deb-master;
mount.fstab="/jailz/etc/fstab.deb-master";
ip4.addr = 127.0.0.10;
interface = lo0;
exec.start = "/etc/init.d/rc 3";
exec.stop = "/etc/init.d/rc 0";
}
7.- Iniciamos la Jaula, comprobamos que está arrancada y nos conectamos a ella.
root@morsa:/root # jail -f /jailz/etc/jail.conf -c deb-master
deb-master: created
Using makefile-style concurrent boot in runlevel 3.
Starting enhanced syslogd: rsyslogdln: creating symbolic link `/dev/xconsole': Operation not permitted.
Starting periodic command scheduler: cron.
root@morsa:/root # jls
JID IP Address Hostname Path
1 127.0.0.10 deb-master /jailz/deb-master
root@morsa:/root # jexec 1 /bin/bash7.- Paramos la Jaula.
root@deb-master:/# uname -a
GNU/kFreeBSD deb-master 9.1-RELEASE-p4 FreeBSD 9.1-RELEASE-p4 #0: Mon Jun 17 11:
42:37 UTC 2013 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENER
IC x86_64 amd64 Intel(R) Pentium(R) CPU B960 @ 2.20GHz GNU/kFreeBSD
root@morsa:/root # jail -f /jailz/etc/jail.conf -r deb-master
Using makefile-style concurrent boot in runlevel 0.
Stopping device state change daemon: devd.
Asking all remaining processes to terminate...done.
All processes ended within 1 seconds....done.
Stopping enhanced syslogd: rsyslogd.
/etc/init.d/umountnfs.sh: 106: cannot open /etc/mtab: No such file
Deconfiguring network interfaces...done.
Cleaning up ifupdown....done.
Deactivating swap...done.8.- Hacemos un snapshot de la Jaula recién instalada.
mount: /: unknown special file or file system
Will now halt.
ifdown: shutdown usbus0: Operation not permitted
ifdown: shutdown ath0: Operation not permitted
ifdown: shutdown usbus1: Operation not permitted
ifdown: shutdown lo0: Operation not permitted
ifdown: shutdown wlan0: Operation not permitted
startpar: service(s) returned failure: umountnfs.sh ... failed!
deb-master: removed
root@morsa:/root # zfs snapshot fbsdzpool1/jailz/deb-master@squeeze
Ahora, disponemos de una Jaula Master, desde la que podemos generar nuevas jaulas a partir de clones de ZFS, después añadimos una nueva entrada a /jailz/jail.conf con el correspondiente fichero /jailz/etc/fstab.newjail.
# zfs clone fbsdzpool1/jailz/deb-master@sequeeze fbsdzpool1/jailz/newjail
Sobre esas Jaulas clonadas, podemos comenzar a instalar aplicaciones suministradas por repositorios de debian pero su formato elf no es el de linux, sino el de freebsd.
Consideraciones Finales
En este entorno de pruebas hemos definido el sistema de ficheros para la jaula en el Root Pool. En un entorno de producción lo recomendable sería tener un Pool diferente, en otro disco, o conjunto de discos, que sean distintos a los discos de sistema.Otro aspecto que podemos mejorar es la configuración de la red, donde se puede utilizar dispositivos de red virtual, en vez de IP alias.
Falta por implementar la gestión de recursos mediante rctl.
He reservado la ruta /usr/jail como ruta para las Jaulas que se pueden crear a partir de un BE generado con beadm. Este tipo de jaulas se utilizan para testear actualizaciones de Sistema y, posteriormente, ponerlas en producción si las pruebas son satisfactorias.
No hay comentarios:
Publicar un comentario
Vuestros comentarios son bien recibidos, os animo a contribuir proponiendo temas que os interesen para desarrollar en este blog.