Live cd instalable (II) debian wheezy

Enviado por damian_sima el 8 Marzo, 2011 - 15:01.

Pues bien, esta ves les mostraré como hice un live CD debian wheezy con un instalador mediante squashfs (el instalador es parecido al del anterior post).
En fin, está ves el escritorio elegido a sido xfce4.6. Obviamente, es necesario algunas aplicaciones extras, de gnome por supuesto.
Lo que quiero mostrarles es la etapa de creación, como insertar los archivos, y otras yerbas.

Índice

1- Usando live-build
1.1- Instalación de live-build
1.2- Comenzar la configuración:
1.3- El proceso de creación del live:
1.4- Los directorios:
2- Configuraciones personalizadas
2.1- chroot_local-hooks:
2.2- chroot_local-includes:
2.3- chroot_local-packageslists:
2.4- chroot_sources:
3- Resumen:
4- Resultado:
5- Problemas experimentados:





1- Usando live-build:

Aquí tienen un manual bastante bueno (traducido): http://live.debian.net/manual/es/html/
Además hay que tener en cuenta el man: man lb_config *

*) no es el único, si tienes habilitado el bash-completion podes tipear "man lb_" y presionar el TAB para ver todos los manuales relacionados.

El man le será de gran ayuda para configurar. Como ya se los he comentado, la forma o el método usado para la construcción depende mucho del usuario, por lo tanto, lo que presento puede no ser la mejor forma, pero me parece que es una que permite ir actualizando la imagen, en caso de ser necesario, de una forma mucho mas limpia, almenos a lo que les mostré en mi anterior post (por falta de conocimiento y apuro sobre todo).

1.1- Instalación de live-build

En Debian la instalación se hace:

# apt-get install live-build

Para mas información consulte http://live.debian.net/manual/es/html/installation.html

1.2- Comenzar la configuración:

$ mkdir Live
$ cd Live
$ lb config --apt aptitude --apt-options --yes --apt-recommends false  --archive-areas "main contrib non-free" --binary-images iso-hybrid --binary-indices disabled  --bootappend-live "locales=es_AR.UTF-8"  --cache-stages true --debian-installer false --distribution wheezy --interactive shell --language es --linux-flavours 686 --memtest none --mirror-chroot "ftp://ftp.us.debian.org/debian/" --mirror-bootstrap "ftp://ftp.us.debian.org/debian/" --mirror-binary "ftp://ftp.us.debian.org/debian/" --packages-list minimal --root-command sudo --username usuario

Si se observa en el man de lb_config se podrán entender las opciones usadas, de las cuales explicaré algunas:

--apt aptitude
Por defecto usa apt-get pero usando aptitude se gestionan mejor las dependencias y (según el man) si hay algún error continúa

--apt-options --yes
opción de apt para autoaceptado (instalación no interactiva)

--apt-recommends false
Deshabilita los recomendados. Sin esta opción se instalan muchos paquetes que no son de mi interés.

--archive-areas "main contrib non-free"
Habilita contrib y non-free para los repositorios oficiales

--binary-images iso-hybrid
Esta opción permite que la iso arranque con una memoria usb usando el comando:
# dd if=binary-hybrid.iso of=/dev/{usb}
De la misma forma que si usamos la opción "usb-hdd" que crea una imagen "binary.img" esta trae una mejora, porque el usb queda con una tabla de partición válida, así se puede aprovechar todo el sepacio, es la que recomiendo para pendriver.

--binary-indices false
desabilita los inidices de apt según el man. La idea es ahorrar un poco de espacio.

--bootappend-live "locales=es_AR.UTF-8"
Parámetro al arranque del sistema vivo, se puede agregar "quiet" o "persistent" por ejemplo.

--cache-stages true
Usa un cache del chroot básicamente para reducir el tiempo de compilación entre las pruebas. No estoy seguro de su funcionamiento.

--debian-installer false
No pone el instalador de debian (d-i). NO será necesario el directorio pool y los *.deb en él.

--distribution wheezy

--interactive shell
despues de la etapa del chroot nos deja en la consola del sistema para realizar algunos pequeños ajustes

--language es
variable para la localizacion (NUEVO) parece no funcionar.

--linux-flavours 686
para arquitectura i386 nada mas, de esta forma solo instala el kernel 686 y NO además el 486.

--memtest none
--mirror-chroot "ftp://ftp.us.debian.org/debian/"
--mirror-bootstrap "ftp://ftp.us.debian.org/debian/"
--mirror-binary "ftp://ftp.us.debian.org/debian/"

--packages-list minimal
Solo instalo la lista predeterminada minimal.

--root-command sudo

--username usuario

1.3- El proceso de creación del live:

Se puede explicar diciendo que consta de 4 etapas distinguidas, aunque estas se pueden subdividir:

1) $ lb config --> Crea la configuración del sistema, crea config/* los comandos listados con man lb_config son usados para editar los archivos de configuración (archivos de textos) que se encuentran aquí, que también se pueden configurar editándolos, pero esto se hace mas laborioso.

2) # lb bootstrap --> Instala un sistema basa en un directorio chroot, de aquí surge el directorio cache/packages_bootstrap/ con todos los *.deb correspondientes a esta etapa.

3) # lb chroot --> esta etápa instala los paquetes extras seleccionados ya sea mediante listas o tareas completas, el cache de los *.deb descargados se guarda en cache/packages_chroot/

4) # lb binary --> genera la imagen binary-hybrid.iso a partir del contenido del directorio chroot.

Obviamente, que esto es a grandes rasgos, para editar cada etapa usa una serie de scripts, que no lo estoy ni siquiera nombrándolos ahora.
además hay que tener en cuenta que el comando "lb build" agrupa los últimos tres, ejecutando en orden automático y adecuado.

Cuando se está ejecutando algúno de los comandos se bloquea el directorio de trabajo, en caso de corte de energía será necesario reparar este bloqueo: # rm .lock. Además si en el proceso se van almacenando los distintos estados de trabajo en el directorio .stage.

1.4- Los directorios:

Ahora bien, después de "lb config" se crean los directorios con mas directorios y archivos de configuración, la forma es esta:

sima@debian:~/Live$ ls -la
drwxr-xr-x 4 sima sima 4096 mar 6 17:46 auto drwxr-xr-x 5 sima sima 4096 mar 6 17:06 cache drwxr-xr-x 22 sima sima 4096 mar 6 19:59 config

-> El directorio "auto" puede ser usado para personalizar los scipts build, config, clean, etc.

-> El directorio "cache" almacena los *.deb que se descargaron en las distintas etapas.

-> El directorio config es el que almacena todo el contenido correspondiente a las configuraciones de como será el live; como también archivos y scripts a usar dentro del chroot (el cual en la etapa binary pasará a ser el live) los directorios que están aquí dentro serán usados para personalizar el live.

Después de ejecutar "lb build", osea cuando empieza a trabajar se crean nuevos directorios:

sima@debian:~/Live$ ls -la
drwxr-xr-x 4 sima sima 4096 mar 6 17:46 auto -rw-r--r-- 1 sima sima 45990 mar 6 21:48 binary.log drwxr-xr-x 5 sima sima 4096 mar 6 17:06 cache drwxr-xr-x 20 root root 4096 mar 6 21:48 chroot drwxr-xr-x 22 sima sima 4096 mar 6 19:59 config -rw-r--r-- 1 root root 0 mar 6 21:48 .lock drwxr-xr-x 2 root root 4096 mar 6 21:48 .stage

-> El directorio "chroot" se crea cuando se ejecuta "lb bootstrap".

-> El archivo "binary.log" almacena el resumen. Es necesario para entender como modificar algo necesario, ya que no se puede ver en la consola, por falta de espacio o porque está trabajando. Por eso en vez de:
# lb build
se ejecuta:
# lb build 2>&1 | tee binary.log

2- Configuraciones personalizadas:

Como ya les dije, en el directorio config se almacenan las configuraciones:

sima@debian:~/Live$ ls config
binary binary_rootfs chroot_local-patches binary_debian-installer binary_syslinux chroot_local-preseed binary_debian-installer-includes bootstrap chroot_sources binary_grub chroot common binary_local-debs chroot_apt includes binary_local-hooks chroot_local-hooks source binary_local-includes chroot_local-includes templates binary_local-packageslists chroot_local-packages binary_local-udebs chroot_local-packageslists

De todos estos directorios y archivos les diré que los archivos no los toco porque fueron editados por "lb config", además si se los configura así cualquier error de tipeo solo se verá cuando la orden sea ejecutada (perdida de tiempo). Sin embargo los directorios fueron solamente creados, por lo tanto para usarlos hay que poner archivos de textos, scripts, imagenes, documentos, etc. Los que yo uso son los siguientes:

sima@debian:~/Live$ ls config/*/
config/binary_debian-installer/: config/binary_debian-installer-includes/: config/binary_grub/: config/binary_local-debs/: config/binary_local-hooks/: config/binary_local-includes/: config/binary_local-packageslists/: config/binary_local-udebs/: config/binary_rootfs/: config/binary_syslinux/: config/chroot_apt/: config/chroot_local-hooks/: chroot_config.sh config/chroot_local-includes/: debian etc home root usr config/chroot_local-packages/: config/chroot_local-packageslists/: myxfce2.list config/chroot_local-patches/: config/chroot_local-preseed/: config/chroot_sources/: linuxmint.binary linuxmint.chroot multimedia.binary multimedia.chroot linuxmint.binary.gpg linuxmint.chroot.gpg multimedia.binary.gpg multimedia.chroot.gpg config/includes/: config/templates/:

2.1- chroot_local-hooks:

En este directorio se ponen scripts (hooks) ganchos, que se usarán, serán ejecutados, directamente después de la etapa de instalación de las tareas (tareas: por ejemplo: --packages-lists "standard" o --packages "wicd-gkt"). Por eso en este lugar se pueden poner scripts que eliminen archivos innecesarios, configurar la clave de root, configurar localepurge, ya realizar algunos ajustes extras...

Además de este directorio, también se ejecutan los hooks que están en el directorio /usr/share/live/build/hooks/ que son propios de live-build. yo personalmente los eliminé, porque estos me eliminaban muchas cosas que pueden no ser útiles para un live cd pero si para un live-cd instalable, como aptitude, man, wget, etc.
En resumen el script gancho que uso es este:

chroot_config.sh
#!/bin/bash # Hecho por damian-sima # Configura la clave de root (porque puede ser necesario) echo -e "\033[34m\nElija una contraseña para el superusuario \033[0m-root- \033[0m" passwd || true # Configura el usuario chown -R 1000:1000 /home/usuario # configura la terminal de xfce4 como por defecto porque se ha instalado la consola # de gnome y lxde que reemplazan las alternativas... update-alternatives --set x-terminal-emulator /usr/bin/xfce4-terminal.wrapper update-alternatives --set x-session-manager /usr/bin/xfce4-session # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Instalar anjuta-old echo "deb http://ppa.launchpad.net/happyaron/anjuta-old/ubuntu lucid main" >> /etc/apt/sources.list.d/anjuta_old.list apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 72D340A3 apt-get update apt-get install anjuta-old -y --force-yes rm /etc/apt/sources.list.d/anjuta_old.list # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Actualiza las dependencias de nvidia y el scripts de inicio (modo live e instalado) # tener en cuenta remplazar 2.6.32-5-686 por el correspondiente # además aquí se saca gdm del runlevel para que inicie desde la configuración de nvidia # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # NOTA: Añade el driver privativo de nvidia, si existe el directorio # /debian/nvidia los *.deb que estén dentro se usarán... # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # echo -e "\033[31m" [ -e /debian/nvidia ] || mkdir /debian/nvidia #~ if [ ! true ]; then #pon "! " antes para no instalar nvidia if [ true ]; then echo -e "\nSe configurará nvidia privativo..." apt-get clean mv /debian/nvidia/*.deb /var/cache/apt/archives/ apt-get install --yes -d nvidia-vdpau-driver nvidia-kernel-2.6.32-5-686 nvidia-glx nvidia-xconfig nvidia-settings mv /var/cache/apt/archives/*.deb /debian/nvidia/ echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf update-rc.d gdm remove chmod 0755 /etc/init.d/nvidia-debian-live update-rc.d nvidia-debian-live defaults else rm -r /debian/nvidia/ rm -r /etc/init.d/nvidia-debian-live echo "se usará el driver nouveau" fi echo -e "\033[0m" # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Configura para montar automático las particiones update-rc.d mount_all defaults # configura localepurge para eliminar localizaciones no necesarias #~ cat > /tmp/localepurge.preseed << EOF #~ localepurge localepurge/nopurge multiselect es #~ localepurge localepurge/nopurge multiselect es #~ localepurge localepurge/nopurge multiselect es #~ localepurge localepurge/nopurge multiselect es #~ localepurge localepurge/showfreedspace boolean false #~ EOF #~ debconf-set-selections < /tmp/localepurge.preseed apt-get install --yes localepurge dpkg-reconfigure locales dpkg-reconfigure localepurge localepurge # # # # # # # # # # # # # # # # # # # # # # # # # stripped: /usr/share/live/build/hooks/stripped # Elimina los docs y paquetes que pudieron guardarce en temporales # además de paquetes instalados no necesario como info y dselect #for PACKAGE in apt-utils aptitude man-db manpages info wget dselect #~ for PACKAGE in info dselect #~ do #~ if ! apt-get remove --purge --yes "${PACKAGE}" #~ then #~ echo "WARNING: ${PACKAGE} isn't installed" #~ fi #~ done # Removing unused files find . -name *~ | xargs rm -f #~ rm -rf /usr/include/* #rm -rf /usr/share/groff/* #~ rm -rf /usr/share/locale/* #~ #rm -rf /usr/share/man/* #~ rm -rf /usr/share/i18n/* #~ rm -rf /usr/share/info/* #~ rm -rf /usr/share/lintian/* #~ rm -rf /usr/share/linda/* #~ rm -rf /usr/share/zoneinfo/* #~ rm -rf /var/cache/man/* #~ #~ # Truncating logs #~ for FILE in $(find /var/log/ -type f) #~ do #~ : > ${FILE} #~ done apt-get autoremove --yes || true apt-get clean rm -r /var/tmp/* rm -r /tmp/* rm -rf /usr/share/doc/*

Esto los pueden modificar a sus necesidades, por ejemplo para que no use espacio con los paquetes de nvidia privativo, que no elimine los docs, etc. También se puede ver que instalo el anjuta-old configurando el repositorio, esta no es la forma recomendada de hacerlo, pero como no conseguía la clave *.gpg no pude hacerlo de otra forma.
Hay que tener en cuenta que este script no funciona solo, necesita que en el directorio chroot_local-include/etc/ini.d/ el script de nvidia y mountall...

2.2- chroot_local-includes:

En este directorio se copian los archivos que sobrescribirán a los del sistema, se copiarán después de instalar las tareas pero antes de ejecutar los scripts ganchos.
Básicamente se copian los archivos personales que serán vistos en el home del "usuario" live (--username usuario). Además de ciertos archivos de configuraciones como por ejemplo /etc/asound.conf /etc/init.d/mount_all los cuales sirven para usar pulseaudio y montar todas las particiones al inicio respectivamente.

La lista de los paquetes son:

sima@debian:~/Live/config/chroot_local-includes$ ls -r ./*/*/*
./etc/init.d/mount_all ./etc/gdm/gdm.conf ./usr/share/themes: Xaphire TechniX SlicknesS-black ./usr/share/mplayer: skins ./usr/share/images: desktop-base ./usr/share/applications: disk-manager.desktop ./home/usuario/logos: unam.ico logo_unam.svg logo_FIO.svg logo_FI.ico ./home/usuario/Desktop: Restarar grub.pdf Instalar debian.desktop.save ./home/usuario/apuntes: bloque_B bloque_A 2010_PresentacionMateria.pdf 2010_PlanificacionTI.pdf 2009_Introduccion.pdf

Y si... es fácil imaginarse que puede haber en cada directorio no!

2.3- chroot_local-packageslists:

En este directorio esta la lista de paquetes que uso para instalar. Teniendo en cuenta que puse "--apt-recommends false" no instalará paquetes recomendados, esto tiene una ventaja muy importante, que es el espacio (tamaño) de la imagen, también otra que es el funcionamiento con paquetes mínimos, osea mayormente necesarios. Pero una desventaja es que para que las cosas funcionen bien hay que marcar muchos paquetes más, y es una tarea ardua.
Viendo los resultados, aquí está la lista:

sima@debian:~/Live/config/chroot_local-packageslists$ cat myxfce2.list 
xfce4 gdm xfce4-goodies xfce4-terminal xfce4-volumed xfce4-power-manager xorg keyboard-configuration menu gnome-disk-utility gnome-media gnome-system-tools network-manager-gnome notify-osd bash-completion xserver-xorg xserver-xorg-video-all xserver-xorg-input-all firmware-iwlwifi firmware-ralink firmware-linux firmware-linux-free firmware-linux-nonfree firmware-realtek firmware-intelwimax firmware-atheros firmware-bnx2 firmware-bnx2x gtk2-engines-pixbuf gtk2-engines-murrine lxde-icon-theme locales localepurge grub2 os-prober ttf-dejavu ttf-xfree86-nonfree xfce4-linelight-plugin xfce4-messenger-plugin xfce4-mpc-plugin xfce4-radio-plugin xfce4-xfapplet-plugin xfswitch-plugin xfce4-hdaps thunar-thumbnailers xfmpc xfce4-power-manager-plugins gstreamer0.10-x murrine-themes gstreamer0.10-tools gstreamer0.10-pulseaudio openoffice.org-calc openoffice.org-draw openoffice.org-math openoffice.org-writer openoffice.org-impress openoffice.org-gtk openoffice.org-help-es openoffice.org-l10n-es myspell-es qmmp smplayer evince update-notifier update-manager-gnome  emesene gimp xarchiver unzip unrar p7zip-rar rar tar gzip zip gparted testdisk htop disk-manager  flashplugin-nonfree chromium-browser hddtemp hdparm lm-sensors conky-all e2fsprogs dosfstools mtools ntfsprogs xfsprogs jfsutils hfsutils reiserfsprogs pidgin  transmission tucan w32codecs dict-freedict-eng-spa quodlibet quodlibet-plugins gpicview geany virtualbox-ose-guest-x11 chromium-browser-l10n python-notify ntfs-3g xfwm4-themes ttf-aenigma nano zenity synaptic bc gcal midori g++ gcc cpp cpufrequtils software-properties-gtk xscreensaver acpi-support mesa-utils aptitude gedit dmz-cursor-theme man exaile  file-roller gcalctool libgnome2-perl leafpad libasound2-plugins libpulse-browse0 libspeexdsp1 pulseaudio pulseaudio-esound-compat pulseaudio-module-x11 pulseaudio-utils unetbootin qemu-launcher gnome-device-manager gnome-terminal sysv-rc-conf lxde

Además de eso me he dado cuenta que me falto el paquete "gnome-keyring". Es importante ver que con la opción no recomendados los paquetes que se instalan son muchos, y muchas veces nos olvidamos de algo...

2.4- chroot_sources:

El contenido es:

sima@debian:~/Live/config/chroot_sources$ ls
linuxmint.binary linuxmint.chroot multimedia.binary multimedia.chroot linuxmint.binary.gpg linuxmint.chroot.gpg multimedia.binary.gpg multimedia.chroot.gpg

Pues bien, cada uno de estos archivos tiene un repositorio que se usará en cada etapa, como ser binary (se usará en el sistema vivo) y chroot que su usa en la etapa de instalación de paquetes. por ejemplo en la lista anterior (myxfce2.list) se pueden encontrar paquetes de los repositorios multimedia.
El repositorio de mint estaba para usar el instalador, que al final de cuenta no lo uso!. En el sistema vivo, los repositorios se verán en:

/sources.list.d/multimedia.list
/sources.list.d/linuxmint.list

3- Resumen:

Les haré un pequeño resumen de los pasos para crear la imagen:

1- crear el directorio de trabajo $ mkdir Live && cd Live
2- realizar la primer configuracion $ lb config * * * * * * * * * * *
3- copiar en los directorios dentro de config los archivos necesarios:
3.1- repositorios con sus correspondientes claves gpg
3.2- añadir los archivos necesarios como configuraciones
3.3- configurar la lista de paquetes a instalar
3.4- crear un script gancho para que realice las últimas configuraciones
4- compilar el cd: $ sudo lb build 2>&1 | tee binary.log
5- probar el cd: $ qemu --cdrom binary-hybrid.iso

En caso de realizar un cambio, los pasos que aconsejo(*) son:

6- borrar los directorios correspondientes a la etapa build, esto es: $ sudo lb clean
7- cambiar lo que se necesite en las configuraciones
8- volver a crear el cd: $ sudo lb build 2>&1 | tee binary.log

4- Resultado:

Aquí les muestro una captura del live recien arranca.
live debian

aquí el cd en cuatro partes con 7zip:
1 2 3 4

aquí la configuración que he usado(en tar.gz)

5- Problemas experimentados:

Bien, esto es muy importante:

*) muchas veces la compilación del cd falla:

**) porque no puede descargar los archivos desde repositorio, en estos casos es mejor borrar todo (punto 6) y volver a empezar (punto 7).

**) por un problema de udev.

***) la verdad que NO se porque, la solución que encontré es copiar el cache en otro directorio y empezar todo de nuevo.

***) Si el problema de udev igual compila e instala todos los paquetes, puede ser que la imagen funcione perfectamente.

*) Fallas en la ejecución del cd, puede apracer un mensaje de dbus failure o quedarce sin acceder al entorno gráfico pero si a las tty.

**) esto puede deberse por algún archivo de configuración o algo que hicimos en el chroot que no esta correcto, como permisos de usuario.

**) aleatorio, al menos a mi me paso que con solo compilar nuevamente funciona.

*) Si la imagen fue creada con "iso-hybrid" (es una iso híbrida) no se podrá cargar a un pen-driver con unetbootin, habrá que cargar con dd o zcat, pero si se puede grabar en un CD/DVD.

*) Para que se pueda copiar en un pendriver y tener una tabla de partición válida, habrá que crear una "usb-hdd" en vez de "iso-hybrid"

*) Cuando se realizan configuraciones no aptas como tocar script del init.d o cosas así, puede que la imagen del live no se ejecute correctamente, hay que tener mucho cuidado con esto. Estos errores se eliminan un poco si se sigue el proceso que les recomendé 3- Resumen:.

Pues bien, lastimosamente no les puedo contar mas sobre el problema de udev.

Espero que les guste y sirva...
saludos

Imagen de kevin369
Enviado por kevin369 el 28 Julio, 2011 - 19:18.

Tengo tiempo intentando crear una debian live para usb que use E17 com escritorio e instalar los paquetes de backtrack, pero me da error con el comando --packages-list --laguage --syslinux-timeout syslinux-splash etc...Me dice que no reconoce las opciones.

Aparentemente la opción language solo me funciona de esta manera "-l es". En otras palabras quiero crear una distro Debian live usb enfocada a pentesting usando la rama stable y usando E17 pero no encuentro la forma de satisfacer las dependencias de E17 cuando compilo los paquetes oficiales, hasta que de con la solución seguiré intentando.

Bueno tuto Damian.

Imagen de kevin369
Enviado por kevin369 el 28 Julio, 2011 - 19:18.

Una pregunta,la imagen hybrida puede ser instalada en un pendrive con persistent?

Imagen de damian_sima
Enviado por damian_sima el 28 Julio, 2011 - 22:35.
kevin369 escribió:

Una pregunta,la imagen hybrida puede ser instalada en un pendrive con persistent?

pues si... eso no limita! depende de como lo grabes a la memoria usb no podras crear la particion para persistencia y en ese caso si limita!.

probaste instar las dependemcias con easy-e17? (no recuerdo el nombre correcto!), o entrando al chroot e instalando así! todo depende del método que uses!...