Instalar Linux desde un archivo ISO

En el artículo anterior habíamos visto el potencial de la shell de GRUB 2. Allí habíamos visto que podíamos arrancar directamente desde una imagen ISO sin necesidad de tener que grabarlo en un disco óptico ni copiarlo a una unidad USB.

Ahora bien, ¿podríamos además instalar un sistema operativo utilizando ese método? La respuesta es sí. En este caso puntual veremos como instalar Fedora 23.

Aquí, tendremos que tener en cuenta los dos software involucrados principalmente para poder realizar esta tarea. Estos programas son GRUB 2 (naturalmente) y dracut.

Recordemos que en el momento del arranque se utiliza un sistema de archivos temporal en memoria hasta que se pueda realizar el montaje del definitivo sistema de archivos raiz.

dracut es tanto una infraestructura de initramfs manejada por eventos como así también una herramienta que se usa para crear una imagen de disco en memoria.  El comando dracut copiar herramientas y archivos de un sistema instalado y lo combina con el framework dracut.

Estos archivos se pueden ver en fedora en el directorio /usr/lib/dracut/modules.d:

 


[sergio@hope ~]$ ls /usr/lib/dracut/modules.d
00bash               30convertfs  90dm                      90qemu-net    95fstab-sys     95zfcp            99base
00systemd            40network    90dmraid                  91crypt-gpg   95iscsi         95zfcp_rules      99fs-lib
00systemd-bootchart  45ifcfg      90dmsquash-live           91crypt-loop  95nbd           95znet            99img-lib
01systemd-initrd     45url-lib    90kernel-modules          95cifs        95nfs           97biosdevname     99kdumpbase
02systemd-networkd   50drm        90kernel-network-modules  95dasd        95resume        98dracut-systemd  99shutdown
03modsign            50plymouth   90livenet                 95dasd_mod    95rootfs-block  98ecryptfs        99uefi-lib
03rescue             80cms        90lvm                     95dasd_rules  95ssh-client    98pollcdrom
04watchdog           90bcache     90mdraid                  95debug       95terminfo      98selinux
05busybox            90btrfs      90multipath               95fcoe        95udev-rules    98syslog
10i18n               90crypt      90qemu                    95fcoe-uefi   95virtfs        98usrmount

Por lo tanto aquí la clave es pasar los parámetros del kernel y opciones para dracut correctas. Y para agregar la entrada al menú de grub utilizamos el archivo /etc/grub.d/40_custom.

 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 "Live Fedora 23" --class fedora {
 set isofile="/Fedora-Live-KDE-x86_64-23-10.iso"
 loopback loop (hd0,gpt8)$isofile
 linuxefi (loop)/isolinux/vmlinuz0 iso-scan/filename=${isofile} root=live:CDLABEL=Fedora-Live-KDE-x86_64-23-10 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0
 initrdefi (loop)/isolinux/initrd0.img
 }

Aquí los comandos y opciones claves son respectivamente loopback e iso-scan.

El comando loopback sirve para especificar la ruta a un archivo ISO para que sea tomado como un dispositivo de bloques. Mientras tanto el parámetro iso-scan sirve para montar el dispositivo de loopback y pasarle los parámetros de kernel y dracut apropiadas.

¿Cómo sabemos las opciones y parámetros correctos? Las podemos averiguar montando el archivo ISO e inspeccionando el archivo isolinux.cfg:


[root@hope sergio]# mount -o loop /usr/Fedora-Live-KDE-x86_64-23-10.iso /media
mount: /dev/loop0 está protegido contra escritura; se monta como sólo lectura
[root@hope sergio]# grep -m1 append  /media/isolinux/isolinux.cfg 
  append initrd=initrd0.img root=live:CDLABEL=Fedora-Live-KDE-x86_64-23-10 rootfstype=auto ro rd.live.image quiet  rhgb rd.luks=0 rd.md=0 rd.dm=0

Sencillamente debemos copiar lo que está a continuación de append initrd=initrd0.img.

Además, se pueden apreciar los comandos linuxefi e initrdefi que son equivalente de manera respectiva a las ordenes linux e initrd al utilizar un sistema con UEFI.

Finalmente, debemos ejecutar el comando para generar el nuevo archivo de GRUB 2:

[root@hope sergio]# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

Reiniciamos, elegimos la opción Live Fedora 23 y luego podremos instalar el sistema operativo.

Instalar desde un archivo ISO

La partición importa

La partición en la que está ubicado el archivo ISO importa. Existe un bug en el módulo de python para la configuración de almacenamiento del sistema llamado blivet que impide la instalación del sistema operativo si la ISO está en alguna partición marcada en el editor de particiones, más allá de que esta se formatee o no. Como solución provisoria, se puede emplear una partición sin que el instalador la tenga en cuenta. De hecho, hice eso mismo. Luego, posterior a la instalación usé dicha partición para el directorio /usr, usando rysnc, editando el archivo /etc/fstab y borrando el /usr original.

Conclusión

Una vez más, podemos apreciar el potencial de GRUB 2 y como podemos prescindir de otros medios para instalar sistemas operativos. De hecho, dado el gran tamaño de los discos en la actualidad, podríamos tener una partición específicamente para tener ISOS.

 

ftop: Herramienta para monitorear archivos

El programa ftop es similar en ciertos aspectos a lsof: muestra los archivos abiertos. Pero ftop los exhibe en una interfaz similar a la de top y además, proporciona información acerca de la velocidad en la transferencia de datos y estimación del tiempo. (Hacer clic en la imagen para ver un ejemplo de su funcionamiento).

ftop

Con ftop se puede saber además, el tipo de archivo abierto y el modo en que se accede (lectura, escritura, etc.)

ftop fue enpaquetado por el autor de este sitio para Fedora 😉

Sitio del proyecto

Probando Fedora 15 beta

Salió Fedora 15 beta, tiene un núcleo 2.6.38.2-9,  mucho más actualizado que su predecesora (que usa una versión de la línea 2.6.35). Esto que implica por ejemplo que el módulo ath9k_htc soporta la placa wireless TP-Link WN821N v3, la cual es económica y soporta la norma 802.11n.

Interesante para ir probando varias cosas, por ejemplo GNOME Shell y Gnome 3

Fedora 15 Beta

Y también se puede ver algo en este pequeño video:

Escritorio de Fedora 15 Beta

¿Todavía usando Windows? Bueno…. existe VLC, programa libre para ver videos…

Tuve que soportar algún que otro cuelgue en esta versión beta de Fedora, lo cual no es tan alarmante teniendo en cuanto que no está pensada todavía para producción. ¿Quedó claro que es beta?

Sistemas de Construcción de Paquetes (Parte 1)

Dentro de los sistemas de construcción de paquetes en los sistemas estilo Linux, el más conocido de ellos el GNU Build System, aka autotools.

Las autotools tienen la reputación de ser difíciles y abrumadoramente barrocas. Es por eso que han surgido sistemas alternativos siendo tal vez la más más popular cmake.

Es por ello que me propuse hacer una estadística, tal vez bastante rudimentaria acerca de los sistemas de construcción de paquetes.

Lo primero que hice fue ejecutar algo como esto:

repoquery -a --disablerepo=livna,rpmfusion-free,rpmfusion-free-updates --source | uniq | shuf -n 101 | sed 's/.src.rpm//g' | xargs yumdownloader --source

Con esto se consigue una muestra de 101 paquetes de los repositorios oficiales de Fedora 14.

Los paquetes son:

ailurus-10.10.3-1.fc14.src.rpm
alsa-oss-1.0.17-4.fc12.src.rpm
aplus-fsf-4.22.4-19.fc12.src.rpm
ar9170-firmware-2009.05.28-2.fc13.src.rpm
azureus-4.5.1.0-1.fc14.src.rpm
bitfrost-1.0.10-1.fc14.src.rpm
bwidget-1.9.0-1.fc13.src.rpm
cfitsio-3.250-5.fc14.src.rpm
congruity-14-1.fc13.src.rpm
dogtag-pki-ra-ui-1.3.2-1.fc14.src.rpm
drascula-international-1.0-3.fc12.src.rpm
dump-0.4-0.8.b43.fc14.src.rpm
dumpet-2.1-1.fc14.src.rpm
dx-4.4.4-16.fc14.2.src.rpm
easystroke-0.5.3-2.fc14.src.rpm
eblook-1.6.1-10.fc14.src.rpm
eclipse-jgit-0.10.1-1.fc14.src.rpm
emacs-common-tuareg-1.45.6-9.fc12.src.rpm
emacs-common-w3m-1.4.398-0.4.20100714cvs.fc14.src.rpm
emacspeak-29.0-3.fc12.src.rpm
fedora-packager-0.5.5.0-2.fc14.src.rpm
FlightGear-2.0.0-4.fc14.src.rpm
fmtools-2.0.1-2.fc13.src.rpm
func-0.25-3.fc14.src.rpm
gambas2-2.22.0-1.fc14.src.rpm
gbirthday-0.6.5-2.fc14.src.rpm
gedit-plugins-2.31.6-1.fc14.src.rpm
gfs-pyrsos-fonts-20090618-3.fc13.src.rpm
globus-gatekeeper-5.5-2.fc14.src.rpm
globus-gram-job-manager-10.59-2.fc14.src.rpm
globus-gram-job-manager-setup-sge-2.5-1.fc14.src.rpm
gmm-4.0.0-1.fc14.src.rpm
gnomeradio-1.8-6.fc14.src.rpm
html2text-1.3.2a-6.fc13.src.rpm
i3lock-1.0-4.20100320git.fc14.src.rpm
isync-1.0.4-6.fc12.src.rpm
javasqlite-20100727-1.fc14.src.rpm
kdetv-0.8.9-13.fc12.src.rpm
kmid2-2.3.0-2.fc14.src.rpm
lcms2-2.1-1.fc14.src.rpm
libfreebob-1.0.11-6.fc12.src.rpm
libgalago-0.5.2-9.fc12.src.rpm
libmusicbrainz3-3.0.3-2.fc14.src.rpm
libotr-3.2.0-5.fc14.src.rpm
lilypond-2.13.39-3.fc14.src.rpm
makebootfat-1.4-11.fc14.src.rpm
man-pages-cs-0.18.20090209-9.fc14.src.rpm
metromap-0.1.2-5.fc14.src.rpm
mono-basic-2.6.2-1.fc14.src.rpm
mysql-5.1.55-1.fc14.src.rpm
mysql-connector-c++-1.1.0-0.4.bzr895.fc14.src.rpm
nedit-5.5-23.fc14.src.rpm
nemiver-0.7.3-3.fc14.src.rpm
nntpgrab-0.6.91-2.fc14.src.rpm
nogravity-2.00-11.fc13.src.rpm
ocaml-lacaml-5.4.7-2.fc13.src.rpm
ogre-1.6.4-5.fc13.src.rpm
openjpeg-1.3-10.fc14.src.rpm
orage-4.6.1-2.fc13.src.rpm
pam_abl-0.2.3-8.fc12.src.rpm
perl-Catalyst-View-PDF-Reuse-0.03-4.fc14.src.rpm
perl-CGI-Session-4.35-5.fc14.src.rpm
perl-Color-Calc-1.061-2.fc14.src.rpm
perl-Inline-0.46-1.fc14.src.rpm
perl-Mixin-Linewise-0.003-2.fc14.src.rpm
perl-MooseX-MethodAttributes-0.24-1.fc14.src.rpm
perl-Net-FTPServer-1.122-9.fc14.src.rpm
perl-Net-Patricia-1.19-1.fc14.src.rpm
perl-Package-Stash-XS-0.19-1.fc14.src.rpm
perl-Regexp-Assemble-0.34-5.fc14.src.rpm
perl-String-Escape-2010.002-4.fc14.src.rpm
perl-Text-Kakasi-2.04-13.fc14.src.rpm
perl-UNIVERSAL-exports-0.05-8.fc14.src.rpm
php-gettext-1.0.9-2.fc13.src.rpm
php-pear-CodeGen-1.0.7-3.fc14.src.rpm
postal-0.70-6.fc14.src.rpm
pyclutter-gtk-0.10.0-2.fc14.src.rpm
pyflakes-0.4.0-4.fc14.src.rpm
python-billiard-0.3.1-2.fc14.src.rpm
python-rabbyt-0.8.3-2.fc14.src.rpm
python-zope-sqlalchemy-0.6-1.fc14.src.rpm
redir-2.2.1-4.fc12.src.rpm
rhncfg-5.9.22-2.fc14.src.rpm
R-nws-1.7.0.1-1.fc14.src.rpm
rubygem-shotgun-0.4-1.fc14.src.rpm
R-zoo-1.6-3.fc14.src.rpm
sarai-fonts-1.0-9.fc14.src.rpm
sblim-cmpi-params-1.2.6-1.fc13.src.rpm
scim-1.4.9-6.fc13.src.rpm
shed-1.15-5.fc12.src.rpm
sugar-tamtam-0-0.6.20100201git.fc14.src.rpm
Thunar-1.0.2-3.fc14.src.rpm
veusz-1.9-2.fc14.src.rpm
vhd2vl-2.3-1.fc14.src.rpm
virt-what-1.3-3.fc14.src.rpm
w3m-0.5.2-18.fc14.src.rpm
wannier90-1.2-2.fc13.src.rpm
writer2latex-1.0.2-3.fc14.src.rpm
ws-jaxme-0.5.1-4.4.fc12.src.rpm
xmlfy-1.5.3-1.fc14.src.rpm
xpaint-2.9.8.1-1.fc14.src.rpm

Esta historia continúa