ltsp - howto-mini - v2
TRANSCRIPT
LTSP 5 – HOWTOAutor: Luis Roberto Romano
luisromano(at)gmail.com
Procedimiento de instalación.
A partir de aquí, todos los comandos de consola a los cuales se haga referencia, se deben ejecutar con privilegios de root, o en su defecto, utilizando sudo.
En este caso en particular, se instalará el servidor LTSP y el DHCP en un mismo equipo. Para ello se procede a instalar los paquetes ltsp-standalone-server, openssh-server y ldm-server.
aptget install ltspserverstandalone opensshserver ldmserver.
NOTA: En caso de no estar instalado el paquete openbsd-inetd, instalarlo:
aptget install openbsdinetd
Si dicho paquete genera conflicto con algun otro que se encuentre instalado (ej. xinetd), reemplazar el paquete viejo por el openbsd-inetd.
Luego, se procede a construir el entorno del cliente
ltspbuildclient
Si el servidor corre sobre una arquitectura diferente que los clientes (ej: amd64 vs i386), debemos agregar el parámetro –arch=i386.
Esto descargará un sistema Debian completo en /opt/ltsp/i386 (o en otra ubicación específica mediante el parametro '--base') e instalará los paquetes ltsp-client y ldm (LTSP Display Manager). Para que los clientes puedan acceder a un entorno gráfico, será necesario que en el servidor esté instalado alguno como gnome o xfce.
A continuación, se procede a configurar el servicio DHCP. Éste es necesario para que, al momento del booteo, cada cliente obtenga una dirección IP que lo identifique dentro de la red. EL paquete LTSP incluye un archivo de configuración para dicho servicio, el mismo se encuentra en /etc/ltsp/dhcpd.conf.
Para este caso en particular, se ha definido:• Red: 192.168.4.0/24• Dominio: ltsp-lenguas.com• Servidor DNS: 200.16.16.1• Router: 192.168.4.1
Procedemos a editar el archivo /etc/ltsp/dhcpd.conf para que quede de la siguiente manera:
########### LTSP #################
subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.20 192.168.4.250; option domainname "ltsplenguas.com"; option domainnameservers 200.16.16.1; option broadcastaddress 192.168.4.255; option routers 192.168.4.1;
nextserver 192.168.4.1;# getleasehostnames true; option subnetmask 255.255.255.0; option rootpath "/opt/ltsp/i386"; if substring( option vendorclassidentifier, 0, 9 ) = "PXEClient"
{ filename "/ltsp/i386/pxelinux.0"; } else { filename "/ltsp/i386/nbi.img"; }}
Hay que tener en cuenta aquí que la opción next-server debe apuntar al servidor LTSP. En este caso, es el propio servidor DHCP (como se mencionó antes).
Para que tome control el archivo que se editó anteriormente, se debe editar el fichero /etc/dhcp3/dhcpd.conf y agregar al principio del mismo la siguiente línea:
include "/etc/ltsp/dhcpd.conf";
Se reinicia el servicio DHCP
invokerc.d dhcp3server restart
Se procede a configurar el archivo /etc/exports, agregando la siguiente línea:
/opt/ltsp *(ro,no_root_squash,async,no_subtree_check)
Se reinicia el servidor NFS
invokerc.d nfskernelserver restart
Se reinicia el servicio tftpd (el cual es utilizado para transferir el kernel desde el servidor hacia el cliente):
invokerc.d openbsdinetd restart
En este momento, el servidor está listo para recibir conexiones de parte de los clientes delgados.
Preparación de los clientes.
Cuando se describió el proceso de booteo del cliente, se mencionó en primera instancia que el kernel debe ser cargado en el cliente, y que para este caso en particular se utilizaría gPXE. Éste es un entorno de preejecución, que sirve para arrancar un sistema desde una placa de red.
Para ello, se procede a descargar el código fuente desde el siguiente enlace:http://git.etherboot.org/?p=gpxe.git;a=snapshot
Una vez descargado, se descomprime el contenido
tar xvzf gpxe<release>.tar.gz
Para poder compilarlo, son necesarios un par de paquetes extra:
aptget install syslinux mtools
Una vez instalados, se debe ingresar al directorio donde se descomprimió el tarball, y proceder a la compilación:
cd gpxe/srcmake
Ahora, se procede a escribir la imagen gPXE a un diskette:
mformat a:cat bin/gpxe.dsk > /dev/fd0
Este último comando escribe la imagen al diskette. Esto puede hacerse tambien mediante el siguiente comando
dd if=bin/gpxe.dsk of=/dev/fd0
Ahora el cliente está en condiciones de bootear y establecer la conexión con el servidor. Se inserta el diskette en la unidad floppy del cliente y se configura el mismo para que bootee desde dicha unidad.
En el servidor, antes de que cualquier cliente botee por primera vez, se debe ejecutar este comando:
ltspupdatesshkeys
Creando cuentas de usuario para los clientes.
Las cuentas de usuario se crean mediante el comando adduser:
adduser <nombre_de_usuario>
A partir de allí el sistema creará el usuario, incuyendo un directorio personal en /home/<nombre_de_usuario>. Tambien se solicitarán datos del mismo (el más importante de ellos es la contraseña).
Por defecto, el directorio personal se crea con permisos totales para el propietario del mismo, y permisos de lectura para el resto de los usuarios. Si se desea restringir el acceso al mismo sólo al propietario, se deben modificar los permisos mediante el siguiente comando:
chmod 700 /home/<nombre_de_usuario>
El entorno chroot
Se denomina entorno chroot a una versión minimalista de GNU/Linux, diseñada para optimizar el booteo por red que tiene que efectuar el cliente.
Puede encontrarse en /opt/ltsp, con subdirectorios para cada arquitectura. En este caso particular, como se está instalando sobre una arquitectura i386, se encontrará en /opt/ltsp/i386.
Para actualizar el entorno chroot, se deberá abrir una consola con privilegios de root, y ejecutar los siguientes comandos:
En primer lugar, se debe copiar la lista de repositorios hacia el entorno chroot:
cp /etc/apt/sources.list /opt/ltsp/i386/etc/apt/
Luego, se procede a cambiar el directorio raíz hacia el entorno chroot LTSP
chroot /opt/ltsp/i386/
Una vez allí, se efectúa la actualización de la lista de paquetes
aptget update
Luego, se monta el directorio /proc
mount t proc /proc /proc
Luego, se actualiza el software en el entorno chroot
aptget upgrade.
Una vez hecho esto, se sale del entorno chroot mediante el comando exit, o la combinación de teclas Ctrl+D.
Si el kernel ha sido actualizado, se deberá registrar dicha actualización
ltspupdatekernels
Configurando el comportamiento de los clientes
La mayoría de los clientes se autoconfigurará automáticamente en forma correcta. Sin embargo, algunas veces puede ser necesario personalizar los parámetros que están en el archivo de configuración /opt/ltsp/i386/etc/lts.conf
Formato del archivo lts.conf
El formato del archivo lts.conf admite una configuración por defecto, así como también configuraciones individuales. Si se cuenta con máquinas cliente idénticas, se puede especificar todos los ajustes de configuración en la sección [default] (como se explicará posteriormente).
Encabezados de sección.
Los encabezados de sección comienzan con un identificador de la forma [default], el cual es utilizado por todas las computadoras (como se mencionó anteriormente), y [Direccion MAC] para estaciones en particular, de la forma [XX:XX:XX:XX:XX:XX], donde X es un valor hexadecimal q va de 0 a F.
Asignación de variables.
Después del encabezado de sección, se pueden definir variables. Éstas son valores booleanos que se setean con los valores True / False, Yes / No, o bien Y / N. Tambien hay variables no boobleanas de la forma
VARIABLE = valor
Se puede insertar comentarios utilizando el caracter #. Todo lo que esté a continuación de dicho caracter en el resto de la línea se considerará un comentario.
La palabra clave LIKE
La palabra clave LIKE permite definir un conjunto general de parámetros bajo un identificador único, y luego asignar a estaciones particulares ese conjunto de parámetros. Se ilustrará el uso mediante un ejemplo.
Suponer que se tienen 3 tipos de clientes delgados en la red. Un grupo, el cual será utilizado en el laboratorio tiene placas de video viejas y deben usar color en 16 bit a 1024 x 768. Otro grupo necesita tener su memoria RAM de video seteada a 8 megas. Y un tercer grupo autodetecta todo en forma correcta. No es necesario especificar nada para este último grupo, pero para los otros puede utilizarse algunos nombres simbólicos como se muestra a continuación:
[Lab] X_COLOR_DEPTH = 16 X_MODE_0 = 1024x768
[Lowram] X_VIDEO_RAM = 8096
[00:40:32:71:77:A1] LIKE = Lab
[00:70:84:BB:27:52] LIKE = Lowram
Como se puede ver, usando la palabra clave LIKE se puede confeccionar un archivo lts.conf más prolijo, agrupando parámetros relacionados dentro de un único nombre simbólico.
A continuación, se transcribe un ejemplo del archivo lts.conf
################ [default] #X_COLOR_DEPTH=16 LOCALDEV=True SOUND=True NBD_SWAP=True SYSLOG_HOST=server #XKBLAYOUT=de SCREEN_02=shell SCREEN_03=shell SCREEN_04=shell SCREEN_05=shell SCREEN_06=shell SCREEN_07=ldm # LDM_DIRECTX=True allows greater scalability and performance
# Turn this off if you want greater security instead. LDM_DIRECTX=True # LDM_SYSLOG=True writes to server’s syslog LDM_SYSLOG=True
################ # A setting stanza for an old machine ################
[oldmachine] X_COLOR_DEPTH=8 X_MODE_0=800x600
################ # Example of the LIKE variable ################
[01:23:DE:AD:BE:EF] LIKE=oldmachine SCREEN_02=shell
################ #[MAC ADDRESS]: Per thin client settings ################
[00:11:25:84:CE:BA] XSERVER = vesa X_MOUSE_DEVICE=/dev/ttyS0 X_MOUSE_PROTOCOL=intellimouse
############### # A Thin Client Print server # (switch off X by pointing tty7 to shell, # to save ressources) ###############
[00:11:25:93:CF:00] PRINTER_0_DEVICE=/dev/usblp0 SCREEN_07=shell
############### # A workstation that executes a specific # command after login ############### [00:11:25:93:CF:02] LDM_SESSION=/usr/bin/myloginscript
Parámetros de configuración general.
(Nota: Para una explicación más detallada, revisar la documentación oficial del proyecto LTSP.)
LOCALDEVBooleano. Habilita los dispositivos de almacenamiento local en el cliente.
SOUNDBooleano. Habilita el sonido en el cliente delgado.
SOUND_DAEMONServicio de Sonido. Valores posibles: esd, nasd, pulse.
SCREEN_01 ... SCREEN_12Script de inicio de sesion. Se pueden configurar hasta un máximo de 12, siendo accesibles
mediante la combinacion ctrl+alt+F1 hasta ctrl+alt+F12. Por defecto, no es necesario configurar este parámetro. Valores posibles: rdesktop, shell, ldm, startx, telnet.
MODULE_01 ... MODULE_10Modulos a cargar en el booteo. Por defecto no deberia ser necesario.
CONFIGURE_XBooleano. Permite configurar los parámetros de video en el cliente delgado.
X_RAMPERCValor entero. Define el porcentaje de memoria libre en el cliente que será utilizado por el
servidor Xorg. Valor por defecto: 100. Si la estación comienza a experimentar cuelgues, se recomienda setear este valor a 80 o 90.
X_MOUSE_DEVICEDevice node al cual está conectado el mouse. Necesario en caso de utilizar un mouse serial.
Será /dev/ttyS0 o /dev/ttyS1. No es necesario en caso de mouse PS/2.
X_MOUSE_PROTOCOLProtocolo del mouse. Debería ser autodetectado. En caso de no serlo, los posibles valores son:
sunkbd, lkkbd, vsxxxaa, spaceorb, spaceball, magellan, warrior, stinger, mousesystems, sunmouse, microsoft, mshack, mouseman, intellimouse, mmwheel, iforce, h3600ts, stowawaykbd, ps2serkbd, twiddler, twiddlerjoy
X_COLOR_DEPTHValor entero. Indica la profundidad de color en bits para el video. Valores posibles: 8, 16, 24,
32.
LDM_DIRECTXBooleano. Seteado a True, deshabilita el cifrado SSH en la conexión entre el cliente y el
servidor. Recomendado en caso de necesitar incremento de rendimiento en el cliente (si se puede sacrificar el aspecto de la seguridad).
LDM_AUTOLOGINBooleano. Permite el autologueo en el servidor, tomando como usuario y contraseña los
siguientes 2 parámetros, mencionados a continuación.
LDM_USERNAMENombre de usuario usado por autologin.
LDM_PASSWORDPassword del usuario usado por autologin.
LDM: LTSP Display Manager
A partir de la versión 5, el paquete LTSP incluye su propio gestor de login: LDM. A diferencia de otros gestores, que se ejecutan en el servidor (como GDM o KDM), LDM se ejecuta del lado del cliente, permitiendo que éste tenga muchas más opciones de configuración respecto a la conexión que establece con el servidor.
Los pasos que se siguen en un inicio de sesión normal son los siguientes:
1. El script de inicio ldm se inicia, configura algunas variables de entorno necesarias, contacta con el servidor para ver que sesiones e idiomas están disponibles, y usan el xinit para lanzar ldm.
2. ldm inicia el greeter, que es un programa gráfico que presenta al usuario una pantalla de registro y permite que se seleccione la sesión, idioma, y los hosts a los que se desea conectar.
3. ldm recoge información del greeter, e inicia una sesión ssh con el servidor. Esta sesión ssh se usa para crear un socket maestro ssh, el cual se usa para las operaciones subsiguientes.
4. Ahora, la sesión seleccionada por el usuario se inicia mediante el socket maestro. Dependiendo de si se hace una petición encriptada o no, a través del parámetro LDM_DIRECTX, la sesión se conecta a la pantalla local a través de un tunel ssh, o a través de una conexión TCP/IP normal.
5. Durante la sesión, cualquier memoria USB u otros dispositivos locales que estén conectados, comunican su estado al servidor mediante el socket de control ssh.
6. Cuando el usuario cierra la sesión, la conexión ssh se cierra, el programa ldm sale, el servidor X se para, y el script de pantalla se recicla para que todo inicie de nuevo a partir de un estado limpio.
Scripts
LDM puede ejecutar scripts en tres momentos durante la ejecución:
1. Un init script que se ejecuta después de que X haya iniciado, pero antes de que el usuario haya iniciado la sesión. Estos scripts deben empezar con una I mayúscula.
2. Un start script que se ejecuta después de que el usuario haya iniciado la sesión, pero antes de que su sesión X inicie. Estos scripts deben empezar con una S mayúscula.
3. Un shutdown script que se ejecuta después de que la sesión X haya terminado, pero antes de que el usuario cierre la sesión. Estos scripts deben empezar con una K mayúscula.
Al nombrar el script, normalmente se establece un número entre 00 y 99 después del la letra inicial, ésto le permitirá controlar el orden en el que se desea que se ejecuten.
Dichos scripts se encuentran en /opt/ltsp/i386/usr/share/ldm/rc.d.
Habilitando el almacenamiento local.
Puede ser útil para el usuario, disponer de los dispositivos de almacenamiento local, sobre todo el caso de pendrives. Para ello se deberá seguir los siguientes pasos:
Agregar el siguiente parámetro en /opt/ltsp/i386/etc/lts.conf
LOCALDEV = True
Luego, se deben establecer ciertos privilegios a los usuarios que se quiere que tengan acceso a los dispositivos. Para ello, desde gnome se va a Sistema -> Administración -> Usuarios y grupos. Luego se provee la contraseña de usuario root, y después se podrá ver una ventana como esta:
Como ejemplo, se ha seleccionado el usuario pc01. Luego se deberá hacer clic en el botón Propiedades. Una vez en la ventana nueva, se selecciona la pestaña Privilegios de usuario, y se procede a marcar las siguientes casillas:
La opción que permitirá utilizar los dispositivos locales es “Mount user-space filesystems (FUSE)”. Sin embargo, marcar las otras opciones mostradas en la imagen anterior será de utilidad si se desea que el usuario pueda además conectarse a redes wireless y ethernet, usar dispositivos de sonido y usar unidades de CD-ROM.
Ahora el usuario pc01 ya puede utilizar las unidades de almacenamiento local en su cliente delgado. Cuando conecte un pendrive o inserte un cdrom, un ícono identificador aparecerá en el escritorio.
Si la configuración se deja así, sin ninguna otra modificación, se podrá notar que en cada acceso a alguna unidad de almacenamiento local en el cliente, la unidad floppy efectuará una lectura, causando una demora innecesaria y un ruido que puede llegar a ser muy molesto. Para solucionar este problema, se debe proceder a editar el archivo /opt/ltsp/i386/etc/udev/rules.d/z60_ltspfsd.rules
Se procede a buscar las siguientes líneas
# legacy floppy drives: ACTION=="add", KERNEL=="fd[09]", RUN+="ltspfs_entry add %k auto"
Y se comenta (mediante el caracter #) la segunda, con lo cual quedaría de la siguiente manera
# legacy floppy drives:
# ACTION=="add", KERNEL=="fd[09]", RUN+="ltspfs_entry add %k auto"
Problema con placas realtek 8139.
Un mensaje de advertencia suele ser mostrado en algunos clientes que cuentan con placas de red Realtek 8139. El mismo advierte sobre un problema de compatibilidad de las mismas con el módulo correspondiente del kernel, y sugiere reemplazarlo por otro módulo (8139too).
Para solucionar esto, se deben seguir los siguientes pasos:
Editar el archivo /opt/ltsp/i386/etc/initramfs-tools/modules y agregar el módulo:
8139too
Editar el archivo /opt/ltsp/i386/usr/share/initramfs-tools/hook-functions y agregar el módulo “8139too” al final de la siguiente línea:
r8169 s2io sis900 skge slhc smc911x starfire sky2 \
Luego, en el entorno chroot, montar /proc actualizar el initramfs:
sudo chroot /opt/ltsp/i386 mount t proc /proc /procsudo chroot /opt/ltsp/i386 updateinitramfs u
Actualizar:
sudo ltsp-update-kernels
Configuracion para clientes con mouse serial.
El siguiente es un ejemplo de configuración del archivo lts.conf para un cliente que utiliza un mouse serial.
[Client_MAC_Address]X_MOUSE_DEVICE = /dev/ttyS0X_MOUSE_PROTOCOL = MicrosoftX_MOUSE_EMULATE3BTN = TrueX_MOUSE_ZAXISMAPPING = 4 5 6 7
Extracción de pendrives en forma segura.
Para implementar la extracción segura de dispositivos USB, se puede implementar un script que tenga la siguiente forma:
#!/bin/bash
echo “----- Espere un momento --------”sleep 10fusermount -u /media/<nombre_de_usuario>/*
Este script comienza con una parada de 10 segundos, para darle tiempo al sistema de escribir toda la información necesaria antes de extraer el dispositivo. Luego desmonta el directorio correspondiente al punto de montaje de la unidad de almacenamiento.
Puede crearse, por ejemplo, dentro de un directorio en /opt. La ruta completa podría ser /opt/Desmontar/<nombre_de_usuario>/<nombre_del_script>
Cabe recordar que se deberán otorgar permisos de ejecución al mismo:
chmod 755 /opt/Desmontar/<nombre_de_usuario>/<nombre_del_script>
Para facilitar al usuario el acceso al script, puede crearse un lanzador en el escritorio. Para ello, se hace clic derecho en algun lugar vacío del mismo y se escoge la opción “Crear lanzador”. Luego en la pestaña “Lanzador” en el campo “Comando”, se pone la siguiente línea:
xterm e /opt/Desmontar/<nombre_de_usuario>/<nombre_del_script>
Si no se tiene instalado xterm, puede usarse gnome-terminal o konsole. Lo recomendable es instalar xterm, ya que es más liviano que aquellos 2.
Una vez finalizada la ejecución, el ícono correspondiente al pendrive desaparecerá del escritorio.
Instalar aplicaciones en el servidor.
Para este caso en particular, se ha solicitado que los clientes puedan:
Contar con una suite ofimáticaPoder reproducir contenidos multimedia.Poder ver contenido flash en las paginas web.Poder reproducir videos de youtube.
Suite ofimática.
Para la suite ofimática se ha optado por OpenOffice 3.1, debido a su alta compatibilidad con la suite Office de Microsoft (hay que admitir que la mayoría de los usuarios utilizan ésta última en sus casas).
Para su instalación, se descargan los paquetes correspondientes vía apt-get:
aptget install openoffice.org openoffice.orgl10nes
Reproducción de contenidos multimedia.
Para la reproducción multimedia, se deben bajar un conjunto de codecs via apt-get:
aptget install gstreamer0.10ffmpeg gstreamer0.10pluginsbad gstreamer0.10pluginsugly gstreamer0.10pulseaudio
Otra opción a considerar es el reproductor smplayer, de mejor desempeño que Totem (el q viene por defecto en Debian). Para instalarlo, primero se debe agregar el repositorio debian-multimedia.
Para ello, se procede así:
Se descarga la llave del repositorio desde la siguiente ubicacion
http://www.debian-multimedia.org/pool/main/d/debian-multimedia-keyring/debian-multimedia-keyring_2008.10.16_all.deb
Se procede a instalar la llave:
dpkg i debianmultimediakeyring_2008.10.16_all.deb
Se edita el archivo /etc/apt/sources.list, agregando al final:
deb http://www.debianmultimedia.org squeeze main
Se actualiza la lista de paquetes:
aptget update
Se descarga el paquete smplayer y w32codecs
aptget install smplayer w32codecs
Si el servidor corre una versión de 64 bits, el paquete se llama w64codecs.
Una vez instalado, se debe configurar el reproductor para habilitar el sonido en los clientes. Para ello, se accede con las cuentas de usuario correspondientes a los clientes y se ejecuta la aplicación. La misma está en Aplicaciones -> Sonido y Video -> Smplayer.
Como LTSP utiliza pulseaudio como salida de audio, será necesario configurar el reproductor para poder tener sonido en los clientes. Para ello se va a Opciones -> Preferencias -> General -> General . En la opcion Audio seleccionar pulse. Esto debe hacerse para cada cuenta de usuario que sea utilizada por los clientes delgados.
Poder visualizar contenido Flash en las paginas web.
Para poder hacer esto, es necesario bajar el plug-in de flash, desde apt-get
aptget install flashpluginnonfree
Reproduccion de videos de youtube.
Si el lector hace la prueba de reproducir videos desde la pagina de youtube en un cliente liviano, podrá notar que la performance no es la más indicada. Para solucionar esto se deben seguir los siguientes pasos:
1 - En primer lugar, se debe descargar el paquete de integración de Totem al navegador:
aptget install totemmozilla
2 - Luego, Hay que bajar la extensión Greasemonkey para Iceweasel:
https://addons.mozilla.org/esES/firefox/addon/748
3 - Por ultimo, se descarga el script “Linterna magica”:
http://evalkov.org/linternamagica/
Nota: Los pasos 2 y 3 se deben realizar para cada cuenta de usuario en particular.
Algunos aspectos administrativos.
Agregar usuarios a grupos.
Repasando lo visto anteriormente: Para crear un usuario el comando es
adduser <nombre_de_usuario>
Ahora bien, para crear un grupo,
addgroup <nombre_de_grupo>
Finalmente, para agregar un usuario a un grupo:
addgroup <nombre_de_usuario> <nombre_de_grupo>
De esta manera se podrán organizar los distintos usuarios del sistema en diferentes grupos, segun el criterio definido por el administrador.
Terminar un proceso.
Para matar un proceso que se está ejecutando por algun usuario en particular, se hace uso de una serie de comandos, detallada a continuación.
Para ver la lista de procesos que está corriendo un determinado usuario se hace uso del comando
ps w u <nombre_de_usuario>
Para matar un proceso en particular se hace
killall u <nombre_de_usuario> <nombre_del_proceso>