Antes que nada, es necesario crear la estructura de directorios en sí. Yo
creo todos los clientes bajo /clients/nombre-maquina
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:
/bin
/dev
/etc
/home
/lib
/mnt
/proc
/sbin
/server
/tmp
/usr
/var
y cualquier otro directorio que desee tener en su sistema.
Los directorios locales /proc
y /dev
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.
/dev
Si bien el directorio /dev
puede ser compartido, es mejor crearlo
separado para cada cliente. Puede crear dicho directorio en el cliente
con la macro MAKEDEV
; sin embargo, en muchos casos resulta más
simple copiarlo del servidor:
cp -a /dev /clients/nombre-maquina
Debe recordar que /dev/mouse
, /dev/cdrom
y
/dev/modem
son enlaces simbólicos a los dispositivos actuales y
por tanto, asegurarse de que queden enlazados correctamente para apuntar
al hardware correspondiente del cliente.
Aunque montemos todo desde el servidor, existe un grupo de binarios que
necesitamos copiar para cada cliente. Para empezar, necesitamos
"init
", 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 /sbin/init
al directorio
/sbin
del cliente y como ejecutará rc.S
, necesitará
copiar /bin/sh
al directorio /bin
del cliente. Para
poder montar necesitará copiar /sbin/mount
al directorio
/sbin
del cliente.
Esto es lo mínimo, asumiendo que la primera línea de su rc.S
es
mount -av
. No obstante, recomiendo copiar algunos archivos más:
update, ls, rm, cp
y umount
, 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 swapon
.
Ya que muchos de estos binarios están por defecto compilados
dinámicamente, necesitará copiar una pequeña parte de /lib:
cp -a /lib/ld.* /lib/libc.* /lib/libcurses.* /client/nombre-maquina/lib
También es posible enlazar los binarios a sí mismos, en lugar de copiarlos. Por favor, lea mis comentarios de la sección 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 rarp
o
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 rc.S
hasta el momento en que se monta el
resto del sistema de archivos.
/var
El directorio /var
, 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 var
.
Montaremos el directorio /var
de allí. Para crear el directorio
local /var
, simplemente escriba:
cp -a /var /clients/nombre-maquina
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 /var
del cliente y enlácelo en al
directorio /server/var
. Tenga en cuenta que debe enlazar tanto
para /server/var
como para ../server/var
pero
NO para /clients/nombre-maquina/server/var
ya que esto
no funcionará cuando cambie el directorio raíz en cada cliente.
Generalmente recomiendo separar /var/run
, /var/lock
,
/var/spool
y /var/log
.
/etc
se explica en la siguiente sección./mnt
y /proc
son para propósitos locales de cada
cliente/usr
y /home
son solamente para montar/tmp
depende de Usted. Se puede crear un directorio
tmp
diferente para cada cliente, o crear un directorio
/clients/tmp
y montarlo para cada cliente en /tmp
. Yo
recomiendo darle a cada cliente un directorio tmp
separado. /etc
y configuración de losclientesTenga en cuenta lo siguiente: esta sección se refiere a la creación del
directorio etc
que está preferentemente compartido entre los
clientes. Si sus clientes sin disco tienen administradores de sistema
diferentes, lo mejor es configurar un directorio etc
para cada
cliente.
etc
de los clientesAunque separemos el directorio etc
para los clientes, mantendremos
compartida una gran parte de los archivos que allí se encuentran. Creo
que compartir los archivos con el /etc
del servidor es mala idea,
y recomiendo crear un directorio /clients/etc
que contenga la
información compartida entre los clientes. Para arrancar con esto,
simplemente copie el contenido del /etc
del servidor en el
directorio /clients/etc
.
Se deberá colocar en este directorio todos los archivos de configuración
que no sean específicos para una máquina, como pueden ser motd
,
issue
, etc. y no los que sean específicos del cliente, como
inittab
o fstab
.
El cambio más importante que deberemos realizar estará bajo el directorio
rc.d
. Primero, deberemos cambiar 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
rc.inet1
. Lo único que dejo allí son los binarios ifconfig
y
route
del cliente. Si utiliza rarp
o bootp
, necesitará
crearlo acorde a esto.
En segundo lugar, deberá editar su rc.S
y eliminar todas las partes
responsables de la comprobación por parte de fsck
que tiene lugar
cuando arranca el servidor. Debe encontrar la línea que monta su
fstab
, que se parecerá a:
mount -avt nonfs
El parámetro -t nonfs
se debe a que los clientes normales
ejecutan primero rc.S
, usando después 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 mount -av
. Si
necesita ejecutar rarp/bootp
para configurar la red, hágalo en
rc.S
(o incluya una llamada a alguna macro desde rc.S
), antes de
montar, y asegúrese de que sus directorios /bin
y /sbin
tengan disponibles los archivos necesarios.
Una vez se lleva a cabo mount -av
, tendrá un sistema de archivos
funcionando. Cree un fstab
general, luego puede copiarlo en cada
cliente. Su fstab
debe ser aproximadamente como este:
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
Asegúrese también de que el /etc/exports
del servidor sea algo
como:
/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)
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 pc*.dominio
). Le sugiero crear la
mayoría de los directorios como sólo lectura, aunque esto es decisión
suya. La indicación no_root_squash
hará que los usuarios
administradores de los clientes tengan también los permisos vigentes de
root sobre nfsd
. Revise la página man exports(5)
. Si desea que
los usuarios puedan ejecutar passwd
desde los clientes, asegúrese que
/etc
esté con permisos rw
y no ro
. Aunque esto no es
obligatorio.
Por favor, tenga en cuenta otro detalle en el archivo rc.S
. En
Slackware, por defecto, se crea un nuevo /etc/issue
y
/etc/motd
cada vez que se ejecuta. Esta función DEBE
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:
/etc/passwd
y un
/etc/group
tal y como lo recibe del servidor NIS.
/clients/etc/passwd
a /etc/passwd
, o
si prefiere, un enlace simbólico, enlazando /etc/passwd
a
/clients/etc/passwd
(y no de la otra forma, ya que los clientes
no montarán el directorio /etc
del servidor). Haga lo mismo para
/etc/group
. /etc
del clienteGeneralmente, la mayoría de los archivos en el /etc
del cliente
estarán enlazados simbólicamente con el directorio /server/etc
.
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 /etc
es lo siguiente:
resolv.conf
hosts
inittab
rc.d/rc.S
fstab
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 rc.S
y fstab
debe tener presente que
se necesita una copia separada para cada cliente. También necesitará
separar el /etc/HOSTNAME
de cada cliente. Yo personalmente
recomiendo tener todos los archivos de 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 fstab
una línea apropiada para el
archivo de intercambio:
/dev/particion_swap swap swap default 1 1
Con el resto de los archivos del /etc
del cliente, puede o bien
enlazarlos rígidamente a los archivos /clients/etc/*
o bien
simbólicamente con /server/etc
(ya que es el punto de montaje de
/clients/etc/
)
Asegúrese de que su máquina puede resolver apropiadamente, tanto a través
de named
como de etc/hosts
. No es mala idea mantener el
número IP del servidor en /etc/hosts
, en lugar de contar con
resolverlo. Si confía resolverlo con named
solamente, cualquier
problema con named
puede impedir que sus clientes arranquen.
Ahora, todo lo que necesita hacer es iniciar su máquina, cruzar los dedos y esperar que todo funcione como debe :-).