Cómo arrancar a través de la red con Gentoo Linux
1.
Introducción
Nota:
Esta guía se centra en el uso de hardware Sparc y asumiendo que el
servidor netboot será una máquina Gentoo Linux.
|
Este documento describirá cómo configurar un entorno netboot para una
computadora basada en Sun Microsystems Sparc o UltraSparc. Asume que
dispone de una computadora Gentoo Linux para funcionar como servidor
netboot.
Ambas máquinas, el servidor y el cliente netboot deberán estar en la
misma subred ya que el protocolo ARP típicamente no se reenvía a
otras subredes.
Una apreciación esquemática de lo que ocurre durante el proceso del
netboot es el siguiente:
- Cliente envía una solicitud ARP inversa (RARP) para una
dirección IP
- Un servidor responde al cliente con la dirección IP
- El cliente intenta descargar una imagen de arranque del
servidor RARP, usando el protocolo TFTP
- Una vez descargada la imagen, el cliente netboot la usa para
arrancar
Basándonos en este esquema, hará falta instalar software para un
demonio ARP inverso y un demonio TFTP.
2.
Instalación y Configuración del Software
El demonio ARP Inverso
En su sistema se habrá instalado un demonio ARP inverso; es parte
del paquete net-misc/iputils.
Configurando elementos comunes de rarpd: /etc/ethers
Necesitará configurar el fichero /etc/ethers. Este fichero
indica las máquinas a las que rarpd debe responder cuando vea
una petición, y con qué dirección debe responder.
El formato de /etc/ethers es la dirección MAC del
interfaz con la cual arranca y su nombre. El espacio en blanco
separa la dirección MAC del nombre del anfitrión y cada entrada se
hace en una línea. El siguiente ejemplo es para un anfitrión
llamado sparc-netboot.gentoo.org:
Listado de Código 2.1: Ejemplo de /etc/ethers |
08:00:20:77:1f:3e sparc-netboot.gentoo.org
|
Nota:
Si algún número hexadecimal de la dirección MAC comienza en o es 0,
puede escoger omitir el primer 0 (por ejemplo 08:00:20:77:1f:3e se
convertiría en 8:0:20:77:1f:3e).
|
Si desea agregar anfitriones adicionales a /etc/ethers,
no es necesario reiniciar el servicio rarpd ya se revisa este
archivo cada vez que se reciba una solicitud.
Resolviendo nombres de anfitriones: /etc/hosts
Ya que cada entrada de /etc/ethers tiene un nombre de
anfitrión, el servidor netboot debe poder resolver la dirección IP con
respecto al nombre. Esto puede hacerse de dos maneras, por medio del
archivo /etc/hosts o con el servidor dns usado por el
servidor netboot.
Una entrada en el archivo /etc/hosts para resolver el
nombre de un anfitrión será similar al que existe desde el momento
que se instaló Gentoo en el servidor netboot. Para nuestro anfitrión
ejemplo, sparc-netboot.gentoo.org, asumiremos que tiene la dirección
IP 10.0.1.15. De manera que la entrada correspondiente en el archivo
/etc/hosts sería:
Listado de Código 2.2: /etc/hosts |
10.0.1.15 sparc-netboot.gentoo.org
|
Nota:
Dependiendo del entorno, hará falta consultar al administrador de la
red para obtener una dirección o direcciones IP apropiadas con las
cuales arrancar a los anfitriones.
|
Si usa un servidor DNS, entonces hará falta que el administrador del
servidor DNS agregue un registro para el anfitrión, en nuestro ejemplo
el sparc-netboot.gentoo.org apuntar a la dirección IP apropiada. Por
favor consulte con el administrador del servidor DNS y/o la
documentación del software del servidor DNS acerca de cómo agregar
este registro.
Nota:
Si /etc/hosts y el servidor DNS tienen entradas para el
anfitrión a ser arrancado a través de la red, el archivo
/etc/hosts será usado primero (en caso que el órden
especificado en el archivo /etc/nsswitch.conf no haya
sido alterado).
|
Configurando rarpd
Primero debemos averiguar cuáles opciones usar para el rarpd.
Como hay más opciones que las cubiertas en esta guía, éstas servirán para
iniciar. Como actualmente no existe un guión para rarpd, se
necesita añadir una entrada a /etc/conf.d/local.start
si quiere activar los servicios rarpd al iniciar el sistema.
A continuación se muestra un ejemplo:
Listado de Código 2.3: /etc/conf.d/local.start |
/usr/sbin/rarpd -v -e eth0
|
Una explicación de las opciones usadas anteriormente con rarpd
(tomadas de la página man):
-
-v opción informativa
-
-e no revise la existencia de una imagen de arranque, responda
solamente si la dirección MAC resuelve a una dirección IP válida
usando los datos en /etc/ethers y DNS
- eth0 representa el interfaz usado por rarpd
Para más opciones, consulte man 8 rarpd.
El demonio tftpd
Existen tres opciones para un demonio TFTP, net-ftp/atftp,
net-ftp/netkit-tftp y net-ftp/tftp-hpa. Sólo necesita
instalar uno de ellos para poder operar correctamente.
Configurando elementos comunes del tftpd
Cada demonio TFTP necesita un directorio desde donde servir archivos a
sus clientes tftp. El directorio que usaremos para esta guía será
/tftpboot. Este aparecerá como el directorio raíz
(/) al recibir solicitudes. Adicionalmente,
configuraremos el sistema para ejecutar el demonio TFTP como usuario y
grupo nobody.
Si el directorio que ha escogido no existe, habrá que crearlo con el
comando mkdir. El comando para el ejemplo /tftpboot
es:
Listado de Código 2.4: Creando el directorio /tftpboot |
# /bin/mkdir /tftpboot
|
Entonces necesitaremos cambiar el dueño de /tftpboot al
usuario nobody y el grupo nobody:
Listado de Código 2.5: Cambiando la propiedad |
# chown nobody:nobody /tftpboot
|
El demonio atftp
Primero instalamos el paquete atftp así:
Listado de Código 2.6: Instalando atftp |
# emerge atftp
|
Luego de haber instalado el paquete atftp habrá que
configurarlo. Si se desea proveer servicio tftpd al arrancar, debe
agregarse al /etc/conf.d/local.start porque atftp
no tiene guión init.d, inetd o xinetd
propio. Si quiere usar inetd o xinetd para controlar el
servicio tftpd, por favor vea las páginas man respectivas.
A continuación un ejemplo de una entrada para atftpd en
/etc/conf.d/local.start:
Listado de Código 2.7: /etc/conf.d/local.start |
/usr/sbin/in.tftpd -v --daemon /tftpboot
|
La explicación de las opciones usadas arriba (tomadas de la página man):
-
-v Aumentar o establecer el nivel de gestión de
registro. Usado sin argumentos, aumenta el nivel actual de
registro. El valor por defecto es LOG_NOTICE, vea syslog(3) para
una descripción de este nivel. La gama actual va desde 0
(LOG_EMERG) a 7 (LOG_DEBUG)
-
--daemon Ejecutar como demonio. No use esta opción si
atftpd es iniciado por inetd.
Para más opciones, consulte man 8 atftpd.
El demonio netkit-tftp
Primero instalaremos el paquete netkit-tftp así:
Listado de Código 2.8: Instalando netkit-tftp |
# emerge netkit-tftp
|
Luego, instalaremos sys-apps/xinetd si no está actualmente
presente. Después de haber instalado los paquetes
netkit-tftp y sys-apps/xinetd packages, debemos
configurar netkit-tftp. netkit-tftp necesita ser ejecutado
desde xinetd, aunque no provee su propio guión como ejemplo. Un
ejemplo de guión para xinetd se enseña a continuación:
Listado de Código 2.9: Archivo ejemplo /etc/xinetd.d/tftp |
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
group = nobody
server = /usr/sbin/in.tftpd
server_args = /tftpboot
only_from = 10.0.1.0
disable = no
}
|
Nota:
Este archivo ejemplo de configuración para xinetd usa la línea
disable = no, que activa el servicio por defecto. Esto es lo
opuesto a la manera como los demás paquetes de Gentoo proveen sus guiones
de configuración para xinetd, que traen el disable ajustado
a yes.
|
Una explicación de las opciones anteriores que pueden ser cambiadas:
-
user: las peticiones a in.tftpd son manejadas como este
usuario
-
group: las peticiones a in.tftpd son manejadas como este
grupo
-
server_args: directorio raíz desde donde el demonio tftp sirve
los archivos
-
only_from: indica a xinetd los anfitriones permitidos para
conexiones tftp
Información adicional acerca de los archivos de configuración de
xinetd puede ser encontrada en man 5 xinetd.conf.
Si xinetd está corriendo, se le puede enviar una señal HUP para que
relea sus archivos de configuración:
Listado de Código 2.10: Enviando una señal HUP a xinetd |
# /bin/killall -HUP xinetd
|
Si xinetd no está corriendo, inícielo con el comando init.d:
Listado de Código 2.11: Iniciando xinetd |
# /etc/init.d/xinetd start
|
Para más información, consulte man 8 in.tftpd.
El demonio tftp-hpa
Primero instale el paquete tftp-hpa usando el siguiente comando:
Listado de Código 2.12: Instalando tftp-hpa |
# emerge tftp-hpa
|
tftp-hpa incluye un guión init.d y su consiguiente
archivo de configuración conf.d. Asegúrese que INIITFTPD_PATH
e INITFTP_OPTS en /etc/conf.d/in.tftpd sean iguales a estos
valores:
Listado de Código 2.13: /etc/conf.d/in.tftpd |
INTFTPD_PATH="/tftpboot"
INTFTPD_OPTS="-s -v -l ${INTFTPD_PATH}"
|
El demonio TFTP puede ser iniciado por medio del guión init.d:
Listado de Código 2.14: Iniciando in.tftpd |
# /etc/init.d/in.tftpd start
|
Para más opciones, consulte man 8 tftpd.
3.
Preparando una imagen tftpboot para ser usada por un cliente
Asegúrese de tener una imagen que quiera usar para arrancar a través
de la red. Por favor, compruebe sus servidores Gentoo
locales y
réplica de ficheros de distribución para la imagen apropiada.
asumiremos que está intentando arrancar usando la imagen
gentoo-sparc64-20100128.tftpboot.
Una vez que tiene la imagen, cópiela al directorio
/tftpboot:
Listado de Código 3.1: Copiando la imagen |
# cp gentoo-sparc64-20100128.tftpboot /tftpboot
# chmod 644 /tftpboot/gentoo-sparc64-20100128.tftpboot
|
Ahora, cuando el cliente netboot hace una solicitud TFTP, busca un
archivo que corresponda al número hexadecimal de su dirección IP
actual, y en algunas plataformas adicionalmente un
sufijo .ARCH. El número hexadecimal debe ser escrito
con mayúsculas.
Veamos el equivalente hexadecimal para nuestra dirección IP de
ejemplo:
Listado de Código 3.2: Conversión a hexadecimal |
# printf "%.2X%.2X%.2X%.2X\n" 10 0 1 15
|
Listado de Código 3.3: Dirección IP de ejemplo |
decimal 10 0 1 15
hexadecimal 0A 00 01 0F
|
De manera que para nuestro cliente netboot de ejemplo, se buscaría un
archivo llamado 0A00010F al arrancar por tftp.
Si no se siente con ganas (como yo), puede hacer netboot del host para
obtener el nombre de fichero que el cliente está buscando comprobando los
registros del servidor.
Asegúrese de que los demonios rarpd y TFTP daemon que ha elegido
están ejecutándose, entonces arranque el servidor como se describe abajo en
Arrancando el cliente a través de la red
.
El cliente aparentará colgarse luego de emitir el comando de arrancar
a través de la red y luego en el servidor, revise los registros para
una entrada correspondiente a in.tftpd.
Una entrada de ejemplo de un servidor netboot corriendo el gestor
sysklogd y tftp-hpa se parecerá a:
Listado de Código 3.4: Entrada en el registro del sistema del servidor netboot |
Jan 3 22:48:59 stargazer in.tftpd[8368]: RRQ from 10.0.1.15 filename 0A00010F
|
El nombre del archivo aparece después de "filename" en la entrada de
registro, que en este caso es 0A00010F.
Una manera de controlar cual imagen netboot está usando y para permitir
que múltiples máquinas usen la misma imagen, use un enlace simbólico
para crear el archivo con nombre en valores hexadecimales. Para
nuestro anfitrión ejemplo sparc64 y la
imagen gentoo-sparc64-1.4_rc4-20040102.tftpboot, use el
siguiente comando:
Listado de Código 3.5: Enlaces simbólicos al archivo de imagen |
# /bin/ln -s /tftpboot/gentoo-sparc64-20100128.tftpboot \
/tftpboot/0A00010F
|
¡Ahora todo está listo para arrancar a través de la red!
4.
Arrancando el cliente a través de la red
En el prompt del PROM OpenBoot (OBP) en el SPARC, escriba el comando:
Listado de Código 4.1: Arrancando en el OBP |
ok boot net
|
Otra forma para ciertas máquinas sería:
Listado de Código 4.2: Arrancado en el OBP, manera alternativa |
ok boot net-tpe
|
Nota:
Si el sistema no presenta un prompt OBP al arrancar, deberá pulsar las
teclas Stop y A, o enviar una señal break por medio de la consola
serial antes que el sistema inicie un sistema operativo. Si no se
encuentra un sistema operativo, debería intentar arrancar a través del
interfaz de red (que es lo que queremos), o dejarlo en un prompt OBP.
|
Esto iniciaría el proceso de arranque a través de la red. Deben
aparecer unos dígitos hexadecimales constantemente cambiantes. Al
terminar de descargar la imagen, el núcleo tomará control e iniciará
el proceso de arranque del sistema operativo. En el caso de nuestra
imagen de instalación sparc64, terminará en un prompt de shell desde
el cual puede comenzar el proceso de instalación.
5.
Solucionando problemas
Construyendo los pre-requisitos de software
Si el servidor netboot es un sistema Gentoo Linux y experimenta
problemas instalando los paquetes rarpd y tftpd, por favor busque a
través de Foros de Gentoo
y Bugzilla Gentoo para determinar
si el mismo problema ha sido encontrado por otra persona. Si no, o si
las soluciones encontradas no funcionan, por favor archive un bug nuevo.
He usado el comando boot net pero aparentemente el equipo se
colgó.
Presumiblemente es porque el archivo que el sistema está tratando de
descargar no está disponible. En un sistema Sparc probablemente verá
lo siguiente:
Listado de Código 5.1: El arranque aparenta estar colgado |
Rebooting with command: boot
Boot device: net File and args:
|
Revise si el archivo solicitado por el cliente realmente exista en
/tftpboot. Puede confirmar el nombre del archivo
solicitado mirando en los registros del sistema. Además, una vez que
exista este archivo, el cliente tratará de descargarlo. A veces,
cuando el archivo falta originalmente, la descarga se congela una vez
que éste aparece. Para resolver esto, regrese al prompt OBP y vuelva a
escribir boot net. Entonces el anfitrión deberá empezar a
descargar la imagen y arrancar el sistema operativo.
Intento hacer netboot, pero lo único que veo son mensajes que dicen
"Timeout waiting for ARP/RARP packet" messages.
Esto puede ser debido a varios problemas distintos:
- Asegúrese que la entrada en el archivo /etc/ethers
existe para el cliente en cuestión. Si la dirección MAC no es la
correcta y/o el servidor netboot no logra resolver el nombre del
anfitrión cliente, no podrá responder con la información
necesaria.
- Verifique que el concentrador o o switch de la red al cual están
conectados el servidor y el cliente permitan fluir libremente el
tráfico RARP. Si la petición por parte del cliente no puede llegar
al servidor o vice versa, el anfitrión no podrá continuar.
- Nadie responde a la petición RARPD porque no existe un servicio
pendiente de las mismas. Verifique que el servicio rarpd esté
funcionando.
- El cliente piensa que su interfaz no está conectado al
concentrador/switch de la red a la cual está enchufado. Revise si el
interfaz de red tiene una luz indicadora de conexión. Si está
encendida, revise el contenido de tpe-link-test? en el OBP con el
comando: printenv tpe-link-test?. Deberá recibir algo así
como tpe-link-test? false true. La primera columna
representa el nombre del parámetro, la segunda muestra el valor
actual y la tercera el valor por defecto. En el ejemplo anterior
podemos ver que el valor actual es falso, significando que el
cliente no está constatando si el cliente y el concentrador/switch
pueden establecer una conexión antes de llevar a cabo su petición
RARP. A veces esto puede ser la causa de problemas.
Para cambiar el valor de tpe-link-test? desde el prompt OBP, ejecute
el siguiente comando:
Listado de Código 5.2: Cambiando el valor de tpe-link-test? |
ok setenv tpe-link-test? true
tpe-link-test? = true
|
Esto demuestra que el valor de tpe-link-test? ahora es
verdadero. Intente el netboot otra vez.
El contenido de este documento, a no ser que se especifique
expresamente, está registrado bajo los términos de la licencia
CC-BY-SA-2.5. Se aplican las
Pautas de
Utilización del logo y nombre de Gentoo.
|