No voy a entrar, de momento, en detalles sobre como instalar un servidor dhcp, que es necesario para dar ip a los terminales. Ya lo haré cuando tenga un poco más de tiempo.
LTSP (Linux Terminal Server Project) es un proyecto que nos proporciona un conjunto aplicaciones que nos permitirán conectar muchos equipos con pocos recursos a un servidor Linux. Estos equipos serán clientes ligeros del servidor.
Las aplicaciones que ejecutemos en los clientes correrán directamente en el servidor, que aceptará entradas y mostrará su salida en las pantallas de los clientes ligeros. No obstante, LTSP, en su versión 5, dispone de una herramienta experimental, llamada localapps que nos permite hacer que algunas aplicaciones se ejecuten en el cliente.
Para montar un servidor de terminales, tendremos que instalar los siguientes paquetes, como mínimo:
- ltsp-server
- Un servidor tftp, como por ejemplo: atftp.
- Un servidor dhcp: como dhcp3-server o dnsmasq. En nuestros centros usamos dhcp3-server-ldap porque usamos ldap como backend para almacenar los datos.
- nfs-kernel-server
- nbd-server
Un paquete necesario, que se me olvidaba mencionar, es openssh-server, dado que el tráfico entre el servidor y los clientes viaja encriptado. Pero bueno, es un paquete que se suele tener instalado.
En cualquier caso, si no queremos instalar uno a uno los paquetes mencionados, siempre podemos instalar el paquete ltsp-server-standalone y se instalará todo lo necesario para montar un servidor de terminales:
# apt-get install ltsp-server-standalone
En nuestros centros las imágenes se sirven mediante nbd. Yo tengo instalados tanto nfs-kernel-server como nbd-server. Y con unos pequeños cambios puedo usar un sistema u otro. Por defecto, se usa nfs, así que, luego veremos cómo cambiar a nbd.
ltsp se instala en /opt. Por lo que, al terminar la instalación, tendremos el siguiente directorio: /opt/ltsp
En este directorio se guardará tanto el sistema que compartimos por nfs como las imágenes que servimos vía nbd.
Cuando creemos las imágenes para los clientes, tendremos un subdirectorio por cada tipo de imagen que sirvamos a los terminales. Por ejemplo, si vamos a servir imágenes i386, en /opt/ltsp tendremos un directorio /opt/ltsp/i386. En cuanto a las imágenes a servir por nbd, se almacenarán en /opt/ltsp/images.
Una vez instalados los paquetes, si usamos nfs, tendremos que compartir el directorio /opt/ltsp. Ésto lo haremos añadiendo la siguiente línea al directorio /etc/exports del servidor de terminales:
/opt/ltsp *(ro,no_root_squash,async)
Una vez añadida, hacemos que el servidor nfs relea el archivo /etc/exports ejecuntando en un terminal el comando:
# exportfs -ra
El siguiente paso, será configurar el servidor dhcp que hayamos instalado. De momento, como he dicho anteriormente, no voy entrar en detalles, y, cuando tenga más tiempo, por si a alguien le interesa, publicaré un artículo más detallado explicando cómo configurar dhcp3-server o dnsmasq. En cualquier caso, podemos ver ejemplos sobre cómo configurar dhcp en /usr/share/doc/ltsp-server/examples/dhcpd.conf o /etc/ltsp/dhcpd.conf y adaptarlos a nuestra red.
El siguiente paso, será crear el S.O. para los clientes. Como mis clientes son de arquitectura i386, ejecutamos la herramienta ltsp-build-client, que creará el entorno necesario para los clientes en /opt/ltsp/i386:
# ltsp-build-client --arch i386
Eso sí. Tendremos que tener un buen ancho de banda, porque se bajará un montón de paquetes para crear el entorno chroot. Si no disponemos de un buen ancho de banda, siempre podemos tirar de un mirror local. Yo tengo un mirror local en un disco duro externo y es lo que uso para crear el chroot.
Hay dos archivos en el chroot que nos permiten personalizar el cliente:
- /etc/lts.conf
- /etc/default/ltsp-client-setup.
Si quisiéramos actualizar los paquetes del entorno chroot para los clientes, primero hacemos el chroot:
# chroot /opt/ltsp/i386
Ahora que estamos en el entorno chroot de los terminales, ejecutamos:
# mount -t proc proc /proc
Actualizamos la lista de paquetes:
# apt-get update
Y actualizamos los paquetes:
# apt-get upgrade
Una vez terminada la actualización del chroot, desmontamos /proc:
# umount /proc
Y tecleamos el comando exit para salir del chroot.
Si nuestro kernel ha sido actualizado, tendremos que ejecutar el comando ltsp-update-kernels para asegurarnos de que nuestro chroot use la última versión:
# ltsp-update-kernels
Todos nuestros clientes usarán el último kernel la próxima vez que se reinicien.
Por último, si estamos usando nbd, ejecutaremos ltsp-update-image para que se cree una versión actualizada de la imagen que se servirá a los terminales:
# ltsp-update-image --arch i386
# ltsp-update-sshkeys
Como el servidor de terminales se comunica con los clientes mediante un canal encriptado, la primera vez es necesario que se creen los certificados SSL. Sin la ejecución de este comando ningún cliente podrá hacer login en el servidor.
También tendremos que ejecutar ltsp-update-sshkeys cuando en el cliente intentemos hacer login y recibamos un error diciéndonos algo así como que "Este esquipo no está autorizado para conectarse al servidor".
Eso sí. Es importante que cuando tengamos que hacer un ltsp-update-sshkeys, primero ejecutemos un ltsp-update-sshkeys y seguidamente hagamos un ltsp-update-image. Y no al revés. También habrá que hacerlo cuando, por lo que sea, cambiemos la IP del servidor de terminales.
Qué usar: ¿nfs o nbd?
En Debian, por defecto, se usa nfs para servir el sistema a los terminales.
La ventaja que tiene usar nfs es que no es necesario crear una imagen. Se usa directamente el sistema montado en /opt/ltsp/i386.
Como desventaja, podemos decir que a mayor número de usuarios el sistema se ralentiza.
Si usamos nbd para servir el sistema a los terminales, la desventaja es que es necesario hacer una imagen comprimida (ltsp-update-image).
La ventaja está en que a mayor número de usuarios el sistema no se hace más lento, si no que se mantiene igual.
¿Cómo cambiar de nfs a nbd?
Primero.- Para usar nbd, lo primero que tenemos que hacer es instalar dos módulos en el chroot:
- squashfs
- aufs
# chroot /opt/ltsp/i386
Ahora que estamos en el entorno chroot de los terminales, ejecutamos:
# mount -t proc proc /proc
Actualizamos la lista de paquetes:
# apt-get update
E instalamos los paquetes que nos instalan los módulos squashfs y aufs:
# apt-get install squashfs-modules-2.6.26-1-686 aufs-modules-2.6.26-1-686
Ojo. En el ejemplo tenemos instalado el kernel 2.6.26-1-686, por lo que instalamos los paquetes squashfs y aufs para ese módulo.
Una vez instalados, actualizamos el initrd:
# update-initramfs
Una vez terminado, desmontamos /proc:
# umount /proc
Y tecleamos el comando exit para salir del chroot.
Segundo.- Vamos a modificar dos ficheros:
- /opt/ltsp/i386/boot/pxelinux.cfg/default
- /opt/ltsp/i386/etc/default/ltsp-client-setup
Para que no se use nfs, la comentamos y ponemos una como la siguiente:
DEFAULT vmlinuz ro initrd=initrd.img quiet
Para no tener que acordarme, así es como tengo el fichero /opt/ltsp/i386/boot/pxelinux.cfg/default:
# Para usar nfs
#DEFAULT vmlinuz ro initrd=initrd.img quiet root=/dev/nfs ip=dhcp boot=nfs
# Para usar nbd
DEFAULT vmlinuz ro initrd=initrd.img quiet
Cuando quiero usar nbd comento la línea nfs y cuando quiero usar nfs comento la línea nbd
Una vez modificado el primer fichero, tenemos que modificar /opt/ltsp/i386/etc/default/ltsp-client-setup
En este segundo fichero lo único que tenemos que cambiar es el parámetro root-write-method=" " por root-write-method="aufs"
Una vez modificados los dos ficheros, como el primero afecta al kernel, ejecutamos un ltsp-update-kernels:
# ltsp-update-kernels
Y como usamos nbd, una vez hecho el ltsp-update-kernels haremos el ltsp-update-image:
# ltsp-update-image --arch i386
Si queremos volver a usar nfs, lo único que tendremos que hacer es modificar los dos ficheros anteriores. No tenemos que volver a crear la imagen, puesto que, mediante nfs, no se usan imágenes.