cd arrancable fácil de tu lfs
TRANSCRIPT
CD Arrancable Fcil de tu LFS
CD Arrancable Fcil de tu LFS
VERSIN LFS:3.3
AUTOR:
Thomas Foecking
Christian Hesse
TRADUCTOR:Proyecto LFS-ES
SINOPSIS:
Cmo crear un CD Arrancable fcil de tu sistema LFS.
RECETA:
Versin 0.2c
27/04/2002
ndice
--------
1. Qu necesitas y cul es la idea?
2. Configura y compila el ncleo (kernel)
3. Mueve /dev /var /tmp /root /home a /falso/necesita_escritura
4. Crea enlaces simblicos /... -> /falso/necesita_escritura/...
5. Crea un guin de arranque que monte el disco virtual en memoria (ramdisk)
6. Instala el Cargador de Arranque isolinux
7. Crea el disco virtual en memoria (ramdisk) inicial
8. Tuesta el CD Arrancable
9. Reinicia y disfruta
1. Qu necesitas y cul es la idea?
----------------------------------
Qu necesitas?
- El sistema LFS que quieres tostar en CD
- Otro sistema linux/unix para crear alguna cosa y tostar el CD
- El CD-R(W) para tostar tu sistema LFS y la imagen de arranque en CD
- 1 CD-R + 1 CD-RW es muy recomendable para ahorrar dinero
- sofware adicional:
syslinux: (contiene isolinux para arrancar el ncleo del LFS en CD)
http://freshmeat.net/redir/syslinux/10177/url_bz2/syslinux-1.67.tar.bz2
isoinfo: (opcional para detectar el CD LFS sin montarlo)
http://www-tet.ee.tu-berlin.de/solyga/linux/isoinfo-0.03.01.tar.gz
Antes de nada necesitas un LFS ejecutndose, que quieras tostar en
CD. Puede que quieras tener un CD LFS para crear nuevos sistemas en
otras computadoras. Sean cual fuesen tus ideas, primero tendrs que
crear este sistema especial en tu particin LFS.
(Por ejemplo, he creado un sistema LFS con xfree86 y windowmaker;
ahora puedo arrancar desde el CD y crear un nuevo sistema LFS sin
olvidarme de xfree86 ni de windowmaker)
Cul es la idea?
- Crear el ncleo con soporte para disco virtual en memoria (ramdisk) e initrd
- Mueve /dev /var /tmp /root /home a /falso/necesita_escritura
- Haz los enlaces simblicos
/dev -> /falso/necesita_escritura/dev
/var -> /falso/necesita_escritura/var
/... -> /falso/necesita_escritura/...
- Monta /dev/ram0 en /falso/ramdisk
- Copia /falso/necesita_escritura/* a /falso/ramdisk/
- Monta de nuevo /dev/ram0 en /falso/necesita_escritura
Tendremos acceso de lectura-escritura en /dev /var /tmp /root /home
porque apuntan a /falso/necesita_escritura el cual es el disco virtual en
memoria (ramdisk)
Eres capaz de hacer la mayora de las cosas desde los otros sistemas
linux/unix ajustando LFS a tu punto de montaje de LFS. LFS=/path/to/lfs
Por ejemplo:
LFS=/mnt/lfs
No te olvides de ajustar de nuevo tu LFS cuando vaya a reiniciar!!
2. Configura y compila el ncleo
-----------------------------
Arranca tu sistema LFS o chroot en l.
--- opcional ---
Estamos justo aqu en nuestra primera instalacin de isoinfo que usars ms
tarde. Asumo que el paquete isoinfo-0.03.01.tar.gz est emplazado en /usr/src.
Salta este paso si ya tienes instalado cdrtools! Estas cdrtools tambin
contienen un programa llamado isoinfo que usaremos luego.
cd /usr/src
zcat isoinfo-0.03.01.tar.gz | tar x
cd isoinfo
./configure
sed "s/\/usr\/local\//\/usr\//g" Makefile > Makefile.new
mv Makefile.new Makefile
make
make install
--- fin de opcional ---
Bien, configuremos ahora tu ncleo:
cd /usr/src/linux
make mrproper && make menuconfig
Necesitas soporte para el disco virtual en memoria (ramdisk)!
"Block devices --->"
" RAM disk support"
"(4096) Default RAM disk size"
"[*] Initial RAM disk (initrd) support"
Necesitas soporte para el sistema de ficheros ISO 9660 CDROM!
"File systems --->"
" ISO 9660 CDROM file system support"
Deberas pensar tambin en construir algunos controladores en tu
ncleo o como mdulos, lo cual sera mucho mejor.
Si quieres ser capaz de arrancar el CD en muchos PCs con distintas
CPUs (por ejemplo 486, Pentium, PII, PIII, Athlon) tienes que com-
pilar tu ncleo para 486 (entonces se ejecuta en >= 486).
"Processor type and features --->"
"(486) Processor Family"
Guarda la configuracin y compila tu ncleo:
make dep && make bzImage && make modules && make modules_install
Entonces copia el nuevo ncleo construido a /boot:
cp arch/i386/boot/bzImage /boot/lfskernel && cp System.map /boot/
Ejecuta Lilo (o actualiza el cargador de arranque que utilices):
/sbin/lilo
Intenta arrancar el nuevo ncleo para probar el soporte del
disco virtual en memoria (ramdisk):
Si usas devfs debes cambiar: dev_ram=/dev/rd/0
dev_ram=/dev/ram0
mke2fs -m 0 $dev_ram
Si esto falla con
> The device apparently does not exist;
> did you specify it correctly?
t no tienes soporte de disco virtual en memoria en tu ncleo.
Deberas leer este captulo otra vez ;-)
Si no es as, has hecho muy bien tu trabajo!
Comprueba el tamao de tu disco virtual en memoria montndolo en
/mnt y haciendo un "df -h"
mount $dev_ram /mnt
df -h
Ahora puedes arrancar tu otro sistema linux/unix ...
3. Mueve /dev /var /tmp /root /home a /falso/necesita_escritura
------------------------------------------------------------
Movemos todo el conjunto con permisos de escritura a /falso/necesita_escritura.
Primero hemos de crear este directorio
y el punto de montaje para el disco virtual en memoria (ramdisk):
mkdir -p $LFS/falso/{necesita_escritura,ramdisk}
Entonces podemos moverlo all:
cd $LFS/
mv dev/ var/ tmp/ root/ home/ falso/necesita_escritura/
4. Creando enlaces simblicos /... -> /falso/necesita_escritura/...
----------------------------------------------------------------
Hemos movido /dev /var /tmp /root /home a /falso/necesita_escritura.
Ahora debemos ajustar los enlaces simblicos para que todo
parezca estar como antes.
cd $LFS/
ln -s falso/necesita_escritura/dev dev
ln -s falso/necesita_escritura/var var
ln -s falso/necesita_escritura/tmp tmp
ln -s falso/necesita_escritura/root root
ln -s falso/necesita_escritura/home home
"ls -l" dice:
dev -> falso/necesita_escritura/dev
home -> falso/necesita_escritura/home
root -> falso/necesita_escritura/root
tmp -> falso/necesita_escritura/tmp
var -> falso/necesita_escritura/var
Si tambin quieres ser capaz de cambiar los archivos de /etc en tu CD de
arranque, debes repetir el mismo procedimiento para /etc.
cd $LFS/
mv etc/ falso/necesita_escritura/
ln -s falso/necesita_escritura/etc etc
5. Crear el guin de arranque que monte el disco virtual en memoria (ramdisk)
--------------------------------------------------------------------------
Bien,tenemos /dev /var /tmp /root /home enlazado a
/falso/necesita_escritura el cual al principio es de slo-lectura.
Para ser capaces de registrarnos (y ejecutar servicios en los niveles de
ejecucin (runlevels) x los cuales necesitan permisos de escritura para
/dev /var /tmp /root o /home) debemos llamar a un guin desde nuestro di-
rectorio /etc/rc.d/init.d/ que cree un disco virtual en memoria para
/falso/necesita_escritura con permiso de escritura.
El siguiente guin crea un disco virtual en memoria en /falso/ramdisk y copiar
todo de /falso/necesita_escritura a /falso/ramdisk.
Entonces monta de nuevo el disco virtual en memoria a /falso/necesita_escritura.
cat > $LFS/etc/rc.d/init.d/create_ramdisk /dev/null 2>&1
evaluate_retval
sleep 1
echo -n "Montando el disco virtual en memoria en $dir_ramdisk ... "
mount -n $dev_ram $dir_ramdisk
evaluate_retval
sleep 1
echo -n "Copiando archivos al disco virtual en memoria ... "
cp -dpR $dir_needwrite/* $dir_ramdisk > /dev/null 2>&1
evaluate_retval
sleep 1
echo -n "Montando de nuevo el disco virtual en memoria en $dir_needwrite ... "
umount -n $dir_ramdisk > /dev/null 2>&1
sleep 1
mount -n $dev_ram $dir_needwrite
sleep 1
;;
*)
echo "Uso: $0 {start}"
exit 1
;;
esac
EOF
Hzlo ejecutable:
chmod 0755 $LFS/etc/rc.d/init.d/create_ramdisk
create_ramdisk debera ser el primer guin ejecutado por init,
as que ajustamos este enlace:
/etc/rc.d/rcsysinit.d/S00create_ramdisk -> ../init.d/create_ramdisk
cd $LFS/etc/rc.d/rcsysinit.d
ln -s ../init.d/create_ramdisk S00create_ramdisk
6. Instala el Cargador de Arranque isolinux
----------------------------------------
Tambin necesitamos un cargador de arranque en el CD para que arranque
el ncleo y el disco virtual en memoria (ramdisk). lilo y grub son buenos pero perfecto para
un CD es isolinux (viene con syslinux). Asumo que el paquete comprimido syslinux-1.67.tar.bz2
ya est emplazado en $LFS/usr/src.
cd $LFS/usr/src
bzcat syslinux-1.72.tar.bz2 | tar x
mkdir $LFS/isolinux
cp syslinux-1.72/isolinux.bin $LFS/isolinux/
Como todos los archivos asociados con el proceso de arranque tienen que
estar en un mismo directorio, tenemos que mover el ncleo y el resto de
/boot a /isolinux.
mv $LFS/boot/* $LFS/isolinux
Ahora creamos un enlace simblico de boot a isolinux.
cd $LFS/
rmdir boot
ln -s isolinux boot
El ncleo y Ca. pueden ser encontardos en /boot otra vez.
Pero isolinux todava necesita un fichero de configuracin,
por tanto lo crearemos ahora:
cat > $LFS/isolinux/isolinux.cfg $LFS/mnt/linuxrc > $LFS/mnt/linuxrc
cat >> $LFS/mnt/linuxrc /dev/null 2>&1
if [ $? -eq 0 ]; then
if [ -e "/dev/$ide_device" ]; then
CDROM_LIST="$CDROM_LIST /dev/$ide_device"
fi
fi
fi
done
done
for scsi_cdrom in /dev/scd[0-99]
do
if [ -e "$scsi_cdrom" ]; then
CDROM_LIST="$CDROM_LIST $scsi_cdrom"
fi
done
fi
#2. ahora intentamos encontrar el CD de arranque de LFS (usamos el ID como
#identificacin)
LFS_CDROM_DEVICE=""
echo "Usando $CHECK_TYPE"
for cdrom_device in $CDROM_LIST
do
echo -n "Probando $cdrom_device ... "
if [ "$CHECK_TYPE" = "try_mount" ]; then
mount -n -t iso9660 $cdrom_device $TMP_MOUNT > /dev/null 2>&1
media_found=$?
fi
if [ "$CHECK_TYPE" = "isoinfo" ]; then
isoinfo -d -i $cdrom_device > /dev/null 2>&1
media_found=$?
if [ $? -eq 2 ]; then
isoinfo -V $cdrom_device > /dev/null 2>&1
media_found=$?
fi
fi
if [ $media_found -eq 0 ]; then
echo -n "Encontado el medio"
if [ "$CHECK_TYPE" = "try_mount" ]; then
[ -e "$TMP_MOUNT/$ID" ]
media_lfs=$?
fi
if [ "$CHECK_TYPE" = "isoinfo" ]; then
isoinfo -d -i $cdrom_device | grep -i "Volume id:" | grep "$ID" \
> /dev/null 2>&1
media_lfs=$?
if [ $? -eq 2 ]; then
isoinfo -V $cdrom_device | grep "$ID" > /dev/null 2>&1
media_lfs=$?
fi
fi
if [ "$CHECK_TYPE" = "try_mount" ]; then
umount -n $cdrom_device > /dev/null 2>&1
fi
if [ $media_lfs -eq 0 ]; then
echo ", CD de arranque LFS encontrado. Listo!"
LFS_CDROM_DEVICE="$cdrom_device"
break;
else
echo ", ningn CD de arranque LFS."
fi
else
echo "ningn medio "
fi
done
#3. Monta el CD como / (root fs)
if [ "$LFS_CDROM_DEVICE" = "" ]; then
echo "Ningn CD de LFS encontrado!!!"
exit 1
else
echo "Arrancando desde $LFS_CDROM_DEVICE ..."
mount -n -o ro -t iso9660 $LFS_CDROM_DEVICE $TMP_MOUNT
cd $TMP_MOUNT
pivot_root . mnt
umount -n /mnt/proc >/dev/null 2>&1
exec chroot . sh -c 'umount -n /mnt >/dev/null 2>&1;\
exec -a init.new /sbin/init 3'\
dev/console 2>&1
fi
EOF
--------------------------------------
Para hacer que el guin se ejecute
chmod 0755 $LFS/mnt/linuxrc
Bien, de esto se trata. Desmonta la imagen y comprmela.
cd $LFS/
umount $LFS/mnt
gzip $LFS/boot/initrd
8. Tostar el CD de Arranque
------------------------
Si tienes un CD-RW tomaras este para probar. Cuando tu sistema
arranque bastante bien desde el CD puedes tostarlo en un CR-R.
(Te doy este aviso porque consegu este truco despus de tostar
aproximadamente 10 CD-Rs que no funcionaron ;-)
Antes de comenzar a tostar, comprueba el tamao de tu rbol LFS:
du -h $LFS/
Borra todo aquello que no necesites en un CD de Arranque. (por ejemplo /usr/src/*)
Dado que linuxrc debe ser capaz de identificar el CD tienes que crear un
archivo llamado "LFS_YYYYMMDD". (Pero slo si t no usas isoinfo)
touch $LFS/LFS_$(date +%Y%m%d)
Ahora tuesta el sistema LFS en el CD
Nota!
dev=0,0,0 es el nmero del dispositivo de tu grabadora de CD
Comprueba tus dispositivos SCSI con "cdrecord -scanbus"
speed=4 debera cambiarse a la (max) velocidad de tu grabadora de CD.
Si ests usando un CD-RW aade blank=fast al comando cdrecord!
cd $LFS/
mkisofs -R -l -L -D -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -V "LFS_$(date +%Y%m%d)" \
$LFS | \
cdrecord -v -eject dev=0,0,0 speed=4 -
9. Reinicia y disfruta
-------------------
Reinicia y haz que tu Bios arranque desde CD.
Disfruta de los mensajes del ncleo y el smbolo de sistema del login ;-)
------------------------------------------------------------------
Si tienes algunas ideas, sugerencias o encotraste una errata,
envame un correo a:
Thomas Foecking
Christian Hesse
------------------------------------------------------------------