Servidor De Raíces NFS Mini-COMO <author>Ofer Maor, <tt><htmlurl url="mailto:ofer@hadar.co.il" name="ofer@hadar.co.il"></tt> &nl; Traducido por Rodolfo Pilas, <tt><htmlurl url="mailto:rodolfo@linux.org.uy" name="rodolfo@linux.org.uy"></tt> <date>v3, 5 Diciembre 1996 <abstract> El objetivo de este Mini-COMO es explicar cómo crear directorios en un servidor que los clientes montarán como su directorio raíz por NFS. </abstract> <toc> <sect>Derechos <p> © 1996 Ofer Maor <tt><htmlurl url="mailto:ofer@hadar.co.il" name="ofer@hadar.co.il"></tt> Se puede encontrar la última versión de este Mini-COMO (HTML o texto) en <tt><htmlurl url="http://www.hadar.co.il/ofer/nfs-root-client/" name="http://www.hadar.co.il/ofer/nfs-root-client/"></tt> Salvo que exista una aclaración en contra, los documentos COMO de Linux son propiedad de sus respectivos autores. Los documentos COMO de Linux pueden ser reproducidos o distribuidos en su totalidad o en parte, en cualquier medio físico o electrónico, siendo estas declaraciones de derechos aplicables a todas las copias. Se permite y fomenta las redistribuciones comerciales, pero en esos casos el autor debe ser notificado. Todas las traducciones y trabajos derivados que incorporen cualquier documento COMO de Linux están cubiertos por esta declaración de derechos. Esto es, Usted no puede producir trabajos derivados de un COMO e imponerle restricciones adicionales. Pueden ser concedidas excepciones a estas reglas bajo ciertas condiciones; por favor, contacte con el coordinador de los COMO de Linux en la dirección que se indica más adelante. En resumen, deseamos promover la diseminación de esta información a través de tantos canales como sea posible. Sin embargo, se desea retener los derechos sobre los documentos COMO, y nos gustaría estar informados de cualquier plan de redistribuir los COMOs. Si tiene preguntas, por favor, contacte con Ofer Maor <tt><htmlurl url="mailto:ofer@hadar.co.il" name="ofer@hadar.co.il"></tt>, o Greg Hankins, el coordinador de los Linux COMO, <tt><htmlurl url="mailto:gregh@sunsite.unc.edu" name="gregh@sunsite.unc.edu"></tt> vía correo electrónico. Si tiene cualquier cosa para agregar a este Mini-COMO, por favor envíe un email al autor (Ofer Maor <tt><htmlurl url="mailto:ofer@hadar.co.il" name="ofer@hadar.co.il"></tt>), con la información. Toda información nueva que sea relevante será bienvenida. <sect1>Agradecimientos <p> Me gustaría expresar mi agradecimiento al autor de <it/Linux Con Raíz NFS Mini-COMO/, Andreas Kostyrca, <tt><htmlurl url="mailto:andreas@medman.ag.or.at" name="andreas@medman.ag.or.at"></tt>. A partir de su Mini-COMO pude dar los primeros pasos para montar mis clientes con directorio raíz por NFS. Este Mini-Como no pretende, de ninguna forma, suplantar dicho trabajo; lo amplía usando mi experiencia en este proceso. También quiero agradecer a Mark Kushinsky, <tt><htmlurl url="mailto:mark026@ibm.net" name="mark026@ibm.net"></tt> por pulir el inglés y las expresiones de este Como, hasta lograr hacerlo mucho más legible. <sect>Prefacio <p> Este Mini-Como ha sido escrito para ayudar a las personas que desean preparar los directorios de un servidor para ser montados como directorio raíz mediante por clientes NFS. Por favor, tenga en cuenta que existen muchas maneras de lograr esto, dependiendo de las necesidades y de sus intenciones. Si cada cliente es individual, y cada uno de ellos tiene su propio usuario y administrador, será necesario que una parte significativa de los directorios de cada cliente no sea compartida con otro cliente. Por otro lado, si el cliente es accesible a muchos usuarios y están todos administrados por la misma persona (como en un aula de clases), se buscará que la mayor cantidad posible de archivos estén compartidos a los efectos de hacer la administración más manejable. Este Como se enfoca en esta segunda opción. <sect1>Nota <label id="sec21"> <p> Cuando se construye el que será el directorio raíz del cliente, y se trata de ocupar un espacio mínimo, se debe atender principalmente a qué archivos pueden ser compartidos o montados desde el servidor. En este Como recomiendo la configuración de un cliente basado en mi experiencia. Pero antes de empezar tenga en cuenta que: <itemize> <item>Este Mini-COMO no explica la importación del directorio raíz por NFS. Refiérase al <it/Linux-Con-Raíz-NFS Mini-COMO/ si necesita mayor información sobre esto. <item>Yo baso la mayoría de las configuraciones de mis clientes en montajes y enlaces simbólicos. Muchos de los enlaces simbólicos pueden ser reemplazados por enlaces rígidos (<it/hardlinks/). Uno puede elegir de acuerdo a sus preferencias personales. Utilizar enlaces rígidos sobre lo montado en vez de enlaces simbólicos tiene sus ventajas, pero puede causar confusión. Un archivo no es borrado definitivamente hasta que todos los enlaces rígidos sean eliminados. Por esto, en previsión del caso en que algún archivo sea puesto al día y el enlace rígido todavía se refiera a la versión vieja, es necesario tener especial cuidado en recordar cada enlace que utilice. <item>Cuando se monta la información desde el servidor, pueden seguirse dos métodos. El primero (y más común), es montar la totalidad del directorio raíz del servidor bajo un directorio local, y cambiar simplemente la trayectoria de búsqueda o enlazar los directorios relevantes allí. Personalmente no me gusta montar la partición raíz del servidor en los clientes. Por ello, este Como sugiere un método para montar los directorios relevantes del servidor en los lugares apropiados del sistema. <item>Este Como está basado en mi experiencia en la preparación de directorios para clientes basados en la distribución Slackware 3.1. Algunas cosas pueden resultar diferentes (especialmente en los archivos <tt/rc.*/), para usuarios de otras distribuciones, sin embargo los métodos y conceptos no varían. </itemize> <sect>Creación del directorio raíz de los clientes <p> <sect1>Creación del árbol de directorios <p> Antes que nada, es necesario crear la estructura de directorios en sí. Yo creo todos los clientes bajo <tt>/clients/nombre-maquina</tt> y usaré esto en los ejemplos que cito a continuación. No obstante, se puede cambiar por cualquier otro nombre. La primera etapa por tanto, consiste en crear los directorios relevantes en el que será directorio raíz del cliente. Se deben crear los siguientes directorios: <tscreen><verb> /bin /dev /etc /home /lib /mnt /proc /sbin /server /tmp /usr /var </verb></tscreen> y cualquier otro directorio que desee tener en su sistema. Los directorios locales <tt>/proc</tt> y <tt>/dev</tt> deben ser utilizados separadamente por cada máquina, a diferencia del resto de directorios, que pueden estar compartidos parcial o completamente con el resto de los clientes. <sect1>Creación del sistema de archivos mínimo para arrancar <P> <sect2>Creación del directorio <tt>/dev</tt> <p> Si bien el directorio <tt>/dev</tt> puede ser compartido, es mejor crearlo separado para cada cliente. Puede crear dicho directorio en el cliente con la macro <tt>MAKEDEV</tt>; sin embargo, en muchos casos resulta más simple copiarlo del servidor: <tscreen><verb> cp -a /dev /clients/nombre-maquina </verb></tscreen> Debe recordar que <tt>/dev/mouse</tt>, <tt>/dev/cdrom</tt> y <tt>/dev/modem</tt> son enlaces simbólicos a los dispositivos actuales y por tanto, asegurarse de que queden enlazados correctamente para apuntar al hardware correspondiente del cliente. <sect2>Copia de los binarios necesarios <p> Aunque montemos todo desde el servidor, existe un grupo de binarios que necesitamos copiar para cada cliente. Para empezar, necesitamos "<tt>init</tt>", ya que nuestro sistema no podrá ejecutar nada antes de inicializarse (como su autor indica en los comentarios sobre el programa). Por tanto, primero deberá copiar <tt>/sbin/init</tt> al directorio <tt>/sbin</tt> del cliente y como ejecutará <tt>rc.S</tt>, necesitará copiar <tt>/bin/sh</tt> al directorio <tt>/bin</tt> del cliente. Para poder montar necesitará copiar <tt>/sbin/mount</tt> al directorio <tt>/sbin</tt> del cliente. Esto es lo mínimo, asumiendo que la primera línea de su <tt>rc.S</tt> es <tt>mount -av</tt>. No obstante, recomiendo copiar algunos archivos más: <tt>update, ls, rm, cp</tt> y <tt>umount</tt>, y así disponer de las herramientas básicas en caso de que el cliente tenga problemas para montar. Si elige tener el swap habilitado antes de montar, también tendría que copiar el binario <tt>swapon</tt>. Ya que muchos de estos binarios están por defecto compilados dinámicamente, necesitará copiar una pequeña parte de <tt>/lib:</tt> <tscreen><verb> cp -a /lib/ld.* /lib/libc.* /lib/libcurses.* /client/nombre-maquina/lib </verb></tscreen> También es posible enlazar los binarios a sí mismos, en lugar de copiarlos. Por favor, lea mis comentarios de la sección <ref id="sec21"> de este documento. Tenga en cuenta que estamos asumiendo que el núcleo ha recibido todos los parámetros de red mientras se iniciaba. Si planea utilizar <tt/rarp/ o <tt/bootp/, posiblemente necesite copiar también los binarios relevantes para esto. Generalmente, se necesitará tener un mínimo de archivos disponibles para configurar la red y ejecutar <tt/rc.S/ hasta el momento en que se monta el resto del sistema de archivos. <sect2>El directorio <tt>/var</tt> <p> El directorio <tt>/var</tt>, en muchos casos, puede ser separado para cada cliente. Sin embargo, gran parte de la información puede estar compartida. Cree bajo el directorio del servidor un directorio llamado <tt>var</tt>. Montaremos el directorio <tt>/var</tt> de allí. Para crear el directorio local <tt>/var</tt>, simplemente escriba: <tscreen><verb> cp -a /var /clients/nombre-maquina </verb></tscreen> Ahora, tiene la posibilidad de elegir lo que desea separar, y lo que desea compartir. Para compartir cualquier directorio/archivo, elimínelo simplemente del directorio <tt>/var</tt> del cliente y enlácelo en al directorio <tt>/server/var</tt>. Tenga en cuenta que debe enlazar tanto para <tt>/server/var</tt> como para <tt>../server/var</tt> pero <bf>NO</bf> para <tt>/clients/nombre-maquina/server/var</tt> ya que esto no funcionará cuando cambie el directorio raíz en cada cliente. Generalmente recomiendo separar <tt>/var/run</tt>, <tt>/var/lock</tt>, <tt>/var/spool</tt> y <tt>/var/log</tt>. <sect2>El resto de los directorios <p> <itemize> <item><tt>/etc</tt> se explica en la siguiente sección. <item><tt>/mnt</tt> y <tt>/proc</tt> son para propósitos locales de cada cliente <item><tt>/usr</tt> y <tt>/home</tt> son solamente para montar <item><tt>/tmp</tt> depende de Usted. Se puede crear un directorio <tt>tmp</tt> diferente para cada cliente, o crear un directorio <tt>/clients/tmp</tt> y montarlo para cada cliente en <tt>/tmp</tt>. Yo recomiendo darle a cada cliente un directorio <tt>tmp</tt> separado. </itemize> <sect1>Preparación del directorio <tt>/etc</tt> y configuración de los clientes <p> Tenga en cuenta lo siguiente: esta sección se refiere a la creación del directorio <tt/etc/ que está preferentemente compartido entre los clientes. Si sus clientes sin disco tienen administradores de sistema diferentes, lo mejor es configurar un directorio <tt/etc/ para cada cliente. <sect2>Creación del árbol <tt>etc</tt> de los clientes <p> Aunque separemos el directorio <tt/etc/ para los clientes, mantendremos compartida una gran parte de los archivos que allí se encuentran. Creo que compartir los archivos con el <tt>/etc</tt> del servidor es mala idea, y recomiendo crear un directorio <tt>/clients/etc</tt> que contenga la información compartida entre los clientes. Para arrancar con esto, simplemente copie el contenido del <tt>/etc</tt> del servidor en el directorio <tt>/clients/etc</tt>. Se deberá colocar en este directorio todos los archivos de configuración que no sean específicos para una máquina, como pueden ser <tt/motd/, <tt/issue/, etc. y no los que sean específicos del cliente, como <tt/inittab/ o <tt/fstab/. El cambio más importante que deberemos realizar estará bajo el directorio <tt/rc.d/. Primero, deberemos cambiar <tt/rc.inet1/ para que refleje la configuración local. Yo paso al núcleo todos los parámetros de red usando LILO/Loadlin, por lo que quito todo lo relacionado del archivo <tt/rc.inet1/. Lo único que dejo allí son los binarios <tt/ifconfig/ y <tt/route/ del cliente. Si utiliza <tt/rarp/ o <tt/bootp/, necesitará crearlo acorde a esto. En segundo lugar, deberá editar su <tt/rc.S/ y eliminar todas las partes responsables de la comprobación por parte de <tt/fsck/ que tiene lugar cuando arranca el servidor. Debe encontrar la línea que monta su <tt/fstab/, que se parecerá a: <tscreen><verb> mount -avt nonfs </verb></tscreen> El parámetro <tt>-t nonfs</tt> se debe a que los clientes normales ejecutan primero <tt/rc.S/, usando después <tt/rc.inet1/ para configurar la red. Como esto provoca que no sea montada ninguna partition NFS, la línea es ignorada, y por ello, se debe cambiar a <tt>mount -av</tt>. Si necesita ejecutar <tt>rarp/bootp</tt> para configurar la red, hágalo en <tt/rc.S/ (o incluya una llamada a alguna macro desde <tt/rc.S/), antes de montar, y asegúrese de que sus directorios <tt>/bin</tt> y <tt>/sbin</tt> tengan disponibles los archivos necesarios. Una vez se lleva a cabo <tt>mount -av</tt>, tendrá un sistema de archivos funcionando. Cree un <tt/fstab/ general, luego puede copiarlo en cada cliente. Su <tt/fstab/ debe ser aproximadamente como este: <tscreen><verb> server/nfs default 1 1 server:/bin /bin nfs default 1 1 server:/usr /usr nfs default 1 1 server:/sbin /sbin nfs default 1 1 server:/home /home nfs default 1 1 server:/lib /lib nfs default 1 1 server:/clients/etc /server/etc nfs default 1 1 server:/clients/var /server/var nfs default 1 1 none /proc proc default 1 1 </verb></tscreen> Asegúrese también de que el <tt>/etc/exports</tt> del servidor sea algo como: <tscreen><verb> /clients/<nombre-máquina> maquina.dominio(rw,no_root_squash) /clients/etc maquina.dominio(ro,no_root_squash) /clients/var maquina.dominio(ro,no_root_squash) /usr maquina.dominio(ro,no_root_squash) /sbin maquina.dominio(ro,no_root_squash) /bin maquina.dominio(ro,no_root_squash) /lib maquina.dominio(ro,no_root_squash) /home maquina.dominio(ro,no_root_squash) </verb></tscreen> Con excepción de la primera línea, que debe ser única para cada máquina, el resto de las líneas pueden ser reemplazadas por nombres que engloben a todas las máquinas (por ejemplo <tt/pc*.dominio/). Le sugiero crear la mayoría de los directorios como sólo lectura, aunque esto es decisión suya. La indicación <tt>no_root_squash</tt> hará que los usuarios administradores de los clientes tengan también los permisos vigentes de root sobre <tt/nfsd/. Revise la página <tt/man exports(5)/. Si desea que los usuarios puedan ejecutar <tt/passwd/ desde los clientes, asegúrese que <tt>/etc</tt> esté con permisos <tt/rw/ y no <tt/ro/. Aunque esto no es obligatorio. Por favor, tenga en cuenta otro detalle en el archivo <tt/rc.S/. En Slackware, por defecto, se crea un nuevo <tt>/etc/issue</tt> y <tt>/etc/motd</tt> cada vez que se ejecuta. Esta función <bf>DEBE</bf> ser deshabilitada si dichos archivos son montados como sólo lectura desde el servidor, y recomiendo que estén deshabilitados en todos los casos. Finalmente, si desea mantener la misma base de usuarios tanto en el servidor como en los clientes, deberá elegir entre: <enum> <item>usar NIS (Páginas Amarillas - revise el <it/NIS-Como/), cada cliente deberá disponer, por separado, de un <tt>/etc/passwd</tt> y un <tt>/etc/group</tt> tal y como lo recibe del servidor NIS. <item>En la mayoría de los casos, será suficiente con un simple enlace simbólico. Por lo tanto, necesitará o bien un enlace rígido (<it/hardlink/) de <tt>/clients/etc/passwd</tt> a <tt>/etc/passwd</tt>, o si prefiere, un enlace simbólico, enlazando <tt>/etc/passwd</tt> a <tt>/clients/etc/passwd</tt> (y no de la otra forma, ya que los clientes no montarán el directorio <tt>/etc</tt> del servidor). Haga lo mismo para <tt>/etc/group</tt>. </enum> <sect2>Creación del directorio <tt>/etc</tt> del cliente <p> Generalmente, la mayoría de los archivos en el <tt>/etc</tt> del cliente estarán enlazados simbólicamente con el directorio <tt>/server/etc</tt>. Sin embargo, algunos archivos son diferentes para cada máquina, y otros solamente tienen que estar allí cuando el núcleo los carga. Lo mínimo que se necesita en el directorio <tt>/etc</tt> es lo siguiente: <tscreen><verb> resolv.conf hosts inittab rc.d/rc.S fstab </verb></tscreen> Ya que estos cinco archivos pueden ser idénticos para todos los clientes, los puede simplemente enlazar rígidamente o copiarlos una y otra vez. No obstante, con los archivos <tt/rc.S/ y <tt/fstab/ debe tener presente que se necesita una copia separada para cada cliente. También necesitará separar el <tt>/etc/HOSTNAME</tt> de cada cliente. Yo personalmente recomiendo tener todos los archivos de <tt/rc.d/ separados para cada cliente, ya que la configuración de hardware puede variar de uno a otro. Para cada cliente, agregue en el <tt/fstab/ una línea apropiada para el archivo de intercambio: <tscreen><verb> /dev/particion_swap swap swap default 1 1 </verb></tscreen> Con el resto de los archivos del <tt>/etc</tt> del cliente, puede o bien enlazarlos rígidamente a los archivos <tt>/clients/etc/*</tt> o bien simbólicamente con <tt>/server/etc</tt> (ya que es el punto de montaje de <tt>/clients/etc/</tt>) Asegúrese de que su máquina puede resolver apropiadamente, tanto a través de <tt/named/ como de <tt>etc/hosts</tt>. No es mala idea mantener el número IP del servidor en <tt>/etc/hosts</tt>, en lugar de contar con resolverlo. Si confía resolverlo con <tt/named/ solamente, cualquier problema con <tt/named/ puede impedir que sus clientes arranquen. <sect2>Arrancando <p> Ahora, todo lo que necesita hacer es iniciar su máquina, cruzar los dedos y esperar que todo funcione como debe :-). <sect>Creación de más clientes <p> Si ha seguido mis instrucciones, lo cual debería haberle resultado simple, cambie al directorio <tt>/clients/</tt> y escriba: <tscreen><verb> cp -a hostname1 hostname2 </verb></tscreen> y asegúrese de revisar estos puntos: los archivos <tt>rc.d/*</tt> coinciden con el hardware y la configuración de software de <tt>/etc/HOSTNAME</tt> es correcta, la línea del archivo de swap en <tt/fstab/ es correcta, y los enlaces simbólicos a <tt>dev/mouse</tt>, <tt>dev/modem</tt> y <tt>dev/cdrom</tt> son correctos. Mucha suerte ... <sect>Anexo: El INSFLUG <label id="Grupos"> <p> El <em/INSFLUG/ forma parte del grupo internacional <it/Linux Documentation Project/, encargándose de las traducciones al castellano de los Howtos (Comos), así como la producción de documentos originales en aquellos casos en los que no existe análogo en inglés. En el <bf/INSFLUG/ se orienta preferentemente a la traducción de documentos breves, como los <em/COMOs/ y <em/PUFs/ (<bf/P/reguntas de <bf/U/so <bf/F/recuente, las <it/FAQs/. <tt/:)/ ), etc. Diríjase a la sede del INSFLUG para más información al respecto. En la sede del INSFLUG encontrará siempre las <bf/últimas/ versiones de las traducciones: <tt><htmlurl url="http://www.insflug.org" name="www.insflug.org"></tt>. Asegúrese de comprobar cuál es la última versión disponible en el Insflug antes de bajar un documento de un servidor réplica. Se proporciona también una lista de los servidores réplica (<it/mirror/) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano. Francisco José Montilla, <tt><htmlurl url="mailto:pacopepe@insflug.org" name="pacopepe@insflug.org"></tt>. </article>