 |
En este artículo aprenderemos a crear nuestra propia distribución basada en Debian instalada en un Pendrive USB. No será un sistema Live, como muchos, sino una instalación estándar, como si de un disco duro se tratase. Todo lo que hagamos en el SO de ese pendrive, quedará guardado. Con la peculiaridad de que lo prepararemos (o al menos lo intentaremos xD) para que arranque con cualquier máquina x86 En nuestro caso lo hemos utilizado para arrancar un thin-client. Realizaremos el proceso mediante la herramienta debootstrap y el bootloader syslinux (su variante extlinux). Este artículo también puede servir para instalar un sistema en otro tipo de dispositivo (sea SD, CF...) o incluso en un Disco duro.
|
Motivación
¿Por qué hacerlo? En primer lugar para aprender. Seguro que ya existen 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 500MB, 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 en 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).
También vereis que el proceso es realmente sencillo, no necesitaremos estar una semana encerrados en la habitación para lograrlo (ni mucho menos xD), en unos 30 minutos estará hecho.
Requisitos
Un Pendrive de mínimo 500MB (puede hacerse con 256MB pero es muy justo)
Un ordenador con GNU/Linux instalado y conexión a internet
La herramienta debotstrap (Gentoo: emerge debootstrap) (Ubuntu/Debian: aptitude install debootstrap)
30 minutos de vuestra vida
El proceso
Preparando el Pendrive
Introducimos el Pendrive en la ranura USB (suponemos que esta en /dev/sdb1).
Particionamos mediante fdisk (creamos 1 sola partición de tipo Linux (83), formateamos en ext2 y montamos en /mnt.
fdisk /dev/sdb1
mkfs.ext2 /dev/sdb1
mount /dev/sdb1 /mnt
|
Instalando el sistema base
Esto nos lo hará la genial herramienta debootstrap. Sólo necesitamos indicarle la arquitectura y la versión de Debian a usar.
En nuestro caso sera 'i386' y 'etch', pero podeis variarlo según querais.
debootstrap --arch i386 etch /mnt
|
Este proceso tardará un poco, ya que descarga los paquetes del sistema base desde internet.
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 lugar montamos /proc y /dev, copiamos resolv.conf (para las dns) y realizamos el cambio de sistema (chroot).
cp /etc/resolv.conf /mnt/etc/resolv.conf
mount -t proc none /mnt/proc
mount -o bind /dev /mnt/dev
chroot /mnt
|
Si todo va bién, ya estamos en nuestro nuevo sistema. Vamos a instalar las locales necesarias.
aptitude install locales
dpkg-reconfigure locales
aptitude install localepurge
localepurge
|
Instalamos la imagen del kernel, las herramientas básicas y syslinux.
También asignamos el password de root, y creamos un usuario que llamaremos 'user'
aptitude install linux-image-2.6.18-5-686
depmod 2.6.18-5-686
aptitude install install joe screen ssh less openssl console-tools console-keymaps
aptitude install syslinux
user-setup
|
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 Debax /dev/sdb1
|
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
Debax
nano /etc/hosts
127.0.0.1 localhost Debax
nano /etc/fstab
proc /proc proc defaults 0 0
LABEL=Debax / 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
cat /usr/lib/syslinux/mbr.bin > /dev/sdb
|
Ahora creamos el archivo de configuración de extlinux.
nano /boot/extlinux/extlinux.conf
default Debax
prompt 1
timeout 5
display /boot/extlinux/hola.msg
label Debax
kernel /boot/vmlinuz-2.6.18-5-686
append initrd=/boot/initrd.img-2.6.18-5-686 rw root=LABEL=Debax
|
Creamos, si queremos, el archivo hola.msg que será el mensaje que expondrá extlinux en el arranque.
nano /boot/extlinux/hola.msg
Bienvenido a Debax USB
Una mini distribucion basada en Debian
Visita dabax.net ;>)
|
Ya podemos reiniciar el PC con el Pendrive insertado y arrancar desde él. Sería buena idea instalar el resto del software que creamos interesante.
aptitude install xserver-xorg xfce4 firefox gaim
|
Creando algunos scripts de arranque
En este punto vamos a personalizar un poco más el sistema. Crearemos algunos scripts de arranque.
startX: iniciará el entorno gráfico (es necesario modificar el script y cambiar user por el usuario que tengamos en el sistema)
keymap: pondrá el teclado en español
iniciar_dhcp: iniciará una búsqueda dhcp general
xorg_conf: dará opción en el arranque de configurar las X
nano /etc/init.d/startX
#!/bin/bash
case $1 in
start)
echo "Iniciando sistema grafico"
echo "Puedes consultar el LOG en /var/log/arranque_x.log"
X :0 1>>/var/log/arranque_x.log 2>>/var/log/arranque_x.log &
DISPLAY=:0 su user -c xfce4-session 1>/dev/null 2>/dev/null &
;;
stop)
echo "Parando todos los procesos X"
killall -9 X
;;
*)
echo "Opcion invalida"
;;
esac
nano /etc/init.d/keymap
#!/bin/bash
loadkyes es
nano /etc/init.d/iniciar_dhcp
#!/bin/bash
case $1 in
start)
echo "Iniciando dhcp inicial"
echo "Para desacivar el dhcp inicial: update-rc.d -f iniciar_dhcp remove"
dhclient
;;
esac
nano /etc/init.d/xorg_conf
#!/bin/bash
case $1 in
start)
echo -e "\033[0;36m Pulsa [ENTER] para configurar las X \
o espera 5 segundos para mantener la configuracion actual\033[0m"
read -t 5 OP
if [ $? -eq 0 ]; then
cp /etc/X11/xorg.conf /etc/X11/xorg.conf.backup0
echo "Backup de la configuracion actual guardado como xorg.conf.backup0"
dpkg-reconfigure xserver-xorg
fi
;;
esac
chmod +x /etc/init.d/xorg_conf /etc/init.d/iniciar_dhcp /etc/init.d/keymap /etc/init.d/startX
update-rc.d startX defaults 99
update-rc.d xorg_conf defaults 98
update-rc.d keymap defaults 98
update-rc.d iniciar_dhcp defaults 98
|
Y ya esta. ¡A disfrutar!
Clonando el pendrive
Ahora podemos guardar una copia del Pendrive para copiarla posteriormente en otro
Podemos usar dd:
- Para guardar la copia: dd if=/dev/sdb1 of=Debax.dd
- Para clonar otro Pendrive: dd if=Debax.dd of=/dev/sdc1
Este proceso requiere que el Pendrive clonado, sea igual o de mayor tamaño. Si es de mayor tamaño, el espacio que sobre quedará no utilizable.
Otra forma menos "chapuzera" de clonarlo es guardar el mbr por un lado y copiar los archivos del sistema por otro:
En el Pendrive de origen (sdb):
dd if=/dev/sdb of=/tmp/mbr_Debax.dd count=512
mount /dev/sdb1 /mnt
cd /mnt ; tar cvf /tmp/Debax.tar *
|
En el Pendrive de destino (sdc):
dd if=/tmp/mbr_Debax.dd of=/dev/sdc
mount /dev/sdc1 /mnt
tar xvf /tmp/Debax.tar -C /mnt/
|