Motivación

¿Por qué hacerlo? En primer lugar para aprender. Existen muchos sistemas hechos para instalar en pendrive, ¿pero donde estaremos más cómodos que en el nuestro propio? Como instalaremos sólo lo que necesitemos, podemos reducirlo a un sistema minimalista que entre en un Pendrive de 1GB, o un sistema completo para Pendrives de mayor capacidad.
Además bastará con crear una imagen del pendrive (mediante ‘cat’ o ‘dd’) para clonarlo las veces que queramos y en el número de memorias USB que deseemos (sería un buen regalo para un amigo: “un pendrive con una mini distribución hecha por ti mismo” xD).

Requisitos

  • Un Pendrive de mínimo 1GB
  • Un ordenador con GNU/Linux instalado y conexión a internet
  • La herramienta debotstrap (Gentoo: emerge debootstrap) (Ubuntu/Debian: aptitude install debootstrap)
  • Preparando el Pendrive

    ATENCIÓN: Todos los datos que contenga el pendrive serán destruidos. Así que guárdate la información importante antes de empezar con el proceso. Introducimos el Pendrive en la ranura USB, suponemos que esta en /dev/sdc1 pero esto puede variar de un sistema a otro. Para asegurarte del dispositivo que es, una vez hayas insertado el pendrive se montará automáticamente. Ejecuta la orden mount desde la consola y verás el dispositivo que corresponde al pendrive.

    Particionamos mediante fdisk, creamos 1 sola partición de tipo Linux (83), formateamos en ext2 y montamos en /mnt. Para ello seguimos los siguientes pasos:

    • En primer lugar debemos desmontar el pendrive, ya que de lo contrario no nos dejará formatear y modificar las particiones. Para ello ejecutamos:
      • sudo umount /dev/sdc1
    • En segundo lugar creamos las particiones:
      • sudo fdisk /dev/sdc1
        • Pulsamos p para imprimir la tabla de particiones.
        • Borramos todas las particiones, para ello pulsamos d e indicamos la partición a borrar. Repetimos este proceso tantas veces como particiones tengamos.
        • Creamos una partición nueva, para ello pulsamos n y aceptamos los valores por defecto que son el principio y el fin, es decir, nuestra partición nueva ocupará toda la capacidad del pendrive.
        • Guardamos y salimos con la opción w.
    • Formateamos con el sistema de archivos nativo de Linux:
      • sudo mkfs.ext2 /dev/sdc1
    • Montamos el dispositivo (pendrive) en /mnt:
      • mount /dev/sdc1 /mnt

    Instalando el sistema base

    Esto nos lo hará la genial herramienta debootstrap. Sólo necesitamos indicarle la arquitectura y la versión de Ubuntu a usar.
    En nuestro caso sera ‘i386′ y ‘karmic’, pero podéis variarlo según queráis. También le indicamos que incluya algunas herramientas extras y los paquetes de idioma en español.

    • sudo debootstrap –include=language-pack-es,language-pack-es-base,initramfs-tools,nano,linux-image –components=main,universe –verbose  –arch i386 karmic /mnt http://archive.ubuntu.com/ubuntu

    Customizando el sistema

    Ahora ya tenemos un sistema mínimo en el Pendrive. Vamos a instalar las herramientas que encontremos necesarias, y a personalizarlo un poco a nuestro gusto.

    • En primer copiamos el archivo de resolución de las dns:
      • sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
    • Luego montamos /proc
      • sudo mount -t proc none /mnt/proc
    • Ahora montamos /dev
      • sudo mount -o bind /dev /mnt/dev
    • Realizamos el cambio de sistema (chroot).
      • sudo chroot /mnt
      • Puede que de algún error del tipo “groups: no se puede encontrar el nombre para el grupo con ID 124″. Pero no hay que darle importancia.
    • Instalamos unos paquetes extras.
      • aptitude install joe screen ssh less openssl console-data console-common
    • Instalamos el paquete de sistema
      • aptitude install syslinux
    • Establecemos una contraseña para root
      • passwd
    • Añadimos un usuario al sistema (substitye <nombre_usuario> por el nombre de usuario que desees).
      • adduser <nombre_usuario>

    Para poder usar el Pendrive en cualquier PC, necesitamos algun método que nos permita detectar en que unidad lo ha detectado la BIOS. Es decir sda,sdb,sdc… Para ello utilizaremos las etiquietas de disco (Label). Para asignar una etiqueta a un disco utilizaremos tune2fs. La etiqueta puede llamarse como queramos.

    • tune2fs -L G3X /dev/sdc1

    Configuramos los archivos básicos. El contenido de estos depende de nuestro caso en particular. Para editarlos podemos usar nano por ejemplo.

    nano /etc/network/interfaces
    	auto lo
    	iface lo inet loopback
    
    	auto eth0
    	iface eth0 inet dhcp
    
    nano /etc/hostname
    	G3X
    
    nano /etc/hosts
    	127.0.0.1 localhost G3X
    
    nano /etc/fstab
    	proc            /proc   proc    defaults        0       0
    	LABEL=G3X       /       ext2    defaults,rw     0       1
    

    Creamos el archivo mtab, e instalamos extlinux en el disco y mbr. ¡Mucho cuidado con este último paso!

    • grep -v rootfs /proc/mounts > /etc/mtab
    • mkdir -p /boot/extlinux
    • extlinux -zi /boot/extlinux
    • CUIDADO: El siguiente comando es importante que te fijes en el dispositivo al cual redireccionamos. Si nuestro pendrive estaba en /dev/sdc1 redireccionaremos a /dev/sdc (es decir sin el número). Si el pendrive fuese /dev/sdb1 redireccionaríamos a /dev/sdb.
      • cat /usr/lib/syslinux/mbr.bin > /dev/sdb

    Ahora creamos el archivo de configuración de extlinux.hora creamos el archivo de configuración de extlinux.

    • nano /boot/extlinux/extlinux.conf
    default G3X
    prompt 1
    timeout 5
    display /boot/extlinux/hola.msg
    label G3X
    kernel /boot/vmlinuz-2.6.31-14-generic
    append initrd=/boot/initrd.img-2.6.31-14-generic rw root=LABEL=G3X
    

    Los parámetros señalados en azul deben obtenerse haciendo un ls sobre /boot