Pseudo-instalación offline de ArchLinux paso a paso

Este artículo me lo envió nuestro amigo Hugo Florentino via correo electrónico, donde nos cuenta su experiencia al tratar de instalar ArchLinux sin tener a la mano repositorio alguno, solo usando el disco de instalación

Pseudo-instalación

Hace un par de días descargué el ISO de ArchLinux para hacer una instalación en casa. Habiendo utilizado anteriormente otras distribuciones que permiten instalar al menos una base mínima desde el CD, deseaba hacer algo parecido, pero curiosamente el proceso de instalación de Arch no estÔ concebido para un equipo que no tenga acceso a Internet (efectos colaterales de que los desarrolladores vivan en el primer mundo).

En mi caso, ya tenía en mi disco Windows 7 (con su partición de arranque y de sistema) y Fedora (con su swap y su partición dedicada para /boot). La idea era entonces lograr instalar Arch donde anteriormente estaba Fedora, sin destruir Windows en el proceso.

Pseudo-instalación offline de ArchLinux

Pues bien, iniciĆ© desde el CD de Arch, eligiendo x86_64, y sin muchos preĆ”mbulos me dejó en una consola. PensĆ©: Ā«Wow, estos sĆ­ que se toman en serio aquello de no ser una distribución para novatos… muy bien, sigamos el juego entonces a ver quĆ© ocurreĀ».

Listé el directorio donde me encontraba para ver si había alguna documentación y descubrí que efectivamente había un texto con una guía elemental de instalación. Escribí lo relevante en un papel (en casa no tengo impresora) y puse manos a la obra.

Lo primero que hice fue cambiar la distribución del teclado a español de España, que resultó mÔs fÔcil de lo que esperaba (incluso hay una llamada curiosamente us-acentos):

loadkeys es

Lo próximo fue montar un disco externo para guardar una copia del MBR en caso de problemas y de paso hacer una salva de la información importante que tenía en mi Fedora:

mkdir -p /mnt/tmp1 && mount /dev/sdb1 /mnt/tmp1
dd if=/dev/sda of=/mnt/tmp1/mbr.bin bs=512 count=1

Afortunadamente el LiveCD de Arch soporta NTFS y trae integrado Midnight Comander (MC), de modo que en poco tiempo terminé de salvar el resto de la información.

Luego desmonté el disco, eliminé el directorio temporal y extraje el disco externo físicamente para reducir el riesgo de posibles «cagÔstrofes».

umount /mnt/tmp1 && rmdir /mnt/tmp1

Entonces di formato a mis particiones, monté la raíz y la partición de arranque, y activé la swap:

mkfs -t ext4 /dev/sda3
mkfs -t ext4 /dev/sda6
mount /dev/sda6 /mnt
mkdir -p /mnt/boot
mount /dev/sda3 /mnt/boot
swapon /dev/sda5

El próximo paso fue mi primer obstÔculo:

pacstrap /mnt base

Arch naturalmente intentó buscar las bases de datos de los repositorios en alguno de los mirrors, y al no poder encontrar ninguna, todo lo que pacstrap hizo fue crear en /mnt una estructura de directorios, muy organizadita, pero obviamente vacía.

Vía telefónica, pregunté a un par de amigos que usan Arch si no existía una forma de instalar sin acceso a Internet al menos los mismos paquetes que estÔn en el LiveCD, sin tener tampoco un repositorio copiado en un disco, y me dijeron que al menos ellos desconocían como hacerlo.

El «reto» tecnológico me pareció interesante, de modo que pensé: «si Arch es capaz de iniciar sesión en modo LiveCD, debe poder instalarse en un disco duro al menos en ese mismo modo», así que intenté copiando manualmente los archivos y siguiendo el resto del tutorial (con algún que otro cambio menor) a ver que sucedía:

rsync -avl /{bin,etc,home,lib,lib64,opt,root,sbin,srv,usr,var} /mnt
arch-chroot /mnt
genfstab -p / >> /etc/fstab
echo hpc > /etc/hostname
ln -sf /usr/share/zoneinfo/Cuba /etc/localtime
locale-gen

El próximo paso fue mi siguiente obstÔculo:

mkinitcpio -p linux

Este comando producƭa algunos errores, despuƩs de leer el manual del comando y el contenido de los archivos /etc/mkinitcpio.conf y /etc/mkinitcpio.d/linux.preset, comprendƭ que el comando no encontraba el archivo vmlinuz-linux, de modo que presionƩ Ctrl+D para salir del entorno chroot, y busquƩ cualquier archivo que se le pareciera:

find / -type f -iname "*vmlinuz*"

Sucede que el LiveCD de Arch monta los archivos de arranque bajo el directorio /run/, de modo que decidĆ­ copiarlos a mi /boot/ para tenerlos a mano dentro de mi entorno chroot:

cp /run/archiso/bootmnt/arch/boot/{memtest,intel_ucode.img} /mnt/boot/
cp /run/archiso/bootmnt/arch/boot/x86_64/* /mnt/boot/
arch-chroot /mnt

Como otro de los errores que encontré experimentando con mkinitcpio era que no podía encontrarse la etiqueta (label) de la partición raíz, apunté su UUID (que identifiqué mediante el comando blkid) para usarla con el comando, que finalmente quedó así:

mkinitcpio -p linux -k /boot/vmlinuz root=UUID=d85938aa-83b8-431c-becb-9b5735264912

Esta vez la generación terminó exitosamente, solo con un par de advertencias de módulos que no pudieron encontrarse, pero que en mi caso no eran necesarios. Por si acaso, volví a generar el fstab, pero esta vez especificando UUID:

genfstab -U -p / > /etc/fstab

PensƩ: ah bueno, al fin progresos. Y pasƩ a cambiar la contraseƱa e instalar un gestor de arranque.

passwd
grub-install --target=i386-pc --recheck /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

Finalmente y para ser metódico, presioné nuevamente Ctrl+D para salir del entorno chrooted, desmonté todo y reinicié a ver que ocurría:

umount /mnt/boot
umount /mnt
reboot

El equipo reinició mostrando el menu de Grub con Arch (Windows no apareció por parte alguna), asĆ­ que lo seleccionĆ© y todo parecĆ­a estar cargando bien hasta que… el sistema indicó que se habĆ­an producido errores que debĆ­a revisar con el siguiente comando:

journalctl -xb

Analizando los errores, vi que la mayoría podía ignorarse, pero el último era insólito, y me indicaba que no había podido encontrarse plymouth.

Inmediatamente pensé: «¿¿¿Plymouth??? ¿Para qué rayos necesita algo así un entorno que arranca en consola? Eso no parece muy KISS que digamos. Yo ciertamente no lo he puesto, ni lo necesito.»

Pero para ser prĆ”ctico, pensĆ©: Ā«Bueno, pero al menos deberĆ­a estar referenciado en algĆŗn archivo, veamos…»:

find /etc -type f -print0 | xargs -0 grep -i "plymouth"

Sorprendentemente, no apareció en el directorio de configuración ningĆŗn archivo con la cadena de texto Ā«plymouthĀ». PensĆ© entonces: Ā«Ah, conque… Āæfuercitas conmigo? veamos entonces cómo asimilas una ā€˜caƱona'Ā» (como decimos en Cuba), y Ā«construĆ­Ā» plymouth desde cero:

vi /usr/bin/plymouth
chmod 755 /usr/bin/plymouth

Para los que se pregunten quƩ puse en ese archivo, he aquƭ el contenido en su gloriosa totalidad:

#! /bin/sh
exit

ReiniciĆ© nuevamente esperando algĆŗn error y… sorprendentemente, systemd quedó feliz al haber encontrado ese Ā«componente esencialĀ», porque terminó el proceso de inicio y sin mĆ”s demoras me dejó en la consola. Como no podĆ­a dar crĆ©dito a lo que veĆ­an mis ojos, decidĆ­ Ā«desinstalarĀ» plymouth y reiniciar, a ver que ocurrĆ­a:

rm -fr /usr/bin/plymouth
reboot

Curiosamente, esta vez el sistema inició tranquilamente sin fastidiarme mÔs con la ausencia de Plymouth. (Sin comentarios)

Agregando Windows al GRUB

Quedaba entonces agregar la entrada de Windows a GRUB. Como las vías tradicionales no funcionaban (la combinación de grub-mkconfig con os-prober no parecía estar funcionando bien), decidí crear la entrada manualmente, para lo cual necesitaba detectar la cadena del gestor de arranque de Windows y el UUID de la partición de arranque:

mkdir -p /mnt/winboot && mount /dev/sda1 /mnt/winboot
grub-probe --target=hints_string /mnt/winboot/bootmgr
grub-probe --target=fs_uuid /mnt/winboot/bootmgr

Esto me devolvió respectivamente estas dos cadenas:

--hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1
DC788F27788EFF8E

De esta manera comprobé que el UUID devuelto era el mismo que se obtenía para esa partición al ejecutar el comando blkid. Quedaba entonces generar una entrada de grub personalizada con dichos datos:

vi /etc/grub.d/40_custom

En su contenido:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.

menuentry "Microsoft Windows 7 SP1" --class windows --class os {
insmod part_msdos
insmod ntfs
insmod search_fs_uuid
insmod ntldr
search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 DC788F27788EFF8E
ntldr /bootmgr
}

Una vez terminado este paso, decidƭ establecer Windows como sistema operativo por defecto, para que mi esposa no se aterre y mi sobrinita pueda jugar sus Barbies cuando viene. Para esto simplemente editƩ el archivo /etc/default/grub y establecƭ la entrada a lanzar por defecto y el tiempo de espera en solo 3 segundos.

GRUB_DEFAULT=2
GRUB_TIMEOUT=3

Solo quedaba regenerar nuevamente la configuración de GRUB, y reiniciar:

grub-mkconfig -o /boot/grub/grub.cfg
reboot

Afortunadamente, todo salió como esperaba. Seleccioné la entrada de Windows y este inició alegremente.

De modo que como ven, si que puede hacerse al menos una Pseudo-instalación offline de ArchLinux paso a paso sin estar online solo con el CD, aunque obviamente, lo que quedarÔ instalado en el disco duro es esencialmente un LiveCD, pero al menos puede arrancarse un sistema, copiarse archivos, y ejecutar algunas aplicaciones.

Afortunadamente el Arenoso (KZKG^Gaara) pasó por la casa y me copió el repo de Arch (por lo cual le estoy muy agradecido), de modo que pronto pienso terminar de hacer una verdadera instalación offline, pero esto serĆ­a otra historia. Lo que puedo asegurarles es que desde hace un tiempo extraƱaba un poco esta clase de experimentaciones divertidas. De hecho si tuviese tiempo, conectividad en la casa y ciertas condiciones materiales aseguradas, probablemente intentarĆ­a hacer una distribución personalizada basada en LFS, que serĆ­a un proyecto mucho mĆ”s divertido. ļ˜‰