LTSP - Minicomo Terminales Linux de bajo costo A. Quesada, [email protected] J. Torres, [email protected] A. Morales, [email protected] Índice 1. Introducción 1 2. Configuración de las terminales 2.1. Arranque de los terminales . . . . . . . . . . . . . . . . . . . . . 2.2. Comprobacion de la red . . . . . . . . . . . . . . . . . . . . . . . 2 2 3 3. Configuración del servidor 3.1. Servidor. Requisitos previos . 3.2. Servidor. Instalación de LSTP 3.3. Servidor. Configuración . . . . 3.3.1. El archivo dhcpd.conf 3.3.2. El archivo host . . . . 3.3.3. El archivo lts.conf . . 3.3.4. Uso de XFS . . . . . . 3.4. Para muestra un ejemplo . . . 4 4 5 7 7 8 9 9 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. Acerca de este mini-como 10 Resumen Se describe la instalación básica de una red basada en LTSP (Linux Terminal Server Project), que persigue la utilización de ordenadores antiguos o de bajo costo como terminales gráficos mientras que las aplicaciones se ejecutan en un servidor. 1. Introducción La instalación de una red no tiene por qué suponer un gran desembolso de dinero para los ordenadores clientes, podemos aprovechar los viejos i486/66 con 16 Mb de RAM como terminales gráficos. Sólo será necesario que dispongan de tarjeta de red, pudiendo prescindir de unidades de disco duro, disqueteras o cd-rom. 1 2 CONFIGURACIÓN DE LAS TERMINALES Ordenadores mejor equipados no tienen por qué mostrar necesariamente un mayor rendimiento, teniendo en cuenta que las aplicaciones son ejecutadas en el servidor. Los requerimientos del servidor dependerán del número de terminales que atenderán, en este caso se describe los pasos seguidos en un PII/266 con 256 Mb de RAM y HD de 6,4 Mb, utilizando Linux-Mandrake 8.1. En mi centro hay un aula dotada con 486 con unos 16 Mb de RAM y funcionando con variantes WIN95-98 instalados en HD de 500 Mb, el mantenimiento es tedioso pues carecen de CD-ROM. Ahora planeo arrancar mi sistema favorito LINUX y obtener un login KDM en sólo un minuto sin interferir con ningún compañero que prefiera el entorno propietario, y lo que es mejor, no dependeré del estado o configuración de cada PC, ya que arrancaré mediante disquette. Este documento no pretende ser una guía exhaustiva, para ello puede dirigirse a la página oficial de LTSP en http://www.ltsp.org donde encotrará todo lo que necesita, así como una estupenda Guía de instalación en español, traducida por Dario Rapisardi. 2. 2.1. Configuración de las terminales Arranque de los terminales Antes de tocar nada en nuestros equipos, preparemos el arranque de los terminales, una vez comprobemos que realizan petición a la red tendremos casi el 50 % del trabajo realizado. Las posibilidades de arranque podrían ser las siguientes: Arranque desde la tarjeta de red. Las tarjetas necesitan EPROM, se pueden comprar y grabarlas. Arranque desde disquette. Es la solución que adoptaremos por ser la más sencilla. Arranque desde el HD • Configurar Lilo. • Usar loadlin. Configurar un Config.sys bajo MS-DOS/WIN. Para nuestro ensayo usaremos el arranque desde disquette, ya que es muy sencillo de configurar y no se precisa ningún equipo especial. En primer lugar identificaremos el chip que usa nuestra tarjeta de red para procurarnos la ROM apropiada en http://www.rom-o-matic.net, teniendo en cuenta seleccionar Floppy Bootable ROM Image (.lzdsk). Una vez leída la ROM, la grabaremos en un disquette formateado; para una tarjeta PCI basada en realtek 8139 usaríamos: 2 A.Quesada, J.Torres, A.Morales - GULIC 2 CONFIGURACIÓN DE LAS TERMINALES # dd if=eb-5.0.5-rtl8139.lzdsk of=/dev/fd0 Después de asegurarnos que la BIOS de nuestra terminal está configurada para arrancar por defecto desde la unidad A, introducimos nuestro disquette de inicio recién acabado, debiendo obtener algo parecido a esto: .000021.0000 done ROM segment 0X800 leng 0X4000 reloc 0x9400 Etherboot 5.0.5 (GPL) Tagged ELF for [RTL8139] Boot from (N)etwork or from (L)ocal? {\bf N} Found Realtek 8139 at 0XFC00, ROM address 0X0000 Probing .... [RTL8139] - ioaddr 0XFC00 addr 00:48:54:55:45:F0 10 Mbps half-duplex Searching for server (DHCP) ... Enhorabuena, nuestra tarjeta funciona y está buscando un servidor DHCP para configurar la red. 2.2. Comprobacion de la red Es el momento de comprobar que la petición de DHCP llega al servidor, aunque no hayamos tocado nada en él. Para monitorizar los paquetes entrantes provenientes de los terminales, necesitamos tener instalados los siguientes programas en el servidor: tcpdump En caso de no ser así, procederemos a su instalación tecleando: # apt-get install tcpdump (en Debian) # urpmi tcpdump (en Mandrake) Lanzamos el siguiente proceso para ejecutar la monitorización: # tcpdump -qte broadcast and port bootpc > /tmp/mac.lis En este momento debemos arrancar los terminales, si no lo hemos hecho (si ya están arrancados solo hay que esperar un poco). Tras esperar un momento a que las peticiones de búsqueda de los terminales sean enviadas, matamos el tcpdump con CTRL-C. El contenido de /tmp/mac.lis debe ser algo como esto: 0:48:54:55:45:f0 0:48:54:55:45:f0 0:48:54:55:45:f0 0:48:54:55:45:f0 (...) Broadcast Broadcast Broadcast Broadcast 590: 590: 590: 590: 0.0.0.0.68 0.0.0.0.68 0.0.0.0.68 0.0.0.0.68 3 > > > > 255.255.255.255.67: 255.255.255.255.67: 255.255.255.255.67: 255.255.255.255.67: A.Quesada, J.Torres, A.Morales - GULIC udp udp udp udp 548 548 548 548 3 CONFIGURACIÓN DEL SERVIDOR Los números XX:XX:XX:XX:XX:XX son las direcciones mac únicas de las tarjetas de los terminales que necesitaremos más adelante. Para extraer las direcciones mac (las utilizaremos posteriormente) tecleamos el siguiente comando: # cut -f1 -d’ ’ /tmp/mac.lis | sort | uniq 0:48:54:55:45:f0 También podríamos obtenerlas manualmente apuntando la salida por pantalla del disquete de cada uno de los terminales. Con los comandos anteriores podemos obtener las direcciones mac de todos los terminales de forma automática. 3. Configuración del servidor 3.1. Servidor. Requisitos previos Nuestro servidor ha de estar configurado previamente con los siguientes servicios: tftp-server en Mandrake y tftpd en Debian dhcp-server en Mandrake y dhcp en Debian nfs en Mandrake y nfs-kernel-server/nfs-user-server en Debian En caso de no ser así, su instalación es trivial, procedamos en Mandrake: # urpmi dhcp-server # urpmi tftp-server # urpmi nfs-utils Este último instalará además nfs-clients y portmap. Iniciamos los servicios instalados: # # # # service service service service dhcpd start xinetd restart portmap start nfs start Donde reinicamos el xinetd pues tftp server corre bajo xinetd. Para Debian el procedimiento es similar en la instalación y los servicios Dquedan normalmente iniciados al instalar. # apt-get install tftpd # apt-get install dhcp # apt-get install nfs-kernel-server 4 A.Quesada, J.Torres, A.Morales - GULIC 3 CONFIGURACIÓN DEL SERVIDOR Bajo Debian, el paquete nfs-kernel-server se diferencia del paquete nfs-user-server en que en el primer caso el servidor nfs utiliza soporte compilado en el núcleo mientras que el segundo implementa todo en espacio de usuario. En nuestro caso hemos elegido el primero, pues es más eficiente que el segundo, pero debemos recordar que necesita que el núcleo tenga el siguiente soporte activado: CONFIG_NFSD=y CONFIG_NFSD_V3=y 3.2. Servidor. Instalación de LSTP Nos vamos a la web principal de LTSP http://www.ltsp.org y en la sección Download buscamos la última versión estable en formato .rpm si usamos Mandrake/RedHat, .deb si usamos Debian o .tgz si las otras alternativas no nos funcionasen. Los paquetes que deberemos instalar son: ltsp_core ltsp_kernel ltsp_x_core ltsp_x_fonts (*) La mayoría de las tarjetas de video están soportadas por esta configuración, que en el momento de escribir este mini-como se basa en las XFree 4.1. En caso de que comprobemos que la tarjeta gráfica de algún terminal no estuviese soportada por esta configuración, podríamos bajarnos las versiones basadas en las XFree 3.3.6, que constan de paquetes individuales para cada marca de tarjetas. Podemos instalar tantos paquetes simultaneamente como necesitemos. Otra razón que puede afectar nuestra decisión es el consumo de recursos: XFree 4.1 gasta generalmente más recursos que su predecesor XFree 3.3.6, por lo que nos puede interesar utilizar la version vieja para terminales poco potentes. En nuestra explicación, nosotros seguiremos la descripción usando la versión estandar. Para el caso de .rpm, después de bajarse los paquetes, se instalan así: # # # # rpm rpm rpm rpm -i -i -i -i ltsp_core-3.0.7-0.i386.rpm ltsp_kernel-3.0.5-0.i386.rpm ltsp_x_core-3.0.4-0.i386.rpm ltsp_x_fonts-3.0.0-0.i386.rpm Para el caso de .deb, la forma de instalación es la siguiente: # # # # dpkg dpkg dpkg dpkg -i -i -i -i ltsp-core-i386_3.0.7-1_all.deb ltsp-kernel-2.4.19-i386_3.0.5-0_all.deb ltsp-x-core-i386_3.0.4-0_all.deb ltsp-x-fonts-i386_3.0.0-0_all.deb 5 A.Quesada, J.Torres, A.Morales - GULIC 3 CONFIGURACIÓN DEL SERVIDOR En el caso de .tgz, se procede por cada paquete a la descompresión e instalación de esta forma: # tar -xzvf ltsp_core-3.0.7-i386.tgz # cd ltsp_core # sh install.sh # cd .. (y repetir para todos los ficheros bajados) Una vez instalados los paquetes, en todos los casos, tendremos que hacer lo siguiente: # cd /opt/ltsp/templates # ./ltsp_initialize Este comando en esta nueva versión es interactivo, y al ejecutarse, muestra una lista de los archivos que piensa modificar, permitiéndote habilitar y deshabilitar individualmente estas modificaciones. The Linux Terminal Server Project (http://www.LTSP.org) The following files will be created/modified: /etc/X11/xdm/Xsetup_workstation /etc/dhcpd.conf.example /etc/exports /etc/X11/gdm/gdm.conf /etc/rc?.d/*gdm /etc/X11/gdm/Init/Default /etc/hosts.allow /etc/inetd.conf /etc/X11/kdm/Xservers /etc/X11/xdm/ltsp.gif /etc/rc?.d/*nfs-* /etc/rc?.d/*portmap /etc/init.d/sysklogd /etc/X11/wdm/Xservers /etc/X11/xdm/Xservers Sets the logo of your login window Example config file for dhcp The config file for nfs The config file for gdm Startup links for the display manager The gdm startup script Config file for tcp wrappers Config file for inetd Config to kdm to launch local Xserver The logo picture for your login screen Startup links for nfs Startup links for portmapper Startup script for the sysklog daemon Config to wdm to launch local Xserver Config to xdm to launch local Xserver Ready to apply the changes? ( R-Review, A-Apply, C-Cancel ) Conviene recordar que muchas de las modificaciones que va a hacer pueden comprometer la seguridad del sistema pues sobreescribe con versiones predefinidas de archivos que tal vez hayamos configurado nosotros. Si la máquina servidora pretende dar tambien acceso a internet a los terminales, se debería hojear este script 6 A.Quesada, J.Torres, A.Morales - GULIC [Y] [Y] [Y] [Y] [Y] [Y] [Y] [Y] [Y] [Y] [Y] [Y] [Y] [Y] [Y] 3 CONFIGURACIÓN DEL SERVIDOR minuciosamente y entender todas las modificaciones que hace, e incluso mezclarlas a mano con nuestras modificaciones. En una primera aproximación, se puede ejecutar tal cual, con todas las opciones activadas. El script nos modificará uno a uno cada archivo, guardando el fichero original con extensión *.1. En caso de haber un error y encontrar un archivo que no puede actualizar, nos informará del error y detendrá el script, dejando el proceso a medias. En este momento tenemos que volver a ejecutar ltsp_initialize, marcando los ficheros erroneos para que no los actualice y repetir el proceso. El script nos guardará ahora las versiones antes de los cambios en ficheros con extension *.2 y se volverá a detener cuando existan errores. Continuaremos ejecutando y corrigiendo hasta que consigamos una ejecución limpia de todo el script. En este punto ya podemos comprobar los cambios y deshacernos de los ficheros de copia de seguridad que no necesitemos. En esta configuración por defecto se asume lo siguiente: La red que dispondrá los terminales es la 192.168.0.0/24, es decir, hasta 253 terminales disponibles desde 192.168.0.1 hasta 192.168.0.253 y el servidor en la direccion 192.168.0.254. Las ips de los clientes se asignarán de forma dinámica (y se verá más adelante), pero la ip del servidor es estática. Para configurar esto habrá que consultar la distribución que estemos usando, pues cada una lo hace de forma distinta (por ejemplo, editando /etc/network/interfaces en Debian). Al ejecutar ltsp_initialize también se configura un registro de sucesos centralizado (via syslog) en la máquina del servidor, es decir, que las incidencias que ocurran en todos los clientes se registran en esta única máquina para facilitar la tarea del administrador. Los kernel que se enviarán a los terminales para que arranquen (provenientes de instalar el paquete ltsp_kernel-* se colocan en /tftpboot/lts/. Hay que configurar el dhcp para que los encuentre. Los archivos que verán los terminales (provenientes de instalar el resto de paquetes ltsp_*) se instalan en el directorio /opt/ltsp/i386, y ese directorio se configura para su exportación por NFS. La dirección ip del servidor de nombres (DNS) que se le enviará a los clientes es la del servidor: 192.168.0.254. Entonces, o bien instalamos un servidor DNS en el servidor, o bien modificamos dhcpd.conf para asignarle a los clientes un servidor DNS válido. 7 A.Quesada, J.Torres, A.Morales - GULIC 3 3.3. 3.3.1. CONFIGURACIÓN DEL SERVIDOR Servidor. Configuración El archivo dhcpd.conf La instalación de LTSP nos ha creado el archivo /etc/dhcpd.conf.example que copiaremos o renombraremos a /etc/dhcpd.conf una vez ajustado a nuestras características. Si la versión de dhcpd es la 3.0, es obligatorio añadir la línea ddns-update-style ad-hoc justo al principio del archivo. Si no, es opcional. Además, será necesario descomentar las líneas option option-128 code 128 = string y option option-129 code 129 = text. Es necesario asignar un nombre de host a cada terminal (en este ejemplo usaremos los nombres ws001, ws002, etc). Estos nombres junto con las direcciones ip y direcciones mac se añaden en la parte final del archivo, repitiendo este conjunto de sentencias para cada uno de los terminales que queramos activar. Por ejemplo: host ws0013 { hardware ethernet 00:E0:06:E8:00:84; fixed-address 192.168.0.13; filename "/lts/vmlinuz-2.4.18-ltsp-1"; option option-128 e4:45:74:68:00:00; option option-129 "NIC=ne IO=0x300"; } Donde: host ws0013 nombre de host del terminal hardware ethernet ... asignar la mac de cada tarjeta. fixed address ... asignar la ip del terminal filename ... nombre del kernel para este terminal (los kernels están situados en /tftpboot/lts/) option option-128 ... Este parámetro es siempre el mismo. Es un código de 6 bytes que se envía al cliente y que indica el formato de los parámetros siguientes. El código que requiere un cliente etherboot es el e4:45:74:68:00:00. Como es igual para todos, se suele poner por fuera, en el grupo que contiene a los terminales. option option-129 ... Este parámetro sólo se usa en casos especiales, e indica qué información externa queremos dar al núcleo cuando se ejecute. Es solo la información imprescindible para la carga del núcleo y la configuración de la red, pues el resto de información se pasa a posteriori una vez establecida la red. Normalmente es el modelo de tarjeta de red y el puerto hardware i/o (las tarjetas ISA no suelen detectarse correctamente). Guardamos como /etc/dhcp.conf y arrancamos el servicio dhcp. 8 A.Quesada, J.Torres, A.Morales - GULIC 3 3.3.2. CONFIGURACIÓN DEL SERVIDOR El archivo host Es el momento de añadir las líneas de nuestros terminales a /etc/hosts, de forma que se correspondan con los entrados en /etc/dhcp.conf: 192.168.0.1 192.168.0.2 192.168.0.3 (...) 3.3.3. ws001 ws002 ws003 El archivo lts.conf Ahora modificaremos el archivo /opt/ltsp/i386/etc/lts.conf, que guarda las configuraciones de nuestras terminales. Contiene una sección de configuración por defecto y luego secciones particulares para cada terminal. Si un terminal no aparece, entonces adopta la configuración por defecto, por tanto, solo configuraremos aquellos terminales que posean una configuración diferente al resto. Guardamos los cambios y ¡Ya está! Hacemos un repaso a todo, comprobamos que los servicios están activos y arrancamos el terminal. Si todo ha ido bien, tendremos nuestro login gráfico. 3.3.4. Uso de XFS El uso de XFS como servidor de fuentes puede resultar espectacular pero hay que mencionar que carga mucho la red si el número de terminales es elevado. Se describe como habilitarlo de manera general. 1. Edita el archivo /etc/init.d/xfs y busca las líneas (21 y 42), en las que figura: daemon --check xfs su xfs -c \"xfs -port -1\" -s /bin/sh sólo se ha de cambiar el -1 por 7100 en ambos casos. 2. Edita el archivo /etc/X11/XF86Config, busca la línea que pone FontPath "unix/:-1" y cámbiala por FontPath "tcp/localhost:7100". 3.4. Para muestra un ejemplo Esta es mi configuración personalizada en /opt/ltsp/i386/etc/lts.conf para un ws001, que se negaba a arrancar primero por falta de memoria (activamos SWAP = Y), luego por el servidor X (XF86-SVGA) y la profundidad de colores (8). Finalmente le añadí soporte de XFS XSERVER LOCAL_APPS USE_NFS_SWAP SWAPFILE_SIZE USE_XFS = = = = = XF86_SVGA N Y 48m Y 9 A.Quesada, J.Torres, A.Morales - GULIC 4 XkbModel XkbLayout X_MOUSE_PROTOCOL X_MOUSE_DEVICE RUNLEVEL = = = = = ACERCA DE ESTE MINI-COMO pc105 es "Microsoft" "/dev/ttyS0" 5 El runlevel se puede ajustar a 3 (shell), 4 (sesión/es telnet) o 5 (X Window). Es importante si tienes problemas con un login gráfico y deseas depurar problemas. Recuerda que los programas corren en el servidor y que cualquier cambio que hagas como root afectarán a la configuración general del sistema. 4. Acerca de este mini-como Para ayuda adicional puedes unirte al canal irc de ltsp, en esta dirección http://www.ltsp.org/irc.php te aclaran como hacerlo. Si deseas información más detallada o estar al día visita http://www.ltsp.org. Este documento está basado en el original de Michael Habbe, [email protected] publicado en la web de LTSP y adaptado con la puesta en funcionamiento por parte de quien escribe. 10 A.Quesada, J.Torres, A.Morales - GULIC