Debian Live

De GALPon WiKi

Debian Live: Metiendo Debian en un USB

Este es un pequeño tutorial para hacer un liveUSB (existe lo de liveUSB?) en una tarde. Al estar hecho con debian live, su contenido no es modificable, podemos hacer una partición para nuestras cosas, pero el sistema en sí no es modificable. Podeis instalar cosas con el apt y funcionarán pero en cuanto reinicies, adiós. Como siempre no me hago responsable del mal uso que le podáis dar o si os cargáis el pendrive de la parienta (haberlo hecho con el vuestro ;)

Si queréis más información y mejor, la wiki del proyecto: http://wiki.debian.org/DebianLive/


Paso 1: Instalando lo necesario

Yo solo necesité instalar un paquete, live-helper.

 apt-get install live-helper

Este se encuentra en Lenny y en Sid, pero yo lo he instalado en Etch bajándolo de http://packages.debian.org/lenny/live-helper sin ningún problema.

También necesitamos un pendrive, usb, lápiz, pincho, cacharro o como le quieras llamar, pero que esté limpio. O por lo menos que no te importe perder todo su contenido, por que lo vas a perder todo. A mí la live me ocupó unos 200-250Mb, pero eso depende mucho de lo que instaleis en ella.

En cuanto al equipo necesario, para correr la live llega con muy poco, pero para hacerla si recomiendo la mejor máquina que podáis conseguir. Yo empecé a hacerla en el portátil y funciona, pero es muy muy lento.


Paso 2: Configurando

  • Para crear un liveUSB básico podéis ejecutar
 lh_config -b usb-hdd
  • Si en vez de USB os convence más la iso de toda la vida, para grabarla en un CD:
 lh_config -b iso


Además hay otras opciones interesantes:

  • Definir el host y el usuario por defecto:
 --username pepe
 --hostname debianusb



  • Para añadir paquetes existen listas predefinidas. El contenido de las listas de los paquetes se puede encontrar en el directorio /usr/share/live-helper/lists.
 -p standard-x11


  • Pero también podemos añadir paquetes por separado
 lh_config  --packages "paquete1 paquete2 paqueteN"

Son importantes las comillas, sino pilla solo el primer paquete. En cuanto a los paquetes yo me he encontrado un problema, paquetes como konqueror, evince, gedit o gnome-terminal tienen unas dependencias muy bestias y aumentan mucho de tamaño la imagen final. Buscando un poco y con otro poco de ayuda he encontrado algún reemplazo con menos dependencias:

- Editor de texto:
vim-gtk (el ejecutable se llama gvim)
leafpad
mousepad (xfce)
- Terminal:
Si vas a usar pestañas: multi-aterm o multi-gnome-terminal
Si no vas a usar pestañas: aterm o xterm.
- Lector de pdf:
Xpdf
Si ya tienes instalado un escritorio como gnome o kde, quizás sus lectores propios (evince y kpdf en este caso), no generen muchas más dependencias, pero no lo he comprobado.


  • Idioma: Si vais a usar la live en teclados no americanos, añade lo siguiente para tener el teclado y los locales es castellano:
 --bootappend-live "locale=es"

Si sólo quieres el teclado en castellano:

 --bootappend-live "keyb=es"

O solo los locales:

 --bootappend-live "locale=es_ES.UTF-8"


  • Por último, con -m podemos definir el mirror de donde va a coger los paquetes
  -m "http://localhost/debian"


  • Existen muchas más opciones (arquitectura, versión de debian, ...) que las podéis encontrar en el man de lh_config o en esta página de la wiki


Solo deberemos ejecutar lh_config una vez, con todos los parámetros que queramos configurar. En mi caso por ejemplo ha quedado un churro similar a este:

 lh_config -b usb-hdd -p standard-x11 --packages "leafpad make less  netcat manpages-dev gcc \
 libc6-dev  xpdf  iceweasel dillo ethereal   wireshark ettercap ssh pciutils bzip2 icewm wget \
 gparted gftp  ddrescue parted jfsutils dosfstools ext2resize xfsprogs reiserfsprogs \ 
 reiser4progs  ntfsprogs cdrecord util-linux mkisofs   syslinux ash mtools libstdc++5 nmap \
  multi-gnome-terminal smbfs"  --username boube -m "http://localhost/debian"

Paso 3: Ya faltó más ...

  • Este es el momento para añadir paquetes que no estén en Debian. Para ello solo tenemos que colocarlos en config/chroot_local-packages/
  • Si no queremos cacharrear, ya podemos ejecutar
 lh_build

y saltar directamente al paso 6.

  • Si quieres hacer algún cambio más:
 lh_bootstrap && lh_chroot

Paso 4: Cacharreando

  • Ahora podremos entrar al sistema antes de crear la iso. Podremos instalar, modificar, configurar ... pero hacerlo ahora, despues no tendréis más oportunidades.
 chroot chroot
  • Para aligerar la iso eliminamos los paquetes huérfanos con deborphan. Primero lo instalamos:
 apt-get install deborphan

Y luego eliminamos los páquetes huérfanos. Fijarse bien en lo que quiere eliminar, a mí me intenta desinstalar el paquete w32codecs que había instalado antes.

 aptitude purge `deborphan -n`

Por último lo desintalamos, no tiene mucho sentido saber que paquetes huérfanos hay en un sistema que no puedes tocar.

 aptitude purge deborphan
  • También recomiendo hacer limpieza del caché de apt. Apt guarda los paquetes que instala en el directorio /var/cache/apt/archives/ y si instalamos bastantes paquetes va a tener un peso considerable. Para liberarnos de ese peso extra:
 apt-get clean 
  • Si queréis meter un alias o algún comando que se ejecute en arranque este es el momento. Cuando arranca el sistema con el usuario por defecto, se copia el archivo /etc/skel/.bashrc a su home y se ejecuta.

Por ejemplo, yo voy a hacer un live de recuperación me gusta tener una consola de root cuando entro, así que añado al /etc/skel/.bashrc

 sudo su

De esta manera cuando arranca el sistema con el usuario por defecto, se hace root automáticamente.

Paso opcional: Aprovechando el resto del espacio del USB para /home

Ahora estarás pensando que es muy fácil no? Pues no, tenemos un problema, no sabemos que dispositivo poner en el fstab, sda?, sdb?, mejor vamos a hacer las cosas bien, vamos a crear una regla de udev para nuestro pendrive, para ello:


1.- Con el pendrive conectado a la máquina, fuera del chroot, ejecutamos:

 udevinfo -a -p /sys/block/sda | grep serial

o el dispositivo que corresponda.

y saldrá algo como esto:

 ATTRS{serial}=="07741E3E02A3"
 ATTRS{serial}=="0000:00:1d.7"

El que nos vale es el primero.


2.- Ahora entramos en el chroot

 chroot chroot

editamos el /etc/udev/run.rules y añadimos:

  KERNEL=="sd*",SUBSYSTEMS=="usb", ATTRS{serial}=="07741E3E02A3", SYMLINK+="pendrive%n"

En ATTRS{serial} tenéis que poner el serial que conseguisteis en el paso anterior. En SYMLINK podéis poner lo que queráis, lo de pendrive es un ejemplo.


3.- Y lo colocamos en el fstab:

 echo "/dev/pendrive2 /home auto defaults" >> /etc/fstab 


4.-Cuando termines y tengas tu live pasada al usb, solo tienes que crear una partición con el espacio restante y ya se montará automáticamente en /home al iniciar el sistema.

Paso 5: Ahora sí que sí

A partir de ahora no vamos a poder cambiar nada más, así que revisa todo bien y asegúrate de que se te olvida nada. Cuando tengamos ya todo preparado

 lh_binary

Tardará un poco, cuando tengamos la imagen es muy fácil meterla en el USB. Si prefieres probarla antes, cosa recomendable, lo puedes hacer con qemu

 qemu -hda binary.img 


Paso 6: Metiéndola en el USB

Fíjate bien que archivo en /dev pertenece al usb, en mi caso es sda, pero deberías de comprobarlo con fsdisk -l por ejemplo. Si tienes discos SATA y pones /dev/sda seguramente te cargues el sistema, avisado quedas. Una vez que sepas el dispositivo le largas la iso por encima:

 dd if=binary.iso of=/dev/sdx


Paso 7: He hecho una mierda de live, tengo que volver a empezar del todo?

Pues no, la gente de Debian son tan cojonudos que también se han acordado de patosos y despistaos como tú y como yo. Si ejecutas

 lh_clean --binary

volverás al paso 4 y podrás volver a hacer el chroot.


En algunas ocasiones me ha petado al hacer el lh_binary. No sé si es por que torpeza mía (quizás no ejecuté un lh_clean --binary cuando tocaba) o si los script no están muy depurados. Paciencia, primero busca en el historial el comando que usaste para configurar y copia todo lo que hiciste en el chroot a otro directorio. Por útimo elimina todos los directorios menos cache y vuelve a empezar desde el pricipio. Puedes intentar recuperar lo que estabas haciendo, pero yo por lo menos no he conseguido y sólo he perdido más tiempo que volviendo a empezar.



(C) Adrián Boubeta (boube) <elboube en gmail punto com>

Contenido disponible bajo los términos de la Licencia de documentación libre de GNU.

Para cualquier duda, aclaración, corrección, observación, comentario, insulto o donación de cantidades millonarias, mandarme un correo.

Muchas gracias a Miguel Bouzada por las rápidas correcciones!