Lihuen
RSSRSS AtomAtom

Construyento Lihuen 3 Live CD

Diseñando Lihuen v3 Live

Que es un live CD?

Un live cd es un sistema diseñado para modificar u alterar el entorno de trabajo en el cual se esta trabajando u ejecutando (Aunque puede ser alterado por voluntad propia). Todo el sistema raíz ?/?, es comprimido por medio de un sistema de archivos llamado SQUASHFS también existe la posibilidad de trabajar con un nuevo sistema de archivos llamado SQUASFS-LZMA . El sistema completo es cargado en RAM, mediante la ayuda de AUFS, un derivado de UNIONFS, al ser cargado en ram las escrituras, modificaciones de todo el sistema se pierden al reiniciar, esto hace a este tipo de sistema útil para realizar actividades de rescate, simulación, testing, etc.


Como construir un sistema ?X? ?

La construcción no es relativa depende de lo que realmente queremos , sea un sistema completo, un sistema mínimo, un sistema particular con aplicaciones especificas, un sistema con kernel especifico para pruebas de detectación de hardware, etc. Todos los pasos requieren de un conjunto de aplicaciones y configuraciones necesarias para la construcción del sistema funcional y completo.

Hoy en día Linux cuenta con un conjunto de aplicaciones dedicadas a la construcción y manipulación de sistemas live, algunos cuentan con un gran conjunto de paquetes, otros con simples conjuntos paquetes, otros con simples configuraciones. A continuación se listan aquellos que creo relevantes para empezar a conocer y diseñar pequeños sistemas:


Actualmente dejo de lado la mayoría de los mencionados sacando lo que creo mas adecuado de cada uno, mientras que el desarrollo completo en lihuen esta basado en sidux.

Sidux es una distribución basada en debian sid, esta distribución es una de las que mas he elogiado por rapidez, potabilidad, documentación, soporte, reconocimiento de hardware, similitudes, etc. Todas estas cualidades hacen de su distribución de paquetes una verdadera fuente de trabajo diaria & desafiante a la hora de soportarlo a lenny. Si bien el manejo elegido para estos paquetes no es completo solo se eligieron algunos que fueron considerados necesarios para cumplir con nuestro objetivo.


Elementos necesarios para la construcción:

1.Kernel con soporte Aufs & squashfs.
2.Herramientas que acompañan Aufs & squashfs.
3.Grub x version.
4.Conjunto de paquetes minimos del live.
5.Debootstrap o una imagen raiz la cual se usara para crear nuestro live.
6.Herramientas para entornos JAIL.
7.Conocimiento para manejo de manipulación del sistema dentro de un jail, sean estos:
 * Manejo del initrd, creación, modificación.
 * Manejo de montaje & desmontaje de unidades virtuales.
 * Manejo de administración de procesos virtuales.
 * Manejo de serviciós virtuales.
 * Manejo en manipulación de paquetes: Creación, modificación.
 * Manejo de herramientras como: dpkg, apt,aptitude,synaptic etc
 * Manejo de archivos temporales.
 * Manejo del administrador de servicios de arranque.
 * Manipulación de archivos rc.S* y archivos contenidos en el init.d.

Lihuen actualmente cuanta con un conjunto de paquetes y archivos necesarios para la creación de un liveCD.

* blktool
* ceni
* distro
* lihuenconfig
* lihuen-distro-defaults
* lihuen-fll-installer
* lihuen-fll-iso2usb
* lihuen-fll-live-initramfs
* lihuen-fll-live-initscripts
* lihuen-fll-live-utils
* lihuen-fll-live-xorgconfig
* lihuen-live-instalador
* lihuen-scripts
* python-central
* python-volumeid
* setpassword
* slim
* udev-config-lihuen


Nota: Esta lista esta siendo revisada constantemente por razones de control de paquetes y modificaciones.


A continuación partiré de la creación de un sistema base mediante la herramienta debootstrap, la cual creare y manipulare como ejemplo de observación.

Herramientas necesaria creación de chroot:

* Debootstrap.
* Kernel-2.6.
* Módulos squashfs.
* Herramienta squashfs-tools.
* Módulos aufs.
* Herramienta aufs-tools.
* Grub2.
* Genisoimage.


Ahora con el siguiente comando siendo root crearemos el sistema.

#debootstrap --arch i386 lenny chroot-base http://ftp.debian.org

Nota: Es importante tener en fstab /etc/fstab la unidad correspondiente como defaults, ya que existen problemas cuando esta montada como noexec,nodev etc.


Esto tardara de acuerdo a su velocidad de conexión o si usted dispone de un repo local solo tardara unos poco minutos. Una vez terminada la construcción del sistema base pasamos instalar los paquetes para un arranque live mínimo de consola.

una vez concluida tendremos en nuestro directorio actual la carpeta chroot-base, ahora tenemos que dar vida a este sistema, con lo cual necesitaremos la ayuda de nuestro sistema en ejecución; su trabajo sera proveernos de configuración en tiempo de ejecución,dispositivos y carpetas esenciales para la manipulación del chroot. Lista de archivos y capetas necesarias para ser incluidas dentro del chroot:

* /etc/resolv.conf.
* /proc.
* /dev.
* /sys.
* opcional /var para ejecutar entorno gráfico dentro del chroot.


Nota: Seria recomendable que se encuentre ejecutando el mismo kernel que tiene pensado para construir dentro de su chroot; porque en algunas configuraciones al leer /proc este resolvera que su versión de kernel es gual o diferente a la que se encuentra en ejecución, de manera tal que no configurara algunos pasos esenciales.

para usar los directorios y archivos antes listados deberemos usar los siguientes comandos como root:

#mount --bind /proc chroot-base/proc
#mount --bind /sys chroot-base/sys
#mount --bind /dev chroot-base/dev 

opcional no usar /dev usar /dev/pts

#mount --bind /dev/pts chroot-base/dev/pts

Ahora entramos a la jaula como root ejecutamos

#chroot chroot-base /bin/bash

una vez dentro tipeamos export PS1="(chroot) $PS1" para no generar confución de donde estamos

#export PS1="(chroot) $PS1"

ahora tendremos que elegir que entorno queremos instalar (en ese ejemplo instalaremos el entorno gnome); instalamos los siguientes paquetes:

#apt-get update && apt-get install gnome gdm xserver-xorg console-setup locales linux-image-2.6.26-2-686


cuando veamos un mensaje como el siguiente

You are attempting to install an initrd kernel image (version 2.6.26-2-686). 
This will not work unless the boot loader is configured to use an initrd. 
An initrd image is a kernel image that expects to use an INITial Ram Disk to 
mount a minimal root file system into RAM and use that for booting. 
The boot loader must be configured to use such images and the system 
will not boot until this is done.
This message will appear for any new kernel installation unless 
the following is added to /etc/kernel-img.conf:
 "do_initrd = Yes" 
 
 Abort initrd kernel image installation?

Nota: Aqui se nos desplego una serie de configuración a la cual diremos NO.

ahora pasamos a la instalación de los paquetes para lihuen:

* lihuen-distro-defaults.
* lihuen-fll-installer.
* lihuen-fll-live-initramfs.
* lihuen-fll-live-initscripts.
* lihuen-fll-live-utils.
* lihuen-fll-live-xorgconfig.
* xresprobe.
* blktool.
* lihuen-live-instalador.
* lihuen-scripts.
* lihuenconfig. 
* udev-config-lihuen.
* python-volumeid.
#apt-get install a b c d e f g...


Nota: a b c d .. son los paquetes arriba detallado.


al instalar estos paquetes solo nos resta instalar los modulos para squash y aufs.

* squashfs-modules-2.6-686.
* aufs-modules-2.6-686.
#apt-get install squashfs-modules-2.6-686 aufs-modules-2.6-686

Ahora actualizamos el initrd.

#update-initramfs -u

ahora solo generamos el squashfs con el siguiente script.

#!/bin/bash

#Herramienta a utilizar sea mksquashfs-lzmaa o mksquashfs o mksquash-edu

#Archivo que contiene la lista de archivos a excluir uno por linea soporte de wilcards
archivo=$1
extention=$2
#Directorio raiz a squashar
chroot=$3
#Nombre del arhivo q sera squashado
salida=$4
 



if [ $#  -eq 4 ]; then
   
   #Comienzo a excluir clasica

   nombreSalida=archivos_excluir.final
   lista=(`cat $archivo`)
   for file in ${lista[@]};do
     echo -n "$file " >> "$nombreSalida"
   done
   
   #Ahora excluyo por extension 

   ext=(`cat $extention`)
   for e in ${ext[@]};do
    contenido=(`find $chroot/ -iname "$e" 2>/dev/null`)
    for c in ${contenido[@]};do
     #Saco el directorio chroot
     ex_dir=`echo "$c" | cut -d/ -f2-65535`
     echo -n "$ex_dir " >> "$nombreSalida"
    done 
   done
  
  if [ -e $salida ];then
    rm $salida
    echo "Borrado squash anterior"
  fi

 echo "Herramienta a usar"

 echo "1) mksquashfs lihuen lenny" 

 echo "2) mksquashfs otra version" 

 read eleccion

case $eleccion in

  1)
 
  ./mksquashfs-lihuen $chroot $salida -info -e `cat $nombreSalida` -ef $nombreSalida -check_data  -read-queue  128 -always-use-fragments -le -b 65536
   ;;

  2)
   echo "reservado"
   ;;

 esac

else
  echo "Argumentos insuficientes :)"
fi


Nota: mksquashfs-lihuen es una herramienta provista por squashfs-tools, para tenerla solo resta instalar apt-get install squashfs-tools.


el contenido del archivo exclusion es:

* proc/
* dev/.udev
* sys/
* tmp/
* root/.bash_history

el contenido del archivo exclusion-extention es:

* *.deb
* *.log
* *.~
* *.run
* *.pid

generamos estructura de la iso:

#mkdir -p iso/lihuen
#mkdir -p iso/boot
#mkdir iso/boot/grub

Copiamos en initrd y el kernel.

#cp chroot-base/boot/*.* iso/boot

Generamos el squash del chroot-base:

#./generarSquash exclusion exclusion-extention chroot-base iso/lihuen/lihuen.686

Generamos la iso con el siguiente script:

#!/bin/bash

herramienta=$1
iso=$2
if [ -e lihuen.iso ];then
  rm lihuen.iso
  echo "Borrado iso anterior"
  sleep 2
fi


cd "$iso"
if [ -e lihuen.iso ];then
  rm lihuen.iso
  echo "Borrado iso anterior"
  sleep 2
fi

case "$herramienta" in
genisoimage )
genisoimage -T -R -joliet -joliet-long -b "boot/grub/stage2_eltorito" -full-iso9660-filenames -hfs -allow- limited-size -V "LihuenLive" -no-emul-boot -boot-load-size 4 -boot-info-table -o lihuen.iso ../"$iso"

;;
mkisofs )
mkisofs -R -b "boot/grub/stage2_eltorito" -no-emul-boot -boot-load-size 4 -boot-info-table -o lihuen.iso  ../"$iso"
;;
grub2)
cd ..
#gfxterm vbe
grub-mkrescue --modules="linux ext2 fshelp font ls boot pc png jpeg" --overlay="$iso" --image-type=cdrom  lihuen.iso
;;
* )
echo "Soporta genisoimage & mkisofs"
;;
esac

corremos el siguiente script como root:

#./generarIso grub2 iso

Ahora tendriamos que tener lihuen.iso podremos correrlo en una virtual para ver su funcionamiento.

Otra manera de generar un live nativo de Lihuen x versión

* Instalamos un lihuen X version.
* Entramos en modo live con un lihuen-live o cualquier forma en la que puedan acceder al sistema de archivo raiz instalado anteriormente.
* Montamos el sistema raíz / (/dev/hdx /dev/sdx el sistema raiz que se comprimio).
* Generamos Squashfs.
* Descomprimimos squashfs en un sistema local o alguna unidad que pueda alojar toda la capacidad del mismo.
* Instalamos los paquetes del live.
* Comprimimos el sistema raíz nuevamente.
* Generamos la iso con nuevo initrd.



Ante cualquier duda o inconveniente no dudes en escribirnos un email a 
 soportelihuen arroba linti.unlp.edu.ar (Sin los espacios)
 O visitar nuestros Foros.
 http://lihuen.linti.unlp.edu.ar/foros