Últimamente he tenido que montar un par de servidores de terminales. Así que, por si se me olvida lo que he hecho, que se me olvidará... voy a escribir este artículo, y si tengo que volver a hacerlo ya tengo un punto de partida.
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.
Si usamos nfs para servir la imagen a nuestros terminales, instalaremos además:
Y si nuestros terminales reciben la imagen via nbd, instalaremos el paquete:
Se necesitan algunos paquetes más, pero como son dependencias, al instalar los paquetes que hemos dicho, se instalarán todos los demás que son necesarios.
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-standaloneEn 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/ltspEn 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 -raEl 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 i386Eso 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.
Podemos ver ejemplos de configuración en
/usr/share/doc/ltsp-clientSi quisiéramos
actualizar los paquetes del entorno chroot para los clientes, primero hacemos el chroot:
# chroot /opt/ltsp/i386Ahora que estamos en el entorno chroot de los terminales, ejecutamos:
# mount -t proc proc /procActualizamos la lista de paquetes:
# apt-get updateY actualizamos los paquetes:
# apt-get upgradeUna vez terminada la actualización del chroot, desmontamos /proc:
# umount /procY 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-kernelsTodos 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
La primera vez que montemos el servidor de terminales, ejecutaremos:
# ltsp-update-sshkeysComo 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:
Para ello, 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 updateE 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-686Ojo. 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 /procY 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
En el fichero
/opt/ltsp/i386/boot/pxelinux.cfg/default viene una línea como la siguiente: DEFAULT vmlinuz ro initrd=initrd.img quiet root=/dev/nfs ip=dhcp boot=nfs
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 nbdDEFAULT vmlinuz ro initrd=initrd.img quietCuando 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-setupEn 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-kernelsY como usamos nbd, una vez hecho el ltsp-update-kernels haremos el ltsp-update-image:
# ltsp-update-image --arch i386Si 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.