Anexo:Servidor de Clientes Ligeros en GNU/Linux con Diskless Booting

Implementacion de Clientes Ligeros en Servidores GNU/Linux
Información sobre la plantilla
Cliente Liviano.jpg
Manual para la implementación de Clientes Ligeros en Servidores GNU/Linux
Cliente.jpg
CreadorMSc. Wilder González Díaz.
DesarrolladorCarlos Miguel Bustillo Rodríguez y Luis Armando Roca Fumero
Fecha de Creación2011
Plataformas soportadasLibre
IdiomaEspañol

Introducción

El presente manual fue realizado en la Universidad Central "Marta Abreu" de las Villas (UCLV) por el profesor MSc. Wilder González Díaz; luego ampliado y modificado por los estudiantes de 4to año de Telecomunicaciones y Electrónica de dicho centro de altos estudios: Carlos Miguel Bustillo Rodríguez y Luis Armando Roca Fumero. Es una guía para el administrador y es un complemento del trabajo presentado en el Evento Internacional CIE2011, que lleva dicho nombre.

El manual aborda la implementación de un servidor de Clientes Ligeros (Diskless) sobre los Sistemas Operativos Debian 5.0.8 (Lenny) y Ubuntu Server Lucid (10.04.2 LTS). Todas las configuraciones que se muestren a continuación, así como los paquetes empleados son válidas en ambos S.O. Es recomendable antes de proceder a realizar lo explicado en el material, leer detenidamente cada uno de los pasos que se van a emplear así como las variantes que existen.

Nuestra implementación...

Cliente1.jpg

Esta implementación se basa en Diskeless Remote Boot on Linux (DRBL). El proyecto DRBL sólo utiliza el servidor para almacenar el sistema de archivos y todas las aplicaciones se corren sobre la estación cliente. Los clientes acceden completamente a su hardware local y emplea recursos de hardware distribuido lo que hace posible emplear un servidor poco potente. Tenga presenta que esta es una variante de DRBL o sea toma el principio y funcionamiento de dicho proyecto; ya que este cuenta con sus propios scripts de configuración.

Funcionamiento

Esta implementación se basa en una serie de servicios o demonios que se deben correr sobre una estación servidor. Primeramente el servicio DHCP [[Dynamic Host Configuration Protocol]] se encarga de identificar a la estación cliente y le asigna la configuración de red para la subred a la que pertenece; luego mediante un servidor TFTP Trivial File Transfer Protocol se exporta la imagen PXE que permite la detección en el cliente del menú de los Sistemas Operativos disponibles o el arranque directo de un solo sistema. El sistema operativo en sí es exportado mediante el servicio nfs-kernel-server hacia el cliente que hace la solicitud. Todos los servicios del sistema exportado son corridos en la estación cliente lo que hace que en el servidor no se consuman demasiados recursos.

Requerimientos Generales

  1. Sistema Operativo Debian/Ubuntu con un servidor NFS preferiblemente nfs-kernel-server.
  2. Un servidor TFTP, se recomienda atftpd.
  3. Un servidor DHCP con soporte PXE, se recomienda dhcp3-server.
  4. Un servidor DNS integrable con DHCP, se recomienda Bind9. (Opcional)
  5. Suficiente espacio en el servidor para alojar los Sistema Operativos de los Clientes, así como la información de los usuarios. (cada sistema de archivos se puede llevar de 2 a 4 GB)
  6. Una Red de 10/100Mbps. (Fast Ethernet)
  7. Los clientes deben soportar arranque por red (Boot on LAN).
  8. Conocimientos sobre S.O GNU/Linux.

Requrimientos mínimos del Servidor

  • Memoria RAM: 512 MB
  • Procesador: Intel Celeron P4 4.0 GHZ
  • HDD: 20 GB (incluso pudieran ser 10 GB, en dependencia de la cantidad de S.O para los Clientes)
  • Tarjeta de Red: Fast Ethernet (10/100 Mbps)
Nota

Con 1 GB de RAM y un procesador Intel Dual Core 2.0 GHZ se pueden llegar a conectar 20 Clientes Ligeros. Para cinco clientes y un poco más basta con los requerimientos mínimos. Cada cliente consume pocos Mega Bytes de RAM (alrededor de 4 MB) en el servidor, el mayor consumo está dado durante el arranque de los S.O de las PCs clientes; luego la carga se normaliza.


Requerimientos minimos de los clientes

  • Memoria RAM: 256 MB
  • Procesador: Intel Celeron 1.33 GHz
  • Tarjeta de Red: Fast Ethernet (10/100 Mbps)
Nota

Para los clientes es suficiente con las PCs marca Hanel vendidas por Copextel S.A para estos fines, los requerimientos de hardware mostrados anteriormente están basados en dichas PCs.

INSTALACIÓN Y CONFIGURACIÓN DE LOS SERVICIOS

El servicio DHCP

Está basado en un protocolo que permite a dispositivos individuales en una red de direcciones IP obtener su propia información de configuración de red (dirección IP; máscara de sub-red, puerta de enlace, etc.) a partir de un servidor DHCP

Instalación

sudo apt-get install dhcp3-server

Configuración

En caso de que el servidor posea dos interfaces de red se debe especificar por cual interfaz se encontrará escuchando peticiones, esto es una buena medida de seguridad pues en muchos casos eth0 correspondería a una subred externa (WAN) y eth1 a nuestra subred ocal (LAN). Para ello edite el fichero de configuración: /etc/default/dhcp3-server.

Localice la línea que dice INTERFACES="" coloque dentro de las "" la interfaz por la que va a servir como servidor DHCP por ejemplo: INTERFACES="eth1"

Para configurar el dhcp3-server edite el fichero: /etc/dhcp3/dhcpd.conf

Configuración del DHCP

En esta imagen se muestra como debe quedar el archivo antes mensionado que le permite al servidor DHCP el arranque por red con las opciones: allow bootp y allow booting. Luego le siguen una serie de parámetros que definen la subred en la que estamos trabajando. La configuración de las directivas PXE empieza en group donde use-host-decl-name on permite declarar como hostname del cliente el nombre dado en la etiqueta host; next-server 10.12.57.60 se refiere a la dirección IP del servidor TFTP, se recomienda que estén en la misma PC; filename “pxelinux.0” indica el fichero binario que permitirá el arranque por red. La línea host Cliente-1 indica que se ha declarado una PC llamada Cliente-1 para que inicie por red con una dirección MAC (hardware ethernet 00:16:76:C0:8D:FA;) y una dirección IP (fixed-address 10.12.57.45;). Usted puede copiar la etiqueta host completa y sustituir cada uno de los parámetros explicados anteriormente para agregar más equipos clientes.

Una vez configurado, se inicia el servicio para actualizar los cambios:

sudo /etc/init.d/dhcp3-server start

El servicio hay que iniciarlo por primera vez porque al instalarse él trata de iniciarse por sí solo y al no estar bien configurado falla el arranque.

Para reiniciar el servicio:

sudo /etc/init.d/dhcp3-server restart

Para parar el servicio:

sudo /etc/init.d/dhcp3-server stop

El servicio TFTP

Consiste en un servidor TFTP, que se recomienda que se encuentre en la misma PC donde está el servidor DCHP. En esta sección se explicará además cómo utilizar los ficheros que nos brinda el paquete syslinux ya que estos permiten el arranque por red. El servicio TFTP se encargará de exportar la imagen de arranque PXE, en este caso pxelinux.0 como se definió anteriormente en la configuración del DCHP.

Existen varios servidores TFTP como atftpd y tftpd-hpa, recomendamos trabajar con el primero, ya que el segundo presentó problemas de estabilidad. El directorio de trabajo predeterminado para ambos demonios es: /var/lib/tftpboot. Este se puede cambiar pero trabajaremos con el que viene por defecto para respetar la jerarquía y distribución de archivos de los sistemas Debian y derivados.

Instalación

sudo apt-get install atftpd syslinux

Primero que todo desactivar el servicio atftpd por inetd, pues esto trae algunos problemas:

sudo update-inetd --disable atftpd

Configuración

Editar el archivo /etc/default/atftpd y especificamos las opciones para el arranque del servicio:

USE_INETD=false
OPTIONS="--daemon --port 69 --retry-timeout 5 --mcast-port 1758 --mcast-addr 10.12.57.0-
255 --mcast-ttl 1 --maxthread 100 --verbose=5 /var/lib/tftpboot"

En dicho archivo de configuración se ha desactivado el uso por inetd; se activado el servicio como demonio por el puerto 69; se definió la subred de trabajo mediante --mcast-adddr 10.12.57.0-255 y finalmente se observa el directorio de trabajo del servidor TFPT:/var/lib/tftpboot

Una vez hecho los cambios reiniciar el servicio atftpd:

sudo /etc/init.d/atftpd restart

Comprobando que funciona el servidor TFTP

Para comprobar si el servicio está corriendo teclear lo siguiente:

sudo ps aux | grep atftpd

Luego saldrá algo como lo siguiente, observe como se ven los parámetros establecidos en el fichero /etc/default/atftp

nobody   2252 0.0 0.1   2320 688 ?  Ss  00:49 0:00 /usr/sbin/atftpd --
daemon --port 69 --retry-timeout 5 --mcast-port 1758 --mcast-addr 10.12.57.0-255 --
mcast-ttl 1 --maxthread 100 --verbose=5 /var/lib/tftpboot
root     2418 0.0 0.1     3120    708 pts/1    R+    00:54    0:00 grep tftpd

Para ver si está en modo de escucha:

sudo netstat -plun | grep atftpd

Observe como se encuentra escuchando por el puerto 69:

udp    0    0 0.0.0.0:69    0.0.0.0:*    2252/atftpd

Nota: El número del final puede variar. En caso de que no se muestre lo anterior, reinicie el servidor.

El directorio /var/lib/tftpboot

En dicho directorio se pondrán todos los kernel y ficheros initrd que se deseen arrancar por red, por ejemplo: se quiere montar un Xubuntu para los clientes:

sudo mkdir /var/lib/tftpboot/Xubuntu

En la sección Creando el kernel y especificando el fichero PXE para arranque por red, se explica con más detalles el trabajo del directorio /var/lib/tftpboot

El servicio NFS

NFS, acrónimo de Network File System, es un popular protocolo utilizado para compartir volúmenes entre máquinas dentro de una red de manera transparente, más comúnmente utilizado entre sistemas basados sobre UNIX.

Instalación

sudo apt-get install nfs-kernel-server

Configuración

Creamos el directorio donde almacenaremos el sistema de archivos para el cliente (tomando en cuenta que se quiere montar Xubuntu)

sudo mkdir /srv/Xubuntu

Editamos el archivo /etc/exports y adicionamos el directorio creado para que sea accedido remotamente:

/srv/Xubuntu  10.12.57.0/24(rw,async,no_root_squash,no_subtree_check)

Con lo anterior se le ha dado acceso a todos las PCs de la subred 10.12.57.0/24 de lectura escritura (rw); (async) mejora el rendimiento y agiliza el funcionamiento en el servidor; se le permite acceso al root por sistema remoto (no_root_squash); la opción (no_subtree_check) permite que no se compruebe el camino hasta el directorio que se exporta, en el caso de que el usuario no tenga permisos sobre el directorio exportado. Usted puede cambiar rw por ro para activar el modo solo lectura una vez que haya terminado de instalar por completo el sistema operativo. En la sección “Creación del Sistema Operativo para los clientes” se explican las vías de creación.

Por último reiniciamos el servicio para que se actualicen los cambios.

sudo /etc/init.d/nfs-kernel-server restart

Para ver los recursos que se tienen montados por NFS teclear:

sudo showmount -e

La configuración se puede actualizar sin reiniciar el servicio mediante:

sudo exportfs -rv

CREACIÓN DEL SISTEMA OPERATIVO PARA LOS CLIENTES

Es importante que seleccionar un S.O que sea acorde al equipamiento que poseemos para evitar que el sistema consuma más de RAM disponible en los clientes como sucede mucho con Microsoft Windows XP, esto hace que se bloquee el equipo. Para Ubuntu existen varios entornos de escritorios: KDE es muy llamativo pero consume grandes recursos de hardware; el entorno por defecto de esta distribución para la versión 10.04 (Lucid) es GNOME aunque es un poco más ligero que la primera se necesita como mínimo 512 MB de RAM para que funcione correctamente. Los entornos para equipos de bajo rendimiento (un poco menos que 256 MB de RAM) son Xfce y LXDE.

Para instalar el entorno de escritorio completo, por ejemplo, en Debian, debemos instalar el paquete xfce4; para Ubuntu: xubuntu-desktop.

Los ejemplos mostrados en este manual se refieren a Xubuntu, Lubuntu y a Debian 6 con el entorno GNOME que es mucho más ligero que el de Ubuntu Lucid y funciona correctamente con 256 MB de RAM.

Creando el kernel.

En una PC que tenga Ubuntu, por ejemplo, (no necesariamente tiene que tener XUbuntu, vea la nota al final) o desde una máquina virtual con dicho S.O:

 sudo cp -R /etc/initramfs-tools /etc/initramfs-tools-pxe

Con lo anterior hemos creado una copia del directorio /etc/initramfs-tools llamada /etc/initramfs-tools-pxe para generar un fichero initrd con soporte para arranque por red y NFS. Para ello editar el archivo /etc/initramfs-tools-pxe/initramfs.conf y modificar las variables

BOOT y MODULES como se muestra:

MODULES=netboot
BOOT=nfs

A continuación se generará una imagen de arranque por red para los clientes:

sudo mkinitramfs -d /etc/initramfs-tools-pxe -o /var/lib/tftpboot/XUbuntu/initrd.img

Copiamos la imagen del kernel:

sudo cp /boot/vmlinuz-`uname -r` /var/lib/tftpboot/XUbuntu /vmlinuz
Nota:=
Lo que se tiene hasta el momento es un kernel básico de Linux así como una imagen de arranque por red, no importa el entorno gráfico que se emplee.
Especificando el fichero PXE para arranque por red

Hasta este punto se tiene un kernel básico listo para el arranque por red (empleando cualquiera de las dos variantes anteriormente descritas), ahora se debe copiar el fichero que permitirá el arranque por PXE y el menú de arranque hacia el directorio de trabajo de nuestro servidor TFTP:

sudo cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot
sudo cp /usr/lib/syslinux/vesamenu.c32 /var/lib/tftpboot

Para el menú de arranque es necesario crear el siguiente directorio:

sudo mkdir /var/lib/tftpboot/pxelinux.cfg

Luego crear el fichero /var/lib/tftpboot/pxelinux.cfg/default y especificar las opciones de arranque para los clientes, así como la imagen de fondo y el tipo de menú que en este caso es vesamenu.c32

MENU TITLE Servidor de ThinClients LAB224
MENU BACKGROUND ubuntulogo.png
PROMPT 0
DEFAULT vesamenu.c32
LABEL XUbuntu 10.04
KERNEL /Ubuntu/vmlinuz
APPEND root=/dev/nfs nfsroot=10.12.57.60:/srv/XUbuntu,rsize=8192,wsize=8192 ip=dhcp
initrd=/Ubuntu/initrd.img rw quiet --

Expliquemos un poco el contenido anterior: con la opción DEFAULT se define que se quiere cargar por defecto al arranque, en este caso es un menú que tendrá una imagen de fondo declarada mediante MENU BACKGROUND y con PROMPT 0 se especifica que el prompt aparezca en la primera opción del menú. Con LABEL se define una entrada de menú, KERNEL indica el kernel del sistema operativo a arrancar; APPEND son una serie de opciones que se le pasan al kernel como: que el sistema de archivos se exportará por NFS,el tamaño que ocupará en la RAM, la asignación de IP que será por DHCP, la ubicación del fichero initrd y si el kernel será escribible (rw) o de solo lectura (ro: ponerlo de esta forma una vez que haya terminado de instalar todos los paquetes en el S.O de los clientes). En la bibliografía puede ampliar acerca de las demás opciones que existen para el fichero default. La opción quiet quita un poco de letreros de la pantalla o sea no presenta todos los detalles durante el arranque, recomendamos poner esa opción cuando todo funcione correctamente.

Destacar que el recurso compartido por NFS (ver sección El Servicio NFS) se indica mediante la siguiente opción

nfsroot=10.12.57.60:/srv/XUbuntu,rsize=8192,wsize=8192


Creando el sistema de archivos

Existen diferentes vías para la creación del sistema de archivos del S.O para los Clientes, a continuación se explicará una de ellas. Es importante destacar que si usted arranca por el kernel XXX el S.O de los clientes debe tener instalado el kernel XXX en el sistema que va exportar. Esto se debe a que exporta un kernel básico de Linux por TFPT y el sistema de archivos es exportado por NFS pero éste debe tener el mismo kernel que se exportó para el correcto funcionamiento del S.O. Para ver qué kernel se está usando se puede teclear en la consola:

sudo uname –r
Mediante un LiveCD

Esta es la forma más sencilla que existe, basta con localizar el fichero .squashfs (generalmente se encuentra dentro del directorio casper del LiveCD) que posee la imagen comprimida del sistema y descomprimirlo en el directorio que se va exportar, por ejemplo: /srv/Xubuntu.

Los pasos a seguir son:

  • Instalar squashfs-tools:
sudo apt-get install squashfs-tools
  • Copiar la imagen .squashfs (generalmente se llama filesystem.squashfs) en el directorio que se va a exportar por NFS: /srv/Xubuntu
  • Descomprimir la imagen:
cd /srv/XUbuntu
sudo unsquashfs filesystem.squashfs
  • Borrar la imagen .squashfs del directorio: /srv/XUbuntu
rm /srv/XUbuntu/filesystem.squashfs
  • Modificar los siguientes ficheros de configuración de la distribución descomprimida

(ahora se está trabajando en /srv/Xbuntu):

/etc/apt/sources.list con la configuración del repositorio que usará.
/etc/resolv.conf --configuración de los DNS--
/etc/network/interfaces --configuración de la red--
/etc/hostname --nombre del sistema--
/etc/hosts --configuración del host--
/etc/fstab --montaje del sistema de archivos--

PERSONALIZANDO EL S.O DE LOS CLIENTES

Tomaremos como referencia Lubuntu 10.04 LTS.

Configuración del fondo de pantalla

Para cambiar el fondo de Pantalla en Lubuntu y que salga por defecto al inicio y en todas las sesiones de trabajo:

Ir a /usr/share/lubuntu/wallpapers

Sustituir el fondo que queramos con el nombre: lubuntu-default-wallpaper.png

Nota:
Tenga presente que la imagen debe ser png y con tamaño de 1280 x 1024 px


Fuentes