Install Gentoo on a bootable USB stick

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Install Gentoo on a bootable USB stick and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎日本語 • ‎한국어 • ‎русский • ‎中文(中国大陆)‎

Hacer arrancar Gentoo desde una memoria USB es realmente simple. Lo primero que tendremos que hacer es crear un disco RAM inicial y asegurarnos de que tenemos presente los controladores para los equipos desde los que deseamos arrancar (con la memoria usb). Este artículo describirá cómo instalar Gentoo en una memoria USB para que se pueda arrancar en cualquier ordenador. Esta instalación será igual que la instalación de escritorio y los cambios en la memoria usb serán permanentes.

Preparación

Nota
Esta guía asume que la plataforma actual sobre la que se instala Gentoo en la memoria USB es un sistema Gentoo Linux. La mayoría de los pasos, obstante, se pueden realizar desde cualquier distribución, simplemente hay que traducir el método específico de Gentoo a las prácticas de la distribución utilizada (como, por ejemplo, la instalación de software).

Antes de comenzar, necesitaremos algunos paquetes. Lo más importante es un núcleo y el paquete sys-kernel/genkernel.

root #emerge --ask sys-kernel/gentoo-sources sys-kernel/genkernel

Para agregar parámetros USE específicos para dichos paquetes, tendremos que crear un nuevo fichero en /etc/portage/package.use/:

ARCHIVO /etc/portage/package.use/sys-apps
sys-apps/busybox static

A continuación, instalaremos el paquete sys-apps/busybox:

root #emerge --ask sys-apps/busybox

Compilar el núcleo

Haremos los cambios necesarios en el núcleo y lo compilaremos. Consulte Configuring the Linux kernel y kernel configuration guide para obtener más detalles sobre este paso. Recuerde que es importante destacar que un núcleo general es mejor aquí, porque cuanto más general sea, más ordenadores podrán arrancar con él.

Durante la configuración, por supuesto, será posible compilar módulos para un ordenador específico, lo cuales se incluirán en initramfs y se cargarán en el arranque.

root #mkdir /tmp/boot
root #genkernel --firmware --busybox --disklabel --bootdir=/tmp/boot --no-symlink --all-ramdisk-modules --install all

La orden anterior tomará algún tiempo para compilar el núcleo predeterminado, crear un disco RAM, y luego copiar todos los ficheros en /tmp/boot.

root #ls /tmp/boot/
initramfs-genkernel-x86_64-3.5.2-gentoo
kernel-genkernel-x86_64-3.5.2-gentoo
System.map-genkernel-x86_64-3.5.2-gentoo

Preparar la memoria USB

Crearemos dos particiones en la unidad (asumiendo que la instalación cuenta con una partición /boot y otra / (root)). Se supone que la memoria USB es /dev/sdb. La memoria USB podría también ser /dev/sdc (si ejecutamos dmesg inmediatamente después de conectar la memoria usb debería mostrarnos la letra del dispositivo que acabamos de conectar).

root #fdisk /dev/sdb
Command (m for help): d
Selected partition 1
 
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4001759, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4001759, default 4001759): +100M
 
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2):  
Using default value 2
First sector (206848-4001759, default 206848): 
Using default value 206848
Last sector, +sectors or +size{K,M,G} (206848-4001759, default 4001759): 
Using default value 4001759
 
Command (m for help): a
Partition number (1-4): 1
 
Command (m for help): p
 
Disk /dev/sdb: 2048 MB, 2048901120 bytes
255 heads, 63 sectors/track, 249 cylinders, total 4001760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x001663df
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048      206847      102400   83  Linux
/dev/sdb2          206848     4001759     1897456   83  Linux
 
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
Syncing disks.

Nos aseguraremos de marcar la primera partición como de arranque (una orden cambia el flag de arranque).

Ahora formatearemos las nuevas particiones. En el ejemplo se utiliza el sistema de ficheros ext2 (no obstante, se puede utilizar otro sistema de ficheros para la partición /, si se tiene soporte en el núcleo). Tenga en cuenta que durante el formateo hemos dado una etiqueta a las unidades, lo cual es importante porque este va a ser el método con el cual se detectará posteriormente el sistema de ficheros root cuando arranquemos el sistema, donde la asignación de la letra de la unidad será completamente diferente. Advierta que hemos usado --disklabel en la línea de ordenes de genkernel antes.

root #mkfs.ext2 -L GENTOO_USB_BOOT /dev/sdb1
root #mkfs.ext2 -L GENTOO_USB_ROOT /dev/sdb2

Instalar stage 3 de Gentoo

El núcleo, el disco RAM inicial y nuestros sistemas de ficheros están listos, ahora necesitamos realizar la instalación mínima. Esto lo conseguiremos con un fichero comprimido stage3 reciente y con la instantánea del árbol Portage.

Para este ejemplo, se descargarán stage3-amd64-20120621.tar.bz2 y portage-latest.tar.xz. El paso siguiente es el mismo que el indicado en el manual de instalación de Gentoo.

root #mount /dev/sdb2 /mnt/gentoo
root #cd /mnt/gentoo
root #tar -xpf ~/Download/stage3-amd64-20120621.tar.bz2
root #cd usr
root #tar -xpf ~/Download/portage-latest.tar.xz
root #mount /dev/sdb1 /mnt/gentoo/boot
root #cp /tmp/boot/* /mnt/gentoo/boot

Las secciones siguientes cubren los aspectos de la instalación de Gentoo Linux que son específicos para una instalación en una memoria USB. Se recomienda seguir las instrucciones del manual de Gentoo, teniendo presente en mente este artículo.

Gestor de arranque

Para que pueda arrancar el nuevo sistema, debemos instalar un gestor de arranque en el dispositivo USB.

Disponemos de muchas opciones para esto, pero aquí solo vamos a describir cómo hacerlo a través de lilo y syslinux.

lilo

Realizamos emerge de lilo (dentro del entorno chroot):

(chroot) #emerge sys-boot/lilo

Editamos /etc/lilo.conf para proporcinarle la información correcta.

Advertencia
Estos ajustes son muy importantes y se analizan línea por línea.
ARCHIVO /etc/lilo.confConfigurar lilo.conf
boot=/dev/sdb              # Ubicación de la memoria USB
lba32                      # Usar direccionamiento lba32 (ignorar)
compact                    # Arranque rápido para cargar muchos bloques
                           # quitar si tiene problemas con el arranque
prompt                     # Prompt para la entrada del usuario
timeout=20                 # Tiempo de espera antes de arrancar
default="Gentoo-352"       # Selección de arranque por defecto

image=/boot/kernel-genkernel-x86_64-3.5.2-gentoo
	label="Gentoo-352"
	read-only
	root=/dev/ram0
	append="real_root=LABEL=GENTOO_USB_ROOT scandelay=5"
	initrd=/boot/initramfs-genkernel-x86_64-3.5.2-gentoo

Las líneas después de image son todas obvias, salvo la línea append que contiene algunas opciones interesantes.

  • real_root=LABEL=GENTOO_USB_ROOT, que utiliza etiquetas para los discos, en lugar de /dev/sdb2, lo cual es importante porque estos números de los dispositivos cambian en función del número de discos duros conectados al ordenador o del número de unidades USB.
  • También es importante, para el arranque desde USB, la variable scandelay, ya que los dispositivos USB necesitan un poco de tiempo para ser detectados por el núcleo; eso es para lo que sirve esta opción. Cuando se cargan muchos módulos, el arranque tarda cierto tiempo, por lo que, probablemente, la opción anterior no importe, pero si se cargan solo unos pocos, si es importante, ya que el sistema podría haber arrancado antes de que el núcleo detecte el dispositivo USB. También, en máquinas más nuevas con controladores USB3, necesitará el controlador xhci_hcd (integrado en el núcleo o como módulo).

Ahora instalaremos LILO (ya configurado) en la memoria USB:

(chroot) #lilo
Warning: /dev/sdb is not on the first disk
Warning: The initial RAM disk is too big to fit between the kernel and
   the 15M-16M memory hole.  It will be loaded in the highest memory as
   though the configuration file specified "large-memory" and it will
   be assumed that the BIOS supports memory moves above 16M.
Added Gentoo-352 ? *
2 warnings were issued.

La primera advertencia es de esperar, ya que no vamos a instalar el gestor de arranque en el disco duro del ordenador. La segunda advertencia solo causa problemas en las máquinas que son viejas, de modo que si supone un problema en nuestro caso debemos intentar reducir el núcleo eliminando módulos.

syslinux

Advertencia
syslinux funciona con sistemas de ficheros ext{2,3,4}, btrfs, ntfs y fat.

Realizamos emerge de syslinux.

(chroot) #emerge syslinux

Definimos el sector de arranque en el dispositivo USB.

(chroot) #dd bs=440 count=1 conv=notrunc if=/usr/share/syslinux/mbr.bin of=/dev/sdb

Ahora, configuramos el gestor de arranque.

(chroot) #mkdir /boot/syslinux
(chroot) #nano -w /boot/syslinux/syslinux.cfg
ARCHIVO /boot/syslinux/syslinux.cfg
PROMPT 1
TIMEOUT 50
DEFAULT gentoo
 
LABEL gentoo
        LINUX ../kernel-genkernel-x86_64-3.5.2-gentoo
        APPEND root=LABEL=GENTOO_USB_ROOT scandelay=3 ro
        INITRD ../initramfs-genkernel-x86_64-3.5.2-gentoo
Nota
La opción ro en la línea APPEND hará que la partición root se monte como de solo lectura (que es lo preferible generalmente para memorias USB). Si queremos montar el sistema como de lectura-escritura para poder realizar cambios en el sistema después de arrancar desde la memoria USB, debemos reemplazar ro con rw (en lugar de tener que montar el sistema de ficheros como de lectura-escritura después).

A continuación, instalaremos syslinux en el dispositivo USB. La opción --device /dev/sdb1 relativa al dispositivo no es, sin embargo, absolutamente necesaria.

(chroot) #extlinux --device /dev/sdb1 --install /boot/syslinux

fstab

ARCHIVO /etc/fstabConfigurar el fichero fstab para trabajar con etiquetas
LABEL=GENTOO_USB_BOOT   /boot           ext2            noauto,noatime  1 2
LABEL=GENTOO_USB_ROOT   /               ext2            noatime         0 1
/dev/SWAP               none            swap            sw              0 0
/dev/cdrom              /mnt/cdrom      auto            noauto,ro       0 0
/dev/fd0                /mnt/floppy     auto            noauto          0 0

Consejos y trucos

Aunque se puede utilizar el sistema que acabamos de crear como un sistema Gentoo estándar, dado que estamos utilizando una memoria USB en lugar de un disco duro, podría ser interesante compilar paquetes binarios en un equipo y luego instalar dichos binarios en la memoria USB. O, si tenemos suficiente espacio en la memoria, basta con montar /var/tmp para un directorio tmpfs, donde la compilación será más rápida.