Capítulo 5. Construir un sistema temporal
5.1. Introducción
Este capítulo muestra cómo compilar e instalar un sistema Linux mínimo. Este sistema contendrá sólo las herramientas necesarias para poder iniciar la construcción del sistema LFS definitivo en el Capítulo 6, permitiendo un entorno de trabajo algo más amigable para el usuario que el que un entorno mínimo ofrecería.
La construcción de este sistema mínimo se hará en dos etapas. La primera es construir un conjunto de herramientas independiente del sistema anfitrión (compilador, ensamblador, enlazador, librerías y unas pocas herramientas útiles).
La segunda etapa utiliza estas herramientas para construir el resto de herramientas esenciales.
Los ficheros compilados en este capítulo se instalarán bajo el directorio $LFS/Tools para mantenerlos separados de los ficheros que se instalen en el siguiente capítulo y de los directorios de producción de tu anfitrión. Puesto que los paquetes compilados aquí son puramente temporales, no queremos que estos ficheros contaminen el futuro sistema LFS.
5.2. Notas técnicas sobre las herramientas
Esta sección explica algunos de los razonamientos y detalles técnicos que hay detrás del sistema de construcción.
No es esencial que entiendas todo esto inmediatamente. La mayor parte tendrá sentido cuando hayas hecho una construcción real. Puedes consultar esta sección en cualquier momento durante la construcción.
El principal objetivo del Capítulo 5 es proporcionar un entorno temporal al que podamos entrar con chroot y a partir del cual podamos generar una construcción limpia y libre de problemas del sistema LFS en el Capítulo 6. Por el camino intentaremos independizarnos todo lo posible del sistema anfitrión, y para eso construimos unas herramientas principales autocontenidas y autohospedadas. Debería tenerse en cuenta que el proceso de construcción ha sido diseñado de forma que se minimice el riesgo para los nuevos lectores y, al mismo tiempo, se proporcione el máximo valor educacional.
Importante
Antes de continuar, deberías informarte del nombre de tu plataforma de trabajo, conocido con frecuencia como target triplet (triplete del objetivo). Para muchos el “target triplet” posiblemente sea i686-pc-linux-gnu. Una forma simple de determinar tu “target triplet” es ejecutar el guión config.guess que se incluye con las fuentes de muchos paquetes. Desempaqueta las fuentes de Binutils, ejecuta el guión ./config.guess y anota el resultado.
Igualmente necesitarás saber el nombre del enlazador dinámico de tu plataforma, también conocido como cargador dinámico (no debe confundirse con el enlazador estándar ld, que es parte de Binutils). El enlazador dinámico suministrado por Glibc encuentra y carga las librerías compartidas necesarias para un programa, prepara el programa y lo ejecuta. Usualmente el nombre del enlazador dinámico
es ld-linux.so.2. En plataformas menos conocidas puede ser ld.so.1 y en las nuevas plataformas de 64 bits puede que incluso sea algo totalmente diferente. El nombre del enlazador dinámico de tu plataforma puede determinarse mirando en el directorio /lib de tu sistema anfitrión. Un modo seguro es inspeccionar un binario cualquiera de tu sistema anfitrión ejecutando: readelf -l <nombre del binario> | grep interpreter y anotar la salida. La referencia autorizada que cubre todas las plataformas está en el fichero shlib- versions en la raíz del árbol de las fuentes de Glibc.
Algunas claves técnicas sobre cómo funciona el método de construcción del Capítulo 5:
• Similar en principio a la compilación cruzada, donde las herramientas instaladas dentro del mismo prefijo trabajan en cooperación y utilizan una pequeña “magia” de GNU.
• Cuidada manipulación de la ruta de búsqueda de librerías del enlazador estándar para asegurar que los programas se enlazan sólo contra las librerías que elegimos.
• Cuidada manipulación del fichero specs de gcc para indicarle al compilador cuál es el enlazador dinámico a usar.
Se instala primero Binutils debido a que, tanto en GCC como en Glibc, la ejecución de configure realiza varias pruebas sobre el ensamblador y el enlazador para determinar qué características del software deben activarse o desactivarse.
Esto es más importante de lo que uno podría pensar. Un GCC o una Glibc incorrectamente configurados puede provocar unas herramientas sutilmente rotas cuyo impacto podría no notarse hasta casi finalizada la construcción de una distribución completa. Un fallo en el banco de pruebas normalmente resaltará dicho error antes de perder demasiado tiempo.
Binutils instala tanto su ensamblador como su enlazador en dos ubicaciones, /tools/bin y /tools/$TARGET_TRIPLET/bin. Las herramientas de una ubicación son enlaces duros a la otra. Un aspecto importante del enlazador es su orden de búsqueda de librerías. Puede obtenerse información detallada de ld pasándole la opción - - verbose. Por ejemplo, un ld --verbose | grep SEARCH mostrará las rutas de búsqueda actuales y su orden. Puedes ver qué ficheros son realmente enlazados por ld compilando un programa simulado y pasándole la opción
--verbose.
Por ejemplo, gcc dummy.c -Wl,--verbose 2>&1 | grep succeeded te mostrará todos los ficheros abiertos con éxito durante el enlazado.
El siguiente paquete instalado es GCC y durante su fase configure verás, por ejemplo:
checking what assembler to use...
/tools/i686-pc-linux-gnu/bin/as
checking what linker to use...
/tools/i686-pc-linux-gnu/bin/ld
comprobando qué ensamblador usar...
/tools/i686-pc-linux-gnu/bin/as
comprobando qué enlazador usar...
/tools/i686-pc-linux-gnu/bin/ld
Esto es importante por la razón mencionada antes. También demuestra que el guión configure de GCC no explora los directorios del PATH para encontrar las herramientas a usar. Sin embargo, durante la operación real del propio gcc, no se utilizan necesariamente las mismas rutas de búsqueda. Para saber cuál es el enlazador estándar que utilizará gcc, ejecuta: gcc -print-prog-name=ld.
Puedes obtener información detallada a partir de gcc pasándole la opción - v mientras compilas un programa simulado. Por ejemplo: gcc -v dummy.c te mostrará los detalles sobre las fases de preprocesamiento, compilación y ensamblado, incluidas las rutas de búsqueda de gcc y su orden.
A continuación se instala Glibc. Las consideraciones más importantes para la construcción de Glibc son el compilador, las herramientas de binarios y las cabeceras del núcleo. Normalmente el compilador no es problema, pues Glibc siempre utilizará el gcc que se encuentre en un directorio del PATH. Las herramientas de binarios y las cabeceras del núcleo pueden ser algo más problemáticas, así que no nos arriesgaremos y haremos uso de las opciones disponibles de configure para forzar las opciones correctas. Después de ejecutar configure puedes revisar el contenido del fichero config.make en el directorio glibc-build para ver todos los detalles importantes. Encontrarás algunas cosas interesantes, como el uso de CC="gcc - B/tools/bin/" para controlar qué herramientas de binarios son usadas, y también el uso de las opciones
-nostdinc y -isystem para controlar la ruta de búsqueda de cabeceras del compilador. Estos detalles ayudan a resaltar un aspecto importante del paquete Glibc: es muy autosuficiente en cuanto a su maquinaria de construcción y generalmente no se apoya en las opciones por defecto de las herramientas.
Después de la instalación de Glibc, haremos algunos ajustes para asegurar que la búsqueda y el enlazado tengan lugar solamente dentro de nuestro directorio /tools. Instalaremos un ld ajustado, que tiene limitada su ruta de búsqueda interna a
/tools/lib. Entonces retocaremos el fichero specs de gcc para que apunte a nuestro nuevo enlazador dinámico en /tools/lib. Este último paso es vital para el proceso completo. Como se mencionó antes, dentro de cada ejecutable compartido ELF se fija la ruta a un enlazador dinámico. Puedes verificar esto mediante: readelf
-l <nombre del binario> | grep interpreter. Retocando el ficheros specs de gcc estaremos seguros de que todo binario compilado desde aquí hasta el final de este capítulo usará nuestro nuevo enlazador dinámico en /tools/lib.
La necesidad de utilizar el nuevo enlazador dinámico es también la razón por la que aplicamos el parche Specs en la segunda fase de GCC. De no hacer esto los propios programas de GCC incluirían dentro suyo el nombre del enlazador dinámico del directorio /lib del sistema anfitrión, lo que arruinaría nuestro objetivo de librarnos del anfitrión.
Durante la segunda fase de Binutils podremos usar la opción --with-lib-path de configure para controlar la ruta de búsqueda de librerías de ld. A partir de este punto el corazón de las herramientas está autocontenido y autohospedado. El resto de los paquetes del Capítulo 5 se construirán todos contra la nueva Glibc en / tools.
Tras entrar en el entorno chroot en el Capítulo 6, el primer gran paquete a instalar es Glibc, debido a su naturaleza autosuficiente. Una vez que esta Glibc se instale dentro de /usr, haremos un rápido cambio en las opciones por defecto de las herramientas y entonces procederemos a la construcción real del sistema LFS.
5.3. Instrucciones generales de compilación
Durante la construcción de paquetes hay varias suposiciones hechas dentro de las instrucciones:
• Varios de los paquetes están revisados antes de la compilación, pero sólo cuando el parche es necesario para evitar una problema. Un parche es a menudo necesario, tanto en este capítulo y el siguiente, pero a veces en sólo uno o el otro.
Por lo tanto, no se preocupe si las instrucciones para descargar el parche parecen estar ausentes. Los mensajes de advertencia de desplazamiento o pelusa también se pueden encontrar al aplicar un parche. No se preocupe por estas advertencias, ya que el parche fue aplicado con éxito.
Por lo tanto, no se preocupe si las instrucciones para descargar el parche parecen estar ausentes. Los mensajes de advertencia de desplazamiento o pelusa también se pueden encontrar al aplicar un parche. No se preocupe por estas advertencias, ya que el parche fue aplicado con éxito.
Durante la compilación de la mayoría de los paquetes, habrá varias señales de advertencia que se desplazan por la pantalla. Estas son normales y pueden ser ignoradas. Estas advertencias son como parecen, las advertencias sobre obsoleta, pero no válida, el uso de la C o C + + la sintaxis. El estándar C cambia con bastante frecuencia, y algunos paquetes todavía utilizan el antiguo estándar. Esto no es un problema, pero es una advertencia.
Importante
Después de instalar cada paquete, eliminar la fuente y los directorios de construcción, a menos que se especifique lo contrario. Eliminar las fuentes evita errores de configuración cuando el mismo paquete se reinstale más adelante.
Después de instalar cada paquete, eliminar la fuente y los directorios de construcción, a menos que se especifique lo contrario. Eliminar las fuentes evita errores de configuración cuando el mismo paquete se reinstale más adelante.
Comprobar una vez más que la variable de entorno LFS está correctamente configurado:
echo $LFS
Asegúrese de que la salida muestra la ruta al punto de la partición LFS montaje, que es /mnt /lfs, utilizando nuestro ejemplo.
Por último, dos cuestiones importantes último hay que destacar:
Importante
Las instrucciones de construcción asumen que el intérprete de comandos bash está en uso.
Las instrucciones de construcción asumen que el intérprete de comandos bash está en uso.
Importante
Antes de emitir las instrucciones de compilación de un paquete, el paquete debe ser descomprimido como usuario lfs, y un cd en el directorio creado se debe realizar.
Antes de emitir las instrucciones de compilación de un paquete, el paquete debe ser descomprimido como usuario lfs, y un cd en el directorio creado se debe realizar.
Para volver a insistir en el proceso de construcción:
1. Coloque todos los fuentes y parches en un directorio que sea accesible
desde el entorno chroot como / mnt / lfs / sources /. No ponga
fuentes en / mnt / lfs / tools /.
2. Cambiar al directorio de fuentes.
3. Para cada paquete:
a. Utilizando el programa tar, extraer el paquete que se construirá.
b. Cambie el directorio creado cuando el paquete sea extraido.
c. Siga las instrucciones del libro para la construcción del paquete.
d. Volver al directorio de fuentes.
e. Eliminar el directorio con las fuentes y los directorios(paquete) que fueron creados en el proceso de construcción.
5.4. Binutils-2.21 - Paso 1
El paquete Binutils contiene un enlazador, un ensamblador y otras utilidades para trabajar con ficheros objeto.
Tiempo estimado de construcción: 1 SBU
Espacio requerido en disco: 248 MB
5.4.1Instalación de Binutils
Nota
Volver atrás y volver a leer las notas en la sección anterior. Entender las notas etiquetadas importante le ahorrará un montón de problemas más adelante.
Volver atrás y volver a leer las notas en la sección anterior. Entender las notas etiquetadas importante le ahorrará un montón de problemas más adelante.
Es importante que Binutils sea el primer paquete que compiles, pues tanto Glibc como GCC llevan a cabo varias comprobaciones sobre el enlazador y el ensamblador disponibles para determinar qué características activar.
La documentación de Binutils recomienda construirlo en un directorio dedicado, fuera del árbol de las fuentes:
mkdir -v ../binutils-build
cd ../binutils-build
Nota
A fin de que los valores SBU mostrados en el resto del libro sean de utilidad, mide el tiempo que se tarda en construir este paquete desde la compilación, hasta e incluyendo la primera instalación. Para ello, envuelve los comandos dentro de un comando time como este: time { ./configure ... && make && make install; }.
Nota
El estimado de construcción valores SBU y espacio en disco necesario en el capítulo 5 no incluye los datos del conjunto de pruebas.
El estimado de construcción valores SBU y espacio en disco necesario en el capítulo 5 no incluye los datos del conjunto de pruebas.
Prepara Binutils para su compilación:
../binutils-2.21/configure \
--target=$LFS_TGT --prefix=/tools \
--disable-nls --disable-werror
Significado de las opciones de configuracion:
--target=$LFS_TGT
Debido a que la descripción de la máquina en la variable de LFS_TGT es un poco diferente que el valor devuelto por el script config.guess, este parámetro le dirá el script de configuración para ajustar el sistema de construcción Binutil para construir una cruz enlazador.
--prefix=/tools
Esto le indica al guión configure que los programas de Binutils se instalarán en el directorio / tools.
--disable-nls
Esta opción desactiva la internacionalización, pues i18n no es necesario en las herramientas temporales.
--disable-werror
Esto evita que la construcción se pare en el caso de que el compilador del anfitrión genere avisos.
Compila el paquete:
make
La compilación se ha completado. Normalmente deberíamos ejecutar ahora el banco de pruebas, pero en esta temprana fase el entorno de trabajo para los bancos de pruebas (Tcl, Expect y DejaGnu) todavía no está en su sitio. Los beneficios de ejecutar las pruebas ahora son mínimos, pues los programas de esta primera fase pronto serán sustituidos por los de la segunda.
Si se construye en x86_64, crea un enlace para asegurar la sanidad de las herramientas principales:
case $(uname -m) in
x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;;
esac
Instala el paquete:
make install
Los detalles sobre este paquete se encuentran en la Sección 6.12.2, "Contenido de Binutils".
5.5. GCC-4.5.2 - Paso 1
El paquete GCC contiene la colección de compiladores GNU, que incluye los compiladores C y C++.
Tiempo estimado de construcción: 5.0 SBU
Espacio requerido en disco: 809MB
5.5.1. La instalación de la Cruz del CCG
GCC requiere ahora que los paquetes de GMP, MPFR y MPC. Como estos paquetes no pueden ser incluidos en tu sistema anfitrión, que se construirá con GCC. Descomprima cada paquete en el directorio de las fuentes del CCG y cambie el nombre del los directorios resultantes para los procedimientos de construcción del CCG que automáticamente utilizará:
tar -jxf ../mpfr-3.0.0.tar.bz2
mv -v mpfr-3.0.0 mpfr
tar -jxf ../gmp-5.0.1.tar.bz2
mv -v gmp-5.0.1 gmp
tar -zxf ../mpc-0.8.2.tar.gz
mv -v mpc-0.8.2 mpc
La documentación de GCC recomienda construirlo fuera del directorio de la fuente en un directorio de construcción dedicado:
mkdir -v ../gcc-build
cd ../gcc-build
Prepara GCC para su compilación:
../gcc-4.5.2/configure \
--target=$LFS_TGT --prefix=/tools \
--disable-nls --disable-shared --disable-multilib \
--disable-decimal-float --disable-threads \
--disable-libmudflap --disable-libssp \
--disable-libgomp --enable-languages=c \
--with-gmp-include=$(pwd)/gmp --with-gmp-lib=$(pwd)/gmp/.libs \
--without-ppl --without-cloog
El significado de las opciones de configuración:
--disable-shared
Esta opción fuerza que GCC vincula sus bibliotecas internas estática. Hacemos esto para evitar posibles problemas con el sistema anfitrión.
--disable-decimal-float,--disable-threads,
--disable-libmudflap,--disable-libssp, --disable-libgomp
Estos interruptores para desactivar el soporte para la extensión de coma flotante, threading, libmudflap, libssp y libgomp respectivamente. Estas características no se compilarán en la construcción de un compilador cruzado y no son necesarias
para la tarea de compilación cruzada de la libc temporal.
para la tarea de compilación cruzada de la libc temporal.
--disable-multilib
En x86_64, LFS no es compatible aún con una configuración multilib. Este interruptor es inofensivo para la arquitectura x86.
--enable-languages=c
Esta opción nos asegura que sólo se construya el compilador de C. Este es el único lenguaje que se necesita ahora.
--with-gmp-include=...
Esta opción le indica a GCC en las cabeceras de GMP se encuentran.
--with-gmp-lib=...
Esta opción le indica a GCC en la librería GMP se encuentra.
--without-ppl, --without-cloog
Estos interruptores de prevencion de la construcción de GCC contra las bibliotecas PPL y CLooG s que pueden estar presentes en el sistema anfitrion, pero no estará disponible en el entorno chroot.
Compilar GCC ejecutando:
Make
La compilación está completa. En este punto, el conjunto de pruebas que normalmente se corren, pero, como se mencionó antes, el marco de prueba
no es todavía en su lugar. Los beneficios de ejecutar las pruebas en este momento son mínimos, pues los programas de esta primera fase pronto serán sustituidos.
no es todavía en su lugar. Los beneficios de ejecutar las pruebas en este momento son mínimos, pues los programas de esta primera fase pronto serán sustituidos.
Instala el paquete:
make install
Usando - - disable-shared significa que el libgcc_ eh. un archivo no es creado e instalado. El paquete Glibc depende de esta biblioteca, ya que utiliza - lgcc_ eh dentro de su sistema de construcción. Esta dependencia puede ser satisfecha por la creación de un enlace simbólico a libgcc. a, desde que el fichero que contiene el resultado final será la contenida en los objetos que normalmente libgcc_ eh. a:
ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
sed 's/libgcc/&_eh/'`
Los detalles sobre este paquete se encuentran en la Sección 6.16.2, "Contenido de GCC".
5.6. Cabeceras API de Linux-2.6.37
Las cabeceras API de Linux exponen la API del núcleo para ser usada por Glibc.
Tiempo estimado de construcción: 0.1 SBU
Espacio requerido en disco: 485MB
5.6.1. Instalación de las cabeceras API de Linux
El núcleo Linux necesita exponer una Interfaz de Programación de Aplicaciones (API) para ser usada por la librería C del sistema (Glibc en LFS). Esto se hace desinfectando los diversos ficheros de cabecera incluidos en el paquete del núcleo Linux de código.
Asegúrese de que no hay archivos obsoletos y dependencias por ahí por la actividad anterior:
make mrproper
Ahora la prueba y el extracto de las cabeceras del núcleo visible para el usuario de la fuente. Se colocan en un directorio local intermedio y copia en la ubicación necesaria porque el proceso de extracción elimina todos los archivos existentes en el directorio de destino.
make headers_check
make INSTALL_HDR_PATH=dest headers_install
cp -rv dest/include/* /tools/include
Los detalles sobre este paquete se encuentran en la Sección 6.7.2, "Contenido de Linux encabezados API".
5.7. Glibc-2.13
El paquete Glibc contiene la librería C principal. Esta librería proporciona todas las rutinas básicas para la ubicación de memoria, búsqueda de directorios, abrir y cerrar ficheros, leerlos y escribirlos, manejo de cadenas, coincidenciade patrones, aritmética, etc...
Tiempo estimado de construcción: 6.9 SBU
Espacio requerido en disco: 371mb
5.7.1. Instalación de Glibc
Corregir un error que impide la construcción de Glibc con GCC-4.5.2:
patch -Np1 -i ../glibc-2.13-gcc_fix-1.patch
La documentación de Glibc recomienda construirlo fuera del directorio de la fuente en un directorio de compilación dedicada:
mkdir -v ../glibc-build
cd ../glibc-build
Porque Glibc no soporta i386, sus desarrolladores dicen utilizar el indicador del compilador - march = i486, cuando la construcción para las máquinas de X86. Hay varias maneras de lograr eso, pero las pruebas muestran que la bandera es el mejor situado dentro de la variable de construcción "CFLAGS". En lugar de anular completamente el sistema interno de lo que es construir Glibc utiliza para CFLAGS, añadir la nueva bandera para el contenido existente de CFLAGS, haciendo uso del archivo especial configparms. La -Mtune bandera = nativo también es necesario restablecer un valor razonable para-mtune que se cambia cuando establece –march.
case `uname -m` in
i?86) echo "CFLAGS += -march=i486 -mtune=native" > configparms ;;
esac
Prepara Glibc para su compilación:
../glibc-2.13/configure --prefix=/tools \
--host=$LFS_TGT --build=$(../glibc-2.13/scripts/config.guess) \
--disable-profile --enable-add-ons \
--enable-kernel=2.6.22.5 --with-headers=/tools/include \
libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes
Significado de las opciones de configure:
--host=$LFS_TGT, --build=$(../glibc-2.13/scripts/config.guess)
El efecto combinado de estos interruptores es un sistema que es construir Glibc se configura automáticamente para una compilación cruzada, utilizando el
enlazador y compilador cruzado en / tools.
--disable-profile
Esto construye las librerías sin información de perfiles. Omite esta opción si planeas usar perfiles en las herramientas temporales.
--enable-add-ons
Esto le indica a Glibc que utilice el añadido NPTL como su librería de hilos.
--enable-kernel=2.6.22.5
Esto le indica a Glibc para compilar la librería con soporte para kernels 2.6.22.5 y posteriores Linux. Soluciones para los núcleos antiguos no están habilitadas.
--with-headers=/tools/include
Esto le indica a Glibc que se compile contra las cabeceras recién instaladas en el directorio de herramientas, para que conozca exactamente las características que tiene el núcleo y pueda optimizarse correctamente.
libc_cv_forced_unwind=yes
El enlazador instalado en la Sección 5.4, "Binutils-2.21 - Fase 1" era compilador cruzado y como tal no puede ser utilizado hasta Glibc se ha instalado. Esto significa que la prueba para el soporte force-unwind va a fracasar, ya que se basa en un enlazador trabajando. La variable libc_cv_forced_unwind = yes se pasa para informar a configurar el soporte force-unwind está disponible sin que tenga que ejecutar la prueba.
libc_cv_c_cleanup=yes
Del mismo modo, se pasa a través de libc_cv_c_cleanup = yes al script de configuración para que la prueba se salte y la limpiar el soporte de manipulación C está configurado.
Durante esta fase puede que veas el siguiente mensaje de aviso:
configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.
configure: AVISO:
*** Versión incompatible o ausente de estos
*** programas auxiliares: msgfmt
*** algunas características serán desactivadas.
*** Comprueba en el fichero INSTALL las versiones requeridas.
La ausencia o incompatibilidad del programa msgfmt es generalmente inofensiva. El programa msgfmt es parte del paquete Gettext que el sistema anfitrión debe proporcionar.
Compila el paquete:
Make
Este paquete viene con un conjunto de pruebas, sin embargo, no se puede ejecutar en este momento porque no tenemos un compilador C + + todavía.
Nota
El conjunto de pruebas también se requiere información de localización para ser instalado con el fin de ejecutar correctamente. Los datos de configuración regional proporcionan información al sistema con respecto a cosas tales como la fecha, hora, y los formatos de moneda aceptada por la producción y las utilidades del sistema. Si los conjuntos de pruebas no se ejecutan en este capítulo (de acuerdo con la recomendación), no hay necesidad de instalar ahora las locales. Los lugares adecuados se instalarán en el próximo capítulo. Para cualquiera de las locales de Glibc , use las instrucciones de la Sección 6.9, "Glibc-2.13".
El conjunto de pruebas también se requiere información de localización para ser instalado con el fin de ejecutar correctamente. Los datos de configuración regional proporcionan información al sistema con respecto a cosas tales como la fecha, hora, y los formatos de moneda aceptada por la producción y las utilidades del sistema. Si los conjuntos de pruebas no se ejecutan en este capítulo (de acuerdo con la recomendación), no hay necesidad de instalar ahora las locales. Los lugares adecuados se instalarán en el próximo capítulo. Para cualquiera de las locales de Glibc , use las instrucciones de la Sección 6.9, "Glibc-2.13".
Instala el paquete:
make install
Los detalles sobre este paquete se encuentran en la Sección 6.9.4, "Contenido de Glibc".
5.8. Ajustar las herramientas
Ahora que se han instalado las librerías de C temporales, todas las herramientas que compilemos en el resto de este capítulo deberían enlazarse contra ellas. Para conseguirlo, deben ajustarse el enlazador y el fichero specs del compilador.
Esto se hace poniendo el archivo "specs" del compilador en una ubicación donde lo buscará por defecto. Una sustitución sed simple, entonces altera el enlazador dinámico de GCC que va a utilizar. El principio aquí es encontrar todas las referencias de archivos del enlazador dinámico en / lib o posiblemente lib64 / si el sistema anfitrión es compatible con 64 bits, y ajustarlos para que apunte a la nueva ubicación en / tools.
Por precisión, se recomienda utilizar el método de copiar y pegar al emitir el comando siguiente.
Asegúrese de inspeccionar visualmente el fichero de especificaciones para comprobar que se ha ajustado correctamente todas las referencias a la ubicación de del enlazador dinámico. Consulte la Sección 5.2, "Notas técnicas sobre las herramientas", por el nombre por defecto del enlazador dinámico, si es necesario.
Asegúrese de inspeccionar visualmente el fichero de especificaciones para comprobar que se ha ajustado correctamente todas las referencias a la ubicación de del enlazador dinámico. Consulte la Sección 5.2, "Notas técnicas sobre las herramientas", por el nombre por defecto del enlazador dinámico, si es necesario.
SPECS=`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/specs
$LFS_TGT-gcc -dumpspecs | sed \
-e 's@/lib\(64\)\?/ld@/tools&@g' \
-e "/^\*cpp:$/{n;s,$, -isystem /tools/include,}" > $SPECS
echo "New specs file is: $SPECS"
unset SPECS
Atención
En este punto es obligatorio parar y asegurarse de que las operaciones básicas (compilación y enlazado) de las nuevas herramientas funcionan como se espera. Para esto vamos a hacer una simple comprobación:
echo 'main(){}' > dummy.c
$LFS_TGT-gcc -B/tools/lib dummy.c
readelf -l a.out | grep ': /tools'
Si todo funciona correctamente, no debe haber errores y la salida del último comando debe ser:
[Requesting program interpreter: /tools/lib/ld-linux.so.2]
Tenga en cuenta que / tools / lib o / tools / lib64 para equipos de 64 bits aparece como el prefijo del enlazador dinámico.
Si la salida no se muestra como arriba, o no hay salida alguna, entonces algo está mal. Investigar y seguir los pasos para encontrar el origen del problema y corregirlo. Este problema se debe resolver antes de continuar. Algo puede haber ido mal con el arreglo del fichero specs. En este caso, repite el arreglo del archivo specs, asegurándote de copiar y pegar los comandos.
Una vez que todo está bien, borra los archivos de prueba:
rm -v dummy.c a.out
Nota
La construcción de Binutils en la siguiente sección servirá como comprobación adicional de que el conjunto de herramientas se ha construido correctamente. Si no Binutils para construir, es una indicación de que algo ha ido mal con el anterior
Binutils, GCC, Glibc o instalaciones.
La construcción de Binutils en la siguiente sección servirá como comprobación adicional de que el conjunto de herramientas se ha construido correctamente. Si no Binutils para construir, es una indicación de que algo ha ido mal con el anterior
Binutils, GCC, Glibc o instalaciones.
5.9. Binutils-2.21 - Paso 2
El paquete Binutils contiene un enlazador, un ensamblador, y otras herramientas para trabajar con ficheros objeto.
Tiempo estimado de construcción: 1.3 SBU
Espacio requerido en disco: 259 MB
Tiempo estimado de construcción: 1.3 SBU
Espacio requerido en disco: 259 MB
5.9.1. Instalación de Binutils
Crear un directorio de construcción por separado una vez más:
mkdir -v ../binutils-build
cd ../binutils-build
Prepara Binutils para su compilación:
CC="$LFS_TGT-gcc -B/tools/lib/" \
AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \
../binutils-2.21/configure --prefix=/tools \
--disable-nls --with-lib-path=/tools/lib
El significado de las nuevas opciones de configure:
CC="$LFS_TGT-gcc -B/tools/lib/" AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib
Porque esto es realmente una construcción natural de Binutils, el establecimiento de estas variables asegura que el sistema de generación utiliza el compilador cruzado y herramientas asociadas en lugar de las del sistema anfitrión.
--with-lib-path=/tools/lib
Esto le indica al script de configuración que especifique la ruta de búsqueda de la biblioteca durante la compilación de Binutils, resultando en / tools / lib que se pasa al enlazador. Esto evita que el enlazador busque en los directorios de la biblioteca en el host.
Compila el paquete:
Make
Instala el paquete:
make install
Ahora Prepara el enlazador para la fase de "Re-ajuste" en el siguiente capítulo:
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
El significado de los parámetros de make:
-C ld clean
Esto indica al programa make que elimine todos los archivos compilados en el subdirectorio ld.
-C ld LIB_PATH=/usr/lib:/lib
Esta opción reconstruye todo en el subdirectorio ld. Especificando la ruta LIB_ PATH en la variable Makefile de comandos nos permite obviar el valor por defecto de las herramientas temporales y el punto a la ruta final adecuada.
El valor de esta variable especifica el enlazador de librerías por defecto la ruta de búsqueda. Esta preparación se utiliza en el próximo capítulo.
El valor de esta variable especifica el enlazador de librerías por defecto la ruta de búsqueda. Esta preparación se utiliza en el próximo capítulo.
Los detalles sobre este paquete se encuentran en la Sección 6.12.2, "Contenido de Binutils".
5.10. GCC-4.5.2 - Paso 2
El paquete GCC contiene la colección de compiladores GNU, que incluye los compiladores C y C++.
Tiempo estimado de construcción: 9.0 SBU
Espacio requerido en disco: 1003 mb
5.10.1. Instalación de GCC
Las versiones de GCC hasta 4.3 tratarán esta construcción como si se tratara de un compilador reubicado y deshabilita la búsqueda de ficheros de inicio en la ubicación especificada por - - prefix. Dado que esto no será un compilador reubicado, y los ficheros de inicio en /tool son fundamentales para la construcción de un compilador de trabajo vinculado a las librerias en / tools, el siguiente parche revierte GCC a su comportamiento anterior:
patch -Np1 -i ../gcc-4.5.2-startfiles_fix-1.patch
En circunstancias normales el script fixincludes GCC se ejecuta con el fin de corregir posibles ficheros de cabecera rotos. Como GCC-4.5.2 y Glibc 2.13-ya se han instalado en este punto, y sus respectivos ficheros de no necesitan ser corregidos, el script fixincludes no es necesario. De hecho, la ejecución de este script en realidad pueden contaminar el entorno de construcción al instalar ficheros de cabecera corregidos procedentes del anfitrión en el directorio privado dentro de GCC. La ejecución del script fixincludes puede eliminarse mediante los siguientes comandos:
cp -v gcc/Makefile.in{,.orig}
sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in
Para máquinas x86, un arranque de construcción de GCC usa el indicador del compilador - fomit-frame-pointer. No arranque la construcción omitiendo dicha opción, y el objetivo debe ser producir un compilador que es exactamente el mismo como si hubiese arrancado. Aplique el siguiente comando sed para que el compilador a use la bandera:
cp -v gcc/Makefile.in{,.tmp}
sed 's/^T_CFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \
> gcc/Makefile.in
El siguiente comando va a cambiar la localización del enlazador dinámico de GCC para usar la instalada en / tools. También elimina / usr / include de la ruta de búsqueda incluida en GCC. Haciendo esto en lugar de ajustar el fichero specs después de la instalación asegura que el nuevo enlazador dinámico es usado durante la construcción actual de GCC. Es decir, todos los binarios creados durante la construcción se enlazarán con la nueva edición Glibc.:
for file in \
$(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
do
cp -uv $file{,.orig}
sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
-e 's@/usr@/tools@g' $file.orig > $file
echo '
#undef STANDARD_INCLUDE_DIR
#define STANDARD_INCLUDE_DIR 0
#define STANDARD_STARTFILE_PREFIX_1 ""
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
touch $file.orig
done
En el caso anterior parece difícil de seguir, vamos a descomponer un poco. En primer lugar nos encontramos con todos los archivos bajo el directorio gcc / config en el que se nombran o linux. h, linux64. h o sysv4. h. Para cada archivo encontrado, lo copia en un archivo del mismo nombre pero con un sufijo añadido de ". orig". Entonces la expresión sed primero añade "/ tools" a todas las instancias de "/ Lib / ld", "/ lib64/ld" o "/ lib32/ld", mientras que el segundo reemplaza en el código las instancias de "/ usr". A continuación, añadimos nuestra definición de estados que alteran la ruta de búsqueda y el prefijo startfile al final del archivo. Por último, use touch para actualizar la fecha y hora en los archivos copiados. Cuando se conjuntamente a cp-u, esto evita que los cambios inesperados en los archivos originales en caso de que los comandos se ejecuten dos veces sin darnos cuenta.
En x86_64, borramos la especificación multilib para GCC asegura que no tratará de enlazar con las bibliotecas en el sistema anfitrión:
case $(uname -m) in
x86_64)
for file in $(find gcc/config -name t-linux64) ; do \
cp -v $file{,.orig}
sed '/MULTILIB_OSDIRNAMES/d' $file.orig > $file
done
;;
Esac
Al igual que en la construcción del primer GCC requiere que los paquetes de GMP, MPFR y MPC. Desempaquete los archivos de código y muévalos los directorios necesarios:
tar -jxf ../mpfr-3.0.0.tar.bz2
mv -v mpfr-3.0.0 mpfr
tar -jxf ../gmp-5.0.1.tar.bz2
mv -v gmp-5.0.1 gmp
tar -zxf ../mpc-0.8.2.tar.gz
mv -v mpc-0.8.2 mpc
Crear un directorio de construcción por separado otra vez :
mkdir -v ../gcc-build
cd ../gcc-build
Antes de iniciar la construcción de GCC, recuerde desactivar cualquier variable de entorno que modifique las opciones de optimización.
Prepara GCC para su compilación:
CC="$LFS_TGT-gcc -B/tools/lib/" \
AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \
../gcc-4.5.2/configure --prefix=/tools \
--with-local-prefix=/tools --enable-clocale=gnu \
--enable-shared --enable-threads=posix \
--enable-__cxa_atexit --enable-languages=c,c++ \
--disable-libstdcxx-pch --disable-multilib \
--disable-bootstrap --disable-libgomp \
--with-gmp-include=$(pwd)/gmp --with-gmp-lib=$(pwd)/gmp/.libs \
--without-ppl --without-cloog
El significado de las nuevas opciones de configure:
--enable-clocale=gnu
Esta opción asegura que el modelo local correcto es seleccionado para las librerías C + + en todas los casos. Si el script configure encuentra instalada la configuración regional de_DE, seleccionará el modelo correcto de gnu. Sin embargo, si de_DE no está instalado, se corre el riesgo de construcción de interfaces binarias de aplicación (ABI)- incompatibles con las bibliotecas de C++ porque el modelo de configuración regional genérico incorrecto puede ser seleccionado.
- Enable-threads = posix
Esto permite el manejo de excepciones C + + para código multihilo.
--enable-__cxa_atexit
Esta opción permite el uso de _ cxa_ atexit, en vez de atexit, para registrar destructores C + + para objetos estáticos locales y objetos globales. Esta opción resulta esencial para el manejo totalmente compatible con los estándares de los destructores. También afecta a C + + ABI, y por lo tanto los resultados obteniendo librerías compartidas en C + + y programas C + + que son interoperables con otras distribuciones Linux.
-enable-languages=c,c++
Esta opción garantiza que tanto el compilador C y C + + están construidos.
--disable-libstdcxx-pch
No construye la cabecera precompilada (PCH) para libstdc + +. Ocupa mucho espacio, y no es necesario usarlo.
--disable-bootstrap
Para las versiones nativas de GCC, el valor por defecto consiste en hacer un "arranque" de construcción. Esto no sólo compila GCC, sino que lo hace varias veces. Utiliza los programas compilados en una primera instancia que se compile una segunda vez, y luego nuevo por tercera vez. Las iteraciones de la segunda y tercera se comparan para asegurarse de que puede reproducirse sin problemas. Esto también implica que se ha compilado correctamente. Sin embargo, el método de construcción de LFS debe proporcionar un compilador sólido sin necesidad de arrancar cada vez.
Compila el paquete:
Make
Instala el paquete:
make install
Como toque final, crea un enlace. Muchos programas y scripts ejecutan cc en vez de gcc, que se utiliza para mantener programas genéricos y por lo tanto, utilizable en todo tipo de sistemas UNIX, donde el compilador GNU C no siempre es instalado. Ejecutar cc deja al administrador del sistema libre de decidir qué compilador de C instalar:
ln -vs gcc /tools/bin/cc
Precaución
En este punto, es obligatorio parar y asegurarse de que las funciones básicas (compilación y enlazado) de las nuevas herramientas funcionan como se espera. Para llevar a cabo una comprobación de validez, ejecute los siguientes comandos:
En este punto, es obligatorio parar y asegurarse de que las funciones básicas (compilación y enlazado) de las nuevas herramientas funcionan como se espera. Para llevar a cabo una comprobación de validez, ejecute los siguientes comandos:
echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'
Si todo funciona correctamente, no debe haber errores y la salida del último comando debe ser de la forma:
[Requesting program interpreter: /tools/lib/ld-linux.so.2]
Observe que / tools / lib o / tools / lib64 para equipos de 64 bits aparece como el prefijo del enlazador dinámico.
Si la salida no se muestra como arriba, o no hay salida alguna, entonces algo está mal. Investigar y seguir los pasos para encontrar el origen del problema y corregirlo. Este problema se debe resolver antes de continuar. En primer lugar, la comprobar de nuevo, usando gcc en vez de cc. Si esto funciona, entonces el / tools / bin / cc es el enlace que falta. Instale el enlace anterior. A continuación, asegúrese de que la ruta es correcta. Esto puede ser comprobado ejecutando echo $ PATH y verificando que / tools / bin está primero en la lista. Si el PATH está mal puede significar que no se ha registrado como usuario lfs o que algo salió mal en la
Sección 4.4, "Configuración del entorno".
Una vez que todo está bien, borre los archivos de prueba:
rm -v dummy.c a.out
Los detalles sobre este paquete se encuentran en la Sección 6.16.2, "Contenido de GCC".
5.11. Tcl-8.5.9
El paquete Tcl contiene el Tool Command Language.
Tiempo estimado de construcción: 0.5 SBU
Espacio requerido en disco: 32 MB
Espacio requerido en disco: 32 MB
5.11.1. Instalación de Tcl
Este paquete y los dos siguientes (Expect y DejaGNU) se instalan para permitir la ejecución del conjunto de pruebas de GCC y Binutils. Instalar tres paquetes para propósitos de prueba puede parecer excesivo, pero es muy alentador, si no esencial, para saber que las herramientas más importantes están funcionando correctamente. Incluso si el conjunto de pruebas no se ejecutan en este capítulo (que no son obligatorias), los paquetes son necesarios para ejecutarlas en el capítulo 6.
Prepara Tcl para su compilación:
cd unix
. / Configure - prefix = / tolos
. / Configure - prefix = / tolos
Construye el paquete:
make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales en este capítulo. Para ejecutar el conjunto de pruebas de Tcl todos modos,use el siguiente comando:
TZ=UTC make test
El conjunto de pruebas Tcl puede experimentar fallos bajo ciertas condiciones del anfitrión que no se entienden completamente. Por lo tanto, las fallas del conjunto de pruebas no son una sorpresa, y no se consideran críticos. El parámetro TZ = UTC establece la zona horaria de Tiempo Universal Coordinado (UTC), también conocido como meridiano de Greenwich (GMT), pero sólo por la duración de la ejecución de pruebas. Esto asegura que las pruebas del reloj se ejercen correctamente. Los detalles sobre la variable de entorno TZ se proporcionan en el Capítulo 7.
Instala el paquete:
Instala el paquete:
make install
Hacer de la biblioteca instalada para escribir los símbolos de depuración se puede quitar más adelante:
chmod -v u+w /tools/lib/libtcl8.5.so
Instala cabeceras de Tcl. El siguiente paquete, Expect, les obliga a construir.
make install-private-headers
Ahora haga un enlace simbólico necesario:
ln -sv tclsh8.5 /tools/bin/tclsh
5.11.2. Contenido de Tcl
Programas instalados: tclsh (enlace a tclsh8.5) y tclsh8.5
Librería instalada: libtcl8.5.so, libtclstub8.5.a
Descripción corta
tclsh8.5 el comando tcl shell
tclsh8.5 el comando tcl shell
tclsh un enlace a tclsh8.5
libtcl8.5.so La biblioteca Tcl
libtclstub8.5.a la biblioteca auxiliar Tcl
libtcl8.5.so La biblioteca Tcl
libtclstub8.5.a la biblioteca auxiliar Tcl
5.12. Expect-5.45
El paquete Expect contiene un programa para llevar a cabo diálogos entre scripts con otros programas interactivos.
Tiempo estimado de construcción: 0.1 SBU
Espacio requerido en disco: 4.1 MB
Tiempo estimado de construcción: 0.1 SBU
Espacio requerido en disco: 4.1 MB
5.12.1. La instalación de Expect
En primer lugar, configurar el script para usar / bin / stty en vez de a / usr / local / bin / stty puede encontrar en el sistema anfitrión. Esto asegurará que nuestras herramientas de pruebas se mantengan para las compilaciones finales de nuestras herramientas principales:
cp -v configure{,.orig}
sed 's:/usr/local/bin:/bin:' configure.orig > configure
Ahora, prepara Expect para su compilación:
. / Configure - prefix = / tools - with-tcl = / tools / lib \
- With-tclinclude = / tools / include
. / Configure - prefix = / tools - with-tcl = / tools / lib \
- With-tclinclude = / tools / include
El significado de las opciones de configuración:
- With-tcl = / tools / lib
Esto asegura que el script configure encuentre la instalación de Tcl en el de herramientas temporales en lugar de, posiblemente, la localización de uno ya existente en el sistema anfitrión.
- With-tclinclude = / tools / include
Explícitamente dice a Expect dónde encontrar las cabeceras internas de Tcl. Usando esta opción se evita que las condiciones donde configure falle porque no pudo detectar automáticamente la ubicación de las cabeceras de Tcl.
Construye el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales en este capítulo. Para ejecutar el test suite esperar de todos modos, el siguiente comando:
Make test
Tenga en cuenta que el conjunto de pruebas se sabe que esperar experimenta fallos bajo ciertas condiciones del anfitrión que no están bajo nuestro
de control. Por lo tanto, las fallas del banco de pruebas no son una sorpresa y no se consideran críticos.
Instala el paquete:
make SCRIPTS = "" install
de control. Por lo tanto, las fallas del banco de pruebas no son una sorpresa y no se consideran críticos.
Instala el paquete:
make SCRIPTS = "" install
El significado del parámetro de make:
SCRIPTS = ""
Esto evita la instalación de los scripts suplementarios esperar, que no son necesarios.
SCRIPTS = ""
Esto evita la instalación de los scripts suplementarios esperar, que no son necesarios.
5.12.2. Contenido de Expect
Programa instalado: Expect
Librería instalada: libexpect-5.45.a
Descripción corta
Expect Comunica con otros programas interactivos según el script
libexpect-5.45.a Contiene funciones que permiten esperar para ser utilizado
Expect Comunica con otros programas interactivos según el script
libexpect-5.45.a Contiene funciones que permiten esperar para ser utilizado
como una extensión de Tcl o usada directamente de C o C + + (sin Tcl)
5.13. DejaGNU-1.4.4
El paquete contiene DejaGNU un marco para las pruebas de otros programas.
Tiempo estimado de construcción: menos de 0.1 SBU
El espacio necesario en disco: 6.1 MB
5.13.1. La instalación de DejaGNU
La versión más reciente de este paquete fue lanzado en 2004. Aplicar algunas correcciones que se han acumulado desde entonces:
patch -Np1 -i ../dejagnu-1.4.4-consolidated-1.patch
Prepare DejaGNU para su compilación:
. / Configure - prefix = / tools
. / Configure - prefix = / tools
Construir e instalar el paquete:
Make install
Para probar los resultados, ejecuta:
make check
5.13.2. Contenido de DejaGNU
Programa instalado: runTest
Descripción corta
runTest Un wrapper script que encuentra el adecuado shell Expect y ejecuta DejaGNU
Descripción corta
runTest Un wrapper script que encuentra el adecuado shell Expect y ejecuta DejaGNU
5.14. Ncurses-5.7
El paquete Ncurses contiene librerías para el manejo independiente del terminal de pantallas de caracteres.
Tiempo estimado de construcción: 0.7 SBU
Espacio requerido en disco: 30 MB
5.14.1. Instalación de Ncurses
Prepara Ncurses para su compilación:
./configure --prefix=/tools --with-shared \
--without-debug --without-ada --enable-overwrite
El significado de las opciones de configuración:
- Without-ada
Esto asegura que Ncurses no conseguir apoyo para el compilador de Ada que pueden estar presentes en el sistema anfitrión, pero no estará disponible una vez que entramos en el entorno chroot.
- Enable-overwrite
Esto le indica a Ncurses que instale sus ficheros de cabecera en / tools / include, en lugar de
/ Tools / include / ncurses para asegurar que otros paquetes puedan encontrar las cabeceras de Ncurses con éxito.
Esto le indica a Ncurses que instale sus ficheros de cabecera en / tools / include, en lugar de
/ Tools / include / ncurses para asegurar que otros paquetes puedan encontrar las cabeceras de Ncurses con éxito.
Compila el paquete:
Make
Este paquete tiene un conjunto de pruebas, pero sólo se puede ejecutar después de que el paquete haya sido instalado. Las pruebas residen en el directorio test /. Consulte el archivo README en ese directorio para obtener más detalles.
Instala el paquete:
Make install
Los detalles sobre este paquete se encuentran en la Sección 6.19.2, "Contenido de Ncurses".
5.15. Bash-4.2
El paquete Bash contiene el Bourne-Again SHell.
Tiempo estimado de construcción: 0.5 SBU
Espacio requerido en disco: 35 MB
5.15.1. Instalación de Bash
Prepara Bash para su compilación:
./configure --prefix=/tools --without-bash-malloc
El significado de las opciones de configuración:
- Without-bash-malloc
Esta opción desactiva el uso de la asignación de memoria de Bash (malloc), la cual se sabe que causa fallos de segmentación. Al desactivar esta opción, Bash utilizará la función malloc de Glibc, que son más estable.
Compila el paquete:
- Without-bash-malloc
Esta opción desactiva el uso de la asignación de memoria de Bash (malloc), la cual se sabe que causa fallos de segmentación. Al desactivar esta opción, Bash utilizará la función malloc de Glibc, que son más estable.
Compila el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el test suite Bash , use el siguiente comando:
Make tests
Instalar el paquete:
Make install
Hacer un vínculo para los programas que usan sh por un shell:
ln -vs bash /tools/bin/sh
Los detalles sobre este paquete se encuentran en la Sección 6.29.2, "Contenido de Bash".
5.16. Bzip2-1.0.6
El paquete Bzip2 contiene programas para comprimir y descomprimir archivos. La compresión de archivos de texto con bzip2 se obtiene un mayor porcentaje de compresión que el tradicional gzip.
Tiempo estimado de construcción: menos de 0.1 SBU
Espacio requerido en disco: 4.8 MB
5.16.1. Instalación de Bzip2
El paquete Bzip2 no contiene un script de configuración. Compile y pruebe con:
Make
Instalar el paquete:
make PREFIX=/tools install
Los detalles sobre este paquete se encuentran en la Sección 6.36.2, "Contenido de Bzip2".
5.17. Coreutils-8.10
El paquete contiene utilidades Coreutils para mostrar y establecer las características básicas del sistema.
Tiempo estimado de construcción: 0.7 SBU
Espacio requerido en disco: 88 MB
5.17.1. La instalación de Coreutils
Prepare Coreutils para su compilación:
./configure --prefix=/tools --enable-install-program=hostname
El significado de las opciones de configuración:
--enable-install-program=hostname
Esto permite que el binario hostname para ser construido e instalado - que está desactivado por defecto, pero es requerido por el conjunto de pruebas Perl.
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas Coreutils, use el siguiente comando:
en este capítulo. Para ejecutar el conjunto de pruebas Coreutils, use el siguiente comando:
make RUN_EXPENSIVE_TESTS=yes check
El parámetro RUN_ EXPENSIVE_ TESTS =YES indica al conjunto de pruebas a ejecutar varias pruebas adicionales que se consideran relativamente costosas (en términos de potencia de CPU y memoria) en algunas plataformas, pero por lo general no son un problema en Linux.
Instala el paquete:
Instala el paquete:
Make install
El comando anterior se niega a instalar su porque el programa no puede ser instalado con setuid root como usuario sin privilegios.
Mediante la instalación de forma manual con otro nombre, podemos usarlo para ejecutar las pruebas en sistema final como un usuario sin privilegios y mantener un su posible útil a nuestro anfitrión por primera vez en nuestro PATH. Instalarlo con:
Mediante la instalación de forma manual con otro nombre, podemos usarlo para ejecutar las pruebas en sistema final como un usuario sin privilegios y mantener un su posible útil a nuestro anfitrión por primera vez en nuestro PATH. Instalarlo con:
cp -v src/su /tools/bin/su-tools
Los detalles sobre este paquete se encuentran en la Sección 6.22.2, "Contenido de Coreutils".
5.18. Diffutils-3.0
El paquete Diffutils contiene programas que muestran las diferencias entre archivos o directorios.
Tiempo estimado de construcción: 0.1 SBU
El espacio necesario en disco: 6.1 MB
5.18.1. La instalación de Diffutils
Prepare Diffutils para su compilación:
./configure --prefix=/tools
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas Diffutils de todos modos, use el siguiente comando:
en este capítulo. Para ejecutar el conjunto de pruebas Diffutils de todos modos, use el siguiente comando:
Make check
Instalar el paquete:
Make install
Los detalles sobre este paquete se encuentran en la Sección 6.37.2, "Contenido de Diffutils".
5.19. File-5.05
El paquete contiene un archivo de utilidad para determinar el tipo de un archivo o archivos.
Tiempo estimado de construcción: 0.2 SBU
Espacio requerido en disco: 9.5 MB
5.19.1. Instalación de archivos
Preparar archivos para su compilación:
./configure --prefix=/tools
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas de File de todos modos, use el siguiente comando:
en este capítulo. Para ejecutar el conjunto de pruebas de File de todos modos, use el siguiente comando:
Make check
Instalar el paquete:
Make install
Los detalles sobre este paquete se encuentran en la Sección 6.39.2, "Contenido de archivo".
5.20. Findutils-4.4.2
El paquete contiene Findutils programas para buscar archivos. Estos programas se ofrecen para buscar de forma recursiva a través de un árbol de directorios y de crear, mantener y buscar una base de datos (a menudo más rápido que la búsqueda recursiva, pero poco fiable si la base de datos no ha sido actualizada recientemente).
Tiempo estimado de construcción: 0.3 SBU
Espacio requerido en disco: 20 MB
5.20.1. La instalación de Findutils
Prepare Findutils para su compilación:
./configure --prefix=/tools
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas Findutils de todos modos, use el siguiente comando:
Make check
Instalar el paquete:
Make install
Los detalles sobre este paquete se encuentran en la Sección 6.40.2, "Contenido de Findutils".
5.21. Gawk-3.1.8
El paquete Gawk contiene programas para manipular archivos de texto.
Tiempo estimado de construcción: 0.2 SBU
Espacio requerido en disco: 19 MB
5.21.1. Instalación de Gawk
Prepare Gawk para su compilación:
./configure --prefix=/tools
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas Gawk de todos modos, use el siguiente comando:
en este capítulo. Para ejecutar el conjunto de pruebas Gawk de todos modos, use el siguiente comando:
Make check
Instalar el paquete:
Make install
Los detalles sobre este paquete se encuentran en la Sección 6.38.2, "Contenido de Gawk".
5.22. Gettext-0.18.1.1
El paquete Gettext contiene utilidades para la internacionalización y localización. Estas permiten que los programas que se compilan con NLS (Native Language Support), que permite que los mensajes salgan en el idioma nativo del usuario.
Tiempo estimado de construcción: 0.8 SBU
Espacio requerido en disco: 82 MB
5.22.1. Instalación de Gettext
Para nuestro conjunto de herramientas de temporal, sólo tenemos que construir e instalar un binario de Gettext.
Prepara Gettext para su compilación:
cd gettext-tools
./configure --prefix=/tools --disable-shared
El significado de la opción de configuración:
- Disable-shared
No es necesario instalar cualquiera de las bibliotecas Gettext compartido en este momento, por lo tanto no hay necesidad de construir.
No es necesario instalar cualquiera de las bibliotecas Gettext compartido en este momento, por lo tanto no hay necesidad de construir.
Compilar el paquete:
make -C gnulib-lib
make -C src msgfmt
Ya que sólo un binario ha sido compilado, no es posible ejecutar el conjunto de pruebas sin compilar librerías de soporte adicionales del paquete Gettext. Por ello no es recomendable intentar conjunto de pruebas en esta etapa.
Instala el binario msgfmt:
Instala el binario msgfmt:
cp -v src/msgfmt /tools/bin
Los detalles sobre este paquete se encuentran en la Sección 6.42.2, "Contenido de Gettext".
5.23. Grep-2.7
El paquete contiene los programas de grep para buscar a través de archivos.
Tiempo estimado de construcción: 0.1 SBU
Espacio requerido en disco: 6.7 MB
5.23.1. Instalación de Grep
Prepare grep para su compilación:
Prepare grep para su compilación:
./configure --prefix=/tools \
--disable-perl-regexp
El significado de los interruptores de configuración:
- Disable-perl-regexp
Esto asegura que el programa grep no se enlaza contra una librería Expresión Perl Compatible Regular (PCRE) que puede estar presente en el sistema anfitrión, pero no estará disponible una vez que entramos en el entorno chroot.
Compila el paquete:
- Disable-perl-regexp
Esto asegura que el programa grep no se enlaza contra una librería Expresión Perl Compatible Regular (PCRE) que puede estar presente en el sistema anfitrión, pero no estará disponible una vez que entramos en el entorno chroot.
Compila el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas de grep de todos modos, use el siguiente comando:
en este capítulo. Para ejecutar el conjunto de pruebas de grep de todos modos, use el siguiente comando:
Make check
Instalar el paquete:
Make install
Los detalles sobre este paquete se encuentran en la Sección 6.27.2, "Contenido de Grep".
5.24. Gzip-1.4
El paquete Gzip contiene programas para comprimir y descomprimir archivos.
Tiempo estimado de construcción: menos de 0.1 SBU
Espacio requerido en disco: 3.3 MB
5.24.1. Instalación de Gzip
Prepara Gzip para su compilación:
./configure --prefix=/tools
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas Gzip de todos modos, use el siguiente comando:
en este capítulo. Para ejecutar el conjunto de pruebas Gzip de todos modos, use el siguiente comando:
Make check
Instalar el paquete:
Make install
Los detalles sobre este paquete se encuentran en la Sección 6.45.2, "Contenido de Gzip".
5.25. M4-01/04/15
El paquete M4 contiene un procesador de macros.
Tiempo estimado de construcción: 0.2 SBU
Espacio requerido en disco: 11.6 MB
5.25.1. Instalación de M4
Prepara M4 para su compilación:
./configure --prefix=/tools
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas de M4 de todos modos, use el siguiente comando:
en este capítulo. Para ejecutar el conjunto de pruebas de M4 de todos modos, use el siguiente comando:
Make check
Instala el paquete:
make install
Los detalles sobre este paquete se encuentran en la Sección 6.24.2, "Contenido de M4."
5.26.Make 3.82
Haga el paquete contiene un programa para compilar paquetes.
Tiempo estimado de construcción: 0.1 SBU
Espacio requerido en disco: 9.6 MB
5.26.1. Instalación de Make
Prepare hacer para su compilación:
./configure --prefix=/tools
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar conjunto de pruebas de Make de todas formas, use el siguiente comando:
en este capítulo. Para ejecutar conjunto de pruebas de Make de todas formas, use el siguiente comando:
Make check
Instala el paquete:
make install
Los detalles sobre este paquete se encuentran en la Sección 6.49.2, "Contenido de Make".
5.27. Patch 2.6.1
El paquete Patch contiene un programa para modificar o crear ficheros mediante la aplicación de un "parche" del archivo general creada por el programa diff.
Tiempo estimado de construcción: menos de 0.1 SBU
Espacio requerido en disco: 1.9 MB
5.27.1. La instalación del parche
Prepara Patch para su compilación:
./configure --prefix=/tolos
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas de Patch de todos modos, use el siguiente comando:
en este capítulo. Para ejecutar el conjunto de pruebas de Patch de todos modos, use el siguiente comando:
Make check
Instala el paquete:
make install
Los detalles sobre este paquete se encuentran en la Sección 6.53.2, "Contenido de Patch".
5.28. Perl-5.12.3
El paquete Perl contiene el Lenguaje Práctico de Extracción e Informe.
Tiempo estimado de construcción: 0.8 SBU
Espacio requerido en disco: 106 MB
5.28.1. La instalación de Perl
En primer lugar aplicar el siguiente parche para adaptar algunas de las rutas de cableados a la biblioteca de C:
patch -Np1 -i ../perl-5.12.3-libc-1.patch
Prepara Perl para la compilación (asegúrese de obtener el 'Data / Dumper Fcntl IO "parte del comando correcto-son todas letras):
sh Configure -des -Dprefix=/tools \
-Dstatic_ext='Data/Dumper Fcntl IO'
El significado de las opciones de configuración:
'Data / Dumper Fcntl IO-Dstatic_ext =
Esto le indica a Perl para generar el conjunto mínimo de extensiones estáticas necesarias para instalar y probar el Coreutils y Paquetes de Glibc en el siguiente capítulo.
Sólo algunas de las utilidades incluidas en este paquete, y una de sus bibliotecas, hay que construir:
'Data / Dumper Fcntl IO-Dstatic_ext =
Esto le indica a Perl para generar el conjunto mínimo de extensiones estáticas necesarias para instalar y probar el Coreutils y Paquetes de Glibc en el siguiente capítulo.
Sólo algunas de las utilidades incluidas en este paquete, y una de sus bibliotecas, hay que construir:
make perl utilities ext/Errno/pm_to_blib
Aunque Perl viene con un conjunto de pruebas, no se recomienda ejecutarlo en este momento. Sólo una parte de Perl fue construido y ejecuta make test hará que el resto de Perl que se construirá bien, así, que no es necesario en este momento. El conjunto de pruebas se puede ejecutar en el próximo capítulo, si lo desea.
Instalar estas herramientas y sus bibliotecas:
cp -v perl pod/pod2man /tools/bin
mkdir -pv /tools/lib/perl5/5.12.3
cp -Rv lib/* /tools/lib/perl5/5.12.3
Los detalles sobre este paquete se encuentran en la Sección 6.33.2, "Contenido de Perl".
5.29. Sed-4.2.1
El paquete Sed contiene un editor de flujo.
Tiempo estimado de construcción: 0.1 SBU
Espacio requerido en disco: 8.0 MB
5.29.1. Instalación de Sed
Prepara Sed para su compilación:
./configure --prefix=/tolos
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas Sed de todos modos, use el siguiente comando:
en este capítulo. Para ejecutar el conjunto de pruebas Sed de todos modos, use el siguiente comando:
Make check
Instalar el paquete:
Make install
Los detalles sobre este paquete se encuentran en la Sección 6.17.2, "Contenido de Sed"
5.30. Tar-1.25
El paquete Tar contiene un programa de archivo.
Tiempo estimado de construcción: 0.3 SBU
Espacio requerido en disco: 20.9 MB
5.30.1. Instalación de Tar
Prepara Tar para su compilación:
./configure --prefix=/tolos
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas de Tar de todos modos, use el siguiente comando:
en este capítulo. Para ejecutar el conjunto de pruebas de Tar de todos modos, use el siguiente comando:
Make check
Instalar el paquete:
Make install
Los detalles sobre este paquete se encuentran en la Sección 6.58.2, "Contenido de Tar."
5.31. Texinfo-4.13a
El paquete Texinfo contiene programas usados para leer, escribir y convertir información de páginas.
Tiempo estimado de construcción: 0.2 SBU
Espacio requerido en disco: 20 MB
5.31.1. Instalación de Texinfo
Prepara Texinfo para su compilación:
./configure --prefix=/tolos
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas de Texinfo de todos modos, use el siguiente comando:
en este capítulo. Para ejecutar el conjunto de pruebas de Texinfo de todos modos, use el siguiente comando:
Make check
Instalar el paquete:
Make install
Los detalles sobre este paquete se encuentran en la Sección 6.59.2, "Contenido de Texinfo".
5.32. Xz 5.0.1
El paquete Xz contiene programas para comprimir y descomprimir ficheros. Proporciona capacidades para la lzma y los nuevos formatos de compresión xz. La compresión de archivos de texto con xz se obtiene un porcentaje de compresión mejor que el tradicional gzip o bzip2 comandos.
Tiempo estimado de construcción: 0.3 SBU
Espacio requerido en disco: 14 MB
5.32.1. La instalación de Xz-Utils
Prepare Xz para su compilación:
./configure --prefix=/tolos
Compilar el paquete:
Make
La compilación está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatoria para las herramientas temporales
en este capítulo. Para ejecutar el conjunto de pruebas Xz todos modos, use el siguiente comando:
Make check
Instalar el paquete:
Make install
Los detalles sobre este paquete se encuentran en la Sección 6.50.2, "Contenido de Xz."
5.33. Stripping
Los pasos de esta sección son opcionales, pero si la partición LFS es pequeña, es conveniente saber que los elementos innecesarios se pueden quitar. Los ejecutables y bibliotecas construidas hasta la fecha contienen alrededor de 70 MB de símbolos de depuración que no sean necesarios.
Eliminar aquellos símbolos con:
strip --strip-debug /tools/lib/*
strip --strip-unneeded /tools/{,s}bin/*
Estos comandos se salta un número de archivos, información que no reconoce el formato de archivo. La mayoría de estos son
scripts en vez de binarios.
scripts en vez de binarios.
Tenga cuidado de no utilizar - - strip- unneeded en las bibliotecas. Las estáticas se destruirían y cadena de herramientas del
paquetes que hay que construir todo de nuevo.
Para ahorrar cerca de 25 MB más, retire la documentación:
paquetes que hay que construir todo de nuevo.
Para ahorrar cerca de 25 MB más, retire la documentación:
rm -rf /tools/{,share}/{info,man}
En este punto, usted debe tener por lo menos 850 MB de espacio libre en $ LFS que se pueden utilizar para construir e instalar Glibc en la siguiente fase. Si usted puede construir e instalar Glibc, usted puede construir e instalar el resto también.
5.34. Cambio del propietario
Nota
Los comandos en el resto de este libro se debe realizar mientras está conectado como usuario root y no como usuario lfs. Además, vuelve a comprobar que $ LFS se encuentra en el entorno de root.
Los comandos en el resto de este libro se debe realizar mientras está conectado como usuario root y no como usuario lfs. Además, vuelve a comprobar que $ LFS se encuentra en el entorno de root.
En la actualidad, los $ LFS / tools pertenece al usuario lfs, un usuario que sólo existe en el sistema host. Si los $ LFS / tools se mantiene como está, los archivos son propiedad de un ID de usuario sin tener una cuenta correspondiente. Este
es peligroso porque una cuenta de usuario creada posteriormente podría tener este ID de usuario y la misma será la propietaria del directorio $ LFS / tools y todos los archivos de la misma, exponiendo así a estos archivos a la manipulación maliciosa posible.
Para evitar este problema, se podría añadir el usuario lfs al nuevo sistema LFS más tarde cuando se crea el fichero / etc / passwd, teniendo cuidado de asignar el mismo usuario y de grupo como en el sistema anfitrión. Mejor aún, cambie la propiedad de los $ LFS / tools al usuario root ejecutando el siguiente comando:
chown -R root:root $LFS/tools
Aunque el directorio $ LFS / herramientas se pueden eliminar una vez que el sistema LFS se ha terminado, puede ser contratado para construir sistemas LFS adicionales de la versión del libro mismo. La mejor manera de copia de seguridad de $ LFS / tools es una cuestión de personal preferencia.
Precaución
Si la intención de mantener las herramientas temporales para el uso en la construcción de los futuros sistemas de LFS, ahora es el momento de volver
para arriba. Comandos siguientes en el capítulo 6 se alteran las herramientas actualmente en vigor, haciéndolos inútiles
para futuras versiones
Si la intención de mantener las herramientas temporales para el uso en la construcción de los futuros sistemas de LFS, ahora es el momento de volver
para arriba. Comandos siguientes en el capítulo 6 se alteran las herramientas actualmente en vigor, haciéndolos inútiles
para futuras versiones