Linux From Scratch XXXIV: Algunos paquetes más: openssl, wget y cpio

En el anterior artículo de esta serie hemos dejado configurados los ficheros de la cuenta de usuario para poder trabajar con un poco más de comodidad. Con lo maniático que soy para esas cosas, ya tenía ganas. 🙂 Ahora vamos a instalar algunos paquetes más que nos sirvan para seguir trabajando sin tener que salir del chroot. Ahora mismo, el objetivo es crear nuestro propio initrd para poder arrancar desde USB sin problemas, que es lo que yo quería hacer. El tema es que para conseguirlo hacen falta algunos paquetes que no hemos instalado siguiendo las instrucciones del libro Linux From Scratch. Esto es porque esos paquetes pertenecen al siguiente libro: Beyond Linux From Scratch, así que nos vamos a adelantar un poco para poder usarlos ahora.

Descargando los paquetes necesarios

Uno de los paquetes que quiero tener disponibles es wget, que es con lo que vamos a descargar el código fuente de los demás paquetes y, curiosamente, el libro no lo instala hasta casi la mitad. O sea que de momento tenemos que hacer un truco para poder meter más paquetes en nuestro LFS.

Lo que vamos a hacer es entrar en el chroot desde una terminal y, una vez montada la partición de LFS, usar otra terminal para descargar los paquetes en ella. En cuanto hayamos instalado wget ya podremos descargar cosas sin hacer inventos extraños.

En primer lugar entramos en el chroot.

[~/lfs]$ sudo lfs

Ahora cambiamos a otra terminal. Suponiendo que el script os monte la partición de LFS en /mnt/lfs, los comandos serían estos:

[~]$ cd /mnt/lfs/sources/
[/mnt/lfs/sources]$ wget http://ftp.gnu.org/gnu/wget/wget-1.14.tar.xz
[/mnt/lfs/sources]$ wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
[/mnt/lfs/sources]$ wget http://www.linuxfromscratch.org/patches/blfs/svn/openssl-1.0.1e-fix_manpages-1.patch
[/mnt/lfs/sources]$ cd -

Es importante el último cd para que el script pueda desmontar la partición. Si no, se quejará de que está en uso.

Una vez descargados los paquetes, salimos del chroot.

[root@corellia:/]# exit

Ya tenemos el código fuente de todos los paquetes que nos interesan. Ahora vamos a compilarlos en el orden correcto y generar los binarios. De momento vamos a hacerlo como siempre.

openssl

Este paquete no es estrictamente necesario en este momento, pero wget lo necesita si vamos a compilarlo con soporte para https. Como tengo intención de soportar https, es mejor instalarlo ahora para no tener que volver a compilar wget otra vez más adelante.

[~/lfs]$ sudo lfs openssl-1.0.1e
[root@corellia:/]# cd sources/
[root@corellia:/sources]# tar xvf openssl-1.0.1e.tar.gz
[root@corellia:/sources]# cd openssl-1.0.1e
[root@corellia:/sources/openssl-1.0.1e]# patch -Np1 -i ../openssl-1.0.1e-fix_manpages-1.patch
[root@corellia:/sources/openssl-1.0.1e]# sed -i 's# libcrypto.a##;s# libssl.a##' Makefile
[root@corellia:/sources/openssl-1.0.1e]# ./config --prefix=/usr         \
>          --openssldir=/etc/ssl \
>          shared                \
>          zlib-dynamic
[root@corellia:/sources/openssl-1.0.1e]# make

Con estos comandos compilamos el código fuente de OpenSSL con el mismo sistema que siempre, después de meter un parche necesario y de modificar con sed el Makefile para que no instale las librerías estáticas. Prefiero usar las dinámicas. Otra alternativa, si no queremos usar los scripts, es seguir las instrucciones del libro tal cual aparecen.

Una vez compilado, instalamos creando el paquete con los ficheros binarios que hemos generado durante la compilación.

[root@corellia:/sources/openssl-1.0.1e]# make MANDIR=/usr/share/man install              &&
> install -dv -m755 /usr/share/doc/openssl-1.0.1e &&
> cp -vfr doc/*     /usr/share/doc/openssl-1.0.1e
[root@corellia:/sources/openssl-1.0.1e]# exit
[~/lfs]$ sudo lfsinst openssl-1.0.1e.txz

wget

Esta es una de las razones por la que estoy haciendo esto en este momento. En todo el libro Beyond Linux From Scratch continuamente hay que descargar paquetes y, sin embargo, no proporciona ninguna herramienta para ello hasta la mitad. Además, también quiero poder descargar desde LFS otras cosas que me pueden interesar a mi. Vamos a compilar wget.

[~/lfs]$ sudo lfs wget-1.14
[root@corellia:/]# cd sources
[root@corellia:/sources]# tar xvf wget-1.14.tar.xz
[root@corellia:/sources]# cd wget-1.14
[root@corellia:/sources/wget-1.14]# ./configure --prefix=/usr      \
>             --sysconfdir=/etc  \
>             --with-ssl=openssl &&
> make

El parámetro –with-ssl=openssl es el que hace que hayamos tenido que instalar antes OpenSSL. Podríamos omitirlo, pero habría que volver a compilar wget si quisiéramos añadirle soporte para https.

Ahora generamos el paquete binario y lo instalamos.

[root@corellia:/sources/wget-1.14]# make install
[root@corellia:/sources/wget-1.14]# exit
[~/lfs]$ sudo lfsinst wget-1.14.txz

Con esto ya podemos descargar cosas desde dentro de LFS. De todos modos, seguiremos usando el chroot ya que es necesario para crear paquetes. Aún así, descargar el código fuente será más cómodo.

cpio

Y esta es la otra razón por la que estamos haciendo esto y la más importante. Como he dicho anteriormente, en este momento el objetivo es crear un initrd, y para ello necesitamos el comando cpio, así que hay que instalarlo. Manos a la obra. Además, aquí aprovecharemos el wget que acabamos de instalar para descargar el código fuente.

[~/lfs]$ sudo lfs cpio-2.11
[root@corellia:/]# cd sources/
[root@corellia:/sources]# wget http://ftp.gnu.org/pub/gnu/cpio/cpio-2.11.tar.bz2
[root@corellia:/sources]# tar xvf cpio-2.11.tar.bz2
[root@corellia:/sources]# cd cpio-2.11
[root@corellia:/sources/cpio-2.11]# sed -i -e '/gets is a/d' gnu/stdio.in.h &&
> ./configure --prefix=/usr     \
>             --bindir=/bin     \
>             --libexecdir=/tmp \
>             --enable-mt       \
>             --with-rmt=/usr/sbin/rmt &&
> make &&
> makeinfo --html            -o doc/html      doc/cpio.texi &&
> makeinfo --html --no-split -o doc/cpio.html doc/cpio.texi &&
> makeinfo --plaintext       -o doc/cpio.txt  doc/cpio.texi
[root@corellia:/sources/cpio-2.11]# make check

No voy a instalar la documentación en PostScript ni PDF. Creo que con la documentación estándar y en HTML es suficiente, así que vamos a crear el paquete e instalarlo.

[root@corellia:/sources/cpio-2.11]# make install &&
> install -v -m755 -d /usr/share/doc/cpio-2.11/html &&
> install -v -m644    doc/html/* \
>                     /usr/share/doc/cpio-2.11/html &&
> install -v -m644    doc/cpio.{html,txt} \
>                     /usr/share/doc/cpio-2.11
[root@corellia:/sources/cpio-2.11]# exit
[~/lfs]$ sudo lfsinst cpio-2.11.txz

Por ahora esto es todo. Si no me he olvidado nada (espero que no 🙂 ), esto es lo que necesitamos para crear el initrd, que es lo que vamos a hacer en el próximo post. Así que de momento lo dejo aquí.

EOF

Anuncios