Crear un sistema de ficheros raiz involucra selecionar los ficheros necesarios para que el sistema fucione. En esta secion describiremos como construir un sistema de ficheros raiz comprimido. Una opcion menos comun es construir un sistema de ficheros dsin comprimir en un disquete que puede ser directamente montado como raiz; esta alternativa es descrita en la seccion Sistema de ficheros Raiz sin disco Ram.
Un sistema de ficheros raiz debe contener todo lo necesario para soportar un completo sistema Linux. Para permitir esto, el disco debe incluir lo minimo requerido por un sistema Linux.
/dev, /proc, /bin, /etc, /lib, /usr,
/tmp,sh, ls, cp, mv, etc.,rc, inittab, fstab, etc.,/dev/hd*, /dev/tty*, /dev/fd0, etc.,Por supuesto, un sistema solo llega a ser util cuando puedes ejecutar algo en el, y un disco root, normalmente solo es util cuando puedes hacer algo de esto:
fsck sobre su sistema de ficheros raiz original,
mientras este no esta montado.
cpio, tar, gzip
y ftape.
Describiremos como construir un sistema de ficheros comprimido, llamado asi por que esta comprimido en el disco, y cuando arranca, es descomprimido en un disco-ram. Con un sistema de ficheros comprimido puede meter muchos ficheros ( aproximadamente seis megabytes) en un disco standard 1440K. Debido a que el sistema de ficheros es mucho mas grande que el disco, no puede ser construido sobre el disco. Tenemos que construirlo en otro sitio, comprimirlo y copiarlo despues al disco.
Para construir dicho sistema de ficheros raiz, necesita un dispositivo de almacenamiento con sitio suficiente para tener todos los ficheros antes de comprimirlos. Deberia necesitar un dispositivo con capacidad para al menos cuatro megabytes. Hay algunas eleciones:
RAMDISK_SIZE = nnn
Que determinara cuanta cantidad de RAM debe ser utilizada. Por defecto son
4096K, que deberia ser suficiente. Probablemente no deberia tratar de usar
discos-ram en una maquina con menos de 8Mb de RAM.
Compruebe que dispone de un dispositivo como /dev/ram0, /dev/ram
o /dev/ramdisk. Si no, cree /dev/ram0 con
mknod (major number 1, minor 0).
mount y
umount especialmente modificados. Puede encontrarlos en el siguiente
directorio:
ftp://ftp.win.tue.nl:/pub/linux/util/mount/
N.T.: Juraria que en las distribuciones actuales de linux ya viene modificado.
Si no tiene el dispositivo loop (/dev/loop0,
/dev/loop1, etc.) en su sistema, puede crear uno con
``mknod /dev/loop0 b 7 0''. Una vez instalados los binarios
especiales de mount and umount, cree un fichero temporal en el disco
duro con suficiente capacidad (ej, /tmp/fsfile).
Puede usar un comando como:
dd if=/dev/zero of=/tmp/fsfile bs=1k count=nnn
Para crera un fichero de nnn bloques.
Use el nombre del fichero en lugar de DEVICE mas abajo. Cuando utilize el
comando mount, debe incluir la opcion ``-o loop'' para indicar
a mount que utilice el dispositivo loopback.
Por ejemplo:
mount -o loop -t ext2 /tmp/fsfile /mnt
Montara /tmp/fsfile (a traves del dispositivo loopback) en el
punto de montaje /mnt. Un df lo confirmara.
Una vez ha elegido una de estas opciones, prepare el DISPOSITIVO con:
dd if=/dev/zero of=DEVICE bs=1k count=3000
Este comando rellena de ceros el dispositivo. Este paso es importante porque el sistema de ficheros en el dispositivo sera comprimido despues, por lo que toda la parte no utilizada deberia ser rellenada con zeros para asegurar la maxima compresion.
Siguiente, creee el sistema de ficheros. El kernel de liux reconoce dos tipos de
sistemas de ficheros pra discos raiz que son automaticamente copiados a
disco-ram. esto son minix y ext2, aunque es preferible usar ext2 como sistema de ficheros.
si usa ext2, podria encontrar util usar la opcion -i para especificar mas
inodos que los dados por defecto; -i 2000 es una sugerencia para no
acabar sin inodos.
Alternativamente, puede salvar una gran cantidad de inodos eliminando un monton
de ficheros /dev innecesarios. mke2fs crear por defecto 360 inodos en
un disco 1.44Mb. Yo encuentro que 120 inodos es suficiente para mi actual
disco root de rescate, pero si incluye todos los dispositivos del directorio
/dev entonces facilmente escedera de 360. Usando un disco raiz comprimido
le permite sistemas de ficheros mayores, y mas inodos por defecto, pero puede serguir
necesitando reducir el numero de ficheros para incrementar el numero de inodos.
Entonces el comando que usara deberia ser similar a:
mke2fs -m 0 -i 2000 DEVICE
(Si va a utilizar el dispositivo loopback, debera utilizar el fichero de
disco en lugar de DEVICE.
en este caso, mke2fs
le preguntara si realmente desea hacer esto; diga que si.)
The mke2fscommand will automatically detect the space available and
configure itself accordingly. The -m 0 parameter prevents it
from reserving space for root, and hence provides more usable space on
the disk.
el comando mke2fs detectara automaticamente el espacio disponible y
se configurara en funcioin de esto. el parametro -m 0 le previene de
reservar espacio para el root, y asi proporciona mas espacio utilizable en
el disco.
Despues, monte el dispositivo.
mount -t ext2 DEVICE /mnt
(debe crear el punto de montaje /mnt si este no existe todabia.)
En las siguiente secciones, en todos los nombre de directorios de destino
se asume que son relativos a /mnt.
He aqui el minimo conjunto razonable de directorios de un sistema de ficheros raiz:
/dev -- Dispositivos, necesarios para realizar operaciones de I/O /proc -- Directorio necesario para el sistema de ficheros especial proc/etc -- Ficheros de configuracion del sistema/sbin -- Binarios criticos del sistema/bin -- Binarios basicos considerados parte del sistema/lib -- Librerias compartidas de enlace dinamico necesarias/mnt -- Un punto de montaje para otros discos/usr -- Utilidades y aplicaciones adicionales(La estructura de directorios presente aqui es solo para discos root. Los sistemas Linux reales tiene una estructura mas compleja y rigida sugeta a una politica, llamada Sistema de Ficheros Standar (File System Standard) que determina donde debe de ir cada directorio.)
Hay tres directorios que estaran vacios en el sistema de ficheros raiz, por lo que
solo necesita crearlos con mkdir. el directorio /proc es basicamente
el lugar donde el sistema de ficheros proc es oclocado. los directorios
/mnt y /usr son solo puntos de montaje para utilizar
despues de que el sistema boot/root este funcionando. Una vez mas estos
directorios solo necesitan ser creados.
Los siguientes cuatro directorios seran descritos en las siguentes seciones.
El directorio /dev contiene ficheros especiales para todos los
dispositivos que son usados por el sistema y son necesarios en todos los
sistemas linux. El directorio en si mismo en un directorio normal, y puede
ser creado con mkdir del modo normal. Los ficheros especiales de
dispositivos, no obstante, deben ser creados de una manera especia, utilizando
el comando mknod.
Hay un metodo abreviado, -- copie el contenido de su directorio /dev
esistente, y borre lo que no necesita. El unico requisito es que copie los
dispositivos especiales utilizando la opcion -R. Esto copara el
directorio si preocuparse de copiar el contenido de los ficheros. Asegurese
de usar la letra mayuscula R. si usase la minuscula -r, probablemente
acabaria copiando el contenido completo de todos sus discos duros -- ˇ o al menos lo
que entrase en el disco! no obstante, tenga cuidado, y use el comando:
cp -dpR /dev /mnt
suponiendo que el disco este montado en mnt. el parametro dp
se asegura que los enlaces simbolicos sean copiados como enlaces, en lugar
de copiar el fichero objetivo, y que los atributos originales son preservados,
asi como la informacion del posedor.
Alternativamente, puede usar el programa cpio con el parametro -p
porque cpio maneja los dispositivos especiales correctamente, y no trata
de copiar su contenido. Por ejemplo los comandos:
cd /dev
find . -print | cpio -pmd /mnt/dev
Copiara todos los fichero especiales de dispositivo de dev a
/mnt/dev. De echo esto copiara todos los dicheros en el
arbol de directorios comenzando por /dev, y creara los subdirectorios
necesarios en el arbol de directorios destino.
Si quiere hacerlo de la manera dificil, use ls -l para ver los numeros
mayor y menor de los dispositivos que desee, y creelos en el disco usando
mknod.
Una vez los dispositivos son copiadodos, no es mala idea comprobar que cualquier
dispositivo especial que necesite ha sido colocado en el disco rescate.
Por ejemplo, ftape usa dispositivos de cinta, por lo que es
necesario copiar todos esos su intenta aceder a su unidad de cintas ddesde el
disco de arranque.
Note que es necesita un inodo para cada fichero especial de dispositivo, y
con el tiempo los inodes pueden ser un recurso escaso, especialmente
en systemas de fichero en disco. Hay que hacer especial incapie en borrar
cualquier dispositivo especial que no necesite del directorio /dev
del disco. Muchos dispositivos son obiamente inecesarios para un sistema
especifico. Por ejemplo si no tiene discos SCSI puede eliminar sin problemas
todo slos dispositivos que comienzen con sd. De manera similar, si no
tiene intencion de utilizar el puerto serie entonces todos los dispositivos
que comienzan con cua pueden borrarse.
Asegurese de incluir los siguientes ficheros en este directorio:
console, kmem, mem, null, ram, tty1.
Este directorio contiene varios ficheros de configuracion. En muchos sitemas , pueden ser divididos en tres grupos:
rc, fstab, passwd.
Los ficheros que no son esenciales pueden ser identificados con el comando:
ls -ltru
Esto muestra en orden inverso segun la ultima fecha de acesso, los ficheros, por lo que si algun fichero no ha sido acedido, este puede omitirse del disco root.
En mi disco root, El numero de ficheros de configuracion que tengo baja hasta 15. Esto reduce mi trabajo de manejar los tres tipos de ficheros:
rc.d/* -- arranque del sistema, y scripts de cambio de nivel de ejecucion(run-level).fstab -- lista de sistema de ficheros montados por el sistema.inittab -- parametros para el proceso init, el primer proceso
ejecutado al arrancar el sistema.
passwd -- Lista de usuarios, directorios home,, etc.group -- grupos de usuarios.
shadow -- passwords de los usuarios. Puede no necesitarlo.
passwd y shadow deberian ser
reducidos para evitar la copia de password fuera del sistema, y para que
cuando arranque desde disco, sean rechazados los login no deseados. No obstante,
hay una razon para no reducir passed y group. tar ( y problablemente
otras utilidades de archivo) almacenan los nombre de usuario y grupo con los ficheros.
Si restaura ficheros al disco duro desde cinta, los ficheros seran recuperados
con sus nombre originales. Si estos nombre no existen en passwd/group
cuando son recuperados, los UIDs/GIDs no seran correctos.
Asegurese que passwd contiene al menos root. Si quiere
que otros usuarios hagan login, asegurese que sus directorios home y shells
existen.
Aparte de esto, Solo necesito configurar dos ficheros, y estos contiene poca cosa.
rc deberia contener:
#!/bin/sh
/bin/mount -av
/bin/hostname Kangaroo
Asegurese de que los directorios son correctos. La linea de
hostname no es necesario que se ejecute -- pero vera las cosas mejor.
fstab deberia contener al menos:
/dev/ram0 / ext2 defaults
/dev/fd0 / ext2 defaults
/proc /proc proc defaults
Puede copiar las entradas desde su fstab existente, pero no deberia
montar automaticamente ninguna particion de disco duro; use la palabra clave
noauto para ello. Su disco duro podria esta dañado o muerto cuando
utilizase el disco de arranque.
Su inittab deberia ser cambiado para que la linea
sysinit ejecutase rc o cualquier otro script
basico de configuracion que utilice. Ademas, si desea aseguirarse que los
usuarios por puerto serie no puedan hacer login, comente todas las entradas
para getty que incluyan dispositivos ttys o ttyS al final de
la linea. Deje las que ponen tty para que pueda hacer loguin en la
consola.
Un fichero inittab minimo se pareceria a este:
id:2:initdefault:
si::sysinit:/etc/rc
1:2345:respawn:/sbin/getty 9600 tty1
2:23:respawn:/sbin/getty 9600 tty2
The fichero inittab define que ejecutara el sistema en
los estados diferentes por los que para al arrancar, moverse a modo multi-usuario
, etc. Un punto a tener en cuenta es comprobar que los comandos introducidos
en inittab se refieren a programas que estan presentes y en el directorio correcto
. Si situa sus ficheros de commandos en el isco utilizando la seccion
Ejemplo de Listado de directorios del disco root
como guia, y despues copia su inittab al disco de rescate sin comprobarlo
, la probabilidad de fallo es bastante alta debido a que la mitad de las
entradas de inittab se refieren a programas omitidos o en el directorio
equivocado.
Note que algunos programas no puede moverse a otro sitio porque otros programas
tiene su situacion grabada. Por ejemplo en mi sistema, /etc/shutdown
esta fijado desde /etc/reboot/. Si yo muevo reboot a
/bin/reboot, he intento ejecutar el comando shutdown, este
fallara porque no podra encontrar el fichero reboot.
Para el resto, solo copie todos los ficheros de texto de su directorio
/etc, mas todos los ejecutables en su directorio etc
que no pueda asegurar que no va ha necesitar. Como guia, consulte el ejemplo
de listados en la secion
Ejemplos de listados de direcotorios del disco root. Probablemente sea suficiente con copiar solo
estos ficheros, pero los sistemas difieren entre si en gran medida, por
lo que no puedo asegurarle que el mismo conjunto de ficheros en su sistema
se equivalente a los de la lista. El unico metodo seguro es empezar con
ztt/inittab/ y solucionar lo que pida.
Muchos sistemas ahora usan un direcotorio /etc/rc.d/A conteniendo
los shellscripst para los diferentes niveles de ejecucion. lo minimo es un
simple script rc, pero puede ser tan sencillo como copiar inittab
y el directorio /etc/rc.d de sus sistema existente, y recortarr
el shellscript en el directorio rc.d para eliminar todos los procesos no relevantes
al ambiente del disco del sistema.
El directorio /bin es un lugar conveniente para colocar las utilidades
extra que necesite para realizar las operaciones basicas, coo son ls, mv,
cat y dd. mire el apendice
Ejemplo de listado de directorios del disco root para un ejemplo de la lista de ficheros que
pueden ir en los directorios /bin /sbin. Esto no incluye
ninguna de las utilidades necesarias para recuperar un backup, como son cpio,
tar y gzip. Esto es asi porque al colocar estas utilidades en un
disco por separado, se salva espacio en el disco boot/root. Una vez el disco
boot/root haya sido arrancado, es copiado al disco ram dejando la unidad de
disco libre para montar otros discos, como el de utilidade, Normalmente lo
monto bajo usr.
La creacion de un disco de utilidades se describe mas abajo en la secion Construcion de un disco de utilidades. Es probablemente una buena idea mantener una copia de la misma version de las utilidades utilizadas para guardar la copia de seguiridad para no gastar tiempo intentando instalar version que no pueden leer sus cintas de copias de seguiridad.
Asegurese de incluir los siguientes programas: init, getty
o equivalente, login, mount, y algun shell capaz de ejecutar los
rc scrips, muchos shells son capaces de ejecutarlos si tiene un link de sh al
shell.
En /lib colocara los cargadores y librerias de enlace dinamico necesarias.
Si las librerias necesarias no se encuentran en su directorio /lib
el sistema sera incapaz de arrancar. Si tiene suerte, podra ver un mensaje
de error indicandole por que.
Practicamente todos los programas necesitan al menos la libreria libc,
libc.so.N, dondeN es el numero de version actual. Compruebe
su directorio /lib. libc.so.5 es normalmente un enlace simbolico
a un fichero con el nombre de version completo:
% ls -l /lib/libc.so*
lrwxrwxrwx 1 root root 14 Nov 1 20:34 /lib/libc.so.5 -> libc.so.5.4.33*
-rwxr-xr-x 1 root root 573176 Jun 12 02:05 /lib/libc.so.5.4.33*
En este caso, necesita libc.so.5.4.33. Para encontrar otras librerias
que debera ir por todos los binarios que desee incluir y comprobar
sus dependencias con el comando ldd. Por ejemplo:
% ldd /sbin/mke2fs
libext2fs.so.2 => /lib/libext2fs.so.2
libcom_err.so.2 => /lib/libcom_err.so.2
libuuid.so.1 => /lib/libuuid.so.1
libc.so.5 => /lib/libc.so.5
Se necesita cada fichero de la parte derecha. Tenga en cuenta que las librerias mostradas pueden ser enlaces simbolicos.
In /lib/ debe ademas incluir el cargados de las librerias.
El cargador puede ser ld.so (para librerias a.out) o
ld-linux.so ( para librerias ELF).
Si no
esta seguro de cual necesita, ejecute el comando file sobre la
libreria. Por ejemplo:
% file /lib/libc.so.5.4.33 /lib/libc.so.4.7.2
/lib/libc.so.4.7.2: Linux/i386 demand-paged executable (QMAGIC), stripped
/lib/libc.so.5.4.33: ELF 32-bit LSB shared object, Intel 386, version 1, stripped
QMAGIC indicaca que 4.7.2 es una libreria a.out, y
ELF indica que 5.4.33 es ELF.
Copie los cargadores que necesite al sistema de ficheros raiz que esta construyendo. Las librerias y cargadores deberian comprobarse concienzudamente contra los binarios incluidos. Si el kernel no puede cargar la libreria necesario, normalmente se colgara si nigun mensaje de error.
Su sistema puede requerir cargar librerias de enlace dinamico que no son visible para ldd.
Si su sistema usa PAM ( (Pluggable Authentication Modules)(Modulos de Autentificacion Encajables) debe realizar algunas previsiones en el disco de arranque para poder hacer login. PAM, brevemente, es un sofisticado y modular metodo de autentificar a los ususario y controlar su acesso a servicios. Una manera facil de determinar si su sistema tiliza PAM es comprobar en su disco duro el directorio /etc la existencia de del fichero pam.conf o el direcotorio pam.d ; si cualquiera existe, debe proporcionar un soporte PAM minimo. (alternativamente, ejecute ldd en su ejecutable login; si la salida incluye libpam.so, necesita PAM.)
Afortunadamente, la seguridad no es algo muy importante cuando hablamos de discos de arranque, ya que cualquiera que tenga acceso fisico a la maquina puede normalmente hacer lo que quiera con ella. No obstante es importante anular PAM creando un simple /etc/pam.conf en su sistema de ficheros raiz que se parezca al siguiente:
OTHER auth optional /lib/security/pam_permit.so OTHER account optional /lib/security/pam_permit.so OTHER password optional /lib/security/pam_permit.so OTHER session optional /lib/security/pam_permit.so
Tambien copie el fichero /lib/security/pam_permit.so a su
sistema de ficherso, esta libreria es de solo 8K por lo que impone una
sobrecarga minima.
Note que esta configuracion permite a cualquiera acceso completo a sus ficheros y servicios en la maquina. Si desea una mayor seguridad en su disco de arranque por alguna razon, deberia copiar parte o toda la configuracion PAM de su disco duro al sistema de ficheros raiz. Asegurese de leer la documentacion PAM con precaucion, y copie cualquier libreria necesaria en /lib/securyty en su sistema de ficheros raiz.
You must also include /lib/libpam.so on your bootdisk. But
you already know this since you ran ldd on /bin/login, which
showed this dependency.
Necesita ademas incluir /lib/libpam.so en su disco de arranque.
Pero ya deberia seber esto desde que ejecuto ldd en /bin/login,
que le muestra las dependencias.
Si usa glibc (aka libc6), probablemente tenga que hacer previsiones para ellos servicios de nombre, o no sera capaz de hacer login. el fichero /etc/msswitch.conf controla la base de datos de bloqueos de varios servicios. Si no tiene planeado aceder a servicios de una red (ej, busquedas de DNS o NIS), solo necesitara preparar un simple fichero nsswitch.conf que sea como esto:
passwd: files
shadow: files
group: files
hosts: files
services: files
networks: files
protocols: files
rpc: files
ethers: files
netmasks: files
bootparams: files
automount: files
aliases: files
netgroup: files
publickey: files
Esto espeficica que todos los servicios son proporcionados por ficheros locales.
Probablemente necesite incluir /lib/libnss_files.so.1, que se
cargara dinamicamente para manejar la busqueda de ficheros.
Si tiene pensado aceder a una red desde el disco de arranque, necesitara
crera un fichero nsswitch.conf mas elaborado. Mire la pagina
man de nsswitch para mas detalles. Tenga presente que debe
uncluir un fichero /lib/libnss_servicio.so.1 por
cada servicio que espeficique.
Si tien un kernel modular, debe evaluar que modulos necesita cargar desde el
disco de arranque tras el arranque. Si va a realizar copias de seguirdad desde
una unidad de cinta, deberia incuir los modulos ftape y zftape, modulos para los dispositivos SCSI que tenga, y posiblemente los modulos del soporte PPP o SLIP si quiere tener aceso a la red en una emergencia.
Estos modulos pueden ser colocados en /lib/modules. Deberia ademas
añadir insmod, rmmod y lsmod. Si ademas desea que los modulos
se cargen automaticamente, debira incluir modprobe, depmod y
swapout. Si usa kerneld, incluya con el el /etc/conf.modules.
No obstante, la principal ventaja de utilizar modulos es que puede mover partes no criticas al disco de utilidades y cargarlas cuando sean necesarias, utilizando menos espacio en el disco root. Si tiene que aceder a muchos dispositivos, esta aproximacion es preferible a contruir un kernel inmenso con todos los drivers en el.
Note que para poder arrancar desde un sistema de ficheros ext2 comprimido, el soporte de discos-ram y ext2 debe estar incluido en el kernel. No se pueden suministrar como modulos.
Algunos programas, como es login, fallan si el fichero /var/run/utmp y el directorio /var/log no existen. utmp Por lo que:
mkdir -p /mnt/var/{log,run}
touch /mnt/var/run/utmp
Finalmente, despues de haber preparado todas las librerias que necesite, ejecute
ldconfig para rehacer /etc/ld.so.cache en el sistemad de
ficheros raiz. El cache indica al cargador donde encontrar la librerias.
Para rehacer ld.so.cache, haga los siguiente comandos:
chdir /mnt; chroot /mnt /sbin/ldconfig
El chroot es necesario por que ldconfig siempre rehace el cache
desde el sistema de ficheros raiz.
Una vez ha finalizado la construcion del sistema de ficheros, desmontelo, copielo a un fichero y comprimalo:
umount /mnt
dd if=DEVICE bs=1k | gzip -v9 > rootfs.gz
Cuando acabe tendra un fichero rootfs.gz que es su sistema de ficheros
comprimido. Deberia comprobar el tamaño para asegurarse de que entra en el
disco; si no entra, vuelva atras y elimine algunos ficheros. La seccion
Reducir el tamaño del sistema de ficheros raiz tiene algunas
ideas para hacer esto.