Linux From Scrach (Parte 5 - Construyendo un sistema temporal 3)

Después de instalar y testear el paquete DejaGNU, continuaremos con el paquete M4.
Aún nos queda mucho por hacer, pero ya casi tenemos lo básico para empezar.

Se está haciendo un poco largo de crear, pero estamos aprendiendo a crear un sistema operativo Linux desde cero. Pienso que merece la pena, al menos intentarlo, ¿no?. ¡Al ataque!


M4-1.4.18 
El paquete M4 contiene un macro procesador.
Tiempo aproximado de compilación: 0.2 SBU
Tamaño de disco requerido: 19 MB
Descomprimimos el paquete M4:
tar -xvf m4-1.4.18.tar.xz
 Entramos dentro del directorio:
cd m4-1.4.18
Y preparamos el paquete M4 para compilar:
./configure --prefix=/tools
Compilamos el paquete:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas de M4 de todos modos, ejecutamos el siguiente comando:
make check
Instalamos el paquete:
make install
Salimos del directorio
cd ..

Ncurses-6.1
El paquete Ncurses contiene librerías para el manejo independiente del terminal de pantallas de caracteres.
Tiempo aproximado de compilación: 0.5 SBU
Tamaño de disco requerido: 41 MB
Descomprimimos el paquete Ncurses:
tar -xvf ncurses-6.1.tar.gz
 Entramos dentro del directorio:
cd ncurses-6.1
En primer lugar, nos aseguramos de que gawk se encuentra primero durante la configuración:
sed -i s/mawk// configure
Preparamos ncurses para compilar:
./configure --prefix=/tools \
            --with-shared   \
            --without-debug \
            --without-ada   \
            --enable-widec  \
            --enable-overwrite
Compilamos el paquete:
make
Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Bash-4.4.18
El paquete Bash contiene el Bourne-Again SHell.
Tiempo aproximado de compilación: 0.4 SBU
Tamaño de disco requerido: 61 MB
Descomprimimos el paquete bash: 
tar -xvf bash-4.4.18.tar.gz
Entramos en el directorio:
cd bash-4.4.18
Preparamos el paquete para compilar:
./configure --prefix=/tools --without-bash-malloc
 Compilamos el paquete:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas de M4 de todos modos, ejecutamos el siguiente comando:
make tests
Instalamos el paquete:
make install
Hacer un vínculo para los programas que usan sh como intérprete de comandos (shell):
ln -sv bash /tools/bin/sh
Salimos del directorio:
cd ..

Bison-3.0.4
El paquete Bison contiene un generador de analizadores sintácticos.

Tiempo aproximado de compilación: 0.3 SBU
Tamaño de disco requerido: 32 MB
Descomprimimos el paquete:
tar -xvf bison-3.0.4.tar.xz
Entramos en el directorio
cd bison-3.0.4
Preparamos bison para compilar:
./configure --prefix=/tools
Compilamos el paquete:
make
Existe un pequeño error en el test, y para solventarlo, tenemos que crear uno archivo para evitar dicho error en el test:
cp Makefile Makefile.bak
sed -i '/calc++/d' Makefile
make check
(habrán 4 fallos mas, pero no hay de que preocuparse)
 
Para probar los resultados:
make check
Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Bzip2-1.0.6 

El paquete Bzip2 contiene programas para comprimir y descomprimir archivos. La compresión de archivos de texto con bzip2 produce un porcentaje de compresión mucho mejor que con el gzip tradicional.
tar -xvf bzip2-1.0.6.tar.gz
Entramos en el directorio:
cd bzip2-1.0.6
El paquete Bzip2 no contiene un script de configuración. Así que compilar y probarlo con:
make
Instalamos el paquete:
make PREFIX=/tools install
Salimos del directorio
cd ..

Coreutils-8.29
El paquete Coreutils contiene utilidades para mostrar y establecer las características básicas del sistema.
Tiempo aproximado de compilación: 0.7 SBU
Tamaño de disco requerido: 139 MB
Descomprimomos el paquete:
tar -xvf coreutils-8.29.tar.xz
Entramos en el directorio:
cd coreutils-8.29
Preparamos coreutils para compilar:
./configure --prefix=/tools --enable-install-program=hostname
Compilamos coreutils:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make RUN_EXPENSIVE_TESTS=yes check
 Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Diffutils-3.6
 
El paquete Diffutils contiene programas que muestran las diferencias entre archivos o directorios.
Tiempo aproximado de compilación: 0.2 SBU
Tamaño de disco requerido: 22 MB
Descomprimimos el paquete:
tar -xvf diffutils-3.6.tar.xz
Entramos dentro del directorio:
cd diffutils-3.6
Preparamos el paquete para compilar:
./configure --prefix=/tools
Compilamos el paquete:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make check
 Instalamos el paquete:
make install
 Salimos del directorio
cd ..

File-5.33

El paquete File contiene una utilidad para determinar el tipo de un archivo o archivos dado.
Tiempo aproximado de compilación: 0.1 SBU
Tamaño de disco requerido: 16 MB

Descomprimimos el paquete:
tar -xvf file-5.33.tar.gz
Entramos en el directorio:
 cd file-5.33
Preparamos el paquete para compilarlo:
./configure --prefix=/tools

Compilamos el paquete:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make check
 Instalamos el paquete:
make install
Salimos del directorio
cd ..

Findutils-4.6.0
 
El paquete Findutils contiene programas para buscar archivos. Estos programas se proporcionan para buscar recursivamente a través de un árbol de directorios y para crear, mantener y buscar en una base de datos (a menudo más rápido que el hallazgo recursivo, pero poco confiable si la base de datos no se ha actualizado recientemente).
Tiempo aproximado de compilación: 0.3 SBU
Tamaño de disco requerido: 35 MB

Descomprimimos el paquete:
tar -xvf findutils-4.6.0.tar.gz
Entramos en el directorio del archivo recién descomprimido:
cd findutils-4.6.0
Preparamos findutils para su compilación:
./configure --prefix=/tools
Compilamos:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make check
Y por útimo, instalamos el paquete:
make install
Salimos del directorio:
cd ..

Gawk-4.2.1Este paquete contiene programas para manipular archivos de texto.
Tiempo aproximado de compilación: 0.2 SBU
Tamaño de disco requerido: 41 MB
Descomprimimos el paquete:
tar -xvf gawk-4.2.1.tar.xz 
Entramos en el directorio:
cd  gawk-4.2.1
Preparamos el paquete para su compilación:
./configure --prefix=/tools
Compilamos el paquete:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando (a mi en el test, me ha dado un error MPFR texts not supported on this system, pero no hay problema, es un falso error):
make check
Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Gettext-0.19.8.1
El paquete Gettext contiene utilidades para internacionalización y localización. Estos permiten que los programas se compilen con NLS (Native Language Support), lo que les permite emitir mensajes en el idioma nativo del usuario.
Tiempo aproximado de compilación: 0.8 SBU
Tamaño de disco requerido: 164 MB
Descomprimimos el paquete:
tar -xvf gettext-0.19.8.1.tar.xz
Entramos en el directorio:
cd gettext-0.19.8.1
Para nuestro conjunto temporal de herramientas, solo necesitamos construir e instalar tres programas de Gettext.
Configuramos el paquete:
cd gettext-tools 
EMACS="no" ./configure --prefix=/tools --disable-shared 
Compilamos el paquete:
make -C gnulib-lib
make -C intl pluralx.c
make -C src msgfmt
make -C src msgmerge
make -C src xgettext
Como solo se han compilado tres programas, no es posible ejecutar el conjunto de pruebas sin compilar bibliotecas de soporte adicionales del paquete Gettext. Por lo tanto, no se recomienda intentar ejecutar el conjunto de pruebas en esta etapa.
Instalamos los programas msgfmt, msgmerge, y xgettext:
cp -v src/{msgfmt,msgmerge,xgettext} /tools/bin
Salimos de los directorios:
cd ../..

Grep-3.1
El paquete Grep contiene programas para buscar a través de archivos.
Tiempo aproximado de compilación: 0.2 SBU
Tamaño de disco requerido: 19 MB

Descomprimimos el paquete:
tar -xvf grep-3.1.tar.gz
Entramos en el directorio:
cd grep-3.1
Preparamos el paquete para compilar:
./configure --prefix=/tools
 Compilamos:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make check
Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Gzip-1.9 
El paquete Gzip contiene programas para comprimir y descomprimir archivos.
Tiempo aproximado de compilación: 0.1 SBU
Tamaño de disco requerido: 10 MB

Descompimimos el paquete:
tar -xvf gzip-1.9.tar.gz
Entramos en el directorio:
cd gzip-1.9
Preparamos el paquete para su compilación:
./configure --prefix=/tools
 Compilamos el paquete:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make check
Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Make-4.2.1
El paquete Make contiene un programa para compilar paquetes.
Tiempo aproximado de compilación: 0.1 SBU
Tamaño de disco requerido: 13 MB
Descomprimimos el paquete:
tar -xvf make-4.2.1.tar.bz2
Entramos en el directorio: 
cd make-4.2.1
Primero, solucione un error causado por glibc-2.27: 
sed -i '211,217 d; 219,229 d; 232 d' glob/glob.c
Preparamos para compilación:
./configure --prefix=/tools --without-guile
Compilamos el paquete.
make

La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make check
Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Patch-2.7.6
El paquete Patch contiene un programa para modificar o crear archivos mediante la aplicación de un archivo "parche" típicamente creado por el programa diff.
Tiempo aproximado de compilación: 0.2 SBU
Tamaño de disco requerido: 12 MB
Descomprimimos el paquete: 

tar -xvf patch-2.7.6.tar.xz
Entramos en el directorio:
 cd patch-2.7.6
Preparamos el paquete para compilar:
./configure --prefix=/tools
Compilamos el paquete:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make check
Instalamos el paquete:
make install
 Salimos del directorio:
cd ..

Perl-5.26.2
El paquete Perl contiene la Extracción práctica y el Idioma del informe.
Tiempo aproximado de compilación: 1.3 SBU
Tamaño de disco requerido: 261 MB

Descomprimimos el paquete:
tar -xvf perl-5.26.2.tar.xz
Entramos en el directorio:
cd perl-5.26.2
Preparamos el paquete para compilación:
sh Configure -des -Dprefix=/tools -Dlibs=-lm
 Construimos el paquete:
make
Aunque Perl viene con un conjunto de pruebas, sería mejor esperar hasta que se instale mas adelante.
Solo algunas de las utilidades y bibliotecas necesitan ser instaladas en este momento:

cp -v perl cpan/podlators/scripts/pod2man /tools/bin
mkdir -pv /tools/lib/perl5/5.26.2
cp -Rv lib/* /tools/lib/perl5/5.26.2
Salimos del directorio:
cd ..

Sed-4.5
El paquete Sed contiene un editor de flujo.
Tiempo aproximado de compilación: 0.1 SBU
Tamaño de disco requerido: 16 MB

Descomprimimos el paquete:
tar -xvf sed-4.5.tar.xz
Entramos en el directorio:
cd sed-4.55
Preparamos el paquete para compilarlo:
./configure --prefix=/tools
Compilamos el paquete:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make check
Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Tar-1.30
El paquete Tar contiene un programa de archivo. 
Tiempo aproximado de compilación: 0.3 SBU
Tamaño de disco requerido: 34 MB
Descomprimimos el paquete:
tar -xvf tar-1.30.tar.xz
Entramos en el directorio:
cd tar-1.30
Preparamos para compilarlo:
./configure --prefix=/tools
Compilamos el paquete:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make check
Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Texinfo-6.5
El paquete Texinfo contiene programas para leer, escribir y convertir páginas de información.
Tiempo aproximado de compilación: 0.2 SBU
Tamaño de disco requerido: 100 MB
Descomprimimos el paquete:
tar -xvf texinfo-6.5.tar.xz
Preparamos el paquete para su compilación:
./configure --prefix=/tools
Compilamos el paquete:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make check
Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Util-linux-2.32
El paquete Util-linux contiene diversos programas de utilidades.
Tiempo aproximado de compilación: 0.9 SBU
Tamaño de disco requerido: 131 MB
Descomprimimos el paquete:
tar -xvf util-linux-2.32.tar.xz
Entramos dentro del directorio:
cd util-linux-2.32
Preparamos el paquete para su compilación:
./configure --prefix=/tools                \
            --without-python               \
            --disable-makeinstall-chown    \
            --without-systemdsystemunitdir \
            --without-ncurses              \
            PKG_CONFIG="" 
Compilamos el paquete:
make
En este paquete no realizamos ningún test.
Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Xz-5.2.4
El paquete Xz contiene programas para comprimir y descomprimir archivos. Proporciona capacidades para lzma y los formatos de compresión xz más nuevos. La compresión de archivos de texto con xz produce un mejor porcentaje de compresión que con los comandos tradicionales gzip o bzip2. 
Tiempo aproximado de compilación: 0.2 SBU
Tamaño de disco requerido: 17 MB
Descomprimimos el paquete:
tar -xvf xz-5.2.4.tar.xz
Entramos en el directorio:
cd xz-5.2.4
Preparamos el paquete para compilarlo:
./configure --prefix=/tools
Compilamos el paquete:
make
La compilación ahora está completa. No tenemos por qué ejecutar el conjunto de pruebas, no es obligatorio para las herramientas temporales, y podemos saltar este paso. Para ejecutar el conjunto de pruebas, ejecutaremos el siguiente comando:
make check
Instalamos el paquete:
make install
Salimos del directorio:
cd ..

Cambio de propietario
Los comandos en el resto de este tutorial se deben realizar cuando se inicia sesión como usuario root y ya no como usuario lfs. Además, comprueba que $LFS está establecido en el entorno de root. 



Actualmente, el directorio $LFS/tools es propiedad del usuario lfs, un usuario que existe solo en el sistema host. Si el directorio $LFS/tools se mantiene como está, los archivos son propiedad de un ID de usuario sin una cuenta correspondiente. Esto es peligroso porque una cuenta de usuario creada más tarde podría obtener este mismo ID de usuario y sería propietaria del directorio $LFS/tools y todos los archivos que contiene, exponiendo estos archivos a una posible manipulación maliciosa.

Para evitar este problema, puede agregar el usuario lfs al nuevo sistema LFS más adelante al crear el archivo /etc/passwd, teniendo cuidado de asignarle los mismos ID de usuario y grupo que en el sistema host. 
Mejor aún, cambie la propiedad del directorio $LFS/tools al usuario root ejecutando el siguiente comando:
su
Nos pedirá la contraseña de root de nuestro sistema.
Ahora tenemos que tener cuidado con lo que hagamos en consola, ya que somos root, y podemos fastidiar el sistema.
Escribiremos el siguiente comando, para permitir al usuario lfs ejecutar comandos como sudoers:
visudo
Y añadimos a continuación de la siguiente línea que nos aparece:
# User privilege specification
Añadiremos la siguiente línea:
lfs     ALL=(ALL:ALL) ALL
Pulsaremos la combinación de teclas: CTRL + O. Nos preguntará, el nombre del archivo, (solo tenemos que pulsar el botón ENTER), y luego CTRL + X para salir.
Ya con esto, el usuario lfs, pertenecerá al grupo de usuarios con privilegios.
Escribiremos el siguiente comando, para volver a ser usuario lfs:
su lfs
Nos pedirá la contraseña de lfs, y solo nos falta escribir el siguiente comando, para cambiar el propietario del directorio $LFS/tools:
sudo chown -R root:root $LFS/tools
Aunque el directorio $LFS/tools se puede eliminar una vez que el sistema LFS ha finalizado, puede conservarse para crear sistemas LFS adicionales de la misma versión de libro. La mejor manera de hacer una copia de seguridad de $LFS/tools es una cuestión de preferencia personal.

Si tiene la intención de conservar las herramientas temporales para usar en la construcción de futuros sistemas LFS, ahora es el momento de hacerles una copia de seguridad. Los comandos posteriores, alterarán las herramientas actualmente en funcionamiento, dejándolas inútiles para futuras versiones.

Ya hemos terminado de crear un sistema temporal, ahora es cuando empezaremos a construir el sistema. Espero que os esté gustando la experiencia.

Entradas populares de este blog

Acerca de los mensajes de tipo... "Por favor no agreges a este usuario es un virus!"

Temas oficiales para Windows XP

Linux From Scrach (Parte 1 - Preparación del sistema)