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. ļ