Diskless en FreeBSD
Autor: sHakY
Sin duda alguna, en las actuales redes se observa que el personal tecnico lucha por mantenerse con las demandas de conectividad, cambios y recon-figuraciones de la misma, por ello es conveniente tener la configuracion y las imagenes de software en una estacion de arranque (aunque pueden ser mas). Así al arrancar los sistemas interactuan con un servidor de arranque, toman los parametros de arranque y opcionalmente descargan software apropiado. Como es sabido, cada computadora conectada a una red TCP/IP tiene los siguientes datos: Su direccion IP. Su máscara de red. La dirección IP de un router. La dirección IP de un servidor de nombres. Todo esto se guarda en los ficheros de configuracion de nuestro sistema operativo. Existen tres protocolos que permiten transfeir esta informacion por la red: RARP (Reverse Address Resolution Protocol) sólo proporciona la direccion IP al computador sin disco. Debido a esto RARP no está implementado en la mayoría de los sistemas y se ha eliminado totalmente de TCP/IP v6. BOOTP (Bootstrap Protocol) es un protocolo cliente/servidor diseñado para proporcionar los cuatro tipos de información mencionados anteriormente, a un computador sin disco. DHCP (Dinamic Host Configuration Protocol) es una extensión de BOOTP, es decir, lo mejora. Bien, una maquina puede arrancar a traves de la red y operar sin un disco duro local usando un sistema de archivos montado de un servidor NFS, eso es lo que se verá a continuación, haciendolo con FreeBSD ;) Hay dos métodos principales para cargar el kernel en nuestras maquinas a traves de la red, así que empecemos: 1.-METODOS.PXE: (Intel's Preboot Execution Enviroment system) la cual es una forma rapido arranque ROM y se basa principalmente en algunas tarjetas de red o en las placas madre. pxeboot(8) para más detalles. The etherboot port: (/usr/ports/net/etherboot) permite que sea el arranque desde una tarjeta de red o también de un floppy local (y también el disco duro) incluso corriendo un sistema MS-DOS. Según el manual muchas tarjetas de red son soportadas. 2.-INICIANDO LA CONFIGURACIONEl instalar un sistema DHCP en su red, le ahorra un trabajo de configuración para su red. Todas las computadoras piden información de la red y se configuran automaticamente, muy recomendable para un administracion facil. ** El metodo etherboot usa DHCP por default o bootp (que necesita configurarse) para "buscar" al kernel. (Nota: PXE utiliza DHCP). ** El kernel usa BOOTP para hallar la raiz NFS (NFS root) ** El servidor isc-dhcp (que debe ser instalado) puede responder a peticiones BOOTP y DHCP. El archivo de configuracion de este servidor es a menudo llamado /usr/local/etc/dhcpd.conf y consta de lo siguiente:
default-lease-time 600;
max-lease-time 7200;
authoritative;
option domain-name "example.com";
option domain-name-servers ;
option routers ;
subnet netmask {
use-host-decl-names on; (1)
option subnet-mask ;
option broadcast-address ;
host margaux {
hardware ethernet 01:23:45:67:89:ab;
fixed-address margaux.example.com;
next-server ; (2)
filename "/tftpboot/kernel.diskless"; (3)
option root-path ":/data/misc/diskless"; (4)
}
}
Comentarios: (1)Dice a dhcpd que envie en las declaraciones host como el hostname para el host diskless. (2)Designa al servidor TFTP, por default se usa al servidor DHCP (3)Define el archivo que etherboot usara como kernel (4)Da el path al sistema de archivos raiz. Ahora hay que instalar (y posiblemente compilar) el package etherboot. Para nuestra configuracion se usara disquette de arranque; para hacer uno, en la maquina que tiene instalado etherboot, situese en el directorio src en el arbol de etherboot y teclee: # gmake bin32/tipo_de_dispositivo.fd0 tipo_de_dispositivo depende del tipo de tarjeta de red de la estacion de trabajo diskless. Vease el archivo NIC en el mismo directorio para que determine el tipo de dispositivo. 3.-CONFIGURANDO LOS SERVIDORES TFTP y NFSSe necesita activar tftpd en el servidor que hara el papel de servidor tftp; para ello: ** Se crea un directorio del cual tftpd sera el servidor de archivos , es decir: /tftpboot ** Se agrega la siguiente linea a /etc/inet.conf: tftp dgram udp wait nobody /usr/libexec/tftpd tftpd * Reiniciando el demonio inetd # kill -HUP `cat /var/run/inetd.pid` Es posible localizar el tftpboot en algun directorio del servidor, pero estando seguro de que esta presente tanto en inetd.conf como en dhcpd.conf Tambien es necesario activar el servicio NFS asi como exportar los sistemas de archivos apropiados: ** Agregar esto a /etc/rc.conf: nfs_server_enable="YES" ** Exportar el sistema de archivos donde directorio raiz del sistema diskless esta localizado, agregando lo siguiente a /etc/exports: /data/misc -alldirs -ro margaux ** Hay que decirle a mountd que hubo cambios en el archivo de configuracion: # kill -HUP `cat /var/run/mountd.pid` 4.-CONTRUYENDO UN KERNEL DISKLESSBueno, este punto se refiere a crear un archivo de configuración del kernel para las estaciones cliente, para ello se agregan las siguientes opciones: options BOOTP #Usando BOOTP para obtener la direcc. IP options BOOTP_NFSROOT #Para montar el sistema de archivos raiz a usar options BOOTP_COMPAT #HAY QUE TRADUCIR Es posible tambine agregar las opciones: BOOTP_NFSV3 BOOTP_WIRED_TO "Construya" el kernel y copie en el directorio tftp,bajo el nombre indicado en dhcp.conf 5.-PREPARANDO EL SISTEMA DE ARCHIVOS RAIZSe necesita crear un sistema de archivos raiz para las estaciones diskless en el lugar que nos dice rootpath en dhcp.conf, una manera facil de hacer esto es usar el shell script /usr/share/examples/diskless/clone_root el cual necesita personalizacion, asi como darle el lugar a donde el sistema de archivos sera creado (la variable DEST). 6.-CONFIGURANDO LA SWAPEn caso de necesitarse, un archivo swap puede ser colocado en el servidor, y puede ser accesado via NFS. Es de hacer notar que las opciones exactas correspondientes a los archivos bootptab o dhcp.conf no estan claramente documentadas ahora, lo que a continuacion se presenta ha trabajado en algunas instalaciones utilizando iscdhcp 3.0rc11 ** Agregue lo siguiente a dhcp.conf:
# Global section
option swap-path code 128 = string;
option swap-size code 129 = integer 32;
host margaux {
... # Standard lines, see above
option swap-path ":/netswapvolume/netswap";
option swap-size 64000;
}
** Para /etc/bootptab: T128=":/netswapvolume/netswap":T129=64000 ** En el archivo swap del servidor NFS, cree el archivo(s) swap: # mkdir /netswapvolume/netswap # cd /netswapvolume/netswap # dd if=/dev/zero bs=1024 count=64000 of=swap. # chmod 0600 swap. donde es la direccion IP para el cliente diskless. ** Por ultimo en el servidor NFS hay que agregar la siguiente linea a /etc/exports /netswapvolume -maproot=0:10 -alldirs margaux Y reinicie mountd, para que lea la nueva configuracion. Saliendo ya de la teoria aqui un ejemplo enviado a freebsd-questions, obvio, se envio en ingles yo nada mas lo traduje, la ventaja, es que quien lo envio es mi profesor de sistemas.... ---------- Forwarded message ---------- Date: Mon, 8 Apr 2002 10:25:21 -0500 (CDT) From: Eduardo Viruena Silva a.-Hice un nuevo directorio, donde el sistema de archivos raiz sistema diskless sera instalado.# mkdir -p /usr/diskless/rootfs b.-Con /stand/sysinstall hice en Options:InstallRoot -> /usr/diskless/rootfs
Distributions->bin->crypto->src/sys E inicio la instalacion. c.-Configuracion del kernel: Esto ya esta explicado, creo yo, pero lo incluyo de todas maneras.# chroot /usr/diskless/rootfs # cd /sys/i386/conf #config diskless # cd ../../compile/diskless # make depend # make # make install # exit diskless es el nombre del kernel que se esta configurando La configuracion diskless incluye: options MFS options BOOTP options BOOTP_COMPAT options BOOTP_NFSROOT d.- Configuracion de /etc diskless# chroot /usr/diskless/rootfs # cd / # passwd root [cambiando el password de root] # newaliases en /etc/hosts, he agregado una linea con la direccion IP del servidor: # echo server >> /etc/hosts en /etc/fstab, agrego dos lineas, para montar los sistemas de archivos / y /usr # Device Mountpoint FStype Options Dump Pass# server:/usr/diskless/rootfs / nfs rw 1 1 server:/usr/diskless/rootfs/usr /usr nfs rw 2 2 finalmente, copio su archivo /etc a /conf/default/ # mkdir -p /conf/default # cp -r etc /conf/default # exit e.-Configuracion del isc-dhcpdHe instalado isc-dhcp3-3.0.1.r4 de los ports # cd /usr/local/etc Este es mi archivo /usr/local/etc/dhcpd.conf:
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
subnet netmask {
option domain-name-servers ;
option domain-name "esfm.ipn.mx";
option routers ;
option broadcast-address ;
default-lease-time 600;
max-lease-time 7200;
host Paula {
fixed-address ;
hardware ethernet 00:01:03:BE:A4:C5;
option root-path ":/usr/diskless/rootfs";
filename "pxeboot";
}
}
f.-Configuracion del servicio TFTPBasta con borrar el caracter # en la linea: tftp dgram udp wait nobody /usr/libexec/tftpd tftpd /tftpboot en /etc/inetd.conf y reiniciar inetd: # killall -HUP inetd Se crea el directorio /tftpboot. Como no me gusta que este en mi directorio raiz, lo hice en /usr y cree una liga: # cd / #mkdir -p usr/tftpboot # ln -s /usr/tftpboot copio pxeboot a este lugar # cp /boot/pxeboot /tftpboot g.-Configuracion del servidor NFS.En /etc/exports, agregar la linea: /usr -maproot=0:0 -alldirs y, entonces: # killall -HUP mountd Ver exports(5) para mas informacion. 7.-FIN??
Bueno, espero que al menos en algo ayude este documento a la comunidad de eldemonio.org, pues al menos yo no encontre informacion sobre diskless en castellano para FreeBSD, me base en algunos documentos sobre linux, y por supuesto el manual de FreeBSD ;) aclaro que habra a quien no le parezca claro lo que expongo: Paciencia por favor, es mi primera vez, ademas soy un novato. Se omitieron acentos, por flojera aclaro. Me despido con un saludo para mi querida gem299!!! Y gracias a mrspock por su ayuda (es mi maestro). |