<HTML> <HEAD> <TITLE>Linux sin disco Mini-COMO: Conceptos fundamentales</TITLE> </HEAD> <BODY> <A HREF="Linux-Sin-Disco-Duro-Como-5.html">Anterior</A> <A HREF="Linux-Sin-Disco-Duro-Como-7.html">Siguiente</A> <A HREF="Linux-Sin-Disco-Duro-Como.html#toc6">Indice</A> <HR> <H2><A NAME="s6">6. Conceptos fundamentales</A></H2> <P>La idea fundamental es la siguiente: el PC buscará su dirección IP en el servidor de arranque vía protocolo <CODE>bootp</CODE>, usando <CODE>0.0.0.0</CODE> como dirección IP inicial y recibiendo su núcleo vía el protocolo <CODE>tftp</CODE>. Arrancar a través de segmentos (vía un <I>router</I> o encaminador) no es simple: se puede o bien colocar ambos, servidor y las computadoras sin disco, en el mismo segmento de red o configurar un asistente de direcciones UDP en su encaminador hacia la dirección del servidor. Refiérase al manual de su encaminador para obtener más información. </P> <P>Para hacer esto siga los siguientes pasos:</P> <H2><A NAME="ss6.1">6.1 Configuración del PC</A></H2> <P>Instale el paquete <CODE>nfsboot</CODE> (el paquete estará disponible en su servidor Linux favorito en el directorio <CODE>/pub/Linux/system/Linux-boot</CODE>). Este paquete contiene la imagen de una EPROM de arranque para la tarjeta wd8013 que puede ser grabada directamente. </P> <P>Existen varias vías alternativas para preparar el PC:</P> <P> <UL> <LI>si la máquina no está totalmente exenta de discos, entonces es posible utilizar un pequeño programa DOS, o </LI> <LI>la imagen binaria del disquete contenida en el mismo paquete. Si elije esta última opción puede escribir la imagen en el disquete con el comando <CODE>dd</CODE>: <BLOCKQUOTE><CODE> <PRE> dd if=imagen of=/dev/fd0H1440 </PRE> </CODE></BLOCKQUOTE> Estas imágenes contienen un cliente <CODE>bootp</CODE> y <CODE>tftp</CODE>. Es necesario preparar también un núcleo de Linux, el cual tenga la opción <CODE>nfs-root</CODE> habilitada. </LI> <LI>Si está usando un núcleo 1.2.13, es necesario poner al día el núcleo con el parche incluído en el paquete <CODE>nfsboot</CODE>. Refiérase a <CODE>patch(1)</CODE> </LI> <LI>Si está usando uno de los últimos núcleos (1.3.x o superior) tiene que habilitar la opción <CODE>nfs-root</CODE>. </LI> </UL> </P> <P>Puede o no configurar soporte para dispositivos de sistemas de archivo (disquetes o discos duros), pero es obligatorio habilitar soporte TCP/IP, soporte para tarjeta ethernet y soporte de sistema de archivos nfs. Y, una vez realizado esto, recompilar el núcleo de la manera acostumbrada.</P> <H2><A NAME="ss6.2">6.2 Instalación de <CODE>bootpd</CODE> en el servidor</A></H2> <P>Bootpd puede encontrarse en el paquete <CODE>bootpd-2.4.tar.gz</CODE> (el cual se obtiene de su servidor favorito de software Linux en el directorio <CODE>/pub/Linux/system/Network/boot.net</CODE>). Obtenga el paquete, compílelo e instálelo. Si alguna máquina Linux tiene la distribución Slackware, es posible saltarse este paso instalando la distribución normal conteniendo <CODE>bootpd</CODE>. El demonio se puede ejecutar directamente utilizando el comando</P> <P> <BLOCKQUOTE><CODE> <PRE> bootpd -s </PRE> </CODE></BLOCKQUOTE> </P> <P>o a través de <CODE>inetd</CODE>. En ese caso será necesario:</P> <P> <OL> <LI>editar <CODE>/etc/inetd.conf</CODE>, eliminando la marca de comentario (<CODE>#</CODE>) de las siguientes líneas: <BLOCKQUOTE><CODE> <PRE> # tftp dgram udp wait root /usr/sbin/in.tftpd tftpd /ex # bootps dgram udp wait root /usr/sbin/in.bootpd bootpd </PRE> </CODE></BLOCKQUOTE> </LI> <LI>inserte o descomente las siguientes dos líneas en el archivo <CODE>/etc/services</CODE>: <BLOCKQUOTE><CODE> <PRE> bootps 67/tcp # BOOTP server tftp 69/udp # TFTP server </PRE> </CODE></BLOCKQUOTE> </LI> <LI>reiniciar <CODE>inetd</CODE> usando <BLOCKQUOTE><CODE> <PRE> kill -HUP PID_de_inetd </PRE> </CODE></BLOCKQUOTE> </LI> </OL> </P> <H3>Configuración de <CODE>bootpd</CODE> en el servidor</H3> <P>Lo primero de todo: <CODE>bootpd</CODE> tiene un archivo de configuración llamado <CODE>bootptab</CODE> el cual usualmente se encuentra en <CODE>/etc</CODE>. Debe ser modificado insertando la dirección IP de su pasarela, servidor de nombres y la/s dirección/es ethernet de su/s máquina/s sin disco. Un ejemplo de <CODE>/etc/bootptab</CODE>: </P> <P> <BLOCKQUOTE><CODE> <PRE> global.prof:\ :sm=255.255.255.0:\ :ds=192.168.1.5:\ :gw=192.168.1.19:\ :ht=ethernet:\ :bf=linux: machine1:hd=/export/root/machine1:tc=global.prof:ha=0000c0863d7a:ip=192.1 machine2:hd=/export/root/machine2:tc=global.prof:ha=0800110244e1:ip=192.1 machine3:hd=/export/root/machine3:tc=global.prof:ha=0800110244de:ip=192.1 </PRE> </CODE></BLOCKQUOTE> </P> <P> <UL> <LI><CODE>global.prof</CODE>: Archivo de esquema general para las configuraciones de cada máquina, donde: <UL> <LI><CODE>sm</CODE>: Corresponde a la Máscara de subred</LI> <LI><CODE>ds</CODE>: Dirección del servidor de nombres (DNS)</LI> <LI><CODE>gw</CODE>: Dirección de la pasarela por defecto</LI> <LI><CODE>ht</CODE>: Tipo de hardware de red</LI> <LI><CODE>bf</CODE>: Nombre del archivo de arranque</LI> </UL> </LI> </UL> </P> <P>Después de esto, cada máquina debe tener una línea:</P> <P> <UL> <LI>El primer campo contiene el nombre de la máquina</LI> <LI><CODE>hd</CODE> contiene el directorio del archivo de arranque</LI> <LI>el archivo de esquema general debe ser incluído en el campo <CODE>tc</CODE></LI> <LI><CODE>ha</CODE> contiene la dirección de hardware de la tarjeta de red</LI> <LI><CODE>ip</CODE> contiene la dirección ip que se asigna</LI> </UL> </P> <H2><A NAME="ss6.3">6.3 <CODE>tftp</CODE></A></H2> <P>TFTP (<I>Trivial File Transfer Protocol</I>) es un protocolo de transferencia de archivos, como lo es ftp, pero mucho más simple, a fin de que quepa en las EPROMs. TFTP puede ser usado de dos maneras: </P> <P> <DL> <DT><B>tftp simple:</B><DD><P>El cliente puede acceder a la totalidad de su sistema de archivos. Es simple pero puede generar un gran problema de seguridad (cualquiera puede obtener su archivo de claves vía tftp). </P> <DT><B>tftp seguro:</B><DD><P>El servidor <CODE>tftp</CODE> utiliza un llamada de sistema <CODE>chroot.2</CODE> para cambiar a su propio directorio raíz. Cualquier cosa que esté fuera del nuevo directorio raíz es completamente inaccesible, ya que el directorio que sufre el chroot se transforma en el nuevo directorio raíz; el campo <CODE>hd</CODE> del archivo <CODE>bootptab</CODE> debe reflejar esta nueva situación.</P> <P>Por ejemplo: cuando se utiliza <CODE>tftp</CODE> simple, el campo <CODE>hd</CODE> contiene el <I>path</I> o camino completo del directorio de arranque: <CODE>/export/root/machine1</CODE>. Cuando se utiliza <CODE>tftp</CODE> seguro con <CODE>/export</CODE> como directorio raíz, entonces <CODE>/export</CODE> pasa a ser <CODE>/</CODE> y el campo <CODE>hd</CODE> debe ser <CODE>/root/machine1</CODE>. </P> </DL> </P> <P>Asimismo, cada implementación Unix contiene el servidor <CODE>tftp</CODE> y, probablemente, no sea necesario que Usted instale su propio servidor. </P> <H2><A NAME="ss6.4">6.4 Servidor. Instalación mínima de Linux remota.</A></H2> <P>El servidor debe contener los paquetes <I>a</I>, <I>ap</I>, <I>n</I> y <I>x</I> de la distribución Slackware. No hay inconvenientes para instalar más cosas; sin embargo, los paquetes mencionados son suficientes para los propósitos de una terminal X sin disco. </P> <P>Para la instalación se necesita un sistema Linux funcionando.</P> <P>Buscar algo de espacio en disco para exportarlo para lectura-escritura en la máquina remota. </P> <P>Montar el directorio exportado en algún lugar (por ej. <CODE>/mnt</CODE>) sobre el sistema de archivos de la máquina Linux.</P> <P>Iniciar la instalación de Linux y cambiar el lugar de instalación de <CODE>/</CODE> a <CODE>/mnt</CODE>. Instalar los paquetes referidos de la forma usual. Si se desea correr sólo un Linux sin disco no son necesarios más cambios. De otra forma, si se planea utilizar más de una máquina sin disco esta instalación no funcionará ya que algunos archivos y directorios deben ser privados para cada máquina. El problema puede ser solucionado moviendo <CODE>/usr</CODE> (que no contiene elementos privados) y creando subdirectorios separados para cada máquina sin disco. Por ejemplo, si <CODE>/export/linux/machine1</CODE> fue montado en <CODE>/mnt</CODE> entonces la estructura de directorios después de la instalación inicial se verá así:</P> <P> <BLOCKQUOTE><CODE> <PRE> /export/linux/machine1/bin /export/linux/machine1/sbin /export/linux/machine1/lib /export/linux/machine1/etc /export/linux/machine1/var /export/linux/machine1/usr </PRE> </CODE></BLOCKQUOTE> </P> <P>Y después de los cambios debe de quedar:</P> <P> <BLOCKQUOTE><CODE> <PRE> /export/linux/machine1/bin /export/linux/machine1/sbin /export/linux/machine1/lib /export/linux/machine1/etc /export/linux/machine1/var /export/linux/usr </PRE> </CODE></BLOCKQUOTE> </P> <P>Ahora es posible crear los subdirectorios para las otras máquinas. Asumimos que las máquinas sin disco son llamadas <CODE>machine1</CODE>, <CODE>machine2</CODE>, <CODE>machine3</CODE>, etc.; puede utilizar el siguiente macro de bash para instalar los otros directorios: </P> <P> <BLOCKQUOTE><CODE> <PRE> cd /export/linux for x in machine2 machine3 ; do mkdir $x; cd $x (cd ../machine1; tar cf - *) | tar xvf - done </PRE> </CODE></BLOCKQUOTE> </P> <P>Una vez hecho esto, realice las siguientes exportaciones:</P> <P> <UL> <LI><CODE>/export/linux/usr</CODE>: Sólo lectura para todo el mundo</LI> <LI><CODE>/export/linux/machine1</CODE>: Solamente para <CODE>machine1</CODE> con permisos <CODE>rw,root</CODE></LI> <LI><CODE>/export/linux/machine2</CODE>: Solamente para <CODE>machine2</CODE> con derechos <CODE>rw,root</CODE></LI> <LI><CODE>/export/linux/machine3</CODE>: Solamente para <CODE>machine3</CODE> con derechos <CODE>rw,root</CODE></LI> </UL> </P> <P>como se indica a continuación (el formato de este ejemplo está en la sintaxis de SunOs 4.1.3 para <CODE>export</CODE>) </P> <P> <BLOCKQUOTE><CODE> <PRE> # Este archivo es /etc/export # para terminales X con Linux remotas # La siguiente linea es una unica: /etc/root/usr -access=linuxnet # Las siguientes lineas corresponden a una por cada maquina /export/root/machine1 rw=machine1,root=machine1 /export/root/machine2 rw=machine2,root=machine2 /export/root/machine3 rw=machine3,root=machine3 </PRE> </CODE></BLOCKQUOTE> </P> <P>No olvidar ejecutar <CODE>exportfs -a</CODE></P> <H2><A NAME="ss6.5">6.5 Configuración del servidor <CODE>tftp</CODE></A></H2> <P>Ahora es el momento de configurar el servidor <CODE>tftp</CODE>. Si no necesita seguridad en el protocolo <CODE>tftp</CODE> todo resultará más simple para sus clientes ya que arrancarán desde el directorio <CODE>/export</CODE>.</P> <P>Si utiliza seguridad con el protocolo <CODE>tftp</CODE> entonces se debe crear una estructura de directorio completa <CODE>/export/linux</CODE> bajo <CODE>/tftpboot</CODE> (con un núcleo real y enlaces simbólicos para las otras máquinas), o dejar que el directorio <CODE>/export</CODE> sea el directorio de arranque para el <CODE>tftp</CODE> seguro. O, si dispone de un directorio <CODE>tftpboot</CODE> separado necesita, de igual forma, la estructura de directorios original con un núcleo único y enlaces simbólicos para los otros. Se puede conseguir esta configuración ejecutando lo siguiente:</P> <P> <BLOCKQUOTE><CODE> <PRE> mkdir -p /tftpboot/export/linux/machine1 cd /tftpboot/export/linux/machine1 cp /export/linux/machine1/nombre_del_nucleo </PRE> </CODE></BLOCKQUOTE> </P> <P>Teclee lo siguiente:</P> <P> <BLOCKQUOTE><CODE> <PRE> mkdir -p /tftpboot/export/linux/machine2 cd ../machine2 ln -s ../machine1/nombre_del_nucleo </PRE> </CODE></BLOCKQUOTE> </P> <H2><A NAME="ss6.6">6.6 Últimos retoques</A></H2> <P>Para terminar, se debe insertar:</P> <P> <BLOCKQUOTE><CODE> <PRE> /sbin/mount nombre_servidor_nfs:/export/linux/usr /usr </PRE> </CODE></BLOCKQUOTE> </P> <P>como la primera línea de</P> <P> <BLOCKQUOTE><CODE> <PRE> /export/linux/machineX/etc/rc.d/rc.S </PRE> </CODE></BLOCKQUOTE> </P> <H2><A NAME="ss6.7">6.7 Requerimientos de memoria y espacio en disco; velocidad</A></H2> <P>Todo lo indicado ha sido comprobado únicamente con Slackware 2.3; para otras distribuciones/versiones los datos que se indican a continuación pueden variar.</P> <P> <UL> <LI>Espacio en disco: 28Mb + 6.5Mb/máquina</LI> <LI>RAM: Yo utilizo X con 8Mb. Para lo cual se necesita 4Mb de swap, el cual puede ser creado, separadamente para cada máquina, mediante un fichero de swap en el directorio <CODE>/tmp</CODE>. No olvide ponerlo a punto con <CODE>mkswap</CODE> y <CODE>swapon</CODE>.</LI> <LI>Velocidad: No he tenido problemas con un 486 DX2/66 con 8 Mb.</LI> </UL> </P> <HR> <A HREF="Linux-Sin-Disco-Duro-Como-5.html">Anterior</A> <A HREF="Linux-Sin-Disco-Duro-Como-7.html">Siguiente</A> <A HREF="Linux-Sin-Disco-Duro-Como.html#toc6">Indice</A> </BODY> </HTML>