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
Bash-4.4.18
El paquete Bash contiene el Bourne-Again SHell.
Bison-3.0.4
El paquete Bison contiene un generador de analizadores sintácticos.
Para probar los resultados:
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.
Coreutils-8.29
El paquete Coreutils contiene utilidades para mostrar y establecer las características básicas del sistema.
Diffutils-3.6
El paquete Diffutils contiene programas que muestran las diferencias entre archivos o directorios.
File-5.33
El paquete File contiene una utilidad para determinar el tipo de un archivo o archivos dado.
Descomprimimos el paquete:
Compilamos el paquete:
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).
Descomprimimos el paquete:
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.xzEntramos dentro del directorio:
cd m4-1.4.18Y preparamos el paquete M4 para compilar:
./configure --prefix=/toolsCompilamos el paquete:
makeLa 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 checkInstalamos el paquete:
make installSalimos 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:
Entramos dentro del directorio:tar -xvf ncurses-6.1.tar.gz
cd ncurses-6.1En primer lugar, nos aseguramos de que gawk se encuentra primero durante la configuración:
sed -i s/mawk// configurePreparamos ncurses para compilar:
./configure --prefix=/tools \Compilamos el paquete:
--with-shared \
--without-debug \
--without-ada \
--enable-widec \
--enable-overwrite
makeInstalamos el paquete:
make installSalimos 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:
Entramos en el directorio:tar -xvf bash-4.4.18.tar.gz
cd bash-4.4.18Preparamos el paquete para compilar:
./configure --prefix=/tools --without-bash-mallocCompilamos el paquete:
makeLa 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 testsInstalamos el paquete:
make installHacer un vínculo para los programas que usan sh como intérprete de comandos (shell):
ln -sv bash /tools/bin/shSalimos 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:
Entramos en el directoriotar -xvf bison-3.0.4.tar.xz
cd bison-3.0.4Preparamos bison para compilar:
./configure --prefix=/toolsCompilamos el paquete:
makeExiste 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(habrán 4 fallos mas, pero no hay de que preocuparse)
sed -i '/calc++/d' Makefile
make check
Para probar los resultados:
make checkInstalamos el paquete:
make installSalimos 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.gzEntramos en el directorio:
cd bzip2-1.0.6El paquete Bzip2 no contiene un script de configuración. Así que compilar y probarlo con:
makeInstalamos el paquete:
make PREFIX=/tools installSalimos 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:
Entramos en el directorio:tar -xvf coreutils-8.29.tar.xz
cd coreutils-8.29Preparamos coreutils para compilar:
./configure --prefix=/tools --enable-install-program=hostnameCompilamos coreutils:
makeLa 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 checkInstalamos el paquete:
make installSalimos 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:
Entramos dentro del directorio:tar -xvf diffutils-3.6.tar.xz
cd diffutils-3.6Preparamos el paquete para compilar:
./configure --prefix=/toolsCompilamos el paquete:
makeLa 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 checkInstalamos el paquete:
make installSalimos 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.gzEntramos en el directorio:
cd file-5.33Preparamos el paquete para compilarlo:
./configure --prefix=/tools
Compilamos el paquete:
makeLa 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 checkInstalamos el paquete:
make installSalimos 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
tar -xvf findutils-4.6.0.tar.gzEntramos en el directorio del archivo recién descomprimido:
cd findutils-4.6.0Preparamos findutils para su compilación:
./configure --prefix=/toolsCompilamos:
makeLa 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 checkY por útimo, instalamos el paquete:
make installSalimos del directorio:
cd ..
Gawk-4.2.1Este paquete contiene programas para manipular archivos de texto.
Gettext-0.19.8.1
Configuramos el paquete:
Instalamos los programas msgfmt, msgmerge, y xgettext:
Grep-3.1El paquete Grep contiene programas para buscar a través de archivos.
Descomprimimos el paquete:
Gzip-1.9
Descompimimos el paquete:
Make-4.2.1
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:
Patch-2.7.6
Perl-5.26.2
Descomprimimos el paquete:
Solo algunas de las utilidades y bibliotecas necesitan ser instaladas en este momento:
Sed-4.5 El paquete Sed contiene un editor de flujo.
Descomprimimos el paquete:
Tar-1.30
Texinfo-6.5El paquete Texinfo contiene programas para leer, escribir y convertir páginas de información.
Compilamos el paquete:
Util-linux-2.32
Instalamos el paquete:
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:
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:
Ya con esto, el usuario lfs, pertenecerá al grupo de usuarios con privilegios.
Escribiremos el siguiente comando, para volver a ser usuario lfs:
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.
Tiempo aproximado de compilación:
0.2 SBU
Tamaño de disco requerido:
41 MB
Descomprimimos el paquete:
Entramos en el directorio:tar -xvf gawk-4.2.1.tar.xz
cd gawk-4.2.1Preparamos el paquete para su compilación:
./configure --prefix=/toolsCompilamos el paquete:
makeLa 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 checkInstalamos el paquete:
make installSalimos 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:
Entramos en el directorio:tar -xvf gettext-0.19.8.1.tar.xz
cd gettext-0.19.8.1Para nuestro conjunto temporal de herramientas, solo necesitamos construir e instalar tres programas de Gettext.
Configuramos el paquete:
cd gettext-tools
Compilamos el paquete:EMACS="no" ./configure --prefix=/tools --disable-shared
make -C gnulib-libComo 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.
make -C intl pluralx.c
make -C src msgfmt
make -C src msgmerge
make -C src xgettext
Instalamos los programas msgfmt, msgmerge, y xgettext:
cp -v src/{msgfmt,msgmerge,xgettext} /tools/binSalimos de los directorios:
cd ../..
Grep-3.1El 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.gzEntramos en el directorio:
cd grep-3.1Preparamos el paquete para compilar:
./configure --prefix=/toolsCompilamos:
makeLa 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 checkInstalamos el paquete:
make installSalimos 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.9Preparamos el paquete para su compilación:
./configure --prefix=/toolsCompilamos el paquete:
makeLa 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 checkInstalamos el paquete:
make installSalimos 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.cPreparamos para compilación:
./configure --prefix=/tools --without-guileCompilamos 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 checkInstalamos el paquete:
make installSalimos 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.xzEntramos en el directorio:
cd patch-2.7.6Preparamos el paquete para compilar:
./configure --prefix=/toolsCompilamos el paquete:
makeLa 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 checkInstalamos el paquete:
make installSalimos 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.xzEntramos en el directorio:
cd perl-5.26.2Preparamos el paquete para compilación:
sh Configure -des -Dprefix=/tools -Dlibs=-lmConstruimos el paquete:
makeAunque 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/binSalimos del directorio:
mkdir -pv /tools/lib/perl5/5.26.2
cp -Rv lib/* /tools/lib/perl5/5.26.2
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.xzEntramos en el directorio:
cd sed-4.55Preparamos el paquete para compilarlo:
./configure --prefix=/toolsCompilamos el paquete:
makeLa 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 checkInstalamos el paquete:
make installSalimos 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:
Entramos en el directorio:tar -xvf tar-1.30.tar.xz
cd tar-1.30Preparamos para compilarlo:
./configure --prefix=/toolsCompilamos el paquete:
makeLa 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 checkInstalamos el paquete:
make installSalimos del directorio:
cd ..
Texinfo-6.5El 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:
Preparamos el paquete para su compilación:tar -xvf texinfo-6.5.tar.xz
./configure --prefix=/tools
makeLa 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 checkInstalamos el paquete:
make installSalimos 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:
Entramos dentro del directorio:tar -xvf util-linux-2.32.tar.xz
cd util-linux-2.32Preparamos el paquete para su compilación:
Compilamos el paquete:./configure --prefix=/tools \
--without-python \
--disable-makeinstall-chown \
--without-systemdsystemunitdir \
--without-ncurses \
PKG_CONFIG=""
makeEn este paquete no realizamos ningún test.
Instalamos el paquete:
make installSalimos 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:
Entramos en el directorio:tar -xvf xz-5.2.4.tar.xz
cd xz-5.2.4Preparamos el paquete para compilarlo:
./configure --prefix=/toolsCompilamos el paquete:
makeLa 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 checkInstalamos el paquete:
make installSalimos 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:
suNos 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:
visudoY añadimos a continuación de la siguiente línea que nos aparece:
# User privilege specificationAñadiremos la siguiente línea:
lfs ALL=(ALL:ALL) ALLPulsaremos 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 lfsNos 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/toolsAunque 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.
Comentarios
Publicar un comentario