Hola lista, envío un pequeño tutorial que redacté cuando tuve la necesidad de implementar LTSP en mi centro de trabajo, incluyendo el problema que se plantea en el asunto de este mensaje, este manual está probado, y funciona, lo tengo en formato pdf también y creo que hasta más actualizado, con quien/quienes debo de contactar para subirlo al ftp de GUTL, y así esté disponible para todos.

Saludos, espero sea de ayuda.

######################################################
Instalando un Servidor de Terminales Tontas con LTSP##
######################################################

Linux Terminal Server Project o LTSP son un conjunto de aplicaciones servidores que proporcionan la capacidad de ejecutar Linux en computadoras de pocas prestaciones de velocidad o computadoras de bajo costo, permitiendo reutilizar equipos que actualmente resultan obsoletos debido a los altos requerimientos que piden los sistemas operativos. LTSP se distribuye bajo licencia GNU GPL de software libre ( wikipedia).

Lo primero de todo será instalar los paquetes necesarios en el servidor (todo por ahora se hará sobre el servidor, en el cliente por el momento no debemos hacer nada):

Paquetes de ltsp-server

Un servidor tftp

Un servidor dhcp

Un servidor nfs o nbd para exportar la imagen a los clientes

Todo esto se puede instalar individualmente o instalar el paquete “ltsp-server-standalone” (éste instala por defecto el servidor dhcp3-server e instala nfs y nbd, luego se configurará para utilizar uno de los modos de distribuir la imagen a los clientes) que te instala todos los paquetes necesarios para crear el servidor.

apolo:~# aptitude install ltsp-server-standalone

Una vez instalado el paquete, es necesario configurar el servidor dhcp3-server. A continuación un ejemplo del fichero de configuración del dhcp:

####Fichero /etc/dhcp3/dhcpd.conf

apolo:~# pico /etc/dhcp3/dhcpd.conf

authoritative;
# Si se desea que el servidor DHCP actualize automaticamente la zona DNS Utilizar ddns-update-style interim; # Conforme al RFC 2136
ddns-update-style none;
subnet 192.168.222.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.222.25 192.168.222.28;
default-lease-time 1800;
max-lease-time 3600;
get-lease-hostnames true;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.222.255;
option routers 192.168.222.1;
option domain-name-servers 192.168.222.2;
filename "pxelinux.0";
}
host cliente1 {
hardware ethernet 00:19:D1:E0:60:3B;
fixed-address 192.168.222.25;
next-server 192.168.222.22;
option root-path "/opt/ltsp/i386";
filename "pxelinux.0";
}
host cliente2 {
hardware ethernet 00:1C:C0:44:1B:4F;
fixed-address 192.168.222.26;
next-server 192.168.222.22;
option root-path "/opt/ltsp/i386";
filename "pxelinux.0";
}

Guardamos y Salimos, con Ctrl+O (Guardar) y Ctrl+X (Salir del Editor)

En el parámetro filename podemos poner, bien sólo filename “pxelinux.0″ o la ruta completa donde estará la imagen que será “/var/lib/tftpboot/ltsp/i386/pxelinux.0″, si dejamos la primera habrá que modificar el fichero /etc/inetd.conf para modificar la ruta base.

Reiniciamos el servicio de DHCP

apolo:~# invoke-rc.d dhcp3-server restart

apolo:~# pico /etc/inetd.conf

Que sería en esta línea:

tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot

Agregamos esta otra parte de la ruta completa: /ltsp/i386

Y quedaría así:

tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot/ltsp/i386

Guardamos y Salimos, con Ctrl+O (Guardar) y Ctrl+X (Salir del Editor)

Otro fichero que debemos modificar es /etc/default/dchp3-server, en el parámetro INTERFACES debemos configurar la interfaz de red por el que asignará las direcciones, en este caso es la primera interfaz (eth0) sobre todo, si el servidor tiene más de una interfaz de red, sino no sería necesario configurarlo.

apolo:~# pico /etc/default/dhcp3-server

INTERFACES="eth0"

Guardamos y Salimos, con Ctrl+O (Guardar) y Ctrl+X (Salir del Editor)

Con esto ya tendríamos configurado el servidor dhcp, ahora debemos instalar otra aplicación que nos permite asignar direcciones IP dinámicamente, es muy parecido a dhcp3-server, con este solo no nos basta, ya que nos pide después en el arranque del cliente unos datos que no son asignados por el dhcp3-server, y podemos resolver esta situación con: udhcpd

Para instalarlo, solo debemos teclear en la consola (en caso que no esté instalado, por defecto cuando se instala el dhcp3-server, este tambien se instala):

apolo:~# aptitude install udhcpd

Ahora, este servicio necesita un fichero de configuración que debe estar en el directorio /etc, y que no aparece por defecto, por lo que debemos crearlo nosotros.

apolo:~# pico /etc/udhcpd.conf

Y este es un ejemplo del fichero de configuración de este servicio, muy parecido al del dhcp3-server:

# Sample udhcpd configuration file (/etc/udhcpd.conf)
# The start and end of the IP lease block
start 192.168.222.25 #Inicio del rango de asignación de IP, por default es: 192.168.0.20 end 192.168.222.28 #Fin del rango de asignación de IP, por default es: 192.168.0.254
# The interface that udhcpd will use
interface eth0 #por default es: eth0
# The maximim number of leases (includes addressesd reserved
# by OFFER’s, DECLINE’s, and ARP conficts
#max_leases 254 #default: 254
# The remainer of options are DHCP options and can be specifed with the
# keyword ‘opt’ or ‘option’. If an option can take multiple items, such
# as the dns option, they can be listed on the same line, or multiple
# lines. The only option with a default is ‘lease’.
#Examles
opt dns 192.168.222.2
option subnet 255.255.255.0
opt router 192.168.222.1
#opt wins 192.168.XX.XX
option dns 192.168.222.2 192.168.222.3 # appened to above DNS servers for a total of 3
option domain pal.pri.jovenclub.cu
option lease 864000 # 10 days of seconds
#######################################

Guardamos y Salimos, con Ctrl+O (Guardar) y Ctrl+X (Salir del Editor)

Luego de esto, iniciamos el servicio de udhcpd y listo.

apolo:~# invoke-rc.d udhcpd start

Antes de continuar debemos hacer algunos cambios en unos ficheros de los plugins de ltsp-build-client, ya que en los fichero referentes a la distribución Debian y Ubuntu, que son los que vienen por defecto, la rutas de los mirrors, pueden variar. Nos cambiamos al directorio /usr/share/ltsp/plugins/ltsp-build-client de esta manera:

cd /usr/share/ltsp/plugins/ltsp-build-client/

Una vez dentro del directorio, entramos en el directorio Debian:

apolo:~# cd Debian

Y dentro de este directorio, abrimos los siguiente ficheros:

apolo:/usr/share/ltsp/plugins/ltsp-build-client/Debian# pico 000-basic-configuration

Y dentro buscamos la siguiente línea:

(Ejemplo de como podría estar redactada)
MIRROR=${MIRROR:-"ftp://ftp.debian.org"}

Y cambiamos la ruta del mirror por la nuestra, en mi caso queda así:

MIRROR=${MIRROR:-"http://mirrors.pri.jovenclub.cu/debian"}

Guardamos y Salimos, con Ctrl+O (Guardar) y Ctrl+X (Salir del Editor)

Ahora el otro fichero es este:

apolo:/usr/share/ltsp/plugins/ltsp-build-client/Debian# pico 010-security-mirror

Dentro buscamos esta línea:

(Ejemplo de como podría estar redactada)
SECURITY_MIRROR=${SECURITY_MIRROR:-"ftp://security.debian.org";

Y la modificamos para que quede así:

SECURITY_MIRROR=${SECURITY_MIRROR:-"http://mirrors.pri.jovenclub.cu/debian-security"}

Guardamos y Salimos, con Ctrl+O (Guardar) y Ctrl+X (Salir del Editor)

Nos cambiamos para la raíz del user, teclenando el comando cd:

apolo:/usr/share/ltsp/plugins/ltsp-build-client/Debian# cd

Ahora estamos en condiciones de comenzar a crear la imagen que van a cargar los clientes ligeros, para ello ejecutamos:

apolo:~# ltsp-build-client --arch i386

Con esto se creará en el directorio /opt/ltsp/i386 la imagen para nuestros clientes, que no es más que un sistema mínimo para que puedan arrancar el sistema, y será en dependencia del sistema que estemos usando en nuestra maquina servidor, hay que esperar un poco porque este proceso tarda unos minutos, depende del ancho de banda del que dispongamos para descargar los paquetes del repositorio y la velocidad de nuestra PC Servidor. Con el parámetro i386 indicamos que queremos un sistema para una arquitectura i386, en caso de ser otra arquitectuta, entonces lo especificamos, ejemplo una amd64, ppc, etc.

Una vez terminado el proceso tendremos un sistema en /opt/ltsp/i386 pero debemos entrar en él para configurar algunas cosas, para esto utilizamos chroot:

apolo:~# chroot /opt/ltsp/i386

Montamos el directorio proc

apolo:~# mount -t proc proc /proc

Actualizamos el sistema (en dependencia de la versión que usamos para instalar desde el CD, sino hemos actualizado del mirror, actulizará unos cuantos MB de paquetes, como es el kernel más reciente, etc.)

apt-get update
apt-get upgrade

Vamos a configurar ahora nbd o nfs, me he decidido por nbd porque según la documentación que he leído con nfs se ralentiza mucho el arranque cuando son muchos clientes, para ello hay que instalar dentro del chroot los siguientes paquetes (todavía estamos dentro del chroot):

apolo:~# apt-get install squashfs-modules-2.6.26-2-686 aufs-modules-2.6.26-2-686

Para saber el kernel que utiliza la imagen, lo mejor es meterse en el directorio /boot del chroot y ver que kernel es el que tiene la imagen, para estar mas seguros, ya que si ejecutamos un uname -r mostrará el kernel del servidor no el de la imagen.

Una vez hayamos instalados estos paquetes configuramos dos ficheros (seguimos dentro del chroot):

apolo:~# pico /etc/default/ltsp-client-setup

Y en la línea:

root_write_method=”"

La modificamos por:

root_write_method=”aufs”

En el fichero default, dentro del directorio /boot/pxelinux.cfg/, dejamos la línea con:

DEFAULT vmlinuz ro initrd=initrd.img quiet

Es decir, quitar la parte que dice: root=/dev/nfs ip=dhcp boot=nfs

Si queremos, para no eliminarla, podemos hacer algo como esto y nos quedaría asi el fichero:

#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

Para si algún día queremos cambiar el método de asiganación de las imagenes para los clientes con nfs, podamos restablecer este valor en el fichero.

Ahora debemos rehacer el initrd:

apolo:~# update-initramfs -u

Una vez hecho esto ya tendremos configurado el servicio de ndb, si lo que queremos es configurar nfs, debemos dejar estos ficheros que venían por defecto y compartir (esto en el servidor) en el fichero /etc/exports, el directorio /opt/ltsp:

/opt/ltsp *(ro,no_root_squash,async)

Ahora debemos reiniciar el servidor nfs-kernel-server, ésto es si se quiere configurar nfs para compartir la imagen, de lo contrario no debemos reiniciarlo, en este caso hemos utilizado nbd. Aunque es un poco molesto, porque cada vez que hagamos un cambio sobre el chroot hay que reconstruir la imagen de la carga, pero garantiza más rapidez para varios clientes.

Ahora debemos realizar los siguientes pasos:


apolo:/# umount /proc
apolo:/# exit

Para desmontar el directorio proc y salir del chroot.

Ya sólo nos resta reconstruir la imagen con los nuevos cambios realizados, para esto debemos ejecutar:

apolo:# ltsp-update-kernels #(por si se ha actualizado el kernel)
apolo:# ltsp-update-image --arch i386 #(para actualizar la imagen)
apolo:# ltsp-update-sshkeys # dia(se suele utilizar cuando desde un cliente no validan los usuarios)

Recuerde que para hacer cualquier cambio en el directorio de la imagen del cliente, debemos cambiarnos para su chroot, y dentro hacer los cambios necesarios:

apolo:~# chroot /opt/ltsp/i386

Montamos el directorio proc

apolo:~# mount -t proc proc /proc

Instalando interfaz gráfica para los clientes. Podemos usar cualquiera de los entornos de escritorio, como es: GNOME, KDE, FluxBox, XFCE, LXDE, etc. En este caso vamos a usar LXDE por ser un entorno bastante sencillo, y comodo de usar, así que en nuestra consola, tipeamos:

apolo:# aptitude install lxde

De esta misma manera procedemos para instalar cualquier otro paquete que necesitemos en nuestra imagen, como es el procesador de textos, navegador web, cliente de mensajería, etc.

Configuración de los dispositivos USB en el cliente.
Primeramente debemos crear el fichero lts.conf /var/lib/tftpboot/ltsp/i386/lts.conf, con el siguiente contenido:

[default]
CONFIGURE_FSTAB=True
RUNLEVEL=5
LOCAL_APPS=True
LOCALDEV=True
LOCAL_STORAGE=True
LOCAL_DEVICE_01=/dev/uba:usb
HOTPLUG=True
SOUND=True
SOUND_DAEMON=True
X_COLOR_DEPTH=16
XKBLAYOUT=es(intl)
# PRINTER_0_TYPE=P
# PRINTER_0_DEVICE=/dev/lp0
NBD_SWAP=True

#MAC del Cliente Ligero, y así separamos por cada cliente a utilizar una sección como esta.
[00:19:D1:E0:60:3B]
LOCAL_APPS=True
RUNLEVEL=5
LOCALDEV=True
LOCAL_STORAGE=True
LOCAL_DEVICE_01=/dev/uba:usb
HOTPLUG=True
SOUND=True

Aquí se especifican algunos valores que debe cargar nuestro cliente, cualquier cambio que se haga en ese fichero, solo es necesario reiniciar el cliente, y no volver a actualizar la imagen del cliente.

Puede ser que necesitemos para montar las memorias usb, instalar algunos paquetes como:

fuse-utils
libfuse2

Después añadimos al user del cliente a los grupos de fuse, plugdev, y algún otro que necesitemos.

apolo:/# usermod -G fuse,plugdev usuario

Para montar automaticamente los dispositivos usb es necesario que en nuestro sistema se inicien dos demonios, los cuales son:

dbus y hal

Estos demonios, permiten que todo el hardware que se conecte en nuestro sistema, sea reconocido al iniciar el cliente, por lo que deben estar corriendo, para que reconozca los dispositivos usb.

Para saber en el modo que se están ejecutando estos demonios, tecleamos en una terminal, los siguientes comandos:

apolo:/# find /etc/rc* /etc/init.d -name "*dbus"
apolo:/# find /etc/rc* /etc/init.d -name "*hal"

Debemos obtener algo como esto en la consola:

zeus:/# find /etc/rc* /etc/init.d -name "*dbus"
/etc/rc1.d/K02dbus
/etc/rc2.d/S12dbus
/etc/rc3.d/S12dbus
/etc/rc4.d/S12dbus
/etc/rc5.d/S12dbus
/etc/init.d/dbus

zeus:/# find /etc/rc* /etc/init.d -name "*hal"
/etc/rc1.d/K02hal
/etc/rc2.d/S12hal
/etc/rc3.d/S12hal
/etc/rc4.d/S12hal
/etc/rc5.d/S12hal
/etc/init.d/hal

Para ambos demonios, debe ser parecida la salida del comando, solo con el nombre del demonio diferente. Atención en esta parte, puede ser que se encuentren los demonios en modo kill (muerto), si este es el caso, la salida de los comandos anteriores, mostrará algo parecido, pero en ves de tener una S en el nombre del fichero a ejecutarse en cada runlevel, tendrá una K, que significa que el demonio no ha sido arrancado, si este es el caso, entonces, debemos nosotros manualmente, crear unos enlaces simbólicos para que arranquen en el inicio del sistema los demonios antes mencionados, lo hacemos de la siguiente manera:

zeus:/# ln -s /etc/init.d/hal /etc/rc4.d/S12hal
zeus:/# ln -s /etc/init.d/dbus /etc/rc4.d/S12dbus

Por cada runlevel, debemos crear un enlace simbólico, son 7 runlevel, pero solo usaremos 4, en el runlevel 1(rc1.d) debe estar en modo Kill, es decir, debe decir algo como esto: K12hal, y en los demás runlevel como S12hal, los directorios de los runlevel los podemos encontar en /etc/rc2.d, /etc/rc3.d, etc, hasta el numero 6. Lo mismo para el demonio dbus, una vez echo esto debemos fijarnos, en que los enlaces que apuntaban a los demonios con la letra K delante del numero y del nombre del demonio, debemos eliminarlos, o moverlos para un respaldo que quieran realizarles.

Por ejemplo, si en uno de los directorios de los runlevel aparece algo como esto: K12hal, debemos eliminar esos enlaces simbólicos, recuerde que los directorios de los runlevel, son estos:

/etc/rc1.d
/etc/rc2.d
/etc/rc3.d
/etc/rc4.d
/etc/rc5.d
/etc/rc6.d

Una vez termiando los cambios que deseamos, procedemos a desmontar el directorio /proc, y salimos del chroot de la imagen.

apolo:/# umount /proc
apolo:/# exit

--

Raydel Hernández Martínez.
Subdirección Tecnología y Desarrollo.
Dirección Provincial de Joven Club.
Teléfonos: 048-752311 ext. 115.
Dirección: Calle Martí. Esq. Cuarteles # 124, Pinar del Río.


E-mail:ray...@pri.jovenclub.cu <mailto:ray...@pri.jovenclub.cu>
Jabber: ray...@jabber.pri.jovenclub.cu <mailto:ray...@jabber.pri.jovenclub.cu>
Linux_User: # 466430






______________________________________________________________________
Lista de correos del Grupo de Usuarios de Tecnologías Libres de Cuba.
Gutl-l@jovenclub.cu
https://listas.jovenclub.cu/cgi-bin/mailman/listinfo/gutl-l

Responder a