Nodos sin disco

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Diskless nodes and the translation is 69% complete.
Outdated translations are marked like this.

Este CÓMO le ayudará a crear y poner en marcha nodos sin disco en Gentoo Linux

Introducción

Acerca de este CÓMO

Este CÓMO le ayudará a configurar estaciones de trabajo "sin disco" basadas en la distribución Gentoo Linux. Esta guía está orientada a que este proceso sea lo más fácil posible para el usuario principiante de Linux, porque todos nosotros en algún momento hemos sido uno :). Si bien un usuario experimentado puede unir varios CÓMOS sobre nodos sin disco y juntarlos con otros sobre trabajo en red, se espera que esta guía facilite la instalación a todos los usuarios interesados, geeks o no.

¿Qué es una máquina sin disco?

Una máquina sin disco es un PC sin ninguno de los dispositivos de arranque tradicionales, como discos duros, disquetes o CD-ROMs. Un nodo sin disco arranca desde la red y por lo tanto necesita un servidor que le ofrezca un espacio de almacenamiento que pueda utilizar como disco local. De ahora en adelante será el "maestro" y la máquina sin disco "esclavo" (menudo nombre :). El nodo esclavo necesita un adaptador de red con soporte para el arranque PXE o Etherboot; eche un vistazo a Etherboot.org para obtener una lista de dispositivos soportados. La mayoría de tarjetas actuales soportan PXE y muchos de los adaptadores incorporados en las placas base también funcionarán.

Antes de empezar

Se debe instalar Gentoo en el maestro y tener espacio suficiente en él para almacenar los sistemas de ficheros de los nodos esclavos a los que se vaya a servir. Además, debe existir una interfaz conectada a Internet distinta de la que se utiliza para la conexión a la red local.

Configuration

Configurar el maestro y los esclavos

Acerca de los núcleos

El núcleo es el software situado entre el hardware y el resto de software que se carga en la máquina, es esencialmente el corazón de un sistema operativo basado en núcleo. Cuando se inicia la computadora, el BIOS ejecuta las instrucciones que están en el espacio reservado para el arranque en el disco duro. Estas instrucciones son típicamente un cargador de arranque que carga el núcleo. Después de que se ha cargado el núcleo, éste se ocupa de todos los demás procesos.

Para obtener más información acerca del núcleo o de su configuración, revisa el artículo del kernel.

Configurar el núcleo maestro

El núcleo maestro puede ser tan grande y personalizado como se desee, sin embargo, existen algunas opciones requeridas que se necesitan seleccionar. Teclear la siguiente orden para ir al menú de configuración del núcleo:

root #cd /usr/src/linux
root #make menuconfig

Debería aparecer una pantalla azul y gris que ofrece una alternativa segura para editar manualmente el fichero /usr/src/linux/.config. Si el núcleo actual funciona correctamente, es recomendable que se guarde el fichero de configuración, para ello puede salir de la interfaz gráfica y teclear:

root #cp .config .config_working

Entre en los siguientes submenús y asegúrese de que las opciones listadas se construyen como integradas en el núcleo (built-in) (y "NO" como módulos). Las opciones mostradas abajo se han tomado de la versión 2.6.10 del núcleo. Si se utiliza una versión distinta, el texto o la secuencia podrían diferir. Simplemente asegúrese de seleccionar al menos las opciones mostradas a continuación.

KERNEL Opciones para el núcleo maestro
'"`UNIQ--pre-00000001-QINU`"'

Si se tiene que acceder a Internet a través del nodo maestro o se necesita un cortafuegos seguro, asegurarse de añadir el soporte para iptables:

KERNEL Habilitar el soporte para iptables
'"`UNIQ--pre-00000004-QINU`"'

Si se necesita filtrado de paquetes, añada el resto como módulos más tarde. Asegúrese de leer el capítulo sobre firewalls del manual de seguridad de Gentoo para saber cómo configurarlo de manera adecuada.

Nota
Se deben añadir estas opciones de configuración del núcleo a las opciones de configuración específicas para el sistema, no están diseñadas para reemplazar completamente la configuración del núcleo.

Una vez haya reconfigurado el núcleo, necesitará reconstruirlo:

root #make && make modules_install
root #cp arch/i386/boot/bzImage /boot/bzImage-master

A continuación añada una opción para el nuevo núcleo nuevo en lilo.conf o grub.conf dependiendo del cargador de arranque que se esté utilizando y asegúrese de que el nuevo núcleo es la opción predeterminada. Ahora que la nueva bzImage se ha copiado al directorio de arranque (boot), todo lo que se necesita hacer para cargar estas nuevas opciones es reiniciar el sistema.

Acerca del núcleo esclavo

Recomendamos compilar el núcleo esclavo sin módulos, ya que cargar y configurarlos en un arranque por red es un proceso difícil e innecesario. Además, el núcleo esclavo debe ser tan simple y compacto como sea posible, para hacer el arranque a través de la red eficiente. Se compilará el núcleo esclavo en el mismo lugar en el que se configuró el núcleo maestro.

Para evitar cualquier confusión y desperdicio de tiempo es una buena idea hacer una copia de seguridad del fichero de configuración del núcleo maestro tecleando:

root #cp /usr/src/linux/.config /usr/src/linux/.config_master

Ahora se configura el núcleo esclavo de la misma forma que el núcleo maestro. Si se necesita un nuevo fichero de configuración, se puede recuperar desde el fichero por defecto /usr/src/linux/.config tecleando:

root #cd /usr/src/linux
root #cp .config_master .config

Ahora entremos a la interfaz visual de configuración tecleando:

root #cd /usr/src/linux
root #make menuconfig

Asegurarse de seleccionar las siguientes opciones como integradas (built-in) y "NO" como módulos del núcleo:

KERNEL Opciones para el núcleo esclavo
'"`UNIQ--pre-00000007-QINU`"'
Nota
Una alternativa al servidor dhcp es configurar un servidor BOOTP.
Importante
Es importante añadir el adaptador de red dentro del núcleo (y no como módulo) en los nodos. Sin embargo, utilizarlo como módulo generalmente no es un problema para nodos sin disco.

Ahora hay que compilar el núcleo esclavo. Se debe ser cuidadoso en este paso ya para no sobrescribir o estropear los módulos (si es que hay alguno) que ya se compilaron para el núcleo maestro:

root #cd /usr/src/linux
root #make

Ahora cree el directorio en el maestro que se utilizará para almacenar los ficheros del esclavo además de sus ficheros de sistema. Aquí se utiliza el directorio /diskless pero se puede elegir otra ubicación que se prefiera. A continuación copiar el fichero bzImage del esclavo dentro de /diskless:


Nota
Si se están utilizando distintas arquitecturas, puede ser útil guardar cada configuración dentro de .config_arch. Haga lo mismo con las imágenes: guárdelas dentro de /diskless como bzImage_arch.


root #mkdir /diskless
root #cp /usr/src/linux/arch/i386/boot/bzImage /diskless

Configurar un sistema de ficheros esclavo preliminar

Se pueden ajustar los sistemas de ficheros maestro y esclavo y cambiar bastante, pero por ahora el único punto de interés es tener los sistemas de ficheros preliminares con los ficheros de configuración apropiados y los puntos de montaje necesarios. Primero, es necesario crear un directorio dentro de /diskless para el primer esclavo. Cada esclavo necesita su propio sistema de ficheros raíz porque compartir ciertos ficheros del sistema causará problemas con los permisos y caídas del sistema. Estos directorios se pueden nombrar de cualquier forma que el administrador considere oportuna, sin embargo, se recomienda utilizar las direcciones IP de los esclavos, ya que estas son únicas y no confunden. La dirección IP estática del primer esclavo sería, por ejemplo, 192.168.1.21:

root #mkdir -p /diskless/192.168.1.21/etc

Se necesitan modificar varios ficheros de configuración dentro de /etc para que funcionen en el esclavo. Copie su directorio maestro /etc en el nuevo directorio raíz del esclavo tecleando:

root #cp -r /etc/* /diskless/192.168.1.21/etc/

Este sistema de ficheros no está listo aún porque necesita varios puntos de montaje y directorios. Para crearlos, teclee:

root #mkdir /diskless/192.168.1.21/home
root #mkdir /diskless/192.168.1.21/dev
root #mkdir /diskless/192.168.1.21/proc
root #mkdir /diskless/192.168.1.21/tmp
root #mkdir /diskless/192.168.1.21/mnt
root #chmod a+w /diskless/192.168.1.21/tmp
root #mkdir /diskless/192.168.1.21/mnt/.initd
root #mkdir /diskless/192.168.1.21/root
root #mkdir /diskless/192.168.1.21/sys
root #mkdir /diskless/192.168.1.21/var
root #mkdir /diskless/192.168.1.21/var/empty
root #mkdir /diskless/192.168.1.21/var/lock
root #mkdir /diskless/192.168.1.21/var/log
root #mkdir /diskless/192.168.1.21/var/run
root #mkdir /diskless/192.168.1.21/var/spool
root #mkdir /diskless/192.168.1.21/usr
root #mkdir /diskless/192.168.1.21/opt

La mayoría de estos directorios le deben resultar familiares. Algunos como /dev, /proc o /sys se llenarán una vez haya arrancado el esclavo, los demás se montarán más tarde. Además, se debe cambiar el fichero /diskless/192.168.1.21/etc/conf.d/hostname para que contenga el nombre del anfitrión del esclavo. Los binarios, librerías y otros ficheros se copiarán más tarde en este CÓMO antes de que se intente iniciar el esclavo.

Aunque más tarde udev se encargará de poblar /dev, se necesita crear la entrada console. En caso contrario, aparecerá el mensaje de error "unable to open initial console" ("no es posible abrir la consola inicial").

root #mknod /diskless/192.168.1.21/dev/console c 5 1

Configurar el servidor DHCP

Acerca del servidor DHCP

DHCP son las iniciales (en inglés) de Protocolo Dinámico de Configuración del Anfitrión. El servidor DHCP es la primera máquina con la que el esclavo se comunicará en el momento del arranque PXE. El propósito principal del servidor DHCP es el de asignar las direcciones IP. El servidor DHCP puede asignar direcciones IP basándose en la dirección MAC Ethernet del anfitrión. Una vez que el esclavo tiene su dirección IP, el servidor DHCP le dirá donde conseguir su sistema de ficheros inicial y el núcleo.

Antes de empezar

Hay un par de cosas que se debe comprobar que funcionan correctamente antes empezar. En primer lugar, revisar la conectividad a la red:

root #ifconfig eth0 multicast
root #ifconfig -a

Asegúrese de tener un dispositivo "eth0" funcionando. La salida de la orden anterior debe parecerse algo a esto:

CÓDIGO Un dispositivo eth0 funcionando correctamente
eth0 Link encap:Ethernet HWaddr 00:E0:83:16:2F:D6
    inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:26460491 errors:0 dropped:0 overruns:2 frame:0
    TX packets:32903198 errors:0 dropped:0 overruns:0 carrier:1
    collisions:0 txqueuelen:100
    RX bytes:2483502568 (2368.4 Mb) TX bytes:1411984950 (1346.5 Mb)
    Interrupt:18 Base address:0x1800

Es importante que indique "MULTICAST", si no lo hace se deberá recompilar el núcleo para incluir el soporte para multicast.

Instalar el servidor DHCP

Si la red no tiene un servidor DHCP instalado, deberá instalar uno ahora:

root #emerge --ask dhcp

Si lared ya tiene un servidor DHCP, se deberá modificar el fichero de configuración de manera que se active el arranque PXE para que funcione correctamente.

Configurar el servidor DHCP

Solo se necesita editar un fichero de configuración antes de iniciar el servidor DHCP: /etc/dhcp/dhcpd.conf. Copiar y modificar el fichero de ejemplo que se ofrece:

root #cp /etc/dhcp/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
root #nano -w /etc/dhcp/dhcpd.conf

La disposición general con sangrías del fichero se asemeja a esta:

CÓDIGO Disposición ejemplo de dhcpd.conf
# global options here
ddns-update-style none;
shared-network LOCAL-NET {
 # shared network options here
 subnet 192.168.1.0 netmask 255.255.255.0 {
  # subnet network options here
  host slave{
    # host specific options here
  }
  group {
    # group specific options here
  }
 }
}

El bloque shared-network es opcional y se debe utilizar para las direcciones IP que se necesite asignar y que pertenecen a la misma topología de red. Al menos se debe declarar una subred y el bloque opcional group que permitirá agrupar opciones entre elementos. Un buen ejemplo de dhcpd.conf es:

CÓDIGO Ejemplo de fichero dhcpd.conf
#
# Ejemplo del fichero dhcpd.conf de los clientes
#

# Desactiva el DNS dinámico
ddns-update-style none;

# Asume una puerta de enlace predeterminada para el tráfico IP
option routers 192.168.1.1;

# Provee información DNS a los clientes
option domain-name-servers 192.168.1.1;
option domain-name "mydomain.com";

# Especifica el servidor TFTP a utilizar
next-server 192.168.1.1;

# Declara una opción del buffer específica del vendedor para los clientes PXE:
# Código 1: Dirección IP Multicast del servidor de ficheros de arranque
# Código 2: Puerto UDP que el cliente debe monitorear para recibir
#           respuestas MTFTP
# Código 3: Puerto UDP que los servidores MTFTP utilizan para escuchar
#           solicitudes MTFTP
# Código 4: Número de segundos que el cliente debe escuchar por actividad antes
#           de iniciar una nueva transferencia MTFTP
# Código 5: Número de segundos que el cliente debe escuchar antes de reiniciar
#           una transferencia MTFTP

option space PXE;
option PXE.mtftp-ip               code 1 = ip-address;
option PXE.mtftp-cport            code 2 = unsigned integer 16;
option PXE.mtftp-sport            code 3 = unsigned integer 16;
option PXE.mtftp-tmout            code 4 = unsigned integer 8;
option PXE.mtftp-delay            code 5 = unsigned integer 8;
option PXE.discovery-control      code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr   code 7 = ip-address;

# Declara la subred en la cual van a existir nuestro nodos sin disco
subnet 192.168.1.0 netmask 255.255.255.0 {

  # Provee a los clientes PXE con la información apropiada
  class "pxeclient" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    vendor-option-space PXE;

    # Al menos 1 de las opciones PXE específicas del fabricante deben
    # ser definidas para que el ROM de arranque de los clientes se de
    # cuenta que el servidor tienes las características PXE. Definimos
    # la dirección IP MCAST a 0.0.0.0 para indicarle al ROM de arranque
    # que no podemos proveerle un TFTP multicast.

    option PXE.mtftp-ip 0.0.0.0;

    # Este es el nombre del fichero que el ROM arranque debe descargar
    filename "pxelinux.0";
  }
  # Provee a los clientes Etherboot con la información apropiada
  class "etherboot" {
        match if substring(option vendor-class-identifier, 0, 9) = "Etherboot";
        filename "vmlinuz_arch";
  }

  # Agrega una declaración por cada máquina sin disco
  host slave21 {
       hardware ethernet                00:02:A5:04:3B:66;
       fixed-address                    192.168.1.21;
  }
}
Nota
No hay nada que prohiba el uso del arranque PXE y Etherboot juntos. El código anterior es simplemente un ejemplo; si se tiene problemas, consultar la documentación sobre DHCPd.

A la dirección IP después de next-server se le preguntará por el filename. Esta dirección IP debe ser la IP del servidor tftp, normalmente la misma dirección que el maestro. El filename es relativo al directorio /diskless (esto se debe a las opciones específicas del servidor tftp que serán explicadas más adelante). Dentro del bloque host, la opción hardware Ethernet especifica la dirección MAC, y fixed-address asigna la dirección IP estática a esa dirección MAC en particular. Hay una muy buena página de manual sobre el fichero dhcpd.conf con varias opciones que están más allá del ámbito de esta guía. Se puede leer la página del manual tecleando:

user $man dhcpd.conf

Iniciar el servidor DHCP

Antes de lanzar el guión de inicialización del servidor dhcp, modifique el fichero /etc/conf.d/dhcp de manera que se parezca a lo siguiente:

CÓDIGO Ejemplo de /etc/conf.d/dhcp
IFACE="eth0"
# Inserte cualquier otra opción que necesite

La variable IFACE es el dispositivo en el cual desea el servidor DHCP va a correr, en este caso es eth0. El hecho de añadir más argumentos a IFACE puede ser útil en redes de topología compleja y múltiples tarjetas ethernet. Para arrancar el servidor dhcp hay que teclear:

root #/etc/init.d/dhcpd start

Para añadir el servidor dhcp a los guiones de inicio escribir:

root #rc-update add dhcpd default

Solucionar problemas con el servidor DHCP

Para comprobar que un nodo arranca se puede echar un vistazo a /var/log/messages. Si el nodo arranca correctamente, el fichero messages debería mostrar líneas al final parecidas a estas:

CÓDIGO Entradas ejemplo en el fichero de registro creado por dhcp
'"`UNIQ--pre-00000012-QINU`"'
Nota
Este fichero de registro también puede ayudar a averiguar las direcciones MAC de los esclavos.

Si se recibe el siguiente mensaje, es probable que algo esté mal en el fichero de configuración pero que el servidor DHCP esté transmitiendo correctamente.

CÓDIGO Ejemplo de un error en el servidor dhcp
no free leases on subnet LOCAL-NET

Cada vez que se haga un cambio en el fichero de configuración, se deberá reiniciar el servidor DHCP. Para ello, escribir:

root #/etc/init.d/dhcpd restart

Configurar el servidor TFTP y el cargador de arranque PXE y/o Etherboot

Acerca del servidor DHCP

TFTP son las (en inglés) siglas del Protocolo Trivial de Transferencia de Archivos. El servidor TFTP les va a dar a los esclavos el núcleo y un sistema de fichero inicial. Todos los núcleos esclavos y sistemas de ficheros deben estar almacenados en el servidor TFTP, así que es una buena idea hacer que el maestro también sea el servidor TFTP.

Instalar el servidor TFTP

Un servidor tftp altamente recomendado está disponible en el paquete tftp-hpa. Este servidor lo escribió el autor de SYSLINUX y funciona muy bien con pxelinux. Para instalarlo simplemente escriba:

root #emerge --ask tftp-hpa

Configurar el servidor TFTP

Editar el fichero /etc/conf.d/in.tftpd. Se neceista especificar el directorio tftproot en la variable INTFTPD_PATH y cualquier opción de la linea de comandos en INTFTPD_OPTS. Debe parecerse a:

ARCHIVO /etc/conf.d/in.tftpd
INTFTPD_PATH="/diskless"
INTFTPD_OPTS="-l -v -s ${INTFTPD_PATH}"

La opción -l indica que este servidor escucha en modo "stand alone" así que no se necesita ejecutar inetd. La -v indica que se deben mostrar los mensajes de registro o error. La -s /diskless especifica el directorio raíz del servidor tftp.

Iniciar el servidor TFTP

Para iniciar el servidor tftp, escriba:

root #/etc/init.d/in.tftpd start

Esta orden debe iniciar el servidor tftp con las opciones que se han especificado en /etc/conf.d/in.tftpd. Si se quiere que este servidor se inicie automáticamente cuando arranque el sistema, escribir:

root #rc-update add in.tftpd default

Acerca de PXELINUX

Esta sección no es obligatoria para aquellos casos en los que solo se utiliza Etherboot. PXELINUX es el cargador de arranque por red equivalente a LILO y GRUB y será distribuido mediante el TFTP. Es esencialmente un conjunto mínimo de instrucciones que indica al cliente dónde encontrar su núcleo y sistema de ficheros inicial y permite varias opciones del núcleo.

Antes de empezar

Ahora se necesita el fichero pxelinux.0 que forma parte del paquete SYSLINUX de H. Peter Anvin. Se puede instalar este paquete escribiendo:

root #emerge --ask syslinux

Configurar PXELINUX

Nota
Esta parte no es necesaria para Etherboot

Antes de arrancar el servidor tftp, se necesita configurar pxelinux. En primer lugar, copiar el binario de pxelinux en el directorio /diskless

root #cp /usr/share/syslinux/pxelinux.0 /diskless
root #mkdir /diskless/pxelinux.cfg
root #touch /diskless/pxelinux.cfg/default

Esto creará el fichero de configuración por defecto del cargador de arranque. El binario pxelinux.0 buscará en el directorio pxelinux.cfg un fichero cuyo nombre sea la dirección IP del cliente en hexadecimal. Si no lo encuentra, eliminará el dígito más a la derecha del nombre del fichero y lo volverá a intentar hasta que se terminen los dígitos. Las versiones a partir de la 2.05 de syslinux realizan en primer lugar una búsqueda de un fichero cuyo nombre sea la dirección MAC. Si no se encuentra, ejecuta la rutina ya descrita. Si no se localiza ningún fichero, se utiliza default.

CÓDIGO Ficheros que busca PXE secuencialmente en pxelinux.cfg
## (El 01 del comienzo indica ethernet, los demás son la dirección MAC del esclavo)
01-00-40-63-c2-ca-c9

## (Dirección IP asignada en hexadecimal)
C0A80115
C0A8011
C0A801
C0A80
C0A8
C0A
C0
C

default
Nota
Todos son en minúsculas.

Comencemos con el fichero default:

CÓDIGO Ejemplo de pxelinux.cfg/default
DEFAULT gentoo
LABEL gentoo
LINUX /bzImage
APPEND ip=dhcp root=/dev/nfs nfsroot=192.168.1.1:/diskless/192.168.1.21

La etiqueta DEFAULT le indica a pxelinux dónde está la bzImage del núcleo que se compiló anteriormente. La etiqueta APPEND añade las opciones de arranque para el núcleo. Dado que el núcleo se ha compilado con con NFS_ROOT_SUPPORT, se debe especificar aquí la dirección raíz del nfs. La primera dirección IP es la del maestro y la segunda es el directorio que se creó en /diskless para almacenar el sistema de ficheros inicial del esclavo.

Acerca de Etherboot

Nota
Esta sección no es necesaria para aquellos que utilizan arranque PXE.

Los inicios mediante Etherboot cargan la imagen para arrancar desde el servidor TFTP. Al igual que PXE, es equivalente a LILO o GRUB. La utilidad mknbi permite crear distintas imágenes con opciones diferentes.

Antes de comenzar

Se necesita obtener el paquete mknbi (utilidad para crear imágenes etiquetadas del núcleo que son útiles para el arranque por red) para crear las imágenes Etherboot. Esta utilidad creará una imagen preconfigurada del núcleo original. Esta contiene las opciones de arranque mostradas más adelante.

root #emerge --ask mknbi

Configurar Etherboot

En esta sección se creará una imagen simple de etherboot. Como el servidor dhcp le indica al cliente la dirección raíz en la opción "option root-path" del dhcp.conf, no es necesario incluirla aquí. Más detalles en el manual de mknbi.

user $man mknbi

Crear la imagen de arranque. La siguiente orden creará la imagen ELF de arranque capaz de pasar el dhcp y la dirección del directorio raíz al núcleo. También obliga al núcleo a buscar en la red un servidor dhcp.

root #mkelf-linux -ip=dhcp /diskless/bzImage > /diskless/vmlinuz
Nota
Para crear una imagen específica para cada arquitectura escribir: bzImage_arch y vmlinuz_arch.

Solucionar problemas en el proceso de arranque por red

Hay un par de cosas que se pueden hacer para depurar errores que se produzcan en el proceso de arranque por red. Para empezar se puede utilizar una herramienta llamada tcpdump. Para instalarla, escribir:

root #emerge --ask tcpdump

Ahora se puede escuchar el tráfico en la red para asegurarse de que las interacciones entre el cliente y el servidor funcionan correctamente. Si algo está mal hay un par de cosas que se pueden revisar. Primero asegúrese de que el cliente y el servidor estén físicamente bien conectados y que los cables no están dañados. Si el cliente o el servidor no están recibiendo pedidos a un puerto específico, compruebe la configuración del cortafuegos. Para escuchar la interacción entre dos computadores escriba:

root #tcpdump equipo ip_cliente e ip_servidor

Se puede también configurar la tcpdump para que escuche en un puerto en particular como el puerto tftp. Para ello, escribir:

root #tcpdump port 69

Un error que comúnmente se recibe es "PXE-E32: TFTP open time-out". Esto es probablemente debido a problemas con el cortafuegos. Si se está utilizando TCPwrappers, es conveniente revisar los ficheros /etc/hosts.allow y etc/hosts.deny para asegurarse de que están bien configurados. Se debe permitir al cliente conectarse al servidor.

Configurar el servidor NFS

Acerca del servidor NFS

NFS son las siglas (en inglés) de Sistema de Ficheros en Red. El servidor NFS será utilizado para ofrecer al esclavo sus directorios. Esta parte se puede personalizar más tarde, por ahora, lo que se busca es tener el nodo esclavo funcionando sin disco.

Acerca de Portmapper

Algunos servicios cliente/servidor no escuchan en un puerto en particular, en cambio utilizan RPCs (llamadas a procedimientos remotos). Cuando se inicializa un servicio, escucha en un puerto al azar y luego registra este puerto en la utilidad Portmapper. NFS utiliza RPCs y por lo tanto requiere tener a Portmapper corriendo antes de su inicio.

Antes de comenzar

El servidor NFS necesita soporte al nivel del núcleo así que si no se incluyó en el momento de su compilación, se neceista recompilar el núcleo maestro. Para revisar la configuración del núcleo maestro, escribir:

root #grep NFS /usr/src/linux/.config_master

La salida se debe parecer a la siguiente si el núcleo está correctamente configurado:

KERNEL Opciones específicas y adecuadas para NFS en la configuración del núcleo maestro
'"`UNIQ--pre-0000001D-QINU`"'

Instalar el servidor NFS

El paquete NFS se puede instalar mediante portage escribiendo:

root #emerge --ask nfs-utils

Este paquete instalará la utilidad portmapping, el servidor nfs, y las utilidades nfs del cliente y automáticamente gestionará la inicialización de las dependencias.

Configurar el servidor NFS

Hay tres ficheros de configuración principales que se deben editar:

CÓDIGO Ficheros de configuración de nfs
/etc/exports
/diskless/192.168.1.21/etc/fstab
/etc/conf.d/nfs

El fichero /etc/exports especifica como, a quién y qué se debe exportar a través de NFS. Se debe modificar el fstab del esclavo para que pueda montar el sistema de ficheros NFS que el maestro está exportando.

Un fichero /etc/exports típico del maestro se parece a esto:

ARCHIVO etc/exportsFichero maestro de exportaciones
# Una línea como esta para cada esclavo
/diskless/192.168.1.21 192.168.1.21(sync,rw,no_root_squash,no_all_squash)
# Línea común para todos los esclavos
/opt 192.168.1.0/24(sync,ro,no_root_squash,no_all_squash)
/usr 192.168.1.0/24(sync,ro,no_root_squash,no_all_squash)
/home 192.168.1.0/24(sync,rw,no_root_squash,no_all_squash) # Si quiere tener un registro compartido
/var/log 192.168.1.21(sync,rw,no_root_squash,no_all_squash)

El primer campo indica el directorio que será exportado y el siguiente indica a quién y cómo. Este campo puede dividirse en dos partes: a quién se le debe permitir montar ese directorio en particular, y qué puede hacer el cliente con él: ro de solo lectura, rw de lectura y escritura; no_root_squash y no_all_squash son importantes para clientes sin disco que escriben en el disco de manera que no sean "apretados" al hacer pedidos de E/S. El fichero fstab del esclavo, /diskless/192.168.1.21/etc/fstab, debe ser similar a este:

CÓDIGO Ejemplo de fichero fstab en el esclavo
# Estas entradas son esenciales
master:/diskless/192.168.1.21 / nfs sync,hard,intr,rw,nolock,rsize=8192,wsize=8192 0 0
master:/opt /opt nfs sync,hard,intr,ro,nolock,rsize=8192,wsize=8192 0 0
master:/usr /usr nfs sync,hard,intr,ro,nolock,rsize=8192,wsize=8192 0 0
master:/home /home nfs sync,hard,intr,rw,nolock,rsize=8192,wsize=8192 0 0
none /proc proc defaults 0 0
# Útil pero superfluo
master:/var/log /var/log nfs hard,intr,rw 0 0

En este ejemplo, "master" es solo el nombre de anfitrión del maestro pero podría fácilmente ser la dirección IP del maestro. El primer campo indica el directorio a montar y el segundo indica dónde. El tercer campo describe el sistema de ficheros y debe ser NFS para cualquier directorio NFS montado. El cuarto campo indica varias opciones que deben ser utilizadas en el proceso de montaje (eche un vistazo a mount(1) para obtener más información acerca de las opciones de montaje). Algunos usuarios han tenido dificultad con puntos de montaje suaves así que aquí se ha realizado con montajes duros, pero se deben revisar varias opciones en /etc/fstab para que el cluster trabaje de forma más eficiente.

El último fichero que se debe modificar es /etc/conf.d/nfs que describe las opciones del nfs cuando es inicializado y es parecido a este:

CÓDIGO Fichero ejemplo /etc/conf.d/nfs para el maestro
# Fichero de configuración para /etc/init.d/nfs

# Número de servidores a arrancar por defecto
RPCNFSDCOUNT=8

# Opciones que se deben pasar a rpc.mountd RPCMOUNTDOPTS=""

Se debe cambiar RPCNFSDCOUNT por el número de nodos sin disco en la red.

Iniciar el servidor NFS

Se debe iniciar el servidor nfs con el guión de inicio localizado en /etc/init.d, escribiendo:

root #/etc/init.d/nfs start

Para que este guión se ejecute cada vez que se inicie el sistema, simplemente escribir:

root #rc-update add nfs default

Completar el sistema de ficheros del esclavo

Copiar los ficheros que faltan

Ahora se sincronizarán el sistema de ficheros del esclavo con el del maestro y se ofrecerán los binarios necesarios, preservando los ficheros específicos del esclavo.

root #rsync -avz /bin /diskless/192.168.1.21
root #rsync -avz /sbin /diskless/192.168.1.21
root #rsync -avz /lib /diskless/192.168.1.21
Nota
La razón por la que utilizamos -avz en vez de cp es la de mantener los enlaces simbólicos y los permisos.

Configurar la red sin disco

Para evitar que el guión de inicio de red corte la conexión al servidor NFS, se necesita agregar una opción al fichero /etc/conf.d/net del sistema de ficheros del cliente sin disco.

CÓDIGO Editar /etc/conf.d/net
config_eth0="noop"
Nota
Para obtener más información, por favor, lea /usr/share/doc/openrc-*/net.example.bz2.

Guiones de inicialización

Los guiones de inicio para los esclavos están localizados en /diskless/192.168.1.21/etc/runlevels para los servicios que se necesitan en los nodos sin disco. Cada esclavo se puede configurar y poner en marcha aquí, esto depende únicamente de lo que se desee realizar con cada nodo esclavo.

Advertencia
No utilizar rc-update para añadir o eliminar guiones de los niveles de ejecución del esclavo cuando se esté trabajando en el maestro. Esto podría alterar los niveles de ejecución del maestro. Se necesita crear enlaces manualmente o entrar en uno de los nodos esclavo mediante ssh o conectar una pantalla y teclado al esclavo.
CÓDIGO Niveles de ejecución típicos del esclavo
/diskless/192.168.1.21/etc/runlevels/:
total 16
drwxr-xr-x    2 root     root         4096 2003-11-09 15:27 boot
drwxr-xr-x    2 root     root         4096 2003-10-01 21:10 default
drwxr-xr-x    2 root     root         4096 2003-03-13 19:05 nonetwork
drwxr-xr-x    2 root     root         4096 2003-02-23 12:26 single

/diskless/192.168.1.21/etc/runlevels/boot:
total 0
lrwxrwxrwx    1 root     root           20 2003-10-18 17:28 bootmisc -> /etc/init.d/bootmisc
lrwxrwxrwx    1 root     root           19 2003-10-18 17:28 checkfs -> /etc/init.d/checkfs
lrwxrwxrwx    1 root     root           17 2003-10-18 17:28 clock -> /etc/init.d/clock
lrwxrwxrwx    1 root     root           22 2003-10-18 17:28 domainname -> /etc/init.d/domainname
lrwxrwxrwx    1 root     root           20 2003-10-18 17:28 hostname -> /etc/init.d/hostname
lrwxrwxrwx    1 root     root           22 2003-10-18 17:28 localmount -> /etc/init.d/localmount
lrwxrwxrwx    1 root     root           19 2003-10-18 17:28 modules -> /etc/init.d/modules
lrwxrwxrwx    1 root     root           18 2003-10-18 17:28 net.lo -> /etc/init.d/net.lo
lrwxrwxrwx    1 root     root           20 2003-10-18 17:28 netmount -> /etc/init.d/netmount
lrwxrwxrwx    1 root     root           21 2003-10-18 17:28 rmnologin -> /etc/init.d/rmnologin
lrwxrwxrwx    1 root     root           19 2003-10-18 17:28 urandom -> /etc/init.d/urandom

/diskless/192.168.1.21/etc/runlevels/default:
total 0
lrwxrwxrwx    1 root     root           23 2003-10-18 17:28 consolefont -> /etc/init.d/consolefont
lrwxrwxrwx    1 root     root           19 2003-10-18 17:28 distccd -> /etc/init.d/distccd
lrwxrwxrwx    1 root     root           19 2003-10-18 17:28 keymaps -> /etc/init.d/keymaps
lrwxrwxrwx    1 root     root           17 2003-10-18 17:28 local -> /etc/init.d/local
lrwxrwxrwx    1 root     root           16 2003-10-18 17:28 sshd -> /etc/init.d/sshd
lrwxrwxrwx    1 root     root           21 2003-10-18 17:28 syslog-ng -> /etc/init.d/syslog-ng
lrwxrwxrwx    1 root     root           17 2003-10-18 17:28 vixie-cron -> /etc/init.d/vixie-cron

/diskless/192.168.1.21/etc/runlevels/nonetwork:
total 0
lrwxrwxrwx    1 root     root           17 2003-10-18 17:28 local -> /etc/init.d/local

/diskless/192.168.1.21/etc/runlevels/single:
total 0

Ahora es un buen momento para iniciar los esclavos y cruzar los dedos. ¿Funciona? Felicidades, ahora es un orgulloso poseedor de un(os) nodo(s) sin disco.


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Michael Andrews, Kristian Jerpetjoen, Xavier Neys
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.