Febrero
2006
¿Cómo hacer una metadistro USB?
Este artículo trata sobre la construcción de nuestra propia distro (basada en debian/ubuntu) para que funcione desde una memoria USB (pendrive).
Metadistros es la arquitectura para facilitar la creación de distros NO ES UNA DISTRO en particular. Al igual que existe la metaprogramación (programas que hacen programas) metadistros son herramientas que hacen distros...
Antes de empezar a soltar comandos o paquetes a instalar debo aclarar los siguientes puntos:
El artículo es válido para ubuntu, PERO:
Xarnoppix tiene algo parecido a esto.
ACTUALIZADO 20 feb 17:30
Parace ser que en la vanguardia digital hablan del invento presentado en Málaga con el nombre clave «USEBIX». Gracias a Ramón de Iniciativa focus, y a Hispalinux con Roberto como comandante, y eso que me dijo que sólo lo habían visto algunos frikis...
* linux-image-2.6.15-1-486
* crypsetup
* initramfs-tools
* grub
* squashfs-tools
Y mis paquetes:
* initramfs-tools-metadistros
* genusblive
Que se pueden descargar desde: http://soleup.eup.uva.es/usb/
Módulos del kernel necesarios:
* unionfs-modules-2.6.15-1-486
* squashfs-modules-2.6.15-1-486
Los módulos del kernel unionfs y squashfs: http://soleup.eup.uva.es/usb/
Si no vas a usar el kernel propuesto COMPILA tú mismo los módulos y procura tenerles instalados en el sistema HOST.
IMPORTANTE: Las versiones más recientes de los programas las podrás encontrar en el servidor SVN de soleupix, soleupix --> initramfs-tools-metadistros.
La idea es muy sencilla, la velocidad de lectura de una memoria USB es muy mayor a la de un dvd/cdrom, del órden de 10 veces. Vamos a usar un pendrive como cdrom en el que tendremos la metadistro. El funcionamiento es parecido al uso desde cdrom pero vamos a aprovechar que en el pendrive podemos escribir.
Mi idea de escritura es la siguiente, vamos a crear un archivo que formatearemos con el sistema de archivos ext3 y que se montará mediante cryptsetup de forma segura en la home del usuario. Así si perdemos el pendrive (algo no muy dificil ya que cada vez son más pequeños) no ponemos en peligro nuestros datos ya que sin saber la contraseña no se puede leer ese archivo.
Tenemos otras ventajas frente a cdrom pero también hay que recalcar algunos inconvenientes, el más importante es que no todas las BIOS permiten el arranque desde un dispositivo USB, este gran inconveniente lo he resuelto creando una pequeña imagen iso (6 megas) con el mismo kernel que la META, incluso podiendo grabarla en una tarjeta-cdrom o un mini-cdrom. Más adelante explicaré como crear esta imagen.
Vamos a usar como sistema de archivos FAT32, así podremos seguir guardando datos desde cualquier sistema operativo. Esto acarrea algún inconveniente como que el nombre de carpetas sólo puede ser en minúsculas (no el nombre de archivos).
Preparación y creación de la distro META
Despues de tener nuestro HOST con todos los requerimientos instalados vamos a crear nuestro sistema que copiaremos al pendrive, lo llamaremos META.
El paquete genusblive nos ha creado el siguiente árbol de directorios:
media
| `-- distro
| |-- usb-master
| | |-- boot
| | | `-- grub
| | | |-- menu.lst
| | | `-- splash.xpm.gz
| | `-- meta
| | |-- create_secret.img.sh
| | `-- settings.conf
| `-- usb-sources
En usb-master tendremos lo que luego se copia al pendrive, en usb-sources (directorio vacío) instalaremos mediante debootstrap nuestro sistema.
Paso 1: debootstrap
# cd /media/distro
# deboostrap etch /media/distro/usb-sources http://idefix.eup.uva.es/debian
Después de descargar el sistema base nos dejará la distro aún sin configurar.
Montaremos algunas cosas dentro de la jaula:
# mount -o bind /dev /media/distro/usb-sources/dev
# mount -o bind /proc /media/distro/usb-sources/proc
# mount -o bind /sys /media/distro/usb-sources/sys
Copiamos algunas cosas....
# cp -ra /etc/apt/* /media/distro/usb-sources/etc/apt/
# cp -ra /etc/network/interfaces /media/distro/usb-sources/etc/network/interfaces
# cp -ra /etc/fstab /media/distro/usb-sources/etc/fstab
# cp -ra /etc/hostname /media/distro/usb-sources/etc/hostname
# cp -ra /etc/hosts /media/distro/usb-sources/etc/hosts
Entramos a la jaula:
# chroot /media/distro/usb-sources
Editar el sources.list para quitar lo que sobra, con una línea como esta sirve:
deb http://tumirrorfavorito/debian etch main contrib non-free
# nano /etc/apt/sources.list
Configuraremos lo que ya hay instalado...
# dpkg-reconfigure -a
IMPORTANTE: NO crear usuario normal y usar una contraseña de root genérica (debemos exponerla en las intrucciones de nuestra distro, yo he puesto root, el pendrive no tiene ssh así que creo que si alguien la sabe tampoco puede usarla desde fuera de la máquina)
Editamos algunas opciones:
# nano /etc/default/rcS
Poner UTC=no (horario no utc) y si se quiere VERBOSE=no
Ajustar la zona horaria:
# tzconfig
Elegir Europa (8) y escribir «Madrid» para el caso de distros españolas.
Actualizar e instalar cosas...
# apt-get update && apt-get upgrade
Por ejemplo voy a preparar una mini distro con un navegador un un lector de correo. La distro que han usado de pruebas en la Conferencia Internacional de Software Libre de Málaga estos días.
# apt-get install udev discover hal x-window-system-core gdm gnome-core
Navegador y gestor de correo:
# apt-get install firefox mozilla-thunderbird
Borramos la cache de paquetes deb descargados:
# apt-get clean
En ubuntu a fecha de hoy parece haber paquetes de traducción a español de ámbos en debian no :(
No vamos a instalar un kernel ya que sólo necesitamos los módulos así nos ahorramos el initramfs y/o yaird además de otros paquetes...
Llega la hora de la limpieza... vamos a borrar todo aquello que se puede sobrar:
Con el siguiente comando (copia y pega) vemos los paquetes instalados ordenados por el que más ocupa:
# dpkg-query -W --showformat '${Installed-Size} ${Package} ${Section}n' | sort -n -r | more
En mi distro he desinstalado las fuentes de 100dpi, los drivers dri y gl de las X (vamos a usar sólo vesa), libsigc++ nvi mandb tasksel logrotate y base-config.
He instalado localepurge y he seleccionado que no borre las locales en inglés «en» y todas las de español «es, es_ES*» Se pueden ver también en /etc/locale.nopurge. Esto borrará todos los archivos de traducción en idiomas que no vamos a usar... Ejecutar después localepurge
Salirmos del chroot, el resto de la limpieza la hacemos desde fuera...
# exit
He montado un script que borra /usr/share/doc /usr/share/man y alguna cosa más....
EJECUTAMOS COMO USUARIO NO ROOT primero para ver que borramos.
$ /usr/sbin/clean-usb-sources /media/distro/usb-sources
Nos saldrán un montón de errores de permiso denegado así podemos saber que se va a borrar.
Si estamos de acuerdo lo ejecutamos cono root:
# clean-usb-sources /media/distro/clean-usb-sources
Como veis el parámetro es el directorio a limpiar. NOTA: Borrar /usr/share/doc puede atentar contra la licencia de debian ya que estamos eliminando las notas de copyright de cada paquete, pero es una forma de ganar sitio. Sino quieres no lo hagas.
Desmontaremos lo que montamos antes:
# umount /media/distro/usb-sources/dev
# umount /media/distro/usb-sources/proc
# umount /media/distro/usb-sources/sys
Si alguno da error porque está ocupado usar la opción de umount: -l
Vemos el tamaño sin comprimir:
# du -sh /media/distro/usb-sources
A mí me da unos 300 megas lo que comprimido ocupará poquísimo...
Tenemos que copiar los módulos del kernel:
# cp -ra /lib/modules/2.6.15-1-486 /media/distro/usb-sources/lib/modules/
Si vemos que sobra alguno o que no queremos dar soporte a algo podemos borrar lo que no necesitemos ( yo no he borrado nada ) así de paso no tengo que rehacer el modules.dep (dependencias de módulos)
Preparación de las imágenes
Ahora vamos a generar las imágenes de arranque:
Editar la configuración de initramfs
# nano /etc/mkinitramfs/initramfs.conf
Cambiar la variable BOOT para que valga BOOT=usb y añadir la variable USERNAME=liveuser
Ejecutar:
# genusblive
La primera vez esto genera tanto el initramfs como el META.squash con -x ó -y generamos sólo la primera o sólo la última.
Ahora vamos a proceder a copiarlo a nuestro pendrive:
# livecopy2usb
Nos pedirá la partición sdX donde lo vamos a instalar.
CONSEJO: Si tienes el pendrive sin formatear desde que lo compraste es el momento de guardar todo lo que tienes y formatearlo a ser posible en FAT32 (creando una partición). Para esta labor puedes usar cfdisk (en consola) gparted (grafico) o el programa que comentaba antes de HP desde un windows.
En mi caso la partición es /dev/sdb1 a partir de ahora yo trabajaré con este dispositivo si en tu caso no coincide usa el que necesites.
# livecopy2usb
List of avalaible devices to install USB metadistro:
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
/dev/sda5
/dev/sda6
/dev/sdb1 <=====
Please specify device/partition: /dev/sdb1
Umounting and mounting /dev/sdb1 in /media/distro/pendrive
Copy system files? [Y/n] Y
Copying META image ...
Wait for "sync" ...
Install grub in /dev/sdb [Y/n] Y
Installing grub in root=(hd2.0) grub-device=(hd2)
Your device /dev/sdb is now capable to start EducaTICC
Reboot and boot from usbdisk.
=====================================
Una vez hecho esto en el pendrive tendremos unos cuantos archivos, el que más importa por ahora es settings.conf dentro del directorio meta que es donde indicaremos algunos parámetros para tener una distro un poco más personalizada.
El archivo tiene comentarios (en inglés) sobre para que es cada variable:
#################
# Username #
#################
# username (empty if use liveuser)
conf_username=usuario
# hostname
conf_hostname=EducaTICC
# language (es, en, etc...)
lang=es
#################
# Local hardisk #
#################
# readonly (ro) or read&write (rw)
conf_local_hd=ro
#################
# network stuff #
#################
# network device to configure (eth0 eth1 wlan0) ONLY ONE empty for dhcp on all interfaces
conf_net_device=eth0
# ip address (empty for dhcp)
conf_net_ip=192.168.0.3
# netmask
conf_net_netmask=255.255.155.0
# gateway
conf_net_gateway=192.168.0.1
# DNS servers (space separated and between "" )
conf_net_dns="157.88.18.189 157.88.18.190"
# domain nameserver
conf_net_dnsname="dominio.com"
#################
# xorg settings #
#################
# grafic card xorg driver (vesa use xorg.conf file, skip autoconf)
conf_xorg_driver=vesa
# keyboard (pc105 for example)
conf_xorg_keys=pc105
conf_xorg_lang=es
# touchpad (for notebooks) 0 or 1 (not works yet)
conf_xorg_touchpad=0
Una vez editado a nuestro gusto ( ACEPTO SUGERENCIAS DE MÁS COSAS QUE SE PUEDEN CONFIGURAR DESDE AQUÍ ) vamos con el siguiente paso.
Puede asustar un poco el tema de encriptación y demás pero símplemente es un archivo del tamaño que nosotros indiquemos el cual pide contraseña para montarlo y una vez montado es como una partición ext3 cualquiera ( he formateado esto en ext3 pero se puede usar cualquier otro formato *nix)
Para facilitar la labor he programado un pequeño script que se guarda en el pendrive y se instala en el sistema: create_secret.img[.sh]
Forma de uso:
# ./create_secret.img.sh
Usage:
./create_secret.img.sh --help [this help]
./create_secret.img.sh --create --secret.img=/dir/to/secret.img --size=XXX [in Kb]
create secret.img crypt filesystem with XXX Kb
./create_secret.img.sh --mount --secret.img=/dir/to/secret.img
mount crypt filesystem in /mnt/secret
./create_secret.img.sh --umount --secret.img=/dir/to/secret.img
umount crypt filesystem in /mnt/secret
Please edit ./create_secret.img.sh to change mountpoint or loopback device.
debemos ejecutarlo como root y desde el directorio meta del pendrive montado... Para crear la meta yo he ejecutado:
# ./create_secret.img.sh --create --secret.img=./secret.img --size=200000
Esto crea un archivo de 200 megas (el tamaño va en Kb) en el directorio donde estamos (meta) y nos pedirá la frase de paso dos veces montandolo en /mnt/secret.
Las opciones de montar y desmontar son bastante útiles para no tener que aprenderse todo lo que hay que hacer (recomiendo mirar el contenido del script)
No quedan muchas cosas más... por último si queremos que nuestro escritorio luzca de una manera especial, en vez de arrancarlo copiarlo en /etc/skel de la distro y volver a ahcer todo podemos hacer lo siguiente.
Arrancamos el pendrive y una vez dentro de la sesión configuramos todo a nuestro gusto (fondo, splash, tema, fuentes, iconos....) abrimos un terminal y como usuario ejecutamos lo siguiente:
$ cd
$ sudo -czf /.dirs/dev/meta/home.tar.gz .
Esto lo que hace es guardar nuestra home comprimida en un tar.gz a modo de plantilla y si no existe el archivo de texto en nuestra home llamado .restored descomprimirá este tar.gz durante el arranque (modo kiosko....) Como muchos habréis imaginado /.dirs/dev es el punto de montaje original de nuestro pendrive.
Por último me dejo por explicar el truco de arrancar desde el pendrive en equipos que no poseen de la opción en la BIOS. Es muy sencillo.
Ejecutar:
# genusbliveCD
Esto generará un archivo iso en /media/distro/isos de aproximadamente 6 megas, arrancando desde el cd y con el pendrive conectado a los pocos segundos de espera de dispositivos empezará el resto del arranque desde USB, el cdrom puede quitarse sin problemas ya que el kernel (vmlinuz) queda en memoria. Si a alguien se le ocurre como detectar desde el initramfs si hemos arrancado desde USB o pendrive sin tener que cambiar o parchear grub mejor que mejor, se me ocurre que en el script genusbliveCD que genera la iso y que modifica algunas cosas del menu.lst añadir algo como fromcd o algo así en el cmdline para que se expulse el cdrom tan pronto como no se necesite.
Descargamos y descomprimimos educatic.tar.gz de la siguiente manera:
# mkdir /media/distro
# cd /media/distro
# tar -zxf /donde/hayamos/guardado/educatic.tar.gz
Hay que descragar tambien initramfs y sobreescribir el que hay en boot ( el que hay en el tar.gz tiene algunos fallos)
===================================================================
Si se quiere probar una distro mucho más completa (xfce4 openoffice, java JClic, etc... descargar el archivo META-700.squashfs y sustituirlo por el META.squashfs original)
Enchufamos el pendrive de 256 como mínimo.
No es necesario formatearlo pero si se quiere partir desde cero es lo mejor:
dmesg|tail => vemos el dispositivo creado (por ejemplo sda con sda1 como particion)
mkfs.vfat -F 32 -n USeBix /dev/sda1
ahora ejecutamos:
# livecopy2usb (está en el paquete genusblive)
nos pedira el dispositivo, respondemos /dev/sda1
pregunta si copiar archivos del sistema, dar intro (tarda un ratejo...)
pregunta si instalar grub, dar intro (sólo hacerlo la primera vez)
===========================================================
qemu -hda /dev/sda (seleccionar la opcion de grub que pone qemu)
De modo normal:
Reiniciar con el pendrive enchufado y entrar a la BIOS (F2 o Supr)
Mirar el órden de arranque y seleccionar como primera opción o bien USB-HDD
si existe la opción o en los discos duros seleccionar primero la marca de
nuestro pendrive.
Arrancar con cualquier opción menos con la de qemu.
Metadistros es la arquitectura para facilitar la creación de distros NO ES UNA DISTRO en particular. Al igual que existe la metaprogramación (programas que hacen programas) metadistros son herramientas que hacen distros...
Antes de empezar a soltar comandos o paquetes a instalar debo aclarar los siguientes puntos:
- Tan pronto como la web de consoltux esté montada colgaré el artículo de allí. (necesitamos pagerank !!!)
- Este «invento» ha sido presentado en la II Conferencia Internacional de Software Libre de Málaga (gracias a Ramón) así como el el II Congreso de las tecnologías en la educación TICC's celebrado en Valladolid estos días, donde he participado con Consoltux.
- Se puede decir que el desarrollo de esto no acaba más que empezar y aunque funciona puede contener aún muchos fallos.
- Mi blog no es un foro, es decir, en este artículo no voy a permitir los más de 80 comentarios que hice en el otro artículo sobre metadistros...
- Si quieres seguir el artículo y reconoces que no sabes mucho, DÉJALO. Busca algo hecho o espera a que alguien lo haga, por muchas ganas que tengas de aprender no es algo sencillo. Al final de esta página hay indicaciones sobre qué descargar y copiar a un pendrive.
- Complemento del punto anterior, para llevar a cabo una metadistro USB personalizada necesitas saber de shell scripts, compilar módulos del kernel, e instalar/empaquetar paquetes debian. En resumen: usar debian con los ojos cerrados.
- Saber descargarse código de un SVN.
- Saber configurar un debian EDITANDO ARCHIVOS DEL SISTEMA.
El artículo es válido para ubuntu, PERO:
- Los paquetes de debian y ubuntu no son muy compatibles, si aún así te propones hacerlo en ubuntu tendrás que empaquetar tú mismo algunas cosas para tu distro. Yo no lo voy a hacer....
- En ubuntu breezy las versiones son menores que en debian testing o unstable.
- Ubuntu usa sudo para hacer laboras de administración puedes obtener un shell de root con «sudo -s»
Xarnoppix tiene algo parecido a esto.
ACTUALIZADO 20 feb 17:30
Parace ser que en la vanguardia digital hablan del invento presentado en Málaga con el nombre clave «USEBIX». Gracias a Ramón de Iniciativa focus, y a Hispalinux con Roberto como comandante, y eso que me dijo que sólo lo habían visto algunos frikis...
Ingredientes
Necesitamos un debian (testing/unstable)
a partir de ahora el equipo HOST, con las siguientes cosas instaladas:* linux-image-2.6.15-1-486
* crypsetup
* initramfs-tools
* grub
* squashfs-tools
Y mis paquetes:
* initramfs-tools-metadistros
* genusblive
Que se pueden descargar desde: http://soleup.eup.uva.es/usb/
Módulos del kernel necesarios:
* unionfs-modules-2.6.15-1-486
* squashfs-modules-2.6.15-1-486
Los módulos del kernel unionfs y squashfs: http://soleup.eup.uva.es/usb/
Si no vas a usar el kernel propuesto COMPILA tú mismo los módulos y procura tenerles instalados en el sistema HOST.
IMPORTANTE: Las versiones más recientes de los programas las podrás encontrar en el servidor SVN de soleupix, soleupix --> initramfs-tools-metadistros.
Un pendrive
de tamaño por lo menos 256 megas (es posible hacerlo en 128 pero queda bastante justo), si es USB 2.0 perfecto, si es USB 1.0 tendremos problemas de rendimiento. Puede valer un reproductor MP3, pero aviso que una vez instalado grub el mío no reproduce música hasta formatearlo. Mis pruebas se han hecho con un pendrive Toshiva de 1Gb y mi reproductor mp3 Supratech. Es útil tener a mano software de formateo total. Aunque se puede hacer con gparted/cfdisk o similares el que nunca falla es el del fabricante (desgraciadamente sólo corre en windows). Hay uno que funciona con todos que es el de HP: Format Utility for HP Drive Key. (necesitas un windows para usarlo)¿Qué vamos a hacer?
La idea es muy sencilla, la velocidad de lectura de una memoria USB es muy mayor a la de un dvd/cdrom, del órden de 10 veces. Vamos a usar un pendrive como cdrom en el que tendremos la metadistro. El funcionamiento es parecido al uso desde cdrom pero vamos a aprovechar que en el pendrive podemos escribir.
Mi idea de escritura es la siguiente, vamos a crear un archivo que formatearemos con el sistema de archivos ext3 y que se montará mediante cryptsetup de forma segura en la home del usuario. Así si perdemos el pendrive (algo no muy dificil ya que cada vez son más pequeños) no ponemos en peligro nuestros datos ya que sin saber la contraseña no se puede leer ese archivo.
Tenemos otras ventajas frente a cdrom pero también hay que recalcar algunos inconvenientes, el más importante es que no todas las BIOS permiten el arranque desde un dispositivo USB, este gran inconveniente lo he resuelto creando una pequeña imagen iso (6 megas) con el mismo kernel que la META, incluso podiendo grabarla en una tarjeta-cdrom o un mini-cdrom. Más adelante explicaré como crear esta imagen.
Vamos a usar como sistema de archivos FAT32, así podremos seguir guardando datos desde cualquier sistema operativo. Esto acarrea algún inconveniente como que el nombre de carpetas sólo puede ser en minúsculas (no el nombre de archivos).
Preparación y creación de la distro META
Despues de tener nuestro HOST con todos los requerimientos instalados vamos a crear nuestro sistema que copiaremos al pendrive, lo llamaremos META.El paquete genusblive nos ha creado el siguiente árbol de directorios:
media
| `-- distro
| |-- usb-master
| | |-- boot
| | | `-- grub
| | | |-- menu.lst
| | | `-- splash.xpm.gz
| | `-- meta
| | |-- create_secret.img.sh
| | `-- settings.conf
| `-- usb-sources
En usb-master tendremos lo que luego se copia al pendrive, en usb-sources (directorio vacío) instalaremos mediante debootstrap nuestro sistema.
Paso 1: debootstrap
# cd /media/distro
# deboostrap etch /media/distro/usb-sources http://idefix.eup.uva.es/debian
Después de descargar el sistema base nos dejará la distro aún sin configurar.
Montaremos algunas cosas dentro de la jaula:
# mount -o bind /dev /media/distro/usb-sources/dev
# mount -o bind /proc /media/distro/usb-sources/proc
# mount -o bind /sys /media/distro/usb-sources/sys
Copiamos algunas cosas....
# cp -ra /etc/apt/* /media/distro/usb-sources/etc/apt/
# cp -ra /etc/network/interfaces /media/distro/usb-sources/etc/network/interfaces
# cp -ra /etc/fstab /media/distro/usb-sources/etc/fstab
# cp -ra /etc/hostname /media/distro/usb-sources/etc/hostname
# cp -ra /etc/hosts /media/distro/usb-sources/etc/hosts
Entramos a la jaula:
# chroot /media/distro/usb-sources
Editar el sources.list para quitar lo que sobra, con una línea como esta sirve:
deb http://tumirrorfavorito/debian etch main contrib non-free
# nano /etc/apt/sources.list
Configuraremos lo que ya hay instalado...
# dpkg-reconfigure -a
IMPORTANTE: NO crear usuario normal y usar una contraseña de root genérica (debemos exponerla en las intrucciones de nuestra distro, yo he puesto root, el pendrive no tiene ssh así que creo que si alguien la sabe tampoco puede usarla desde fuera de la máquina)
Editamos algunas opciones:
# nano /etc/default/rcS
Poner UTC=no (horario no utc) y si se quiere VERBOSE=no
Ajustar la zona horaria:
# tzconfig
Elegir Europa (8) y escribir «Madrid» para el caso de distros españolas.
Actualizar e instalar cosas...
# apt-get update && apt-get upgrade
Por ejemplo voy a preparar una mini distro con un navegador un un lector de correo. La distro que han usado de pruebas en la Conferencia Internacional de Software Libre de Málaga estos días.
# apt-get install udev discover hal x-window-system-core gdm gnome-core
Navegador y gestor de correo:
# apt-get install firefox mozilla-thunderbird
Borramos la cache de paquetes deb descargados:
# apt-get clean
En ubuntu a fecha de hoy parece haber paquetes de traducción a español de ámbos en debian no :(
No vamos a instalar un kernel ya que sólo necesitamos los módulos así nos ahorramos el initramfs y/o yaird además de otros paquetes...
Llega la hora de la limpieza... vamos a borrar todo aquello que se puede sobrar:
Con el siguiente comando (copia y pega) vemos los paquetes instalados ordenados por el que más ocupa:
# dpkg-query -W --showformat '${Installed-Size} ${Package} ${Section}n' | sort -n -r | more
En mi distro he desinstalado las fuentes de 100dpi, los drivers dri y gl de las X (vamos a usar sólo vesa), libsigc++ nvi mandb tasksel logrotate y base-config.
He instalado localepurge y he seleccionado que no borre las locales en inglés «en» y todas las de español «es, es_ES*» Se pueden ver también en /etc/locale.nopurge. Esto borrará todos los archivos de traducción en idiomas que no vamos a usar... Ejecutar después localepurge
Salirmos del chroot, el resto de la limpieza la hacemos desde fuera...
# exit
He montado un script que borra /usr/share/doc /usr/share/man y alguna cosa más....
EJECUTAMOS COMO USUARIO NO ROOT primero para ver que borramos.
$ /usr/sbin/clean-usb-sources /media/distro/usb-sources
Nos saldrán un montón de errores de permiso denegado así podemos saber que se va a borrar.
Si estamos de acuerdo lo ejecutamos cono root:
# clean-usb-sources /media/distro/clean-usb-sources
Como veis el parámetro es el directorio a limpiar. NOTA: Borrar /usr/share/doc puede atentar contra la licencia de debian ya que estamos eliminando las notas de copyright de cada paquete, pero es una forma de ganar sitio. Sino quieres no lo hagas.
Desmontaremos lo que montamos antes:
# umount /media/distro/usb-sources/dev
# umount /media/distro/usb-sources/proc
# umount /media/distro/usb-sources/sys
Si alguno da error porque está ocupado usar la opción de umount: -l
Vemos el tamaño sin comprimir:
# du -sh /media/distro/usb-sources
A mí me da unos 300 megas lo que comprimido ocupará poquísimo...
Tenemos que copiar los módulos del kernel:
# cp -ra /lib/modules/2.6.15-1-486 /media/distro/usb-sources/lib/modules/
Si vemos que sobra alguno o que no queremos dar soporte a algo podemos borrar lo que no necesitemos ( yo no he borrado nada ) así de paso no tengo que rehacer el modules.dep (dependencias de módulos)
Preparación de las imágenes
Ahora vamos a generar las imágenes de arranque:
Editar la configuración de initramfs
# nano /etc/mkinitramfs/initramfs.conf
Cambiar la variable BOOT para que valga BOOT=usb y añadir la variable USERNAME=liveuser
Ejecutar:
# genusblive
La primera vez esto genera tanto el initramfs como el META.squash con -x ó -y generamos sólo la primera o sólo la última.
Copia de los archivos al pendrive
Ahora vamos a proceder a copiarlo a nuestro pendrive:
# livecopy2usb
Nos pedirá la partición sdX donde lo vamos a instalar.
CONSEJO: Si tienes el pendrive sin formatear desde que lo compraste es el momento de guardar todo lo que tienes y formatearlo a ser posible en FAT32 (creando una partición). Para esta labor puedes usar cfdisk (en consola) gparted (grafico) o el programa que comentaba antes de HP desde un windows.
En mi caso la partición es /dev/sdb1 a partir de ahora yo trabajaré con este dispositivo si en tu caso no coincide usa el que necesites.
# livecopy2usb
List of avalaible devices to install USB metadistro:
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
/dev/sda5
/dev/sda6
/dev/sdb1 <=====
Please specify device/partition: /dev/sdb1
Umounting and mounting /dev/sdb1 in /media/distro/pendrive
Copy system files? [Y/n] Y
Copying META image ...
Wait for "sync" ...
Install grub in /dev/sdb [Y/n] Y
Installing grub in root=(hd2.0) grub-device=(hd2)
Your device /dev/sdb is now capable to start EducaTICC
Reboot and boot from usbdisk.
=====================================
Una vez hecho esto en el pendrive tendremos unos cuantos archivos, el que más importa por ahora es settings.conf dentro del directorio meta que es donde indicaremos algunos parámetros para tener una distro un poco más personalizada.
El archivo tiene comentarios (en inglés) sobre para que es cada variable:
#################
# Username #
#################
# username (empty if use liveuser)
conf_username=usuario
# hostname
conf_hostname=EducaTICC
# language (es, en, etc...)
lang=es
#################
# Local hardisk #
#################
# readonly (ro) or read&write (rw)
conf_local_hd=ro
#################
# network stuff #
#################
# network device to configure (eth0 eth1 wlan0) ONLY ONE empty for dhcp on all interfaces
conf_net_device=eth0
# ip address (empty for dhcp)
conf_net_ip=192.168.0.3
# netmask
conf_net_netmask=255.255.155.0
# gateway
conf_net_gateway=192.168.0.1
# DNS servers (space separated and between "" )
conf_net_dns="157.88.18.189 157.88.18.190"
# domain nameserver
conf_net_dnsname="dominio.com"
#################
# xorg settings #
#################
# grafic card xorg driver (vesa use xorg.conf file, skip autoconf)
conf_xorg_driver=vesa
# keyboard (pc105 for example)
conf_xorg_keys=pc105
conf_xorg_lang=es
# touchpad (for notebooks) 0 or 1 (not works yet)
conf_xorg_touchpad=0
Una vez editado a nuestro gusto ( ACEPTO SUGERENCIAS DE MÁS COSAS QUE SE PUEDEN CONFIGURAR DESDE AQUÍ ) vamos con el siguiente paso.
Creación de la home encriptada
ESTE PASO ES OPTATIVOPuede asustar un poco el tema de encriptación y demás pero símplemente es un archivo del tamaño que nosotros indiquemos el cual pide contraseña para montarlo y una vez montado es como una partición ext3 cualquiera ( he formateado esto en ext3 pero se puede usar cualquier otro formato *nix)
Para facilitar la labor he programado un pequeño script que se guarda en el pendrive y se instala en el sistema: create_secret.img[.sh]
Forma de uso:
# ./create_secret.img.sh
Usage:
./create_secret.img.sh --help [this help]
./create_secret.img.sh --create --secret.img=/dir/to/secret.img --size=XXX [in Kb]
create secret.img crypt filesystem with XXX Kb
./create_secret.img.sh --mount --secret.img=/dir/to/secret.img
mount crypt filesystem in /mnt/secret
./create_secret.img.sh --umount --secret.img=/dir/to/secret.img
umount crypt filesystem in /mnt/secret
Please edit ./create_secret.img.sh to change mountpoint or loopback device.
debemos ejecutarlo como root y desde el directorio meta del pendrive montado... Para crear la meta yo he ejecutado:
# ./create_secret.img.sh --create --secret.img=./secret.img --size=200000
Esto crea un archivo de 200 megas (el tamaño va en Kb) en el directorio donde estamos (meta) y nos pedirá la frase de paso dos veces montandolo en /mnt/secret.
Las opciones de montar y desmontar son bastante útiles para no tener que aprenderse todo lo que hay que hacer (recomiendo mirar el contenido del script)
No quedan muchas cosas más... por último si queremos que nuestro escritorio luzca de una manera especial, en vez de arrancarlo copiarlo en /etc/skel de la distro y volver a ahcer todo podemos hacer lo siguiente.
Arrancamos el pendrive y una vez dentro de la sesión configuramos todo a nuestro gusto (fondo, splash, tema, fuentes, iconos....) abrimos un terminal y como usuario ejecutamos lo siguiente:
$ cd
$ sudo -czf /.dirs/dev/meta/home.tar.gz .
Esto lo que hace es guardar nuestra home comprimida en un tar.gz a modo de plantilla y si no existe el archivo de texto en nuestra home llamado .restored descomprimirá este tar.gz durante el arranque (modo kiosko....) Como muchos habréis imaginado /.dirs/dev es el punto de montaje original de nuestro pendrive.
Por último me dejo por explicar el truco de arrancar desde el pendrive en equipos que no poseen de la opción en la BIOS. Es muy sencillo.
Ejecutar:
# genusbliveCD
Esto generará un archivo iso en /media/distro/isos de aproximadamente 6 megas, arrancando desde el cd y con el pendrive conectado a los pocos segundos de espera de dispositivos empezará el resto del arranque desde USB, el cdrom puede quitarse sin problemas ya que el kernel (vmlinuz) queda en memoria. Si a alguien se le ocurre como detectar desde el initramfs si hemos arrancado desde USB o pendrive sin tener que cambiar o parchear grub mejor que mejor, se me ocurre que en el script genusbliveCD que genera la iso y que modifica algunas cosas del menu.lst añadir algo como fromcd o algo así en el cmdline para que se expulse el cdrom tan pronto como no se necesite.
Forma rápida, probar algo hecho
http://soleup.eup.uva.es/usb/Descargamos y descomprimimos educatic.tar.gz de la siguiente manera:
# mkdir /media/distro
# cd /media/distro
# tar -zxf /donde/hayamos/guardado/educatic.tar.gz
Hay que descragar tambien initramfs y sobreescribir el que hay en boot ( el que hay en el tar.gz tiene algunos fallos)
===================================================================
Si se quiere probar una distro mucho más completa (xfce4 openoffice, java JClic, etc... descargar el archivo META-700.squashfs y sustituirlo por el META.squashfs original)
Enchufamos el pendrive de 256 como mínimo.
No es necesario formatearlo pero si se quiere partir desde cero es lo mejor:
dmesg|tail => vemos el dispositivo creado (por ejemplo sda con sda1 como particion)
mkfs.vfat -F 32 -n USeBix /dev/sda1
ahora ejecutamos:
# livecopy2usb (está en el paquete genusblive)
nos pedira el dispositivo, respondemos /dev/sda1
pregunta si copiar archivos del sistema, dar intro (tarda un ratejo...)
pregunta si instalar grub, dar intro (sólo hacerlo la primera vez)
===========================================================
Probar
Con qemu:qemu -hda /dev/sda (seleccionar la opcion de grub que pone qemu)
De modo normal:
Reiniciar con el pendrive enchufado y entrar a la BIOS (F2 o Supr)
Mirar el órden de arranque y seleccionar como primera opción o bien USB-HDD
si existe la opción o en los discos duros seleccionar primero la marca de
nuestro pendrive.
Arrancar con cualquier opción menos con la de qemu.
Oye pero cuales virus en debian??
Mario, enhorabuena una vez más por tu excelente trabajo y por tus magistrales explicaciones.
Seguimos construyendo,
RAMON RAMON
Hola Mario
Estoy "destripando" tu initramfs-tools-metadistros para usb y no me está resultando muy complicado entenderlo. Mi idea es adaptarlo para crear una versión Live-USB de Molinux (trabajo en su desarrollo desde hace poco).
El tema es que me ronda por la cabeza una orientación distinta. Puesto que un pendrive es un dispositivo RW, ¿por qué no poner una distro que sea actualizable y personalizable?
Usando una imagen como la del CD tendremos una live normal y corriente, a la que podremos añadir algun programa, pero que se perderá en el siguiente reinicio.
Soy consciente de las limitaciones del dispositivo, una memoria USB tiene un número limitado de escrituras y hacer esto podría acortar la vida del hardware. Por no contar que habría que formatearlo con ext3 (o reiser o lo que sea) perdiendo la facultad de aprovecharlo para otros sistemas operativos (siempre y cuando no se usen loops claro)
El caso es que quería tener tu opinión sobre el tema ya que veo que eres de los mas puestos en este ámbito.
hola
a mi se me ocurre que para detectar de donde arranca se podria usar udevinfo
aca esta lo que yo hice con mi pen
DREAM-MAKER:~# udevinfo -n sdb -q all
P: /block/sdb
N: sdb
S: disk/by-id/usb-Kingston_DataTraveler_II+_5B5310018DAF
S: disk/by-path/usb-5B5310018DAF:0:0:0
E: flashdrive=%k
E: ID_VENDOR=Kingston
E: ID_MODEL=DataTraveler_II+
E: ID_REVISION=1.13
E: ID_SERIAL=Kingston_DataTraveler_II+_5B5310018DAF
E: ID_TYPE=disk
E: ID_BUS=usb
E: ID_PATH=usb-5B5310018DAF:0:0:0
en el ante ultimo dice ID_BUS=usb con eso no alcanza para saber si esta corriendo desde un pen???
por ahi averiguar de donde booteo el dispositivo y despues hacer
udevinfo $dispositivo|grep -c ID_BUS=USB
si esto devuelve 0 es que no es usb si devuelve otra cosa es usb
espero que sirva
David
Aunque en la memoria se pueda escribir creo que al menos de momento hasta que se analice el impacto de muchas escrituras no se debería abusar.
Poder escribir ayuda a que se tenga algo entre reincios, pero quita portabilidad ya que si tenemos todo el sistema persistente lo que ganamos en cosas que hemos guardado lo perdemos en la posibilidad de que las configuracones no valgan en otros equipos, por eso he añadido unos scripts que leen un fichero de texto externo a la meta donde se pueden configurar muchas cosas... La Home persistente la he hecho con un fichero montado con cryptsetup para dar un poco más de privacidad en caso de pérdida.
Lo bueno de trabajar en FAT es que se puede leer o escribir desde cualquier sistema operativo. Además no es un sistema de ficheros agresivo como lo puede ser ext3 que debido al journaling hace demasiadas escrituras.... Hay varios sistemas (todavía en pañales) optimizados para este tipo de cosas como jjfs (sourceforge)
Ya empieza a haber movimineto en el svn oficial de metadistros y en las listas, espero que el desarrollo se siga desde alli.
Mario, he creado ya dos metadistros con tu receta, uno Livecd y otro LiveUSB, desafortunadamente, ayer se quemo mi disco duro, con lo cual perdi todo, asi que instale de nuevo debian, y al intentar crear de nuevo una metadistro, me he encontrado con que los mirrors que tenia antes, ya no sirve, y que algunos debs como genlive, ya no estan disponibles en tu mirror....tambien obtive el siguiente problema al hacer:
debootstrap etch /media/distro/ http://idefix.eup.uva.es/debian
obtuve esto:
I: Validating Packages
I: Checking component main on http://idefix.eup.uva.es/debian...
E: Couldn't find these debs: libsigc++-1.2-5c102 base-config slang1a-utf8
Tienes alguna idea de cual es el problema?
gracias.
El problema es que mi distro no estaba bien actualizada, ya solucione mi problema, asi que no se molesten en responder el post anterior
Esto se refiere creo al reloj de la BIOS, ¿porque decirle que no? si con localizar el sistema operativo sería suficiente?
Mario, intente bootear la distro directamente desde el USB, y no me booteo, a los 4 segundos me tiro a un ash basico... pero al hacerlo con el live, no tuve problemas!!, sabes a que se debe este error y como lo puedo solucionar?
Hola,
Yo hace tiempo que he creado una ubuntu dentro de un dispositivo de usb, pero me encuentro con un problema...
Supongo que al montar el squashfs hace algo un tanto extraño y mapea el cdrom como si fuera el dispositivo usb, la cuestion es que aunque no esta montada la particion del usb, en este caso /dev/sdb1 no puedo montarla pq da busy y por lo tanto el sistema es virtual. Puedo hacer lo que sea pero se queda en la ram mezclada con el filesystem.
Como puedo hacer que si que se pueda montar para escribir el dispositivo?
Yo no tuve problemas en remontar tantas veces haga falta el pendrive, sino puedes puedes leer su contenido (y escribirlo) en /.dirs/dev (nota que es un directorio oculto, por eso del punto...)
Esto no lo entendi...
Hola,
Tus paquetes personales no estan en la url que has dicho... podrias indicarnos donde andan? O que hacen esos paquetes? Mas o menos lo tengo claro, pero un patron o algo no estaria del todo mal.
Hi! Why I can't fill my info in profile? Can somebody help me?
My login is Kisakookoo!