Jun 06
2007DISKLESS BOOTING ( EN ESPAÑOL )
Asignado a: (CLIENTES Y SERVIDORES) por Michael Garcia en 06-06-2007
o Servidor de Terminales Pesados -STP-
Este sistema nos permite servir a otros ordenadores lo necesario para que arranquen un sistema operativo sin tener ni siquiera Disco duro. Sino tan solo con acceso a la red donde esta el servidor y posibilidad de arranque por red en la BIOS del cliente.
De que se trata todo esto … pues simplemente de tener un solo sistema operativo y poder trasmitirlo a otro ordenador vía red LAN para que cargue los ficheros y configuración de un S.O predefinido en el servidor . Una vez hecho esto tener toda la autonomía de un sistema operativo como si estuviese instalado en dicho ordenador , únicamente la función principal del servidor sera pasar todo el sistema de archivos y luego de ello mantenerse conectado con el cliente únicamente par actualizar los datos que el modifique del S.O otorgado por el servidor .
Ahora mas técnicamente , esto sucede de la siguiente manera:
El BOOTING DISKLESS requiere un servidor de DHCP para determinar de una MAC suministrada su ubicación en la red y darle una IP fija. Además se requiere una placa base que permita BOOTEO PXE por red. Un servidor TFTP para poder trasmitir el ROOM de arranque PXE y posteriormente pasar por el mismo servidor el kernel del sistema (el núcleo del mismo) el cual se configurara según los argumentos especificados en la configuración del PXE , para que después de esto el kernel sepa donde buscar los ficheros de sistema en el servidor . Los cuales se trasmitirán por NFS.
Por que PXE,DHCP,TFTP y NFS?
La primera vez que se inicia un nuevo equipo cliente habilitado para inicio remoto PXE, éste utiliza el protocolo DHCP para solicitar una dirección de Protocolo Internet (IP) y la dirección IP de un servidor DISKLESS BOOTING . Como parte de la solicitud inicial el servidor DHCP le facilita la conexión con el servidor TFTP un protocolo utilizado para trasmisión de datos en red , una vez es pasado el ROOM PXE se genera un micro entorno el cual es capaz de cargar el kernel también pasado por TFTP y luego a su vez el kernel ya es capaz de por NFS solicitar todos los archivos del S.O y completar el arranque del mismo.
Que se requiere?
-Un sistema ( Ubuntu en este caso )
-Una placa base que tenga arranque PXE
-Espacio en disco para el sistema del servidor y el sistema que se va a trasmitir
Una red rápida entre cliente y servidor
Servidores NFS,TFTP,DHCP
Y un buen entendimiento de Linux . jiji
Pasos a seguir para lograr montar un servidor de terminales pesados
1 - hacer <<ifconfig>> y sacar tu IP ( anotala te va a ser util ).
2 - Crear una carpeta en /mnt con :
<<sudo mkdir -p /mnt/nfsroot/ubuntu-feisty/dev>>
3 - Instalar todos los servidores :
<< sudo apt-get install dhcp3-server >>
<< sudo apt-get install tftpd-hpa >>
<< sudo apt-get install nfs-kernel-server >>
luego
4 - Para generar el pxe que se va a cargar por red hay que descargar el syslinux .
<< sudo apt-get install syslinux >>
5 -Creamos las carpetas necesarias.
<< sudo mkdir -p /tftpboot/pxelinux.cfg >>
<< sudo mkdir /tftpboot/ubuntu-feisty >>
6 - Copiamos el pxe de sistema en la carpeta creada .
<< sudo cp /usr/lib/syslinux/pxelinux.0 /tftpboot >>
7 - buscamos nuestro kernel con .
<< ls -ltr /boot/vmlinuz-* >>
8 - y lo copiamos a nuestra carpeta /tftpboot.
<< sudo cp /boot/vmlinuz-* /tftpboot/ubuntu-feisty >>
9 - Copiamos la herramienta del sistema que crea la imagen de arranque del kernel y le
ponemos otro nombre.
<< sudo cp -Rp /etc/initramfs-tools /etc/initramfs-tools-pxe >>
10- luego modificamos un archivo de esa carpeta nueva para que bootee desde nfs con
<< sudo gedit /etc/initramfs-tools-pxe/initramfs.conf >>
(cambiamos BOOT=local por BOOT=nfs)
11 - Creamos una nueva imagen
<<sudo mkinitramfs -d /etc/initramfs-tools-pxe -o /tftpboot/ubuntu-feisty/initrd.img-2.6.20-15-generic>> revisar los
números de versión para que todos coincidan con el kernel
12 - Creamos un archivo en /tftpboot/pxelinux.cfg/ que se llame default una forma de hacerlo
es:
<< sudo gedit /tftpboot/pxelinux.cfg/default >> y pegamos esto
LABEL ubuntufeisty
kernel ubuntufeisty/
vmlinuz2.6.2015generic
append root=/dev/nfs nfsroot=***SERVERIP****:/
mnt/nfsroot/ubuntufeisty
ip=dhcp
initrd=ubuntufeisty/
initrd.img2.6.2015generic
rw
PROMPT 0
TIMEOUT 0
DEFAULT ubuntufeisty
13 - modificamos
la configuración del servidor dhcp para que sirva solo a el cliente una ip
fija y le pase el pxe correspondiente el archivo a configurar es /etc/dhcp3/dhcpd.conf y se
hace con :
<< sudo gedit /etc/dhcp3/dhcpd.conf >>
y agregamos lo siguiente:
# ltsp server network
subnet 192.168.80.0 netmask 255.255.255.0 { <--LAMASCARA DE LA RED Y LA SUB NET range 192.168.80.55 192.168.80.55; <--EL RANGO DE IPS A SERVIR option routers 192.168.80.1; filename "pxelinux.0"; nextserver 192.168.80.10;
y lo cambiamos por:
#Defaults for tftpdhpa
RUN_DAEMON=”yes”
OPTIONS=”ls/tftpboot”
14.1 - procedemos a dar permisos a la carpeta nfsroot con
<< sudo gedit /etc/exports>>
y agregamos:
/mnt/nfsroot/ubuntufeisty * (rw,no_root_squash,async)
14.2 - luego ponemos :
<< exportfs -rv >> para actualizarlo
15 - MAS TARDE EN EL CLIENTE ponemos:
<< sudo apt-get install nfs-client >>
15.1 En el CLIENTE creamos
<< sudo mkdir -p /mnt/nfsroot/ubuntu-feisty/ >>
16 - montamos en el cliente el enlace con la carpeta del servidor con:
<< sudo mount *****IP SERVER*****:/mnt/nfsroot/ubuntu-feisty /mnt/nfsroot/ubuntu-feisty>>
17 -y luego de montarla copiamos los contenidos del cliente en el servidor
con:
<<sudo cp -ax /. /mnt/nfsroot/ubuntu-feisty/.>>
y
<< sudo cp -ax /dev/. /mnt/nfsroot/ubuntu-feisty/dev/.>>
18 - Una vez copiado todo en el servidor solo tenemos que cambiar el archivo de los
contenidos de montaje /etc/fstab que estara en la carpeta de ubuntufeisty
de nfsroot con:
<< sudo gedit /mnt/nfsroot/ubuntu-feisty/etc/fstab >>
( en la que dejaremos nada mas que las unidades externas montadas y lo demas lo
comentaremos MENOS la swap )
19 - luego
tendremos que cambiar un ultimo fichero en nfsroot y estara listo nuestro servidor
el ultimo comando sera
<< sudo gedit /mnt/nfsroot/ubuntu-feisty/etc/network/interfaces >>
( y comentamos de este archivo todo para que el cliente no genere interfaces de red y
termine por desconectarse del servidor de terminales pesados )
20 -Por ultimo arrancamos todo los servidores con
<< sudo /etc/init.d/dhcp3-server stop >>
<< sudo /etc/init.d/dhcp3-server start >>
<< sudo /etc/init.d/tftpd-hpa stop >>
<< sudo /etc/init.d/tftpd-hpa start >>
<< sudo /etc/init.d/nfs-kernel-server start >>
<< sudo /etc/init.d/nfs-kernel-server stop >>
21 - Y listo solo queda arrancar el cliente en modo de BOOT de LAN y tenemos nuestro
servidor funcionado como servidor de terminales pesados .
licencia de Creative Commons.









ACERCA DE:

Dios tio me has salvado la vida en mi facultad estan tratando de montar un servidor diskless como este y no pudieron bua te aviso cuando les mensione este manual excelente post
gracias por tu aporte pero no me corre el server dhcp, por el contrario los otros dos si , me sale el error fail ,
lo tengo trabajando ya mas de 6 meses sin fallos si sigues al pie de la letra la instalacion no tendras problemas… dime donde te ha dado problemas exactamente????
Me perdi en el paso “15 - MAS TARDE EN EL CLIENTE ponemos:” se supone que los servicios dhcp y tftp no se han iniciado, ¿como se va a arrancar el cliente?
el cliente no necesita nada solo nfs para pasar los ficheros del sistema una vez por lo demas el sistema es abstracto de software el cliente en principio necesita tener boot pxe, lo he explicado antes.
Creo que no me explique bien, lo que quise decir es que si el paso 15, 16 y 17 se hace en el cliente o el servidor.
saludos
15 16 y 17 son en el cliente dado que al montar la carpeta en el cliente del servidor tienes acceso a ella y copias el contenido del cliente en el servidor como hacer una imagen del mismo en el server
18 19 y 20 son en el servidor, modificaciones al contenido copiado del cliente a el servidor
He intentado montar diskless sin exito, aclaro que no he seguido este manual, pero he leido que diskless puede funcionar para terminales sin disco duro, es aqui donde digo, como voy a hacer los pasos 15 - 17 en un cliente, cuando nisiquiera tiene un disco duro??
He llegado al punto 18 y no tengo esta carpeta /mnt/nfsroot, no se si la debo crear, o me brinque algun paso, he repetido los pasos 3 veces, y sigo sin tener esta carpeta, alguien me puede ayudar??
ya en el paso 2 tienes que tenerla creada
2 - Crear una carpeta en /mnt con :
<>
Hugo, Necesitas 2 sistemas Ubuntu corriendo para montar el servidor, una vez esto podrías pesarle a un equipo sin disco duro la información del servidor y tener un sistema ubuntu sin problemas. pero para crear la imagen inicial de un cliente en el servidor necesitas un sistema Ubuntu funcionando en un cliente luego de esto con el servidor bastaría.
Buen trabajo Michael… pero tengo una duda , cuando mencionas cliente es para hacer una especie de imagen para luego cargarla en la red a clientes pesados no??
Gracias y un saludo
sip exactamente
Despues de muchos problemas con tftp, al fin lo consegui, pero el problema ahora es que cuando la terminal esta cargando todos los archivos necesarios se queda aparentemente atorado en * Starting NFS Common Utilities, quisiera mencionar que al ejecutar el paso 17 en el primer comando al final aparecio este mensaje
cp: ne peut évaluer ‘/./home/cliente/.gvfs’: Permission non accordée
(algo asi como cp: no puede evaluar ‘/.home/cliente/.gvfs’: Permisos no acordados)
y en el segundo comando en todas las lineas me aparecio algo como esto
cp: preserving permissions for ‘/mnt/nfsroot/cliente/dev/./.snd/seq’: Opération non supportée
No se si hasta cierto punto sea normal
Saludos y gracias por la ayuda
Es muy posible que cuando creases la carpeta lo hicieses sin sudo y por ello tanto el destino de la copia como el origen están con pocos permisos para la copia de los datos haz un chmod 777 de la carpeta origen y destino para que la copia se haga bien, ademas cuando ya tiene todo listo en el momento que se comienzan a ejecutar los servicios locales en el cliente si la imagen del cliente que hiciste tenia instalada una aplicación llamada network-manager cuando el servicio de la misma se lanza en la carga del sistema rompe la conexión con el servidor y no se completa la carga, un saludo…
Inicialmente compie los archivos como root, pero de cualquier forma le cambie los permisos a todo el contenido, pero aun sigue atorado en Starting NFS common utilities, y despues de algo de tiempo se queda en Starting Hardware abstraction layer hald y aunque dice que esta OK manda muchos mensajes /etc/ini.d/rc: 317: sed: Input/output error
Hola he hecho todo los pasos, encontre un problema con el nfs fijate y me dice por favor si es ubuntu-fiesty o ubuntufiesty
paso 2
<>
y despues
paso 12
append root=/dev/nfs nfsroot=***SERVERIP****:/
mnt/nfsroot/ubuntufeisty
me parece que no esta bien! espero tu comentario
la carpeta tftpboot es creada seguro en el root?
y por favor no se si las OPTION=”ls/tftpboot” esta bien!
La configuracion de DHCP le hace falta una } y ademas no es nextserver sino next-server.
append root=/dev/nfs nfsroot=***SERVERIP****:/
mnt/nfsroot/ubuntufeisty
la carpeta nfs no existe en mi maq. no es un dispositivo….
podria alguine explicarme esta linea?
ubuntu-fiesty es lo correcto solo con ver la creación de la carpeta al comienzo despejas tu duda.
la linea completa dentro del fichero seria esta
append root=/dev/nfs nfsroot=192.168.1.5:/
mnt/nfsroot/ubuntufeisty
y esa es un ip de ejemplo si tienes instalado el server nfs esa carpeta existe, si no algo falla… recordad que hace mucho que lo hice y el software es muy cambiante es posible que cambiaran algo en los servidores nfs que modificase el manual, problemas como este me encontré miles cuando lo hice funcionar por primera vez , pero los solvente probando cosas.
aclaro en la nfsroot es ubuntu-fiesty pero en la configuración de nfs es ubuntufeisty son dos cosas distintas en distintos lugares