<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.1//EN">

<book id="lwce20010827" lang="es">

  <bookinfo>
    <title>LTSP - Linux Terminal Server Project - v3.0</title>

    <authorgroup>
        <author>
           <firstname>James</firstname>
           <surname>McQuillan</surname>
           <affiliation>
              <address><email>jam@LTSP.org</email>
              </address>
           </affiliation>
        </author>
    </authorgroup>

    <revhistory>
       <revision>
         <revnumber>1.0.4&nbsp;</revnumber>
         <date>2002-03-02</date>
         <authorinitials>jam</authorinitials>
       </revision>
    </revhistory>

    <copyright>
        <year>2002</year>
        <holder>James A. McQuillan</holder>
    </copyright>

    <abstract>
       <para>
	GNU/Linux es una gran plataforma para el uso de estaciones de trabajo
	sin disco. El objetivo principal de este documento es mostrarte cómo
	puedes utilizar LTSP para desplegar clientes sin disco. Sin
	embargo, este documento también muestra cuestiones de las estaciones
	sin disco en general. 
       </para>
    </abstract>
  </bookinfo>

<preface>
    <title>Introducción</title>

    <para>
	El LTSP provee una manera simple de utilizar estaciones de trabajo
	de bajo costo tanto como terminales gráficas o bien como terminales
	de caracteres sobre un servidor GNU/Linux.
    </para>

    <para>
    	En una configuración de oficina tradicional, hay PCs de bastante poder
	desparramadas en cada escritorio. Cada una con varios gigabytes de
	espacio en disco. Los usuarios almacenan su información en sus discos
	locales y las copias de resguardo se realizan raramente (si es que
	se realizan).
    </para>

    <para>
	¿Tiene realmente sentido tener un computador completo en cada escritorio?
    </para>

    <para>
	Nosotros decimos que no.
    </para>

    <para>
	Afortunadamente, hay otro camino. Utilizando LTSP, puedes tomar cada
	PC de bajo poder, removerle el disco duro, el floppy y la lectora
	de CDs y agregarle una placa de red con chip de inicio. Muchas tarjetas
	de red poseen sócalos para bootroms (memorias ROM de inicio), que
	están esperando que se les inserte uno de estos chips.
    </para>

    <para>
	Durante la fase de inicio, la estación de trabajo sin disco obtiene
	su dirección IP y un kernel (núcleo) desde el servidor, montando luego
	su sistema de archivos raíz desde el mismo servidor vía NFS.
    </para>

    <para>
	La estación de trabajo puede ser configurada de tres maneras:
        <itemizedlist>
            <listitem>
                <para><command>X Window Gráfico</command></para>
                <para>
			Utilizando X Window, la estación de trabajo puede ser usada para acceder
			cualquier aplicación en el servidor, o en cualquier otro servidor
			dentro de la red.
                </para>
            </listitem>
        </itemizedlist>

        <itemizedlist>
            <listitem>
                <para><command>Sesiones de Telnet basadas en caracteres</command></para>
                <para>
			Cada estación de trabajo puede invocar múltiples sesiones de telnet
			al servidor. Cada una de estas sesiones aparecerá en una pantalla
			virtual separada. Presionando desde Alt-F1 hasta Alt-F9 se cambiará
			entre cada una de dichas sesiones.
                </para>
            </listitem>
        </itemizedlist>	

        <itemizedlist>
            <listitem>
                <para><command>Prompt de Shell</command></para>
                <para>
			La estación de trabajo puede ser configurada para dejarte justo dentro
			de una sesión de Bash en la consola. Esto es muy útil para depurar
			problemas con X Window o con NFS.
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
    	Lo que es realmente impresionante de todo esto es que puedes tener
	montones de estaciones de trabajo, todas servidas desde un único servidor
	GNU/Linux. ¿Hasta cuántas estaciones te preguntas? Pues bien, esto
	depende del tamaño del servidor y de las aplicaciones que has de utilizar.
    </para>

    <para>
    	No es inusual tener 40 estaciones de trabajo, todas corriendo Netscape
	y StarOffice, desde un Dual PIII-650 con 1GB de RAM. Sabemos que esto
	funciona. ¡De hecho, el promedio de carga muy rara vez sobrepasa 1.0!
    </para>

    <sect1>
        <title>Disclaimer</title>
        <para>
		Ni el autor ni ninguno de los distribuidores, o cualquier otro contribuyente
		a este documento, es en modo alguno responsable por los daños físicos,
		morales, o de cualquier otro tipo incurridos por sólo hecho de seguir
		las sugerencias citadas en este texto.
        </para>
    </sect1>

    <sect1 id="copyright">
        <title>Licencia y Copyright</title>
        <para>
		Este documento tiene copyright 2001 por James McQuillan, y está realizado
		bajo los términos de la GNU Free Documentation License (Licencia de
		Documentación Libre GNU), la cual es incorporada por la presente para
		referencia.
        </para>
    </sect1>
</preface>

<chapter>
    <title>Teoría de Operación</title>
    <para>
	Iniciar una estación de trabajo sin disco involucra muchos pasos.
	Comprender qué está pasando a través del camino hará mucho mas fácil
	resolver los problemas que pudiesen surgir.
    </para>
    <para>
    	Este ejemplo está basado en la siguiente configuración:
        <itemizedlist>
            <listitem>
                <para>Estación de trabajo estándar, basada en x86.</para>
            </listitem>
            <listitem>
                <para>
                    Tarjeta de red Linksys LNE100TX con una bootrom Etherboot.
                </para>
            </listitem>
            <listitem>
                <para>Chipset gráfico basado en Intel i810.</para>
            </listitem>
            <listitem>
                <para>Servidor corriendo RedHat 7.2.</para>
            </listitem>
            <listitem>
                <para>DHCP.</para>
            </listitem>
            <listitem>
                <para>Dirección de la red 192.168.0.0/24.</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
	Asumiendo que el servidor está configurado con el paquete LTSP, esto
	es lo que sucede:
    </para>

    <orderedlist spacing="normal">
        <listitem>
            <para>
                Cuando enciendes la estación de trabajo, la misma pasa a través de
		su Power On Self Test - POST (autorevisión de encendido).
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Durante la autorevisión, el BIOS buscará roms de expansión. Cada tarjeta
		de red posee una bootrom Etherboot, la cual es una rom de expansión.
		Por lo tanto el BIOS detectará la rom en la placa de red.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Una vez que el POST es completado, la ejecución saltará dentro del
		código Etherboot.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                El código Etherboot buscará una placa de red. Una vez que la misma
		es detectada, será inicializada.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                El código Etherboot realizará luego una petición DHCP mediante un
		broadcast por la red. La petición incluirá la dirección MAC de la
		tarjeta de red.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                El demonio dhcpd del servidor verá la petición de broadcast de la
		estación de trabajo, y buscará dentro de su propio archivo de configuración
		la entrada que concuerde con la dirección MAC de la terminal.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                El demonio dhcpd construirá un paquete de respuesta, conteniendo varias
		piezas de información. Este paquete será enviado de vuelta a la estación
		de trabajo. Esta respuesta incluye:
                <itemizedlist>
                    <listitem>
                        <para>
                            Dirección IP de la estación de trabajo.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
                            Máscara de red de la red local.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
                            Localización del núcleo a descargar.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
                            Localización del sistema de archivos raíz a montar.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
                            Parámetros opcionales que deben ser pasados al núcleo, a través
			    de la línea de comandos del kernel.
                        </para>
                    </listitem>
                </itemizedlist>
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                El código Etherboot recibirá la respuesta desde el servidor y configurará
		la interfase TCP/IP en la tarjeta de red con los parámetros que le
		fueron suministrados.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Utilizando TFTP (Trivial File Transfer Protocol), el código Etherboot
		se contactará con el servidor y comenzará a descargar el núcleo.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Una vez que el núcleo fue completamente descargado en la estación
		de trabajo, el código Etherboot colocará al mismo en la correcta locación
		de memoria.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                El control es pasado luego al núcleo, el cual inicializará al sistema
		completo y a todos los periféricos que reconozca.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Aquí es donde la diversión comienza verdaderamente. Hilvanada al final
		del kernel hay una imagen de un sistema de archivos. Esta imagen es
		cargada en memoria como un ramdisk (disco de memoria ), y es temporariamente
		montada como el sistema de archivos raíz. Un argumento <command>root=/dev/ram0</command>
		en la línea de comandos del kernel le dice al mismo que debe montar
		la imagen como su directorio raíz.
            </para>
            <para></para>
        </listitem>
                 
        <listitem>
            <para>
                Normalmente, cuando el núcleo finaliza su inicialización, lanza al
		programa <command>init</command>. Pero, en este caso, hemos instruido al kernel
		para que cargue un script de shell. Hacemos esto mediando un argumento
		<command>init=/linuxrc</command> en la línea de comandos del núcleo.
            </para>
            <para></para>
        </listitem>
                
        <listitem>
            <para>
                El script <command>/linuxrc</command> comienza rastreando el bus PCI en busca
		de alguna placa de red. Por cada dispositivo PCI que encuentra, realiza
		una búsqueda en el archivo /etc/niclist, para ver si hay alguna concordancia.
		Una vez que una concordancia es encontrada, el nombre del módulo de
		la interfase de red es retornado para que sea posteriormente cargado
		en el kernel. Para las placas ISA, el nombre del módulo DEBE estar
		especificado en la línea de comandos del kernel, junto con cualquier
		parámetro de IRQ o dirección de memoria que fuera requerido.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Una vez que la placa de red ha sido identificada, el script /linuxrc
		cargará el módulo de kernel que soporta a dicha tarjeta.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                <command>dhclient</command> correrá entonces, para realizar otra petición a
		el servidor DHCP. Necesitamos hacer esta petición separada debido
		a que si dependemos de la petición que viene con Etherboot, la misma
		sería tragada por el kernel, y el mismo ignoraría cualquier servidor
		NFS que fuera especificado en el root-path (localización del directorio
		raíz). Esto es importante si deseas que el servidor NFS sea diferente
		al servidor TFTP.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Cuando <command>dhclient</command> obtenga una respuesta desde el servidor,
		correrá el archivo <command>/etc/dhclient-script</command>, el cual tomará la
		información recogida y configurará la interfase eth0.
            </para>
            <para></para>
        </listitem>


        <listitem>
            <para>
                Hasta este punto, el sistema de archivos raíz había sido un disco
		ram. Ahora, el script /linuxrc montará un nuevo sistema de archivos
		raíz a través de NFS. El directorio exportado por el servidor es típicamente
		<command>/opt/ltsp/i386</command>. No puede tan sólo montar al nuevo sistema
		de archivos como /. Debe primero montarlo en /mnt. Luego, ejecutará
		<command>pivot_root</command> (pivotaje del raíz). pivot_root realizará un
		intercambio del sistema de archivos corriente por uno nuevo. Cuando
		esto esté completado, el sistema de archivos NFS será montado como
		/, y el viejo será montado en /oldroot.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Una vez completado el montaje y el pivotaje del nuevo sistema de archivos
		raíz, se acaba el script /linuxrc y un <command>init</command> real es invocado.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Init leerá el archivo <filename>etc/inittab</filename> y comenzará a configurar el ambiente
		de la estación de trabajo.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Init mantiene la idea de <emphasis>runlevel</emphasis> (nivel de corrida). Cada
		runlevel prepara un conjunto diferente de servicios para la estación
		de trabajo. La estación LTSP inicia en el runlevel '2'. Esto está
		predispuesto por la línea <emphasis>initdefault</emphasis> del archivo inittab.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
	        Uno de los primeros puntos en el archivo inittab es el comando <command>rc.local</command>
		que correrá mientras la estación de trabajo esté en el estado '<emphasis role="strong">sysinit</emphasis>'.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                El script rc.local creará un disco ram de 1 MB que contedrá todas
		las cosas que necesitan ser escritas o modificadas de algún modo.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
	    	El disco ram será montado en el directorio <filename class="directory">/tmp</filename>. Cualquier archivo
		que necesite ser escrito o modificado existirá realmente en el directorio
		<filename class="directory">/tmp</filename>, con algún link simbólico apuntando hacia él.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                El sistema de archivos <filename class="directory">/proc</filename> es montado.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Si la estación de trabajo está configurada para realizar intercambio
		sobre NFS, el directorio <command>/var/opt/ltsp/swapfiles</command> del servidor
		será montado en /tmp/swapfiles en la estación. Luego, si no hay ningún
		archivo de intercambio para esta estación de trabajo que haya sido
		creado con anterioridad, será creado automáticamente. El tamaño de
		este archivo de intercambio es preconfigurado en el archivo <filename>lts.conf</filename>,
            </para>
            <para>
                El archivo de intercambio es habilitado mediante el comando <command>swapon</command>.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                La interfase de red de <emphasis role="strong">loopback</emphasis> es configurada. Este es el
dispositivo de red que tiene la dirección IP <emphasis>127.0.0.1</emphasis>.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Si la opción de Aplicaciones Locales (Local Apps) es habilitada, entonces
		el directorio <command>/home</command> será montado, para que las aplicaciones
		puedan utilizar los directorios personales de los usuarios.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Varios directorios son creados en el sistema de archivos <filename class="directory">/tmp</filename> para
		que contengan algunos de los ficheros transitorios que son necesarios
		mientras el sistema está corriendo. Algunos son:
                <orderedlist>
                    <listitem>
                        <para>
                            <filename>/tmp/compiled</filename>
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <filename>/tmp/var</filename>
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <filename>/tmp/var/run</filename>
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <filename>/tmp/var/log</filename>
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <filename>/tmp/var/lock</filename>
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <filename>/tmp/var/lock/subsys</filename>
                        </para>
                        <para></para>
                    </listitem>
                </orderedlist>
            </para>
            <para></para>

            <para>
                Todos estos serán creados.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
	    	El sistema X Window será ahora configurado. En el archivo <command>lts.conf</command>,
		hay un parámetro llamado <command>XSERVER</command>. Si este parámetro falta,
		o está puesto en "<command>auto</command>", entonces se intentará una
		detección automática de la placa de video. Si la misma es PCI, entonces
		se obtendrá el PCI Vendor y el Device id, y se buscará a los mismos
		en el archivo <command>/etc/vidlist</command>.
            </para>
            <para>
                Si la placa es soportada por XFree86 4.X, el script pci_scan devolverá
		el nombre del módulo controlador. Si por el contrario la placa es
		sólo soportada por XFree86 3.3.6, pci_scan devolverá el nombre del
		servidor X a utilizar. El script rc.local puede saber la diferencia
		debido a que los nombres de los viejos servidores X 3.3.6 comienzan
		con 'XF86_'.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Si XFree86 4.x es utilizado, entonces el script <command>/etc/rc.setupx</command>
		será llamado para construir un archivo XF86Config para X4. Por el
		contrario, si XFree86 3.3.6 es utilizado, entonces <command>/etc/rc.setupx3</command>
		será llamado para construir el archivo XF86Config.
            </para>
            <para>
                El archivo XF86Config será construido en base a las entradas contenidas
		en <command>/etc/lts.conf</command>.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Cuando el script rc.setupx finaliza, retornará a rc.local. Luego el
		script <command>/tmp/start_ws</command> será creado. Este script es el responsable
		de llamar al servidor X.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
	    	El archivo <filename>/tmp/syslog.conf</filename> será creado. Este archivo contendrá
		información que le dirá al demonio <command>syslogd</command> hacia qué máquina
		de la red se le debe debe enviar la información de los historiales.
		Esta máquina es especificada en el archivo <filename>lts.conf</filename>. Hay
		un link simbólico llamado <filename>/etc/syslog.conf</filename> que apunta hacia
		<filename>/tmp/syslog.conf</filename>.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                El demonio <command>syslogd</command> es iniciado, usando el archivo de configuración
		creado en el paso anterior.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
	   	En control es nuevamente pasado a <command>init</command>. Init buscará la entrada
		<emphasis role="strong">inittdefault</emphasis> para determinar a cuál 
		<emphasis role="strong">runlevel</emphasis> ingresar.
		Como en lts_core-2.08, el valor por defecto es 
		<emphasis role="strong">2</emphasis>.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                El runlevel <emphasis role="strong">2</emphasis> causará que init corra el script 
		<command>set_runlevel</command> el cual leerá el archivo lts.conf para determinar 
		a cuál runlevel la estación de trabajo ingresará de hecho.
            </para>
            <para>
                Los runlevels estandar de LTSP son el <emphasis role="strong">3</emphasis>, 
		el <emphasis role="strong">4</emphasis> y
		el <emphasis role="strong">5</emphasis>.
                <itemizedlist>
                    <listitem>
                        <para>
                            <emphasis role="strong">3</emphasis> - Este comenzará un shell. Esto es muy útil para depuración
			    de errores.
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <emphasis role="strong">4</emphasis> - Este correrá una o más sesiones de Telnet en modo de
			    caracteres. Esto es genial si estás reemplazando viejas terminales
			    seriales.
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <emphasis role="strong">5</emphasis> - Modo GUI (Interfase Gráfica de Usuario). Este iniciará
			    X Window, y enviará una petición XDMCP al servidor, el cual devolverá
			    una caja de diálogo de inicio que te permitirá ingresar al servidor.
			    Necesitarás para esto tener un Display Manager (Administrador de Visualización)
			    escuchando en el servidor, tal como <emphasis role="strong">XDM</emphasis>, 
			    <emphasis role="strong">GDM</emphasis> o <emphasis role="strong">KDM</emphasis>.
                        </para>
                        <para></para>
                    </listitem>
                </itemizedlist>
            </para>
            <para></para>
        </listitem>
    </orderedlist>
    <para></para>
</chapter>

<chapter>
    <title>Instalando LTSP en el servidor</title>
    <para>
        Los paquetes LTSP están disponibles tanto en formato <emphasis role="strong">RPM</emphasis>
	como en <emphasis role="strong">TGZ</emphasis>. Escoge el formato que más te guste, y sigue
	las instrucciones en la sección apropiada.
    </para>

    <para>
        Si quieres correr X Window en la estación de trabajo, entonces hay
	4 paquetes que necesitarás descargar. Ten en mente que, para los propósitos
	de este documento, tenemos una estación de trabajo con una tarjeta
	de red basada en Tulip y una placa de video basada en el chipset Intel
	i810.
            
        <orderedlist>
            <listitem>
                <para>
                    Paquete principal LTSP (core package)
                </para>
            </listitem>
            <listitem>
                <para>
                    Paquete de núcleo (kernel package)
                </para>
            </listitem>
            <listitem>
                <para>
                    Paquete principal de X (X core package)
                </para>
            </listitem>
            <listitem>
                <para>
                    Paquete principal de X (X core package)
                </para>
            </listitem>
        </orderedlist>

	El paquete de fuentes X no es realmente necesario, pero para una instalación
	desde cero, es recomendado. Una vez que tengas en claro cómo configurar
	un servidor y las estaciones de trabajo sin disco, puedes levantar
	un servidor de fuentes X (XFS).
     </para>

     <para>
        Luego de que los paquetes hayan sido instalados, el sistema LTSP necesita
	ser inicializado. Este proceso incluye cambios en los archivos de
	configuración del sistema para habilitar los servicios necesitados
	por las estaciones en el servidor.
    </para>

    <sect1>
        <title>Instalando los paquetes RPM</title>
        <para>
            Descarga la última versión de los paquetes ltsp, e instálalos mediante
	    los siguientes comandos:
            <programlisting>
rpm -ivh ltsp_core-3.0.0-1.i386.rpm

rpm -ivh ltsp_kernel-3.0.1-1.i386.rpm

rpm -ivh ltsp_x_core-3.0.1-1.i386.rpm

rpm -ivh ltsp_x_fonts-3.0.0-0.i386.rpm</programlisting>
            Los comandos arriba mencionados instalarán los paquetes dentro del
	    directorio <filename class="directory">/opt/ltsp/i386</filename>.
        </para>
    </sect1>

    <sect1>
        <title>Instalando los paquetes TGZ</title>

        <para>
            Descarga la última versión de los paquetes ltsp e instálalos mediante
	    los siguientes comandos:
            <programlisting>
tar xzf ltsp_core-3.0.0-i386.tgz
cd ltsp_core
./install.sh
cd ..

tar xzf ltsp_kernel-3.0.1-i386.tgz
cd ltsp_kernel
./install.sh
cd ..

tar xzf ltsp_x_core-3.0.1-i386.tgz
cd ltsp_x_core
./install.sh
cd ..

tar xzf ltsp_x_fonts-3.0.0-i386.tgz
cd ltsp_x_fonts
./install.sh
cd ..</programlisting>
            Los comandos arriba mencionados instalarán los paquetes dentro del
	    directorio <filename class="directory">/opt/ltsp/i386</filename>.
        </para>
    </sect1>

    <sect1>
        <title>Inicialización del servidor</title>
        <para>
            Una vez que la instalación de los paquetes es completada, necesitas
	    entrar al directorio <filename class="directory">/opt/ltsp/templates</filename>. Allí hay varios
	    scripts que configurarán los archivos de sistema de tu servidor. Cada
	    uno de estos scripts es responsable por un archivo de sistema. Mira
	    el interior de estos scripts para asegurarte de que estás de acuerdo
	    con lo que van a hacer, ya que potencialmente pueden hacer tu sistema
	    vulnerable a un ataque de seguridad. Podrías desear realizar los cambios
	    al sistema de forma manual. Si por el contrario quieres hacerlo automáticamente,
	    entonces corre el comando ltsp_initialize:
         
            <programlisting>
cd /opt/ltsp/templates
./ltsp_initialize </programlisting>

            El comando de arriba te preguntará acerca de cuáles servicios quieres
	    que configure. 

	    El mismo puede inicializar a los siguientes :

            <itemizedlist>
                <listitem>
                    <para>XDM - X Display Manager</para>
                </listitem>
                <listitem>
                    <para>GDM - Gnome Display Manager</para>
                </listitem>
                <listitem>
                    <para>Script de inicio del Display Manager</para>
                </listitem>
                <listitem>
                    <para>bootp</para>
                </listitem>
                <listitem>
                    <para>NFS, archivo /etc/exports</para>
                </listitem>
                <listitem>
                    <para>tcpwrappers (archivos /etc/hosts.allow, /etc/hosts.deny)</para>
                </listitem>
                <listitem>
                    <para>Port mapper</para>
                </listitem>
                <listitem>
                    <para>syslogd</para>
                </listitem>
                <listitem>
                    <para>Script de inicio de TFTP</para>
                </listitem>
            </itemizedlist>
        </para>
    </sect1>

    <sect1>
        <title>Configuración específica de la estación de trabajo</title>
        <para>
            Ahora, es tiempo de contarle al servidor LTSP acerca de tu estación
	    de trabajo. Hay tres archivos que contienen información acerca de
	    la misma.

            <orderedlist>

                <listitem>
                    <para>/etc/dhcpd.conf</para>
                </listitem>

                <listitem>
                    <para>/etc/hosts</para>
                </listitem>

                <listitem>
                    <para>/opt/ltsp/i386/etc/lts.conf</para>
                </listitem>

            </orderedlist>

        </para>

        <sect2>
            <title>/etc/dhcpd.conf</title>
            <para>
                La estación de trabajo necesita una dirección IP y otra información.
		Obtendrá a través de un servidor DHCP lo siguiente:
                <itemizedlist>
                    <listitem> <para>Dirección IP</para> </listitem>
                    <listitem> <para>Nombre de host</para> </listitem>
                    <listitem> <para>Dirección IP del servidor</para> </listitem>
                    <listitem> <para>Pasarela por defecto</para> </listitem>
                    <listitem> <para>Localización del núcleo a cargar</para> </listitem>
                    <listitem> <para>Servidor y directorio a montar como el sistema de archivos raíz
                               </para> </listitem>
                </itemizedlist>
            </para>
            <para>
                Para nuestro ambiente LTSP de ejemplo, hecmos elegido DHCP para el
		manejo de las direcciones IP a las estaciones de trabajo.
            </para>
            <para>
                Durante el script ltsp_initialize, un archivo dhcpd.conf de muestra
		es instalado, llamado <filename>/etc/dhcpd.conf.example</filename>. Puedes copiar
		al mismo en <filename>/etc/dhcpd.conf</filename> para usarlo como base para tu
		configuración de dhcp. Probablemente necesitarás modificar las partes
		correspondientes a tu estación de trabajo específica y a tu ambiente
		en particular.
                <figure float="1">
                <title>/etc/dhcpd.conf</title>
                <programlisting>
default-lease-time            21600;
max-lease-time                21600;
    
option subnet-mask            255.255.255.0;
option broadcast-address      192.168.0.255;
option routers                192.168.0.254;
option domain-name-servers    192.168.0.254;
option domain-name            "ltsp.org";
option root-path              "192.168.0.254:/opt/ltsp/i386";
    
shared-network WORKSTATIONS {
    subnet 192.168.0.0 netmask 255.255.255.0 {
    }
}
    
group	{
    use-host-decl-names       on;
    option log-servers        192.168.0.254;
    
    host ws001 {
        hardware ethernet     00:E0:18:E0:04:82;
        fixed-address         192.168.0.1;
        filename              "/lts/vmlinuz.ltsp";
    }
} </programlisting>
                </figure>
            </para>

            <para>
                Como en LTSP versión 2.09pre2, no necesitas especificar un kernel
		en particular para cargar. El paquete estándar de núcleo soporta todas
		las placas de red que Linux soporta. Hay dos archivos de kernel incluidos
		en el paquete LTSP-kernel. Uno de los archivos tiene el Linux Progress
		Patch (parche que muestra una barra de progreso gráfica) y el otro
		no. Los nombre de estos núcleos son:
                <programlisting>
vmlinuz-2.4.9-ltsp-5
vmlinuz-2.4.9-ltsp-lpp-5 </programlisting>
            </para>
            <para>
	    	Puede que hayas notado que el kernel sigue estando ubicado en el directorio
		<filename class="directory">/tftpboot/lts</filename>, pero en la entrada "filename" del archivo
		<filename>/etc/dhcpd.conf</filename> no está el <filename class="directory">/tftpboot</filename> del comienzo.
		Esto es así debido a que en versiones de RedHat superiores a 7.1 el
		TFTP corre con la opción '-s', lo que causa que el demonio tftpd corra
		en modo <emphasis role="strong">seguro</emphasis>, Esto significa que realiza un <command>chroot</command>
		al directorio <filename class="directory">/tftpboot</filename> cuando comienza. Por lo tanto, todos
		los archivos que están disponibles para el demonio tftpd son relativos
		al directorio <filename class="directory">/tftpboot</filename>.
            </para>
            <para>
                Otras distribuciones de Linux pueden no tener la opción '-s' activa
		para tftpd, por lo que puedes necesitar agregar el prefijo 
		<filename class="directory">/tftpboot</filename>
		a la localización del kernel en el archivo /etc/dhcpd.conf.
            </para>
        </sect2>

        <sect2>
            <title>/etc/hosts</title>
            <para>Mapeo de direcciones IP a nombres de host</para>
            <para>
                Las computadoras generalmente se comunican bastante bien solo con
		direcciones IP. Pero los humanos venimos y necesitamos ponerles nombres
		a los ordenadores, debido a que no podemos recordar los números. Ahí
		es cuando el DNS o el archivo <filename>/etc/hosts</filename> entra escena. Este
		mapeo de direcciones IP a nombres de host no es requerido generalmente,
		excepto en un ambiente LTSP. Esto es así porque sin este mapeo, el
		NFS dará errores de permisos cuando la estación de trabajo intente
		montar el sistema de archivos raíz.
            </para>
	    <para>
	    	En adición a los problemas de NFS, si la estación de trabajo no se
		encuentra en el archivo <filename>/etc/hosts</filename>, también podrías
		tener problemas con los Display Managers <emphasis role="strong">GDM</emphasis> y
		<emphasis role="strong">KDM</emphasis>.
	    </para>
        </sect2>

        <sect2>
            <title>/opt/ltsp/i386/etc/lts.conf</title>
            <para>
                Hay un número de entradas de configuración que son especificados en
		el archivo lts.conf.
            </para>

            <para>
                El archivo <filename>lts.conf</filename> tiene una sintaxis simple, que consiste
		de múltiples secciones. Hay una sección por defecto, llamada <command>[default]</command>
		y hay secciones adicionales para estaciones de trabajo individuales.
		Las estaciones de trabajo pueden ser identificadas por nombre de host,
		dirección IP o dirección MAC.
            </para>

            <para>
                Un archivo típico <filename>lts.conf</filename> luce así:
                <example>
                    <title>lts.conf file</title>
                    <programlisting>
#
# Config file for the Linux Terminal Server Project (www.ltsp.org)
#

[Default]
        SERVER             = 192.168.0.254
        XSERVER            = auto
        X_MOUSE_PROTOCOL   = "PS/2"
        X_MOUSE_DEVICE     = "/dev/psaux"
        X_MOUSE_RESOLUTION = 400
        X_MOUSE_BUTTONS    = 3
        USE_XFS            = N
        LOCAL_APPS         = N
        RUNLEVEL           = 5

[ws001]
        USE_NFS_SWAP       = Y
        SWAPFILE_SIZE      = 48m
        RUNLEVEL           = 5

[ws002]
        XSERVER            = XF86_SVGA
        LOCAL_APPS         = N
        USE_NFS_SWAP       = Y
        SWAPFILE_SIZE      = 64m
        RUNLEVEL           = 3</programlisting>
                </example>
            </para>

            <para>
                La siguiente es una lista de algunas entradas:
                <variablelist>
                    <varlistentry>
                        <term><command>XSERVER</command></term>
                        <listitem>
                            <para>
                                Si tu placa de video es PCI y está soportada por
				XFree86 4.1, entonces sólo necesitas el paquete lts_x_core. Contiene
				todos los módulos para X4.
                            </para>
                            <para>
                                Por el contrario, si tu tarjeta no está
				soportada por XFree86 4.1, hay varios paquetes 
				XFree86 3.3.6 disponibles para LTSP.
                            </para>
                            <para>
                                Puedes hacer entradas en el archivo <filename>lts.conf</filename> para
				cada estación de trabajo individual, o puedes realizar entradas por
				defecto para que sean compartidas por todas las estaciones de trabajo.
                            </para>
                            <para>
                                Nuestra terminal tiene un chipset de video Intel i810, y puede ser
				detectado correctamente, por lo que no necesitamos ninguna entrada
				XSERVER en lts.conf. Esta entrada XSERVER puede ser especificada,
				si lo deseas, o puede ser puesta en 'auto', si es que quieres dejar
				constancia de que la placa de hecho será detectada automáticamente.
                            </para>
                        </listitem>
                    </varlistentry>

                    <varlistentry>
                        <term><command>RUNLEVEL</command></term>
                        <listitem>
                            <para>
                                Queremos correr la estación de trabajo en modo
				gráfico, por lo que necesitamos configurar el runlevel en '5'. Esto
				es efectuado mediante otra entrada en el archivo <filename>lts.conf</filename>.
                            </para>
                        </listitem>
                    </varlistentry>
                </variablelist>
            </para>
        </sect2>
    </sect1>
</chapter>



<chapter>
    <title>Configurando la estación de trabajo</title>
    <para>
        Una vez que el servidor ha sido configurado, es tiempo de concentrarse
	en la estación de trabajo.
    </para>
    <para>
        El proyecto LTSP trata acerca de qué es lo que sucede cuando el kernel
	está en memoria. Hay varias maneras de hacer que un núcleo se cargue
	en memoria, incluyendo Etherboot, Netboox, PXE y disco floppy.
    </para>

    <para>
       	Para el objeto de este documento, usaremos un disco floppy con código del
	proyecto <command>Etherboot</command>.
    </para>

    <sect1>
        <title>Creando el disco de inicio</title>
        <blockquote><attribution>Ken Yap</attribution>
        <para>
            Etherboot es un paquete de software para la creación de
	    imágenes ROM que puedan descargar código a través de una red Ethernet
	    y luego ejecutarlo en un computador x86. Muchos dispositivos de red
	    poseen un sócalo donde un chip ROM puede ser instalado. Etherboot
	    es código que puede ser colocado en dicha ROM.
        </para>
        </blockquote>

        <para></para>

        <para>
            Etherboot es también Open Source, protegido bajo la Licencia Pública
	    General GNU, Versión 2 (GPL2).
        </para>

        <para>
            Puedes descargar el paquete Etherboot y configurarlo para el tipo
	    de bootrom que necesites. Luego, puedes compilar el fuente para producir
	    la imagen que será escrita en el chip EPROM, o bien en un diskette
	    para pruebas.
        </para>

        <para>
            Una alternativa mucho más simple es ir al sitio web de Marty Connor 
	    <ulink url="http://www.rom-o-matic.net"><citetitle>www.Rom-O-Matic.net</citetitle></ulink>.
        </para>

        <para>
            Marty a realizado un excelente trabajo al ponerle un frente basado
	    en web al proceso de configuración y compilación de las imagenes de
	    bootrom con Etherboot. En su sitio, puedes elegir qué tipo de tarjeta
	    de red posees, y qué clase de imagen quieres. Luego, tienes la oportunidad
	    de modificar cualquiera de las opciones de configuración de Etherboot.
	    Por último, presionando el botón 'Get ROM' una imagen bootrom
	    personalizada será generada para tí.
        </para>

        <para>
            Nuestra estación de trabajo tiene una tarjeta Linksys LNE100TX, versión
	    4.1. Esta placa posee un chipset ADMTek Centaur-P, por lo que necesitamos
	    seleccionar <emphasis role="strong">centaur-p</emphasis> como nuestro tipo de NIC/ROM.
        </para>

        <para>
            No necesitamos realizar ningún cambio a la configuración por defecto,
	    por lo que podemos saltearnos el botón 'Configure'.
        </para>

        <para>
            Para el 'ROM Output Format' (formato de salida de la ROM) seleccionamos
	    'Floppy Bootable ROM Image' (imagen ROM para discos blandos).
	    Esto causará que contenga una cabecera de 512 bytes que es el cargador
	    de inicio para cargar la imagen etherboot en la memoria RAM, donde
	    será ejecutada.
        </para>

        <para>
            Presiona el botón 'Get ROM<'. La imagen bootrom será generada
	    mientras esperas. Sólo toma unos pocos segundos, y cuando está listo,
	    tu navegador desplegará una ventana de 'Guardar Como' donde
	    puedes designar dónde quiere salvar la imagen.
        </para>

        <para>
            Yo usualmente salvo la imagen en el directorio <filename class="directory">/tmp</filename>, 
	    por lo que, para la imagen Centaur-P, debes especificar algo 
	    como: <filename>/tmp/eb-5.0.2-centaur-p.lzdsk</filename>.
        </para>

        <para>
            Una vez que has salvado la imagen en tu disco duro, necesitas grabarla 
	    dentro de un disco flexible. Inserta uno de estos discos en tu disquetera 
	    y corre el siguiente comando:
            <programlisting>
cat   /tmp/eb-5.0.2-centaur-p.lzdsk   > /dev/fd0 </programlisting>
        </para>

    </sect1>

</chapter>

<chapter>
    <title>Corriendo la estación de trabajo</title>
    <para>
        Asumiendo que el servidor y la estación de trabajo han sido configurados 
	correctamente, debería ser sólo una cuestión de insertar el disco 
	flexible en la disquetera y encender la estación de trabajo.
    </para>

    <para>
        El código Etherboot será leído desde el disquete y cargado en memoria,
	la tarjeta de red será encontrada e inicializada, la petición dhcp
	será enviada por la red y una respuesta será enviada desde el servidor
	y el kernel será descargado en la estación de trabajo. Una vez que
	el núcleo ha inicializado el hardware de la estación de trabajo, X
	Window arrancará y una ventana de diálogo de inicio debería aparecer
	en la terminal, similar al ejemplo de abajo.
    </para>

    <figure><title>Login screen</title>
        <GRAPHIC FILEREF="ltsplogin1.gif"
                 FORMAT="GIF"
                 SRCCREDIT="James McQuillan, 2001" >
    </figure>

    <para>
        En este punto, puedes autentificarte. Una cosa importante es tener
	en cuenta de que hecho estás ingresando en el servidor. Todos los
	comandos que corras de hecho estarás corriendo en el mismo, mostrando
	su salida por el monitor de la estación de trabajo. Ese es el poder
	de X Window.
    </para>

    <para>
        Puedes correr cualquier programa soportado por el servidor.
    </para>

</chapter>

<chapter>
    <title>Imprimiendo</title>
    <para>
        Mas allá del hecho de que una estación de trabajo puede poseer un
	entorno gráfico completo o ser una terminal de caracteres funcional,
	también puede actuar como un servidor de impresión, permitiendo que
	hasta 3 impresoras puedan ser conectadas a sus puertos seriales o
	paralelos.
    </para>

    <para>
        Todo esto es transparente para el usuario de la estación de trabajo.
	Ni siquiera notará la pequeña cantidad de tráfico que es enviada a
	través de la terminal hacia la impresora.
    </para>

    <sect1>
        <title>Configuración del lado del cliente</title>

        <para>
            LTSP utiliza el programa <command>lp_server</command> en la estación de trabajo 
	    para redireccionar los trabajos de impresión desde el servidor hacia 
	    la impresora conectada a alguno de los puertos de la estación.
        </para>

        <para>
            Para habilitar la impresora en la estación de trabajo, hay un conjunto 
	    de entradas de configuración en el archivo <command>lts.conf</command>.
            <programlisting>
[ws001]
    PRINTER_0_DEVICE = /dev/lp0
    PRINTER_0_TYPE   = P </programlisting>
            La entrada de arriba causará que el programa lp_server corra como 
	    demonio, escuchando en el puerto TCP/IP 9100 que llegue alguna corriente 
	    de datos de impresión desde el servidor. Estos datos serán luego redireccionados 
	    hacia la impresora conectada en el puerto paralelo /dev/lp0.
        </para>

        <para>
            Hay muchas opciones disponibles. Mira la sección lts.conf más adelante 
	    en este documento para obtener mayor información acerca de las entradas 
	    de configuración.
        </para>
    </sect1>

    <sect1>
        <title>Configuración del lado del servidor</title>

        <para>
            Configurar una impresora del lado del servidor es cuestión de definir 
	    una cola de impresión, utilizando la herramienta de configuración 
	    apropiada en el servidor.
        </para>

        <para>
            En RedHat 7.2, hay herramientas tanto gráficas como de texto para 
	    configurar impresoras. La herramienta gráfica se llama <command>printconf-gui</command>, 
	    y la basada en text <command>printconf-tui</command>. Versiones mas antiguas 
	    de RedHat poseen un programa denominado <command>printtool</command>. Printtool 
	    también existe en RedHat 7.2, pero llamará a printconf-gui. Otras 
	    distribuciones de Linux tienen sus propias herramientas de configuración 
	    de impresoras.
        </para>

        <figure>
            <title>Printconf-gui Agregando una nueva impresora</title>
            <GRAPHIC FILEREF="printconf-gui-add.gif"
                     FORMAT="GIF"
                     SRCCREDIT="James McQuillan, 2001" >
        </figure>

        <para>
            Una vez que has lanzado la herramienta de configuración, debes agregar 
	    una nueva impresora. El programa lp_server le permite a la estación 
	    de trabajo emular un servidor de impresión HP JetDirect, por lo que 
	    sólo necesitas crear una impresora <command>JetDirect</command>.
        </para>

        <para>
            Necesitas luego darle a la cola un nombre. Este nombre puede ser cualquier 
	    cosa (trata de que sea un nombre significativo) y debe contener sólo 
	    los siguientes caracteres:
            <itemizedlist>
                <listitem>
                    <para>
                        <computeroutput>
                            "a-z"  letras en minúsculas
                        </computeroutput>
                    </para></listitem>
                <listitem>
                    <para>
                        <computeroutput>
                            "A-Z"  letras en mayúsculas
                        </computeroutput>
                    </para></listitem>
                <listitem>
                    <para>
                        <computeroutput>
                            "0-9"  dígitos numéricos
                        </computeroutput>
                    </para></listitem>
                <listitem>
                    <para>
                        <computeroutput>
                            "-"    &nbsp;&nbsp;guión medio
                        </computeroutput>
                    </para></listitem>
                <listitem>
                    <para>
                        <computeroutput>
                            "_"    &nbsp;&nbsp;guión bajo
                        </computeroutput>
                    </para></listitem>
            </itemizedlist>
        </para>
        <para>
            El nombre seleccionado en el ejemplo de arriba es <command>ws001_lp</command>. 
	    Este nombre hace que sea fácil saber que la impresora está asociada 
	    con <command>ws001</command>.
        </para>

        <figure>
            <title>Printconf-gui Información en detalle</title>
            <GRAPHIC FILEREF="printconf-gui-detail.gif"
                     FORMAT="GIF"
                     SRCCREDIT="James McQuillan, 2001" >
        </figure>
        <para>
            Hay dos campos necesarios para comunicarse con la impresora:
            <orderedlist>
                <listitem>
                    <para>
                        La dirección IP y el nombre de host de la estación de trabajo a la
			cual la impresora está asociada.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        El puerto TCP en el cual el demonio <command>lp_server</command> está corriendo.
                    </para>
                    <para>
                        La primera impresora que conectes a la estación de trabajo estará
			en el puerto TCP/IP <command>9100</command>. La segunda lo hará en el puerto
			<command>9101</command> y la tercera en el <command>9102</command>.
                    </para>
                </listitem>
            </orderedlist>
        </para>
    </sect1>

</chapter>

<chapter>
    <title>Solución de problemas</title>
    <para>
        Si, luego de haber seguido los anteriores pasos, tu estación de trabajo
	no inicia, entonces deberás empezar el proceso de detección de problemas
	de la instalación.
    </para>

    <para>
        La primer cosa por hacer es tratar de ver cuán lejos ha llegado la
	estación de trabajo en su proceso de inicio.
    </para>

    <sect1>
        <title>Solucionando problemas con la imagen Etherboot para disco flexible</title>
        <para>
            Cuando inicias desde un disco flexible, debería ver algo similar a 
	    esto:
        </para>
        <para>
        <screen>
loaded ROM segment 0x0800 length 0x4000 reloc 0x9400
Etherboot 5.0.1 (GPL) Tagged ELF for [LANCE/PCI]
Found AMD Lance/PCI at 0x1000, ROM address 0x0000
Probing...[LANCE/PCI] PCnet/PCI-II 79C970A base 0x1000, addr 00:50:56:81:00:01
Searching for server (DHCP)...
&#60;sleep&#62; </screen>
        </para>
        <para>
            El ejemplo de arriba muestra lo que puedes esperar ver en la pantalla 
	    cuando inicias desde un disco flexible. Si no ves estos mensajes, 
	    indicando que Etherboot a iniciado, entonces puede ser que tengas 
	    un disco flexible defectuoso, o que hayas escrito la imagen en el 
	    mismo de manera inapropiada.
        </para>

        <para>
        Si, por el contrario, ves una imagen como la siguiente, entonces es 
	probable que la imagen Etherboot generada no sea la apropiada para 
	tu tarjeta de red.
        <screen>
ROM segment 0x0800 length 0x8000 reloc 0x9400
Etherboot 5.0.2 (GPL) Tagged ELF for [Tulip]
Probing...[Tulip]No adapter found
&#60;sleep&#62;
&#60;abort&#62; </screen>
        </para>

        <para>
            Si llega al punto en donde detecta a la tarjeta de red y muestra la 
	    dirección MAC, entonces el probable que el disco flexible sea bueno.
        </para>
 
    </sect1>

    <sect1>
        <title>Solucionando problemas de DHCP</title>
        <para>
            Una vez que la tarjeta de red es inicializada, enviará una petición 
	    de broadcast a través de la red local, buscando algún servidor DHCP.
        </para>

        <para>
            Si la estación de trabajo obtiene una respuesta válida de parte del 
	    servidor DHCP, deberá configurar la placa de red. Puedes saber si 
	    ha funcionado correctamente si la información acerca de la dirección 
	    IP es mostrada por la pantalla. Aquí hay un ejemplo de cómo debería 
	    verse esto:
            <screen>
ROM segment 0x0800 length 0x4000 reloc 0x9400
Etherboot 5.0.1 (GPL) Tagged ELF for [LANCE/PCI]
Found AMD Lance/PCI at 0x1000, ROM address 0x0000
Probing...[LANCE/PCI] PCnet/PCI-II 79C970A base 0x1000, addr 00:50:56:81:00:01
Searching for server (DHCP)...
&#60;sleep&#62;
Me: 192.168.0.1, Server: 192.168.0.254, Gateway 192.168.0.254 </screen>
            Si ves la línea que comienza con 'Me:', seguida por una dirección 
	    IP, entonces sabes que DHCP está funcionando correctamente. Puedes 
	    continuar ahora para saber si TFTP está de hecho funcionando también.
        </para>

        <para>
	    Si, en cambio, observas el siguiente mensaje en la estación de trabajo, 
	    seguida por montones de &#60;sleep&#62;, entonces algo está mal, aunque es 
	    común ver uno o dos de estos mensajes de &#60;sleep&#62;.
            <screen>
Searching for server (DHCP)...  </screen>
        </para>

        <para>
            Tratar de averiguar qué es lo que está mal a veces es dificultoso, 
	    pero aquí hay algunas cosas en las cuales fijarse.
        </para>
            <sect2>
                <title>Verificar las conexiones</title>
                <para>
                    ¿Está la estación de trabajo fisicamente conectada a la misma red 
		    del servidor?
                </para>
                <para>
                    Con la estación de trabajo encendida, asegúrate de que las luces de 
		    link están encendidas para todas las conexiones.
                </para>

                <para>
                    Si estás conectando directamente entre la estación de trabajo y el 
		    servidor (sin hub ni switch), asegúrate de estar utilizando un cable 
		    cruzado. Si estás de hecho utilizando un hub o switch, entonces asegúrate 
		    de utilizar cable recto, normal, tanto entre las estaciones de trabajo 
		    y el hub como entre el hub y el servidor.
                </para>

            </sect2>

            <sect2>
                <title>¿Está corriendo dhcpd?</title>
                <para>
                    Necesitas determinar si <command>dhcpd</command> está corriendo en el servidor. 
		    Podemos obtener la respuesta de dos formas.
                </para>

                <para>
                    <command>dhcpd</command> normalmente corre en el background (de fondo), escuchando 
		    en el puerto udp 67. Trata de correr el comando <command>netstat</command> para 
		    ver si hay algo escuchando en dicho puerto:
                    <programlisting>
netstat -an | grep ":67 " </programlisting>
                    Deberías ver una salida similar a la siguiente:
                    <programlisting>
udp     0    0   0.0.0.0:67         0.0.0.0:*</programlisting>
                    La cuarta columna contiene la dirección IP y el puerto, separadas	
		    por dos puntos (':'). Una dirección de todos ceros ('0.0.0.0') indica 
		    que está escuchando en todas las interfases. Esto es, puede ser que 
		    tengas una interfase <command>eth0</command> y otra <command>eth1</command>, y que <command>dhcpd</command> 
		    esté escuchando en ambas.
                </para>

                <para>
                    Sólo porque netstat muestre que hay algo escuchando en el puerto udp 
		    67 no significa que de hecho <command>dhcpd</command> sea el que está escuchando. 
		    Podría ser <command>bootpd</command>, aunque sería poco probable, ya que <command>bootp</command> 
		    ya no se incluye más en la mayoría de las distribuciones de Linux.
                </para>

                <para>
                    Para asegurarte de que <command>dhcpd</command> está corriendo, trata con el 
		    comando <command>ps</command>.
                    <programlisting>
ps aux | grep dhcpd </programlisting>

                    Deberías ver algo como lo siguiente:

                    <programlisting>
root 23814 0.0 0.3 1676 820 ?      S 15:13 0:00 /usr/sbin/dhcpd
root 23834 0.0 0.2 1552 600 pts/0  S 15:52 0:00 grep dhcp </programlisting>

                    La primera línea muestra que <command>dhcpd</command> está corriendo. La segunda 
		    es tan sólo nuestro comando <command>grep</command>.
                </para>

                <para>
                    Si no ves ninguna línea indicando que dhcpd está corriendo, entonces
		    necesitas verificar que el servidor esté configurado para el runlevel 5 
		    y que <command>dhcpd</command> esté listo para iniciar en dicho nivel.
		    En sistemas basados en Red Hat, puedes ejecutar <command>ntsysv</command> para asegurarte
		    de que <command>dhcpd</command> esté marcado.
                </para>
		
		<para>
		    Puedes probar de iniciar <command>dhcpd</command> con este comando:
		    <programlisting>
service dhcpd start</programlisting>

		    Presta atención a la salida. Puede contener errores.
		</para>
                
            </sect2>

            <sect2>
                <title>Verifica dos veces la configuración de dhcpd</title>
                <para>
                    ¿Tiene el archivo <filename>/etc/dhcpd.conf</filename> una entrada para tu estación 
		    de trabajo?
                </para>
                <para>
                    Deberías verificar dos veces la entrada 'fixed-address' en el archivo 
		    de configuración, para asegurarte de que concuerda exactamente con 
		    la tarjeta de red de la estación de trabajo.
                </para>
            </sect2>
           
            <sect2>
                <title>¿Está ipchains o iptables bloqueando el pedido?</title>
                <sect3>
                    <title>Verificando ipchains</title>
                    <para>
                        Corre el siguiente comando para ver qué dice:
                        <programlisting>
ipchains -L -v </programlisting>
                        Si ves algo como esto:
                        <programlisting>
Chain input (policy ACCEPT: 229714 packets, 115477216 bytes):
Chain forward (policy ACCEPT: 10 packets, 1794 bytes):
Chain output (policy ACCEPT: 188978 packets, 66087385 bytes): </programlisting>
                        Entonces no es ipchains el que está metido en el camino.
                    </para>
                </sect3>
                <sect3>
                    <title>Verificando iptables.</title>
                    <para>
                        Corre el siguiente comando para ver qué dice:
                        <programlisting>
iptables -L -v </programlisting>
                        Si ves algo como esto:
                        <programlisting>
Chain INPUT (policy ACCEPT 18148 packets, 2623K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 17721 packets, 2732K bytes)
 pkts bytes target     prot opt in     out     source               destination</programlisting>
                        Entonces no es iptables el que está metido en el camino.
                    </para>
                </sect3>
            </sect2>
           
            <sect2>
                <title>¿Está la estación de trabajo enviando la petición?</title>
                <para>
                    Trata de observar <filename>/var/log/messages</filename> mientras la estación 
		    de trabajo se inicia. Puedes hacer tal cosa con el siguiente comando:
                    <programlisting>
tail -f /var/log/messages </programlisting>
                    Esto 'seguirá' al archivo de historiales mientras se vayan escribiendo 
		    los nuevos registros.
                    <programlisting>
server dhcpd: DHCPDISCOVER from 00:50:56:81:00:01 via eth0
server dhcpd: no free leases on subnet WORKSTATIONS
server dhcpd: DHCPDISCOVER from 00:50:56:81:00:01 via eth0
server dhcpd: no free leases on subnet WORKSTATIONS </programlisting>
                    Si ves mensajes como los de arriba, donde dice 'no free leases', entonces 
		    <command>dhcpd</command> está corriendo, pero no sabe nada acerca de la estación 
		    de trabajo que hace el pedido de su dirección IP.
                </para>
            </sect2>
           
    </sect1>

    <sect1>
        <title>Solucionando problemas de TFTP</title>
        <para>
            Etherboot utiliza TFTP para obtener un kernel Linux desde el servidor. 
	    Este es un protocolo en extremo simple, pero a veces hay problemas 
	    cuando se trata de hacerlo funcionar.
        </para>

        <para>
            Si observas algo similar a esto:
        <screen>
Loading 192.168.0.254:/lts/vmlinuz.tulip | </screen>
          con el último caracter en la línea (el '|'), rápidamente cambiando 
	  a '|', '\', '-' y '/', para formar lo que parece una 
	  barra rotativa, entonces el núcleo está siendo descargado. Esto normalmente 
	  indica que TFTP está funcionando correctamente.
        </para>

        <para>
          Si, en cambio, no puedes ver la barra rotativa, entonces hay un problema. 
	  Las posibles causas incluyen:
        </para>

        <sect2>
            <title><command>tftpd</command> no está corriendo</title>
            <para>
                En RedHat 7.1, tftp es iniciado por <command>xinetd</command>. Hay un script
de inicio llamado <filename>/etc/xinetd.d/tftp</filename> que contiene la información
necesaria para que corra <command>tftpd</command>.
            </para>
        </sect2>

        <sect2>
            <title>Es núcleo no está donde tftpd espera encontrarlo.</title>
            <para>
	        El kernel nececita estar en un lugar accesible para el demonio tftpd. 
		Si la opción '-s' está especificada cuando <command>tftpd</command> inicia, 
		entonces cualquier cosa que pida la estación de trabajo debe ser relativa 
		a <filename class="directory">/tftpboot</filename>. Por lo tanto, si la entrada <command>filename</command> 
		en <filename>/etc/dhcpd.conf</filename> es <filename>/lts/vmlinuz-2.4.9-ltsp-5</filename>, entonces 
		el kernel de hecho necesita estar en <filename>/tftpboot/lts/vmlinuz-2.4.9-ltsp-5</filename>.
            </para>
        </sect2>
    </sect1>

<!--
    <sect1>
        <title>Solucionando problemas con el núcleo</title>
        <para>
	    Si estás utilizando uno de los núcleos suministrados por LTSP, entonces
	    lo único que puedes verificar es que el kernel que estás utilizando
	    corresponda con tu hardware. Lo más importante es que el núcleo conozca
	    a tu placa de red.
        </para>

        <para>
            El kernel estándar LTSP, llamado <command>vmlinuz.ltsp</command>,
	    conoce todas las placas de red soportadas.
        </para>

        <para>
            Un buen indicador de que estás utilizando un kernel equivocado, es un
	    mensaje como el siguiente:
            <screen>
.
.
.
RAM disk driver initialized:  16 RAM disks of 1024K size
IP-Config: No Network devices available
Root-NFS: No NFS server available, giving up.
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device 02:00
Kernel panic: VFS: Unable to mount root fs on 02:00 </screen>
            Muche gente es confundida por el error de "NFS" y no da cuenta
	    del mensaje <command>No Network devices available</command> (no hay
	    dispositivos de red disponibles). Esa es la clave del problema. El kernel
	    probó por tarjetas conocidas, y no encontró ninguna. Ten en mente que los
	    núcleos son compilados con soporte para tarjetas de red específicas (excepto
	    el kernel vmlinuz.all, que contiene soporte para TODAS las tarjetas conocidas).
        </para>
    </sect1>
-->

    <sect1>
        <title>Solucionando problemas del sistema de archivos raíz NFS</title>
        <para>
            Hay varias cosas que pueden impedir que un sistema de archivos raíz	
	    pueda ser montado, incluyendo a las siguientes:
        </para>
        <sect2>
            <title>No init found (no se encontró Init)</title>
            <para>
                Si obtienes el siguiente error:
                <screen>
Kernel panic: No init found.  Try passing init= option to kernel.  </screen>
                Entonces es muy probable que o bien estés montando el directorio incorrecto 
		como sistema de archivos raíz, o bien el directorio <filename>/opt/ltsp/i386</filename> 
		esté vacío.
            </para>
        </sect2>

        <sect2>
            <title>El servidor retona el error -13</title>
            <para>
                Si obtienes el siguiente error:
                <screen>
Root-NFS: Server returned error -13 while mounting /opt/ltsp/i386 </screen>
                Esto indica que el directorio <filename class="directory">/opt/ltsp/i386</filename> no está listado
en el archivo <filename>/etc/exports</filename>. 
            </para>
            <para>
                Mira en <filename>/var/log/messages</filename> si hay algunas pistas. 
		Una entrada como ésta:
                <screen>
Jul 20 00:28:39 jamlap rpc.mountd: refused mount request from ws004
                  for /opt/ltsp/i386 (/): no export entry </screen>
                Confirma nuestra sospecha de que la entrada en <filename>/etc/exports</filename> 
		es incorrecta.
            </para>
        </sect2>

        <sect2>
            <title>Problemas con el demonio NFS (portamp, nfsd y mountd)</title>
            <para>
                NFS puede ser un servicio difícil y complejo para la resolución de 
		problemas, pero el hecho de entender qué debería estar configurado 
		y qué herramientas hay disponibles para diágnósticos sin duda ayudarán 
		a hacer más fácil la tarea.
            </para>
            <para>
                Hay tres demonios que necesitan estar corriendo en el servidor para
que NFS funcione correctamente. Estos servicios son <command>portmap</command>,
<command>nfsd</command> y <command>mountd</command>.
            </para>
            <sect3>
                <title>El portmapper (portmap)</title>
                <para>
                    Si obtienes los siguientes mensajes:
                    <screen>
Looking up port of RPC 100003/2 on 192.168.0.254
portmap: server 192.168.0.254 not responding, timed out
Root-NFS: Unable to get nfsd port number from server, using default
Looking up port of RPC 100005/2 on 192.168.0.254
portmap: server 192.168.0.254 not responding, timed out
Root-NFS: Unable to get mountd port number from server, using default
mount: server 192.168.0.254 not responding, timed out
Root-NFS: Server returned error -5 while mounting /opt/ltsp/i386
VFS: unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or 02:00
Please append a correct "root=" boot option
Kernel panic: VFS: Unable to mount root fs on 02:00 </screen>
                    Entonces es muy probable que el demonio <command>portmap</command> no esté corriendo. 
		    Pueder confirmar si el portmapper está o no funcionando mediante el 
		    comando <command>ps</command>:
                    <screen>
ps -e | grep portmap </screen>
                    Si el portmapper está andando, debería ver una salida como ésta:
                    <screen>
30455 ?        00:00:00 portmap </screen>
                    Otra forma de provar es mediante el uso de <command>netstat</command>. El portmapper 
		    utiliza los puertos TCP y UDP 110. Prueba corriendo esto:
                    <screen>
netstat -an | grep ":111 " </screen>
                    Deberías observar la siguiente salida:
                    <screen>
tcp   0   0 0.0.0.0:111       0.0.0.0:*          LISTEN      
udp   0   0 0.0.0.0:111       0.0.0.0:*                           </screen>
                    Si no ves algo similar, entonces el portmapper no está corriendo. 
		    Puedes iniciarlo mediante:
                    <screen>
/etc/rc.d/init.d/portmap   start </screen>
                    Luego, puedes asegurarte de que el portmapper está configurado para 
		    que inicie automáticamente cuando el servidor reinicie. Corre <command>ntsysv</command> 
		    para asegurarte de que está seleccionado.@
                </para>
            </sect3>

            <sect3>
                <title>Demonios NFS y MOUND (nfsd y mountd)</title>
                <para>
                    NFS tiene dos demonios que necesitan estar corriendo: <command>nfsd</command> 
		    y <command>mountd</command>. Ambos son iniciados por el script <filename>/etc/rc.d/init.d/nfs</filename>.
                </para>
                <para>
                    Puedes ejecutar el comando <command>ps</command> para asegurarte de que estén 
		    funcionando:
                    <screen>
ps -e | grep nfs
ps -e | grep mountd </screen>
                    Si observas que alguno de los dos demonios no está corriendo, entonces 
		    necesitarás hacerlo tu mismo.
                </para>

                <para>
                    Normalmente, deberías poder correr el script de inicio con el argumento 
		    <command>restart</command> para que ambos demonios se reinicien, pero por alguna 
		    razón, el script <filename>/etc/rc.d/init.d/nfs</filename> no reinicia <command>nfsd</command>  
		    de ese modo. Sólo reinicia <command>mountd</command> (¿bug?). Por lo tanto, 
		    debes ejecutar la siguiente secuencia de comandos:
                    <screen>
/etc/rc.d/init.d/nfs  stop
/etc/rc.d/init.d/nfs  start </screen>
                    Puede ser que obtengas errores durando el comando <command>stop</command>, pero 
		    esto es normal. Es el <command>start</command> el que debería estar todo <command>OK</command>.
                </para>

                <para>
                    Si los demonios están corriendo, pero NFS sigue sin funcionar, entonces 
		    pueder verificar que los mismos se hayan registrado a sí mismo con 
		    el portmapper mediante el comando <command>rpcinfo</command>.
                    <screen>
rpcinfo -p localhost </screen>
                    Debería mostrarte resultados similares a los siguientes:
                    <screen>
program vers proto   port
 100000    2   tcp    111  portmapper
 100000    2   udp    111  portmapper
 100011    1   udp    856  rquotad
 100011    2   udp    856  rquotad
 100005    1   udp   1104  mountd
 100005    1   tcp   2531  mountd
 100005    2   udp   1104  mountd
 100005    2   tcp   2531  mountd
 100003    2   udp   2049  nfs </screen>
                    Esto indica que <command>nfs</command> (nfsd) y <command>mountd</command> están corriendo 
		    y han sido registrados con el portmapper.
                </para>
            </sect3>
        </sect2>
    </sect1>

    <sect1>
        <title>Solucionando problemas con el servidor X</title>
        <para>
            ¡Muchacho! Probablemente la parte más dificultosa de la configuración 
	    de una estación de trabajo LTSP sea que el servidor X esté configurado 
	    correctamente. Si estás usando una placa de video medianamente nueva, 
	    y está soportada por XFree86, y si también posees un monitor medianamente 
	    nuevo que pueda manejar un amplio rango de frecuencias y resoluciones, 
	    entonces todo es muy fácil y derecho. Usualmente, en ese caso, si 
	    no funciona, es muy probable que sea el servidor X equivocado para 
	    dicha placa.
        </para>
        <para>
            Cuando un servidor X no funciona con tu placa, es bastante obvio. 
	    O bien el mismo no inicia, o bien lo que se ve en pantalla es incorrecto.
        </para>
        <para>
            Cuando la estación de trabajo está lista para iniciar el servidor 
	    X, llama al script <filename>/tmp/start_ws</filename>, el cual inicia al servidor 
	    X en la estación de trabajo local con la opción <command>-query</command> apuntanto 
	    al servidor, donde un Display Manager, como <command>XDM</command>, 
	    <command>GDM</command> o <command>KDM</command> está escuchando.
        </para>

        <para>
            Debido a que el servidor X es iniciado por el script <filename>start_ws</filename>, 
	    el cual es asi mismo arrancado por el programa <command>init</command>, cuando 
	    falla, <command>init</command> tratará de iniciarlo nuevamente, y seguirá intentándolo 
	    10 veces más antes de rendirse, debido a que piensa que está repitiendo 
	    demasiando rápido. Cuando finalmente se rinde, un mensaje de error 
	    de parte del servidor X será mostrado por pantalla.
        </para>

        <para>
            Esperar que el servidor X falle 10 veces puede ser irritante, por 
	    lo que una manera simple de evitar tales fallos repetidos puede ser 
	    iniciar la terminal en el runlevel 3, para que X NO sea iniciado automáticamente. 
	    En cambio, cuando inicies la estación de trabajo, verás un prompt 
	    de <command>bash</command>. Desde el mismo, pueder iniciar X manualmente mediante 
	    el siguiente comando:
            <screen>
sh  /tmp/start_ws </screen>
            El servidor X intentará iniciar, pero cuando falle, volverá al prompt 
	    de bash, para que puedas ver la razón de tal falla.
        </para>
    </sect1>

    <sect1>
        <title>Solucionando problemas del Display Manager</title>
        <para>
            El Display Manager (Administrador de Sesiones Gráficas) es el demonio	
	    que corre en el servidor, esperando que un servidor X haga contacto 
	    con él. Una vez que el contacto ha sido realizado, mostrará una caja 
	    de diálogo de inicio por pantalla, ofreciéndole al usuario la chance 
	    de ingresar al servidor.
        </para>

        <para>
            Los tres Display Managers mas comunes son:
            <itemizedlist>
                <listitem>
                    <para>
                        XDM - Ha estado por ahí desde siempre. Viene incluido con el sistema	
			estandar de X Window.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        GDM - El 'Gnome Display Manager' es parte del paquete Gnome.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        KDM - El 'KDE Display Manager' es parte de sistema de escritorio KDE.
                    </para>
                </listitem>
            </itemizedlist>
            Las distribuciones de GNU/Linux mas recientes incluyen a los tres 
	    arriba mencionados.
        </para>

        <sect2>
            <title>Pantalla gris con un gran cursor en X</title>
            <para>
                Esto indica que el servidor X está corriendo, pero que no ha podido 
		realizar contacto con el Display Manager. Algunas de las posibles 
		razones son:
                <orderedlist>
                    <listitem>
                        <para>
                            El display manager no está corriendo.
                        </para>
                        <para>
                            En versiones recientes de Red Hat (7.0 o superior), el display manager es iniciado 
			    por <command>init</command>. En el archivo <filename>/etc/inittab</filename>, 
			    hay una línea que luce así:
                            <screen>
x:5:respawn:/etc/X11/prefdm -nodaemon </screen>
                            El script <command>prefdm</command> determinará cuál es el display manager a 
			    correr.
                        </para>

                        <para>
                            El display manager por defecto depende de qué paquetes tengas instalados. 
			    Si Gnome está instalado, entonces GDM será el display manager por 
			    defecto. Por el contrario si Gnome no está instalado, entonces el 
			    script prefdm verificará si KDE lo está. Si así es, entonces KDM será 
			    el display manager. Si KDE tampoco está instalado, entonces XDM será 
			    el display manager por omisión.
                        </para>

                        <para>
                            Utilizando el comando <command>netstat</command> deberías poder ver si hay 
			    algún Display Manager corriendo. En el servidor, corre lo siguiente:
                            <screen>
netstat -ap | grep xdmcp </screen>
                            Esto debería mostrarte que hay algún proceso escuchando en el puerto 
			    de xdmcp (177).
                            <screen>
udp     0   0 *:xdmcp            *:*               1493/gdm </screen>
                            Esto muestra claramente que <command>gdm</command> está corriendo con el PID 
			    1493 y está escuchando en el puerto de xdmcp.
                        </para>

                        <para>
                            Si ves una línea como la de arriba, indicando que definitivamente 
			    hay un display manager escuchando, entonces necesitas asegurarte de 
			    que la estación de trabajo está enviando la petición XDMCP al servidor 
			    correcto.
                        </para>

                        <para>
                            En el archivo <filename>lts.conf</filename> hay una entrada en la cual puedes 
			    especificar la dirección IP del servidor en el que está corriendo 
			    el display manager. Esta entrada es opcional, pero de estar presente, 
			    luciría así:
                            <screen>
XDM_SERVER  =  192.168.0.254 </screen>
                            Por supuesto, la dirección IP del ejemplo puede ser diferente a la 
			    tuya.
                        </para>

                        <para>
                            Si la entrada 'XDM_SERVER' no está presente, entonces se utilizará 
			    el valor de la entrada 'SERVER', de estar presente también. Si no 
			    lo está, se usará <command>192.168.0.254</command> por omisión.
                        </para>

                        <para>
                            Cualquiera sea el modo en el cual lo especifiques, solamente 
			    debes asegurarte de que la dirección IP de hecho sea la dirección 
			    correcta del servidor en el que corre el display manager.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
                            El display manager puede estar configurado para ignorar peticiones 
			    de máquinas remotas.
                        </para>

                        <para>
                            Si has determinado que el display manager está corriendo, entonces 
			    es posible que haya sido configurado para ignorar peticiones XDMCP 
			    desde máquinas remotas. Necesitarás verificar los archivos de configuración 
			    del display manager en particular que estés utilizando para ver si 
			    está configurado correctamente.
                        </para>

                        <itemizedlist>
                            <listitem>
                                <para><command>XDM</command></para>
                                <para>
                                    La configuración por defecto de RedHat deshabilita a las estaciones 
				    de trabajo para obtener su pantalla de inicio a través de XDM. El 
				    script <command>ltsp_initialize</command> se hará cargo de habilitar esto por 
				    ti, pero si aun así no funciona, entonces debería verificar el archivo 
				    <filename>/etc/X11/xdm/xdm-config</filename>. Busca una entrada como esta:
                                    <screen>
DisplayManager.requestPort:     0 </screen>
                                    Esta entrada DEBE estar comentada (con un '#'; delante) para que XDM 
				    escuche en el puerto 177 las peticiones remotas.
                                </para>
                                <para>
                                    Otro archivo de configuración importante para XDM es el 
				    <filename>/etc/X11/xdm/Xaccess</filename>, el cual DEBE 
				    tener una línea que comience con un '*' y nada más. Normalmente 
				    en RedHat hay una línea así, pero está comentada. El script <command>ltsp_initialize</command> 
				    se encargará de corregir esto por tí, pero si aun así no funciona, 
				    deberás verificarlo tu mismo. La línea debería verse así:
                                    <screen>
*        #any host can get a login window </screen>
                                </para>
                            </listitem>

                            <listitem>
                                <para><command>KDM</command></para>
                                <para>
                                    Las versiones más recientes de KDM poseen un archivo llamado <command>kdmrc</command>. 
				    Diferentes distribuciones de GNU/Linux guardan dicho archivo en lugares 
				    diferentes. En RedHat 7.2 está ubicado en <command>/etc/kde/kdm/kdmrc</command>. 
				    En otras distribuciones, deberías correr el comando <command>locate</command> 
				    para averiguar dónde se encuentra.
                                </para>
                                <para>
                                    La entrada que controla si las estaciones de trabajo pueden obtener 
				    una pantalla de inicio está en la sección que posee la etiqueta <command>[xdmcp]</command>. 
				    Asegúrate de que la entrada <command>Enable</command> esté puesta en <command>true</command>.
                                </para>
                                <para>
                                    Versiones mas viejas de KDM utilizan los archivos de configuración 
				    del XDM, ubicados en /etc/X11/xdm.
                                </para>
                            </listitem>

                            <listitem>
                                <para><command>GDM</command></para>
                                <para>
                                    GDM utiliza un conjunto diferente de archivos de configuración. Están 
				    ubicados en el directorio <filename class="directory">/etc/X11/gdm</filename>.
                                </para>

                                <para>
                                    El archivo principal es el <filename>gdm.conf</filename>. 
				    Busca la sección <command>[xdmcp]</command>. Deberías ver 
				    una entrada 'Enable', la cual debe tener el valor '1' o 'true', dependiendo
				    de la versión de GDM. He aquí un ejemplo:
                                    <screen>
[xdmcp]
Enable=true
HonorIndirect=0
MaxPending=4
MaxPendingIndirect=4
MaxSessions=16
MaxWait=30
MaxWaitIndirect=30
Port=177 </screen>
				</para>
				<para>
                                    Nota el 'Enable=true'. Versiones mas viejas de GDM utilizan '0' y 
				    '1' para deshabilitar y habilitar XDMCP. Las mas nuevas en cambio 
				    usan 'false' y 'true'.
                                </para>
                            </listitem>
                        </itemizedlist>
                    </listitem>
		    
		    <listitem>
			    <para>
			    	Si el Display Manager está definitivamente corriendo, y está escuchando
				las peticiones de estaciones de trabajo remotas, entonces puede ser un
				simple problema de mapeo de direcciones IP a nombres. La estación de trabajo
				necesita estar en el archivo <filename>/etc/hosts</filename> o bien figurar
				en algún DNS.
			    </para>
		    </listitem>
		    
                </orderedlist>
            </para>
        </sect2>
    </sect1>
</chapter>

<chapter>
    <title>Kernels</title>
    <para>
        Hay unas pocas deciciones que necesitan ser hechas sobre el kernel
	que va a correr en la estación de trabajo. Necesitas decidirte si
	quieres correr uno de los núcleos estándar disponibles para descarga,
	o uno propio. Y también necesitas decidir si quieres correr la pantalla
	gráfica, con la barra de progreso, disponible gracias al <command>Linux
	Progress Patch (LPP)</command>.
    </para>

    <sect1>
        <title>Kernels estándar suministrados por LTSP</title>
        <para>
            El paquete de kernel que está disponible con LTSP incluye dos núcleos. 
	    Uno posee el Linux Progress Patch y el otro no.
        </para>

        <para>
             Ambos ya tienen el parche para Swap sobre NFS aplicado.
        </para>
    </sect1>

    <sect1>
        <title>Construye tu propio núcleo</title>
        <para>
           Hay dos maneras de configurar un kernel para LTSP. El método por defecto 
	   es usar algo llamado 'Disco RAM Inicial', o <command>initrd</command>. 
	   La imagen initrd es un pequeño sistema de archivos agregado al núcleo. 
	   Este sistema de archivos es cargado en memoria, y una vez que el kernel 
	   ha iniciado, montará al disco ram como su sistema de archivos raíz. 
	   Hay un par de ventajas provenientes de utilizar una imagen initrd. 
	   Primero, podemos compilar los controladores de las placas de red como 
	   módulos y cargar el módulo correcto durante el inicio. Esto permite 
	   que un solo núcleo soporte virtualmente a todas las placas de red. 
	   La otra ventaja es que podemos correr al cliente DHCP en modo usuario, 
	   mas que en modo kernel. Correrlo en modo usuario provee un mejor control 
	   sobre las opciones requeridas y recibidas desde el servidor. También, 
	   hace al núcleo un poco mas pequeño. La otra manera de configurar el 
	   kernel es sin el initrd. Construir un kernel sin disco ram requiere 
	   que el controlador específico para la tarjeta de red esté estáticamente
	   ligado (linkeado) dentro del núcleo, y también requiere que las opciones
	   (TOKEN=textbf)IP-Autoconfig y (TOKEN=textbf)Root Filesystem on NFS estén activadas.
	   La ventaja de no utilizar un initrd es que el kernel es un poco mas
	   pequeño, por lo que iniciará mas rápido. De todos modos, una vez que
	   la estación de trabajo esté corriendo, virtualmente no hay diferencias
	   de rendimiento.
        </para>

        <para>
            El núcleo estándar LTSP incluye in Disco Ram Inicial (initrd) que
	    se hace cargo de detectar la placa de red y de realizar un requerimiento
	    DHCP en modo usuario. El principal objetivo fue hacer la imagen lo
	    mas pequeña posible. Por lo tanto, hemos escogido la librería libc
	    de uClinux como reemplazo, y a BusyBox para las herramientas necesarias
	    durante el inicio.
        </para>

        <para>
            Si quieres construir tus propios núcleos, deberías descargar el paquete
	    ltsp_initrd_kit. Contiene la jerarquía del sistema de archivos raíz
	    y un script para construir la imagen.
        </para>

        <sect2>
            <title>Obteniendo las fuentes del kernel</title>
 
            <para>
                Cuando se construye un núcleo personalizado, usualmente es una buena 
		idea empezar con la fuentes frescas de <command>ftp.kernel.org</command>. La
		razón de esto es que algunas distribuciones, como RedHat, aplican
		varios parches en sus fuentes de núcleo, dejándote con un conjunto
		de código fuente que no concuerda con el kernel oficial.
            </para>
    
            <para>
                Descarga el paquete de fuentes de kernel de tu agrado, y guárdalo
		en el directorio <filename class="directory">/usr/src</filename>. Los núcleos están ubicados en
		el directorio <filename class="directory">/pub/linux/kernel</filename> del servidor ftp de ftp.kernel.org.
		Necesitarás uno de la serie 2.4.x, debido a que el soporte para <command>devfs</command>
		es necesario.
            </para>

            <para>
                También, si quieres incluir soporte para intercambio (swap) sobre
		NFS o el Linux Progress Patch (LPP), deberás asegurarte de que dichos
		parches y los fuentes del kernel sean de la misma versión. Al tiempo
		de escribir este documento, la versión 2.4.9 del kernel de Linux era
		la última que soportaba estas características.
            </para>

            <para>
                Para nuestro ejemplo, usaremos el núcleo 2.4.9. La ubicación exacta es: 
		<filename>ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.9.tar.bz2</filename>.
            </para>

            <para>
                Desempaqueta las fuentes en el directorio <filename class="directory">/usr/src</filename>. Necesitas
		ser cuidadoso, ya que cuando lo haces, habrá un directorio llamado
		<filename>linux</filename>. Si ya posees un directorio llamado <filename>linux</filename>
		correspondiente a otro conjunto de fuentes, vas a hacer lío. Por eso,
		verifica si ya hay un directorio con anterioridad y, de ser así, renómbralo.
            </para>

            <para>
                El paquete de fuentes que descargamos han sido comprimidas con la
		utilidad <command>bzip2</command>. Por lo tanto, necesitamos descomprimirlo
		antes de utilizar <command>tar</command>. Puedes utilizar el siguiente comando
		para este propósito:
                <screen>
bunzip2 &#60;linux-2.4.9.tar.bz2 | tar xf - </screen>
                Cuando finalice, tendrás un directorio llamado <filename>linux</filename> conteniendo
		un completo árbol de fuentes. En este punto, yo usualmente renombro
		al directorio en algo más significativo.
                <screen>
mv linux linux-2.4.9 </screen>
                Una vez que el directorio ha sido renombrado, cambio a él:
                <screen>
cd linux-2.4.9 </screen>
            </para>
            <para>
                Usualmente me gusta modificar el <filename>Makefile</filename> antes de comenzar
		a configurar el kernel. Cerca del tope del archivo hay una variable
		llamada <command>EXTRAVERSION</command>, la cual lleno con 'ltsp-1' con el objeto
		de que el kernel se llame '2.4.9-ltsp-1', lo que hace mas fácil identificarlo
		luego. El tope de Makefile debería verse así:
                <screen>
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 9
EXTRAVERSION = -ltsp-1

KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) </screen>
            </para>
        </sect2>

        <sect2>
            <title>Parches al núcleo</title>
            <para>
                Luego de desempaquetar al kernel, puede haber varios parches que quieras
		aplicar. Por ejemplo, el parche para Intercambio (swap) sobre NFS
		o el Linux Progress Patch (LPP). Estos parches DEBEN ser aplicados
		antes de configurar el núcleo.
            </para>
            <sect3>
                <title>Intercambio (swap) sobre NFS.</title>
                <para>
                    El parche para swap sobre NFS le permitirá a la estación de trabajo
		    utilizar un archivo de intercambio ubicado en un servidor NFS. Aunque
		    usualmente se recomienda poseer toda la memoria necesaria en la estación
		    de trabajo para no requerir esto, a veces puede ser dificultoso agregar
		    mas RAM, especialmente en ordenadores viejos. Por lo tanto, la habilidad
		    de intercambiar sobre NFS permitirá que un ordenador inusable se transforme
		    en uno útil.
                </para>
                <para>
                    Si el directorio actual es /usr/src/linux-2.4.9, y el parche está
		    en /usr/src, entonces puedes hacer lo siguiente para probarlo:
                    <screen>
patch -p1 --dry-run &#60;../linux-2.4.9-nfs-swap.diff </screen>
                    Esto probará al parche, para asegurarse de que será aplicado limpiamente. 
		    Si finaliza sin errores, entonces puedes aplicarlo sin la opción <command>--dry-run</command>.
                    <screen>
patch -p1 &#60;../linux-2.4.9-nfs-swap.diff </screen>
                </para>
            </sect3>
            <sect3>
                <title>Linux Progress Patch (LPP)</title>
                <para>
                    El Linux Progress Patch (LPP) te permitirá configurar un logo gráfico
		    para que se muestre al momento de iniciar la estación de trabajo.
		    Los mensajes normales del kernel al iniciarse son redireccionados
		    a otra pantalla tty, e instrucciones especiales son agregadas a los
		    scripts de inicio para que la barra de progreso refleje cómo va marchando
		    la cosa.
                </para>
                <para>
                    Al igual que el parche de swap sobre NFS, puedes probar el parche
		    LPP mediante el siguiente comando:
                    <screen>
patch -p1 --dry-run &#60;../lpp-2.4.9 </screen>
                    Si la prueba resulta exitosamente, entonces puedes aplicar el parche 
		    con:
                    <screen>
patch -p1 &#60;../lpp-2.4.9 </screen>
                </para>
            </sect3>
        </sect2>

        <sect2>
            <title>Configurando las opciones del núcleo</title>
            <para>
                Ahora puedes correr el programa de configuración del kernel de tu 
		elección. Las opciones disponibles son:
                <itemizedlist>
                    <listitem>
                        <para>make xconfig</para>
                        <para>
                            Invocará una versión de la utilidad de configuración 
			    para X Window.
                        </para>
                    </listitem>
                    <listitem>
                        <para>make menuconfig</para>
                        <para>
                            Invocará una utilidad de configuración simple, basada 
			    en una opción a la vez en modo texto.
                        </para>
                    </listitem>
                    <listitem>
                        <para>make config</para>
                        <para>
                            Invocará una utilidad de configuración simple, basada 
			    en una opción a la vez en modo texto.
                        </para>
                    </listitem>
                </itemizedlist>
            </para>
 
            <sect3>
                <title>Configuración del kernel para utilizar una imagen initrd</title>
                <para>

                    Configurar el kernel para utilizar una imagen initrd requiere de las 
		    siguientes opciones:
                    <itemizedlist>

                        <listitem>
                            <para>
                                File systems -> /dev filesystem support
                            </para>
                            <para>
                                El soporte para el sistema de archivos /dev debe estar habilitado. 
				Esto es seleccionado en la sección 'File Systems'. NO ESPECIFICAR 
				'Automatically mount at boot'. El montaje debe ser realizado por el 
				script /linuxrc.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                Block devices -> RAM disk support
                            </para>
                            <para>
                                Las estaciones de trabajo LTSP requieren que el kernel tengan soporte 
				para disco RAM, lo cual es seleccionado en la sección 'Block Devices'.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                Block devices -> Initial RAM disk (initrd)
                                support
                            </para>
                            <para>
                                Esto también debe estar habilitado.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                Processor type and features -> Processor family
                            </para>
                            <para>
                                Necesitas asegurarte de que el kernel que vayas a construir corra
				en el CPU de la estación de trabajo. Esto se hace en la sección 'Processor
				type and features'. Deberías también desactivar el soporte SMP, a
				menos que tengas múltiples CPUs.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                File systems -> Network file systems -> NFS
                                Client support
                            </para>
                            <para>
                                La estación de trabajo deberá montar su sistema de archivos raíz vía 
				NFS, por lo que el soporte para cliente NFS es requerido.
                            </para>
                        </listitem>
                    </itemizedlist>
                    Eso debería ser suficiente. Puedes también desactivar varias opciones 
		    innecesarias, para reducir el tamaño del kernel final.
                </para>
            </sect3>

            <sect3>
                <title>Configuración del kernel para no utilizar una imagen initrd</title>
                <para>
                    Configurar el kernel para no utilizar una imagen initrd difiere del	
		    que sí lo hace en lo siguiente:
                    <itemizedlist>
                        <listitem>
                            <para>
                                Block devices -> RAM disk support
                            </para>
                            <para>
                                Las estaciones de trabajo LTSP requieren que el kernel soporte un 
				disco RAM.
                            </para>
                        </listitem>

                        <listitem>
                            <para>
                                Block devices -> Initial RAM disk (initrd)
                                support
                            </para>
                            <para>
                                Esto necesita ser desactivado.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                Networking options -> IP:kernel level
                                autoconfiguration
                            </para>
                            <para>
                                Esto necesita estar habilitado. Le indicará al kernel que debe configurar
				su interfase de red eth0 automáticamente, basándose en valores previos
				pasados por la línea de comandos del núcleo.
                            </para>
                            <para>
                                No es necesario especificar las opciones DHCP, BOOTP o RARP debido
				a que la bootrom Etherboot ya hace una petición DHCP o BOOTP, y hará
				que los parámetros IP estés disponibles en la línea de comandos del
				kernel. Esto evita que se realice una segunda petición.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                Network device support -> Ethernet (10 or
                                100Mbit)
                            </para>
                            <para>
                                Cuando no utilizas un initrd, debes elegir una placa de red específica
				que concuerde con la tuya. Esto DEBE estar ligado (linkeado) estáticamente
				dentro del núcleo, debido a que la interfase ethernet es necesaria
				antes de que se monte el sistema de archivos raíz. Esta es la mayor
				diferencia entre la forma en que se trabaja con y sin initrd.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                File systems -> /dev filesystem support
                            </para>
                            <para>
                                Como en LTSP versión 2.09pre2, <command>devfs</command> es necesario. Esto es 
				así, se use initrd o no.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                File systems -> Automatically mount at boot
                            </para>
                            <para>
                                Cuando NO se utiliza initrd, el sistema de archivos /dev debe ser 
				montado por el kernel, durante el inicio. Por lo tanto, tienes que 
				decir 'Y' aquí.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                File systems -> Network file systems -> NFS
                                Client support
                            </para>
                            <para>
                                La estación de trabajo montará su sistema de archivos raíz via NFS, 
				por lo que el soporte para cliente NFS es requerido.
                            </para>
                        </listitem>
                    </itemizedlist>
                </para>
            </sect3>
        </sect2>

        <sect2>
            <title>Construyendo el kernel</title>
 
            <para>
                Para hacer las cosas mas fáciles, una copia del archivo <filename>.config</filename> 
		está incluida en el paquete ltsp_initrd_kit. Puedes copiarlo al 
		directorio <filename>/usr/src/linux-2.4.9</filename>.
            </para>

            <para>
                Una vez que has finalizado seleccionando y deseleccionando las opciones 
		del núcleo, necesitas construirlo. Los siguientes comando necesitan 
		ser ejecutados en orden de lograrlo:
                <screen>
make dep
make clean
make bzImage
make modules
make modules_install </screen>
                Puedes juntar todo así:
                <screen>
make dep &amp;&amp; make clean &amp;&amp; make bzImage &amp;&amp; make modules &amp;&amp; make modules_install </screen>
                El doble ampersand (&amp;) significa que si el primer comando finaliza 
		exitosamente, entonces el segundo será ejecutado. Si el segundo lo 
		hace también exitosamente, se ejecutará el tercero. Y así.
            </para>
            <para>
                Cuando la compilación ha finalizado, el nuevo kernel estará en 
		<filename class="directory">/usr/src/linux-2.4.9/arch/i386/boot/bzImage</filename>.
            </para>
        </sect2>

        <sect2>
            <title>Etiquetando al kernel para Etherboot</title>
            <para>
                El kernel Linux debe ser preparado para que Etherboot pueda manejarlo. 
		Esto es llamado 'etiquetar' el kernel. Este proceso le agregará
		algún código adicional que es ejecutado antes de que el control sea
		pasado al núcleo. La herramienta para etiquetar el kernel se llama
		'<command>mknbi-linux</command>'.
            </para>
            <para>
                El ltsp_initrd_kit incluye un script de shell llamado <command>buildk</command>
		que incluye todos los comandos que necesites para preparar la imagen
		del núcleo para que inicie por red.
            </para>
        </sect2>
    </sect1>
</chapter>

<!--
<chapter>
    <title>Advanced Topic: Making bootroms</title>
    <para>
        Burning eproms with Etherboot code
    </para>
</chapter>
-->

<!--
<chapter>
    <title>Advanced Topic: Display Managers</title>
    <para>
        Burning eproms with Etherboot code
    </para>
</chapter>
-->

<!--
<chapter>
    <title>Advanced Topic: Font Server</title>
    <para>
        Burning eproms with Etherboot code
    </para>
</chapter>
-->

<!--
<chapter>
    <title>Advanced Topic: Configuring a Chooser</title>
    <para>
        Burning eproms with Etherboot code
    </para>
</chapter>
-->

<!--
<chapter>
    <title>Advanced Topic: Local Applications</title>
    <para>
        Burning eproms with Etherboot code
    </para>
</chapter>
-->

<!--
<chapter>
    <title>Advanced Topic: Accessing local peripherals</title>
    <para>
        Burning eproms with Etherboot code
    </para>
</chapter>
-->

<chapter>
    <title>Entradas lts.conf</title>
    <para>
        Cuando diseñamos LTSP, una de las cuestiones que sabíamos era que
	podíamos tener que lidiar con hardware variado para las estaciones
	de trabajo. Ciertamente, cualquier combinación disponible hoy de CPU,
	placa de red y de video, podría no estar disponible en 3 meses. cuando
	querramos agregar mas estaciones de trabajo a la red.
    </para>
    <para>
        Por eso, hemos desarrollado una manera de especificar la configuración
	de cada terminal. El archivo de configuración se llama <filename>lts.conf</filename>
	y reside en el directorio <filename class="directory">/opt/ltsp/i386/etc</filename>.
    </para>

    <para>
        El formato del archivo lts.conf permite opciones por defecto y opciones
	específicas para cada estación de trabajo. Si todas tus terminales
	son idénticas, entonces deberías especificar todas las opciones bajo
	la sección [Default].
    </para>

    <sect1>
        <title>Archivo lts.conf de ejemplo</title>
        <para>
            Aquí hay un ejemplo de un archivo lts.conf:
            <screen>
[Default]
        SERVER             = 192.168.0.254
        X_MOUSE_PROTOCOL   = "PS/2"
        X_MOUSE_DEVICE     = "/dev/psaux"
        X_MOUSE_RESOLUTION = 400
        X_MOUSE_BUTTONS    = 3
        USE_XFS            = N
        RUNLEVEL           = 5

[ws001]
        XSERVER            = auto
        X_MOUSE_PROTOCOL   = "Microsoft"
        X_MOUSE_DEVICE     = "/dev/ttyS1"
        X_MOUSE_RESOLUTION = 50
        X_MOUSE_BUTTONS    = 3
        X_MOUSE_BAUD       = 1200

[ws002]
        XSERVER            = XF86_Mach64

[ws003]
        RUNLEVEL           = 3 </screen>
        </para>
    </sect1>

    <sect1>
        <title>Opciones de lts.conf disponibles</title>
        <sect2>
            <title>Opciones generales</title>
            <variablelist>

                <varlistentry>
                    <term><command>Comentarios</command></term>
                    <listitem>
                        <para>
                            Los comentarios comienzan con numeral ('#') y continúan hasta el final 
			    de la línea.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>LTSP_BASEDIR</command></term>
                    <listitem>
                        <para>
                            Esto indica dónde el sistema de archivos raíz de LTSP está ubicado.
			    Por defecto es en <filename>/opt/ltsp/</filename>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>SERVER</command></term>
                    <listitem>
                        <para>
                            Este es el servidor utilizado por XDM_SERVER, TELNET_HOST, XFS_SERVER
			    y SYSLOG_HOST, si alguno de los mencionados no está especificado
			    explícitamente. Si tienes una máquina que está actuando como el servidor
			    de todo, entonces puedes especificar la dirección IP solamente aquí
			    y omitir el resto. Si ningún valor es elegido, se toma por defecto
			    <command>192.168.0.254</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>SYSLOG_HOST</command></term>
                    <listitem>
                        <para>
                            Si quieres enviar los mensajes de sistema a una máquina distinta al
			    servidor por defecto, entonces puedes especificar dicha máquina aquí.
			    Si ningún parámetro es especificado se utilizará la entrada de SERVER.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>NFS_SERVER</command></term>
                    <listitem>
                        <para>
                            Especifica la dirección IP del servidor desde donde el sistema de
			    archivos <filename>/home</filename> es montado. Por defecto se utiliza 
			    la entrada <command>SERVER</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>USE_NFS_SWAP</command></term>
                    <listitem>
                        <para>
                            Pon <command>Y</command> aquí si quieres habilitar intercambio sobre NFS. Por defecto
			    es <command>N</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>SWAPFILE_SIZE</command></term>
                    <listitem>
                        <para>
                            Aquí es donde puedes controlar el tamaño del archivo de intercambio.
			    El tamaño por defecto es <command>64m</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>SWAP_SERVER</command></term>
                    <listitem>
                        <para>
                            El archivo de intercambio puede existir en cualquier servidor de la
			    red. Puedes especificar la dirección IP de dicho servidor. Por defecto
			    se toma el valor de NFS_SERVER.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>NFS_SWAPDIR</command></term>
                    <listitem>
                        <para>
                            Para especificar el directorio en el server que es exportado via NFS.
			    Por defecto es <filename>/var/opt/ltsp/swapfiles</filename>. Asegúrate de que
			    dicho directorio esté en <filename>/etc/exports</filename>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>TELNET_HOST</command></term>
                    <listitem>
                        <para>
                            Si la estación de trabajo es configurada para tener una interface
			    basada en caracteres, entonces el valor de este parámetro será usado
			    como el host donde se haga la sesión de telnet. Si ningún valor es
			    especificado se utilizará la entrada de <command>SERVER</command>.
                        </para>
                        <para>
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>DNS_SERVER</command></term>
                    <listitem>
                        <para>
                            Usada para crear el archivo resolv.conf.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>SEARCH_DOMAIN</command></term>
                    <listitem>
                        <para>
                            Usada para crear el archivo resolv.conf.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>MODULE_01</command> thru
                          <command>MODULE_10</command></term>
                    <listitem>
                        <para>
                            Hasta 10 módulos de kernel pueden ser cargados mediante estas entradas.
			    Puedes especificar la línea de comando que usarías cuando usas indmod.
			    Por ejemplo:
                            <screen>
MODULE_01   = uart401.o
MODULE_02   = sb.o io=0x220 irq=5 dma=1
MODULE_03   = opl3.o </screen>
                        </para>

                        <para>
                            Si el valor de este parámetro es un camino absoluto, entonces
			    el comando <command>insmod</command> será utilizado. De otro
			    modo, se utilizará <command>modprobe</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>RAMDISK_SIZE</command></term>
                    <listitem>
                        <para>
                            Cuando la estación de trabajo se inicia, crea un disco RAM y monta
			    en él el directorio /tmp. Puedes controlar el tamaño de este sistema
			    de archivos con este parámetro. Debes especificar las unidades en
			    kilobytes (1024 bytes). Por ejemplo para crear un disco RAM de 2 MB
			    debes especificar <command>RAMDISK_SIZE=2048</command>.
                        </para>
                        <para>
                            Si cambias el tamaño del disco RAM aquí, también debes hacerlo dentro
			    del kernel. Esto lo puedes hacer compilándolo o bien, si estás usando
			    Etherboot o Netboot, poniéndolo como argumento cuando etiquetas el
			    kernel con mknbi-linux.
                        </para>
                        <para>
                            El valor por defecto es 1024 (1 MB).
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>RCFILE_01</command> thru
                          <command>RCFILE_10</command></term>
                    <listitem>
                        <para>
                            Scripts RC adicionales pueden ser ejecutados por rc.local. Tan sólo
			    coloca tu script en el directorio <filename>etc/rc.d</filename> y especifica el
			    nombre en alguna de estas entradas.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>SOUND</command></term>
                    <listitem>
                        <para>
                            Si el paquete LTSP Sound está instalado, entonces necesitas poner
			    <command>Y</command> en esta entrada y ejecutar el script <command>rc.sound</command> para configurar
			    la placa de sonido y el demonio. Por defecto es <command>N</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>RUNLEVEL</command></term>
                    <listitem>
                        <para>
                            El runlevel determina el modo en el cual la estación de trabajo estará	
			    corriendo. Los siguientes runlevels son los soportados:
                        </para>
			<para> 
				<emphasis>3</emphasis> : Iniciará un shell. Útil para depuración de la estación de trabajo.
			</para>
			<para>
				<emphasis>4</emphasis> : Esto correrá una o más sesiones de telnet en el TELNET_HOST. 
			Esto es genial para reemplazar viejas terminales seriales.
			</para>
			<para>
				<emphasis>5</emphasis> : Modo GUI. Arrancará X Window, y enviará una petición XDMCP al
				servidor, quien devolverá una pantalla de login a la terminal. Se
				necesita tener un Display Manager corriendo en el servidor, como XDM,
				GDM o KDM.
			</para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>TELNET_SESSIONS</command></term>
                    <listitem>
                        <para>
                            Indica cuántas sesiones de telnet puedes correr. Cada sesión estará
			    en una diferente pantalla virtual, a las que se puede acceder con
			    las teclas ALT-F1 a ALT-F9. El valor por defecto es 2.
                        </para>
                    </listitem>
                </varlistentry>

            </variablelist>
        </sect2>

        <sect2>
            <title>Opciones de X Window</title>
            <variablelist>
                <varlistentry>
                    <term><command>XDM_SERVER</command></term>
                    <listitem>
                        <para>
                            Si quieres apuntar XDM hacia una máquina que no sea tu servidor por
			    defecto, entonces debes especificarlo aquí. Si este parámetro NO es
			    especificado, entonces se usará la entrada en SERVER.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>XSERVER</command></term>
                    <listitem>
                        <para>
                            Esta entrada define cuál servidor X la estación de trabajo correrá.
			    Para placas PCI y AGP, este parámetro no debería ser necesario. El
			    script rc.local debería poder autodetectar la tarjeta. Puedes también
			    poner <command>auto</command> aquí a fin de indicar que se tratará de autodetectar
			    el video.
                        </para>

                        <para>
                            Para placas ISA, o para especificar un servidor X en particular, puedes
			    poner el nombre del driver o servidor X aquí.
                        </para>
                        <para>
                            Si el valor comienza con 'XF86_', entonces XFree 3.3.6 será
			    utilizado. De otro modo, XFree 4.1.x lo será. El valor por defecto
			    es <command>auto</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>X_MODE_0</command> through
                          <command>X_MODE_2</command></term>
                    <listitem>
                        <para>
                            Hasta 3 Modelines o resoluciones pueden ser configuradas para la terminal.
			    Esta entrada puede tomar dos tipos diferentes de valores. Puede ser
			    tanto una resolución como un modeline completo:
                            <programlisting width=80>
X_MODE_0 = 800x600

   o bien

X_MODE_0 = 800x600 60.75 800 864 928 1088 600 616 621 657 -HSync -VSync
                            </programlisting>
                        </para>
                        <para>
                            Si ninguna de las entradas X_MODE_x es especificada, entonces se
			    utilizarán los modelines por defecto, y las resoluciones serán de
			    1024x768, 800x600 y 640x480.
                        </para>
                        <para>
                            Si una o mas entradas X_MODE_x es especificada, entonces no se
			    tendrán en consideración los modelines por defecto.
                        </para>
                          
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>X_MOUSE_PROTOCOL</command></term>
                    <listitem>
                        <para>
                            Cualquier valor que funcione con el Protocolo de Puntero XFree86 puede
			    ser puesto aquí. Los valores típicos incluyen 'Microsoft' y 'PS/2'. 
			    El valor por defecto es <command>'PS/2'</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>X_MOUSE_DEVICE</command></term>
                    <listitem>
                        <para>
                            Este es el dispositivo al cual el mouse está conectado. Si es un mouse
			    serial, debería ser un puerto serie, como <command>/dev/ttyS0</command> o <command>/dev/ttyS1</command>.
			    Si es un mouse PS/2, este valor debería ser <command>/dev/psaux</command>. El valor por
			    defecto es <command>/dev/psaux</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>X_MOUSE_RESOLUTION</command></term>
                    <listitem>
                        <para>
                            Este es el valor 'Resolution' que encuentras en cualquier archivo
			    <command>XF86Config</command>. Un valor típico para un mouse serial es 
			    <command>50</command> y para uno PS/2 es <command>400</command>. 
			    El valor por defecto es <command>400</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>X_BUTTONS</command></term>
                    <listitem>
                        <para>
                            Le dice la sistema cuántos botones tiene el mouse. Usualmente son
			    <command>2</command> o <command>3</command>. El valor por defecto 
			    es <command>3</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>X_MOUSE_EMULATE3BTN</command></term>
                    <listitem>
                        <para>
                            Esto lo dice al servidor X que debe emular el tercer botón del mouse
			    cuando se presionen simultáneamente los botones izquierdo y derecho.
			    El valor por defecto es <command>N</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>X_MOUSE_BAUD</command></term>
                    <listitem>
                        <para>
                            Para ratones seriales, define la tasa de baudios. El valor por defecto
			    es <command>1200</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>X_COLOR_DEPTH</command></term>
                    <listitem>
                        <para>
                            Este es el número de bits a utilizar para la profundidad del color. 
			    Los valores posibles son <command>8</command>, <command>15</command>, 
			    <command>16</command>, <command>24</command> y <command>32</command>. 
			    8 bits te dará 256 colores, 16 te dará 65536, 24 te dará 16 millones y 
			    32 te dará 4,2 billones de colores. No todos los servidores X 
			    soportan estos valores. El valor por defecto es <command>16</command>
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>USE_XFS</command></term>
                    <listitem>
                        <para>
                            Tienes la opción de correr un Servidor de Fuentes X (XFS, X Font Server)
			    o bien leer las fuentes vía NFS. El servidor de fuentes debería proveer
			    un camino simple para mantener todas las fuentes en un solo lugar,
			    pero hay algunos problemas cuando el número de estaciones de trabajo
			    supera las 40. Los 2 valores en esta opción son <command>Y</command> 
			    o <command>N</command>. El valor por defecto es <command>N</command>. 
			    Si sí quieres usar un Servidor de Fuentes, entonces debes usar la 
			    entrada <command>XFS_SERVER</command> para especificar su dirección IP.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>XFS_SERVER</command></term>
                    <listitem>
                        <para>
                            Si estás usando un Servidor de Fuentes, debes especificar su dirección
			    IP aquí. Si no está especificado, entonces se usará por defecto la
			    entrada especificada en <command>SERVER</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>X_HORZSYNC</command></term>
                    <listitem>
                        <para>
                            Setea la sincronización horizontal del monitor. El valor por defecto
			    es <command>"31-62"</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>X_VERTREFRESH</command></term>
                    <listitem>
                        <para>
                            Setea el refresco vertical del monitor. Por defecto es <command>"55-90"</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>XF86CONFIG_FILE</command></term>
                    <listitem>
                        <para>
                            Si quieres crear tu propio archivo de configuración XF86Config, lo 
			    puedes hacer. Sólo tienes que colocarlo en el directorio 
			    <command>/opt/ltsp/i386/etc</command>.
			    Luego, cualquiera sea el nombre que le pongas, debes entrar dicho
			    nombre en este parámetro. Por ejemplo:
                            <screen>
XF86CONFIG_FILE = XF86Config.ws004 </screen>
                        </para>
                    </listitem>
                </varlistentry>
            </variablelist>
        </sect2>

        <sect2>
            <title>Opciones para pantallas táctiles</title>
            <variablelist>
                <varlistentry>
                    <term><command>USE_TOUCH</command></term>
                    <listitem>
                        <para>
                            Si estás conectando una pantalla táctil a la estación de trabajo,
			    puedes habilitarla mediante esta entrada, colocando <command>Y</command>. 
			    Una vez hecho esto, deberás configurar algunos aspectos más detallados 
			    a continuación. El valor por defecto es <command>N</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><command>X_TOUCH_DEVICE</command></term>
                    <listitem>
                        <para>
                            Una pantalla táctil funciona como un mouse y usualmente se conecta
			    a un ordenador mediante el puerto serie. Puedes especificar cuál puerto
			    serie en esta entrada. Por ejemplo, podrías poner algo tipo <command>/dev/ttyS0</command>.
			    No hay valor por defecto aquí.
                        </para>
                    </listitem>
                </varlistentry>
    
                <varlistentry>
                    <term><command>X_TOUCH_MINX</command></term>
                    <listitem>
                        <para>
                            Valor de calibración para una pantalla táctil Elo Touch. El valor
			    por defecto es <command>433</command>.
                        </para>
                    </listitem>
                </varlistentry>
         
                <varlistentry>
                    <term><command>X_TOUCH_MAXX</command></term>
                    <listitem>
                        <para>
                            Valor de calibración para una pantalla táctil Elo Touch. El valor
			    por defecto es <command>3588</command>.
                        </para>
                    </listitem>
                </varlistentry>
         
                <varlistentry>
                    <term><command>X_TOUCH_MINY</command></term>
                    <listitem>
                        <para>
                            Valor de calibración para una pantalla táctil Elo Touch. El valor
			    por defecto es <command>569</command>.
                        </para>
                    </listitem>
                </varlistentry>
         
                <varlistentry>
                    <term><command>X_TOUCH_MAXY</command></term>
                    <listitem>
                        <para>
                            Valor de calibración para una pantalla táctil Elo Touch. El valor
			    por defecto es <command>3526</command>.
                        </para>
                    </listitem>
                </varlistentry>
         
                <varlistentry>
                    <term><command>X_TOUCH_UNDELAY</command></term>
                    <listitem>
                        <para>
                            Valor de calibración para una pantalla táctil Elo Touch. El valor
			    por defecto es <command>10</command>.
                        </para>
                    </listitem>
                </varlistentry>
         
                <varlistentry>
                    <term><command>X_TOUCH_RPTDELAY</command></term>
                    <listitem>
                        <para>
                            Valor de calibración para una pantalla táctil Elo Touch. El valor
			    por defecto es <command>10</command>.
                        </para>
                    </listitem>
                </varlistentry>
            </variablelist>
        </sect2>

        <sect2>
            <title>Opciones para Aplicaciones Locales</title>
            <variablelist>
                <varlistentry>
                    <term><command>LOCAL_APPS</command></term>
                    <listitem>
                        <para>
                            Si quieres usar la opción de correr las aplicaciones localmente en
			    la estación de trabajo, entonces debes poner <command>Y</command> aquí. Varios pasos
			    adicionales deben llevarse a cabo para que las aplicaciones locales
			    funcionen. Mira la sección 'Aplicaciones Locales' para mayor información.
			    El valor por defecto es <command>N</command>.
                        </para>
                    </listitem>
                </varlistentry>

                <varlistentry>
                    <term><comma