Install Gentoo on a bootable USB stick
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. Este artículo describe 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.
This article covers installation of a complete, functional, Gentoo system onto a USB drive. See the LiveUSB article for instructions on creating a simple bootable drive, that can for example be used for Gentoo installation.
Preparación
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
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.
Asegúrese de que la primera partición sea de arranque (el comando a
cambia el indicador 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.
Las secciones de abajo ofrecen ejemplos de configuración para usar bien grub o bien utilizar lilo junto con Syslinux.
grub
¡Este método solo se aplica a un arranque UEFI!
This method only applies to UEFI booting!
Emerge grub (desde dentro del chroot):
(chroot) #
emerge sys-boot/grub
(chroot) #
emerge sys-boot/grub
Instale grub en el lugar acorde con la información de su plataforma. Suponga que está ejecutando una máquina x86_64 con Partición EFI montada en /boot/ efi
, el siguiente comando instalará grub en la memoria USB:
(chroot) #
grub-install --efi-directory=/boot/efi --target=x86_64-efi --removable
Tenga en cuenta que la opción
--removable
es muy importante. Indica que la ubicación de destino es un dispositivo extraíble. ¡No lo olvide, de lo contrario podría estropear su propio sistema!Si no sucede nada malo, ejecute grub-mkconfig
para generar la configuración de grub.
(chroot) #
grub-mkconfig -o /boot/grub/grub.cfg
Cambie el directorio de destino en consecuencia si usa un directorio de configuración de grub diferente.
(chroot) #
grub-mkconfig -o /boot/grub/grub.cfg
Change the target directory accordingly if you use a different GRUB config directory.
lilo
Realizamos emerge de lilo (dentro del entorno chroot):
(chroot) #
emerge sys-boot/lilo
Editamos /etc/lilo.conf para proporcinarle la información correcta.
Estos ajustes son muy importantes y se analizan línea por línea.
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="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.
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 controladorxhci_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
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
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
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
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.
See also
- Installation — an overview of the principles and practices of installing Gentoo on a running system.
- LiveUSB — explains how to create a Gentoo LiveUSB or, in other words, how to emulate a x86 or amd64 Gentoo LiveCD using a USB drive.