TÍTULO: uclibc-lfs VERSIÓN LFS: No disponible AUTOR: Michaël Tousignant <evanidus@videotron.ca> TRADUCTOR: Proyecto LFS-ES SINOPSIS: Cómo construir un sistema base LFS basado en uClibc RECETA: VERSIÓN DE LA RECETA: 0.2r1 (20020718) REGISTRO DE MODIFICACIONES (CHANGELOG): No disponible Antes de intentar crear un sistema uClibc, deberías preguntarte si de verdad quieres hacerlo ya que eso significa: - No tener un C++ nativo (debes usar un compilador GCC C++ estático) - No tener groff (a menos que emplees un compilador GCC C++ basado en glibc estático o que compiles groff en modo estatico con glibc) - No tener modutils (salvo que no te importe emplear unas modutils compiladas en modo estático con glibc) - No tener soporte (por el momento) para instalar paquetes que no pertenezcan al LFS (buena suerte) - Ésta receta se realizó/comprobó empleando tan sólo gcc 2.95.3-2 en un sistema con arquitectura x86. Si empleas gcc 3.x.x u otra arquitectura, podrías encontrar otros problemas (buena suerte). Haz el favor de pasar por la página web de la uClibc (http://www.uclibc.org/) y de consultar su documentación para enterarte de qué soporta y qué no antes de empezar. ========== 0. Índice ========== 1. Requisitos previos 2. Preparación del sistema 3. Creando el sistema 4. Extras 5. Preguntas más frecuentes (FAQ). ======================= 1. Requisitos previos ======================= Requisitos previos (Antes de empezar con el capítulo 6 del LFS): - Un sistema LFS completo hasta el capítulo 5 (es muy recomendable mantener separados los capítulos 5 y 6 -estilo /static- especialmente porque ésta receta supone que es así como lo estás haciendo) - Imagen tar (tarball) de perl-5.6.1 -> http://www.perl.org/ - Imagen tar de ncurses-5.2 -> ftp://ftp.gnu.org/gnu/ncurses/ - (opcional) imagen tar de modutils -> ftp://ftp.kernel.org/pub/linux/utils/kernel/ - (opcional) imagen tar de groff -> ftp://ftp.gnu.org/gnu/groff/ - (opcional) imagen tar de file -> ftp://ftp.gw.com/mirrors/pub/unix/file/ Requisitos previos (Para completar el capítulo 6 del LFS) - Las imágenes tar y los parches de todos los paquetes del capítulo 6 del LFS excepto: 1. psmisc 20.2+ 2. modutils 3. Posiblemente 'file' (se explica más adelante) 4. Posiblemente 'groff' (se explica más adelante) 5. glibc - Imágen tar de uClibc-0.9.12 (http://www.uclibc.org/) - Imágen tar de psmisc-20.1 (http://psmisc.sourceforge.net/) - Diversos parches (luego se explica para qué sirven): -> ftp://evanidus.ath.cx/uclibc/uclibc-lfs-patches-0.2.tar.bz2 - El libro LFS, a ser posible en versión 3.3+. -> http://www.linuxfromscratch.org/ - Otros paquetes (opcionales): 1. zlib - hace falta para versiones recientes de util-linux y muchos otros paquetes lo usan si está disponible. -> http://www.zlib.org 2. nasm - hace falta para las versiones recientes de lilo -> http://nasm.sourceforge.net 3. man2cat - muy útil si quieres ver páginas man y no tienes groff -> ftp://evanidus.ath.cx/misc/man2cat/ ========================== 2. Preparación del sistema ========================== Antes de comenzar con el capítulo 6 del libro, es preciso añadir algunas herramientas estáticas al capítulo 5: Nota: Se supone que todas las órdenes deben ejecutarse desde el directorio que contiene el código fuente original, recién extraído del paquete correspondiente - perl estático (comprobado con la versión 5.6.1) Hace falta Perl para ejecutar un guión (script) durante la compilación de uClibc Puede instalarse ejecutando las órdenes siguientes: ./Configure -Dprefix=/static -Dinstallprefix=$LFS/static -Dso=none \ -Dldflags=-static -Uinstallusrbinperl -Uusedl -Dman1dir=none \ -d -e && make && make install Nota: No te molestes en configurar perl para dejarlo a tu gusto, pues es normal reinstalarlo a lo largo del capítulo 6. Bastará con la configuración por defecto - el programa tic de las ncurses-5.2 versión estática Por razones todavía oscuras, el programa tic de las ncurses compila bien con uClibc pero no acaba de funcionar del todo. Ya que la mayor parte de la gente lo usa sólo una vez (en el 'make install' de las ncurses), emplearemos la versión estática de tic y la borraremos una vez usada. (Si no la usamos, cosas que emplean las ncurses tales como 'make menuconfig' no se visualizan correctamente). Puedes instalarlo ejecutando las órdenes siguientes: LDFLAGS=-static ./configure --without-cxx --without-debug \ --without-profile && make -C ncurses && make -C progs transform.h tic && cp -f progs/tic $LFS/static/bin - which uClibc emplea la orden 'which' durante el proceso de instalación. Aunque en un sistema normal se recomienda usar el auténtico which, es posible soslayar temporalmente su uso para instalar uClibc haciendo: cat > $LFS/static/bin/which <<EOF; #!/bin/sh type -p $* EOF chmod +x $LFS/static/bin/which - groff estático opcional (comprobado con la versión 1.17.2) Es imposible en este momento (sin un montón de trabajo) compilar o utilizar aplicaciones desarrolladas en C++ en un sistema basado únicamente en uClibc. Si deseas ser capaz de visualizar páginas man sin formatear, necesitarás conseguirte un groff compilado estáticamente con glibc/libstdc++ o compilar uno más adelante empleando un compilador GCC C++ estático (si lo puedes conseguir). (Todas las alternativas a groff que usan sólo código en C son demasiado antiguas y resultan inútiles con la mayor parte de las páginas man de hoy en día). Nota: Una alternativa (si no quieres emplear un gcc estático o un groff estático) sería preformatear tus páginas man o convertirlas a HTML mediante las herramientas de tu sistema base (mira la sección 4 para obtener ayuda sobre cómo preformatear las paginas man utilizando man2cat) Si prefieres probar a crear un groff con librerías compartidas, pasa de largo de este paquete por el momento. Aviso: !Un groff estático completo ocupa unos 18MB y unos 11MB sin cabeceras (stripped)! Puedes instalr un groff estático haciendo: mkdir -p $LFS/usr && LDFLAGS=-static ./configure --prefix=/usr --mandir=$LFS/usr/share/man && make && make prefix=$LFS/usr install && ln -s soelim $LFS/usr/bin/zsoelim && ln -s eqn $LFS/usr/bin/geqn && ln -s tbl $LFS/usr/bin/gtbl - modutils estáticas opcionales (comprobado con la versión 2.4.16) Por razones todavía desconocidas, las herramientas de modutils provocan violaciones de segmento, cuando se ejecutan ciertas operaciones, si se han enlazado con uClibc, lo que las hace inutilizables. Si los módulos son importantes para tí (siempre puedes crear un núcleo sin módulos), tendrás que crear unas modutils estáticas con glibc ejecutando las órdenes siguientes: ./configure --prefix=$LFS/usr --exec-prefix=$LFS \ --mandir=$LFS/usr/share/man && make LDFLAGS=-static && make install - programa 'file' estático opcional (comprobado con la versión 3.39) Por razones tan oscuras como las del programa tic con las ncurses, el programa 'file' enlazado con uClibc tendrá problemas para interpretar correctamente el fichero 'magico' (magic) tras la compilación, pero funcionará correctamente cuando se trate de identificar ficheros. Puedes (si quieres ser capaz de utilizar 'file'): a) Compilar una versión estática con glibc de 'file', utilizarla para interpretar el fichero "mágico", instalar el 'file' enlazado con uClibc y borrar a continuación la versión estática con glibc. (Más adelante daremos detalles adicionales sobre cómo hacerlo). b) Compilar un 'file' estático con glibc e instalarlo de forma permanente en tu sistema uClibc, en lugar del normal que utiliza librerías compartidas. c) No compilar ningún 'file' estático y utilizar la alternativa que luego citaremos para compilar un 'file' con librerías compartidas (implica quitar cuatro tipos de fichero del fichero "mágico" que después no se podrán detectar. Tampoco se sabe si puede haber algún otro problema no detectado en los resultados relacionados con dicho fichero) Para la solución 'a)' ejecuta: touch aclocal.m4 configure Makefile.in stamp-h.in && ./configure --prefix=/usr --datadir=/usr/share/misc && make LDFLAGS=-static file && cp -f file $LFS/static/bin Para la solución 'b)' ejecuta: touch aclocal.m4 configure Makefile.in stamp-h.in && ./configure --prefix=/usr --datadir=/usr/share/misc && make LDFLAGS=-static && make prefix=$LFS/usr install ======================= 3. Creando el sistema ======================= Empecemos con el capítulo 6 del LFS. Haz todo lo que el libro LFS indica hasta que llegues a la glibc. En primer lugar, extrae los paquetes uclibc-lfs-patches en los mismos directorios de los otros paquetes, si no lo has hecho ya. A continuación, necesitaremos algunos enlaces simbólicos para cosas que la uClibc (y probablemente algún otro paquete) van a tratar de usar y que tienen sus ubicaciones fijadas por defecto. Puedes crearlos haciendo: ln -s ../static/bin/true /bin && ln -s ../../static/bin/perl /usr/bin Puede que también necesites, si aún no lo has hecho, ejecutar: ln -s ../static/bin/bash /bin/sh Nota: si alguno de esos programas binarios se instaló en /static/usr/bin en lugar de en /static/bin, habrás de ajustar los enlaces correspondientes. Si no lo has hecho ya, (algunas versiones del libro lo hacen mientras se crea glibc y algunas lo hacen antes), ejecuta también: mknod -m 0666 /dev/null c 1 3 Nota: De aquí en adelante, se supone que cada orden se ejecuta desde el directorio que contiene el código fuente limpio recien extraído del paquete en el que estamos trabajando. En lugar de glibc (que no instalaremos en absoluto), instalamos uClibc-0.9.12; lo que puedes lograr ejecutando las órdenes siguientes que se explican a continuación: Nota: Se recomienda encarecidamente emplear las optimizaciones por defecto recomendadas por la uClibc. Ni siquiera cambies -march= patch -Np1 < ../uclibc-lfs-patches/uclibc-0.9.12.patch && ln -s extra/Configs/Config.i386 Config && make DO_C99_MATH=true HAS_SHADOW=true DOLFS=true INCLUDE_RPC=true \ all install Notas sobre /dev/pty*: uClibc puede configurarse para que emplee dispositivos /dev/pty* en lugar de devpts/devfs del directorio /dev/pts; pero para usarlos hace falta el programa 'pt_chown' que no se incluye con uClibc. Si de verdad necesitas el soporte de /dev/pty*, tendrás que coger el código fuente de pt_chown de la glibc, compilarlo con uClibc y colocarlo en /sbin como set-uid root. - Recomiendo encarecidamente a cualquiera que emplee en su lugar devpts o devfs (el libro LFS explica cómo configurar devpts) Explicación de los comandos: patch -Np1 < ../uclibc-lfs-patches/uclibc-0.9.12.patch -> Este parche para los ficheros make y config de uClibc elimina la necesidad de tener una libc 'ya disponible' (tal como glibc) y hará que se instale a sí misma como la librería libc principal en lugar de cualquier otra en su propio directorio (tal como /usr/i386-linux-uclibc). Esto evita también la necesidad de disponer de un envoltorio para gcc (wrapper). ln -s extra/Configs/Config.i386 Config -> Permite acceder simplemente a las configuraciones por defecto de Config.<arch>. Si estás usando un sistema no-x86 tendrás que ajustarlo. (Por desgracia, esta receta sólo se ha probado en una arquitectura x86) make DO_C99_MATH=true HAS_SHADOW=true DOLFS=true INCLUDE_RPC=true \ all install -> Creará e instalará uClibc, con las distintas variables correspondiendo a: - DO_C99_MATH=true -> Proporciona un conjunto completo de características matemáticas acordes a C99 para la librería matemática (libm). Algunos paquetes recientes pueden necesitarlo. (Por contra hace que libm sea unos ~35kB más grande en una arquitectura x86) - HAS_SHADOW=true -> Añade soporte para las contraseñas ocultas (shadow password) (que es lo que emplea un LFS normal) - DOLFS=true -> Añade soporte para ficheros grandes (2GB+), aunque puedes desactivar su uso en la mayor parte de los paquetes si no te hace falta. Algunos (tales como las versiones recientes de e2fsprogs) simplemente se negarán a compilar sin él. O sea que es mejor que lo actives. Nota: El núcleo también puede necesitar el soporte para ficheros grandes - INCLUDE_RPC=true -> RPC no lo emplean muchas cosas aparte de NFS (sistema de ficheros en red). Aún así, algunos paquetes tales como las contraseñas ocultas tratarán de utilizar funciones incluídas en él. Por lo cual lo activamos por defecto. A continuación, te sugiero que instales los paquetes siguientes antes de hacer cualquier otra cosa (más adelante encontrarás las instrucciones): 1. man-pages 2. fileutils 3. sh-utils 4. Crear dispositivos (ejecuta MAKEDEV) 5. ncurses 6. bash En realidad, no hace falta hacerlo así estrictamente, si bien te evitarás algunas molestias del tipo 'nombre grupo/usuario no resuelto' ('unresolved group/user name'). (Las man-pages se instalan en primer lugar ya que los libros actuales del LFS lo instalan sin hacer que compruebe si existen páginas man ya instaladas (es más rápido)). Después, puedes instalar los paquetes en el mismo órden que se sigue en el libro LFS (que viene a ser más o menos el que se indica a continuación) con la excepción de gettext que debe ser el último. Algunos de ellos necesitarán opciones/órdenes o parches adicionales. Continúa leyendo para enterarte de cosas así. Para instalar los paquetes siguientes, sigue sin más las instrucciones del libro LFS en el capítulo 6 y aplica las modificaciones o adiciones que se indican a continuación (si hay alguna) para las distintas órdenes: Nota: no se indican las órdenes exactas para aumentar la compatibilidad con la versión del libro que estés usando y hacer más fácil de mantener actualizada esta receta. - man-pages (comprobado con la versión 1.51) Nota: Si no instalaste un groff estático con anterioridad o no vas a preformatear/convertir tus páginas man más adelante para que funcionen sin groff, deberías obviar sin más la instalación de este paquete. - fileutils (comprobado con la versión 4.1) añade a ./configure las opciones: --disable-nls - sh-utils (comprobado con la versión 2.0) ejecuta antes de empezar: rm -f /bin/true añade a ./configure las opciones: --disable-nls - MAKEDEV (comprobado con la versión 1.5) - ncurses (comprobado con la versión 5.2) ejecuta antes de empezar: patch -Np1 < ../uclibc-lfs-patches/ncurses-5.2-uClibc.patch -> Este parche hará que ncurses emplee nuestro tic estático que compilamos con anterioridad para la instalación de la base de datos de terminfo. añade a ./configure las opciones: --without-cxx Nota: Si no te gusta tener un 'tic' parcialmente defectuoso enlazado con uClibc y prefieres quedarte con el estático, ejecuta: cp -f /static/bin/tic /usr/bin - bash (comprobado con la versión 2.05a) ejecuta antes de empezar: ln -s ../static/bin/cat /bin -> Bash empleará /bin/cat para algunas operaciones y dado que aún no hemos instalado textutils, nos hará falta este enlace simbólico. - zlib (comprobado con la versión 1.1.4) Nota: En el momento de escribir esta receta, zlib no aparecía en el libro LFS. Ya que se recomienda instalarlo si quieres usar un paquete de las 'util-linux' reciente sin tener que modificarlo y dejando que los paquetes empleen zlib (o utilicen el zlib del sistema en lugar del que se incluye en ellos) lo incluimos aquí (quitaremos las instrucciones si llega a formar parte del libro LFS) Puedes crear/instalar zlib ejecutando las órdenes siguientes: ./configure --prefix=/usr && make libz.a && cp libz.a /usr/lib && chmod -x /usr/lib/libz.a && ./configure --shared --prefix=/usr --libdir=/lib && make clean all && make install && rm -f /lib/libz.so && ln -sf ../../lib/libz.so.1 /usr/lib/libz.so && cp zlib.3 /usr/share/man/man3 Explicación de las órdenes: zlib se crea sólo bien como una versión estática o como versión compartida de sí misma. Puesto que a menudo se prefiera hacerlo de ambas maneras, lo hacemos así creándolo dos veces [...] --libdir=/lib -> Ya que algunos programas que emplean la zlib se instalarán en /lib en lugar de en /usr/lib, haremos que siempre esté disponible para ellos incluso si /usr no está montado make clean all -> podría reutilizarse el código creado mediante la primera operación de compilación, pero limpiarlo permite que zlib se cree con las opciones del compilador que prefiramos para las librerías compartidas en lugar de las que elegimos para la versión estática. rm -f /lib/libz.so && ln -sf ../../lib/libz.so.1 /usr/bin/libz.so -> no hace falta libz.so en /lib, mientras se encuentre en /usr/lib, pues se usa sólo como información para el enlazador (linker) para ayudarle a encontrar la librería. (No hay programas que se enlacen directamente con libz.so, pues emplearán /lib/libz.so.1) - GCC (comprobado con la versión 2.95.3-2) en las opciones de ./configure, sustituye: --enable-languages=c,c++ por: --enable-languages=c -> el compilador de c++ y las librerías no pueden crearse con la uClibc actual y no existe forma de arreglarlo en este momento (y es probable que no la haya próximamente) - ViM (comprobado con la versión 6.1) Nota: No debería hacer falta emplear --disable-nls (lo detecta automáticamente) - findutils (comprobado con la versión 4.1) - gawk (comprobado con la versión 3.1.1) añade a ./configure las opciones: --disable-nls - bison (comprobado con la versión 1.35) añade a ./configure las opciones: --disable-nls - less (comprobado con la versión 374) - groff (comprobado con la versión 1.17.2) Si no compilaste un groff estático y tienes un compilador GCC C++ estático como resultado de completar el capítulo 5, puedes crear este paquete ejecutando las mismas órdenes descritas en el libro. - textutils (comprobado con la versión 2.0) run: rm -f /bin/cat -> Creamos ese enlace simbólico al crear bash, ahora simplemente lo quitamos ya que los libros recientes del LFS experan que /bin/cat no exista. añade a ./configure las opciones: --disable-nls - sed (comprobado con la versión 3.02) - flex (comprobado con la versión 2.5.4a) - binutils (comprobado con la versión 2.12.1) añade a ./configure las opciones: --disable-nls - gettext No construyas por ahora este paquete ya que hará que algunos otros paquetes crean que queremos soporte NLS. (Nos evitará algún trabajo si no lo creen). Si necesitas gettext por otras razones (tales como poder ejecutar 'aclocal' en un código fuente que soporte gettext sin problemas) hazlo al final de esta receta. Allí encontrarás las instrucciones - net-tools (comprobado con la versión 1.60) Dos protocolos (activados por defecto) no compilarán debido a que faltan includes/funciones en uClibc. Se trata de AX25 y NET/ROM (Paquetes de radio) que no suelen emplearse y no hay problema en desactivarlos para la mayor parte de la gente. Si configuras net-tools 'sin' usar 'yes "" | make', haz simplemente 'n' cada vez que los mencione (AX25 y NET/ROM) e instálalo normalmente. En otro caso, emplea las órdenes siguientes en lugar de las que aparecen en el libro LFS: yes "" | make config && mv config.h config.h~ && sed -e /AX25/s/1/0/ -e /NETROM/s/1/0/ < config.h~ > config.h && make && make update - m4 (comprobado con la versión 1.4) ejecuta antes de empezar: patch -Np1 < ../uclibc-lfs-patches/m4-1.4-uClibc.patch -> m4 necesita algunas funciones que faltan en la uClibc, y este parche las proporciona. - texinfo (comprobado con la versión 4.2) añade a ./configure las opciones: --disable-nls - autoconf (comprobado con la versión 2.53) - automake (comprobado con la versión 1.6.2) - file (comprobado con la versión 3.38 y la 3.39) Hemos dicho antes en esta receta que hemos encontrado un problema con file y cómo se podía solcuionar. Había tres soluciones: según la que hayas empleado (es decir, la solución a, b, o c - compruébalo si no estás seguro), haz lo siguiente: Nota : No lo hagas todo, sólo a, b o c. Nota2: Ten cuidado de no confundir los parches, ya que hay dos parches con dos propósitos diferentes. a) Uso temporal de un file compilado estáticamente con glibc para hacer el trabajo: ejecuta antes de empezar: patch -Np1 < ../uclibc-lfs-patches/file-3.39-uClibc-1.patch -> Este parche simplemente modifica los makefiles para que empleen nuestro 'file' estático. b) Uso permanente de un file compilado estáticamente con glibc (seguro): No hagas nada, ve al paquete siguiente. (file ya está instalado) c) Uso de un arreglo 'sucio' para que file funcione sin ayuda externa (inseguro): ejecuta antes de empezar (emplea file-3.38-uClibc-2.patch si usas la versión 3.38): patch -Np1 < ../uclibc-lfs-patches/file-3.39-uClibc-2.patch -> Quitará misteriosamente lineas que considera erróneas en el fichero "mágico" de 'file' incluso aunque tengan una sintaxis correcta. Las líneas son: 0 string/b #\040xmcd CDDB(tm) formato datos CD texto 0 string/b #!\ /bin/tcsh Guión ejecutable de Tenex C shell 0 string/b #!\ /usr/local/tcsh Guión ejecutable de Tenex C shell 0 string/cB \<!doctype\ html Documento texto HTML También se desconoce si la salida producida por 'file' al interpretar el fichero "mágico" será correcta al 100%, aunque parece utilizable (con la excepción de los cuatro tipos mencionados) - libtool (comprobado con la versión 1.4.2) - bin86 (comprobado con la versión 0.16.3) - bzip2 (comprobado con la versión 1.0.2) - ed (comprobado con la versión 0.2) - kbd (comprobado con la versión 1.06) - diffutils (comprobado con la versión 2.8.1) añade a ./configure las opciones: --disable-nls - e2fsprogs (comprobado con la versión 1.27) Nota: No debería hacer falta --disable-nls (se detecta automáticamente) - grep (comprobado con la versión 2.5) añade a ./configure las opciones: --disable-nls - gzip (comprobado con la versión 1.2.4a) - man (comprobado con la versión 1.5j) añade a las opciones de make: CFLAGS='-DNONLS' -> Eliminar el soporte para lenguaje nativo arreglará la compilación. Nota: CFLAGS es una variable vacía para las makefiles de los man. Activarlo no desactivará ninguna de las opciones del compilador de C que estén en uso. - nasm (comprobado con la versión 0.98.34) Nota: Al igual que zlib, nasm no forma parte en este momento del libro LFS (y puede que no lo haga nunca). sin embargo, si quieres emplear un lilo reciente, puedes necesitarlo. Si usas lilo 22.2 o anterior (o utilizas grub) obvia este paquete Puedes instalar nasm ejecutando las siguientes órdenes sencillas: ./configure --prefix=/usr && make && make install - lilo (comprobado con la versión 22.2 y la 22.3.2) - make 3.79.1 añade a ./configure las opciones: --disable-nls - modutils Obvia este paquete. Compilará, pero producirá violaciones de segmento en muchas operaciones, lo que lo hace inutilizable. Emplea un núcleo sin módulos o consigue un modutils estático (hasta que se arregle el problema). Se explicó con anterioridad en la sección 2. - netkit-base (comprobado con la versión 0.17) - patch (comprobado con la versión 2.5.4) - procinfo (comprobado con la versión 18) - procps (comprobado con la versión 2.0.7) ejecuta antes de empezar: patch -Np1 < ../uclibc-lfs-patches/procps-2.0.7-uClibc.patch -> Este parche hace que top.c deje de usar una función + de include que la uClibc no proporciona y que se relaciona con la creación correcta de variables locales. - psmisc (comprobado con la versión 20.1) Nota: psmisc 20.2 y 21 tienen un soporte incompleto de la opción '--disable-nls' y no compilarán con uClibc sin modificaciones. Puesto que los programas de psmisc 20.1 funcionan correctamente y no tienen soporte NLS en absoluto, lo instalaremos en su lugar. (Puedes hacerlo utilizando las mismas órdenes que se describen el libro LFS. - reiserfsprogs 3.x.1b ejecuta antes de empezar: patch -Np1 < ../uclibc-lfs-patches/reiserfsprogs-3.x.1b-uClibc.patch -> proporciona las funciones de la pila de objetos (obstack) de las que carece uClibc y los "include" que necesita reiserfs. - shadow (comprobado con la versión 4.0.3) ejecuta antes de empezar: patch -Np1 < ../uclibc-lfs-patches/shadow-4.0.3-uClibc.patch -> Shadow trata de utilizar la función putgrent que falta en uClibc, y este parche la proporciona. También trata de emplear 'innetgr', una función relacionada con NIS que uClibc no soporta, por lo que conviene desactivarla. añade a ./configure las opciones: --disable-nls - sysklogd (comprobado con la versión 1.4.1) - sysvinit (comprobado con la versión 2.84) - tar (comprobado con la versión 1.13) añade a ./configure las opciones: --disable-nls - util-linux (comprobado con la versión 2.11r and 2.11t) elimina de las opciones de 'make' y 'make install' la opción: HAVE_SLN=yes -> El libro LFS lo emplea debido a que glibc ya proporciona un sln (enlazado estáticamente). Dado que uClibc no lo hace, tenemos que crear el de las util-linux. - perl (comprobado con la versión 5.6.1) Nota: perl compila con uClibc pero "make test" falla en tres de sus pruebas. Aún así, es bastante probable que jamás necesites tales capacidades, por lo que puedes ignorarlo. - gettext (comprobado con la versión 0.11.2) Nota: Sólo deberías instalar este paquete si lo necesitas para algo más que dar soporte a lenguajes nativos (tal como ejecutar aclocal sobre un código fuente que soporte gettext). Si lo instalas, puedes pensar en hacerlo con un prefijo diferente a /usr (por ejemplo /opt/gettext, quizá) añade a ./configure las opciones: --disable-nls - Capítulo 7+ del libro LFS Puede completarse sin modificación alguna, hemos terminado con la receta, aunque tal vez quieras echar un vistazo a la sección 5 de las "Preguntas frecuentes" (F.A.Q.) y a la 4 (Extras) si aún no lo has hecho. ======================= 4. Extras ======================= - man2cat opcional (comprobado con la versión 0.1) SÓLO uses esto si no pudiste o no quisiste compilar groff. Esta es una forma alternativa de visualizar páginas man sin groff. Para instalar man2cat, descomprímelo sin más en el directorio que prefieras. man2cat convertirá automáticamente todas las páginas man de sus directorios y las colocará en los directorios de cat. Puedes convertir las páginas man de tu sistema uClibc ejecutando esta órden en un sistema que tenga instalado groff (recuerda volver a inicializar $LFS si aún no lo has hecho): sh man2cat $LFS/usr/share/man Nota: Si quieres que las páginas cat se compriman de modo automático, emplea las opciones -gz o -bz2. Si quieres que funcione más rápido, prueba con la opción -jall que procesará todas las secciones simultáneamente (lanzará muchos procesos y utilizará más recursos, o sea que ten algo de cuidado). Mira man2cat -h si quieres más ayuda. Ahora que las has convertido, para hacer que "man" deje de intentar convertirlas de nuevo, tenemos que quitar las páginas man sin formatear de su ubicación actual: cd $LFS/usr/share/man && mkdir ../man.old && mv man* ../man.old A continuación hay que indicarle a man dónde puede encontrar nuestras páginas cat, ya que por defecto las busca en /var/cache/man de acuerdo con la especificación del FHS, pero dado que nuestras páginas cat son estáticas y no necesitan estar en /var, creo que deberían colocarse en su ubicación anterior en /usr/share/man/cat*. Puedes actualizar tu fichero man.conf haciendo: cd $LFS/etc && mv man.conf man.conf~ && sed -e 's/^# FSSTND/FSSTND/' -e 's/^FHS/# FHS/' < man.conf~ > man.conf Y ya está. ==================================== 5. Preguntas más frecuentes (F.A.Q.) ==================================== P: Esta receta insiste en que "mantengas separados los capítulos 5 y 6", usando un "estilo estático" y emplea a menudo un directorio /static. ¿Qué es eso?. ¿Cómo lo hago? R: El LFS 4.0 (sólo disponible en el CVS cuando escribo esto) emplea un directorio especial ($LFS/static) para instalar todas las herramientas compiladas estáticamente dle capítulo 5. Esta es una forma de poner en práctica la receta para "separar_el_capítulo_5_y_el_6.txt" (en el original inglés "keep_chap5_and_chap6_sep.txt"). Si quieres hacer lo mismo, lee la receta o crea la parte del capítulo 5 de la LFS siguiendo las instrucciones de la versión 4.0 de la LFS que encontrarás en el CVS. (Nota: La versión LFS CVS/4.0+ emplea también gcc 3.1+. Si quieres seguir empleando el gcc 2.95.3-2, sigue las instrucciones del libro de la LFS en su versión 3.3 y sustituye "/usr" por "/static" cada vez que aparezca en el capítulo 5). P: ¿De verdad necesito crear un perl estático? R: Por ahora, sí. uClibc necesita ejecutar un guión perl durante su proceso de creación. Sin embargo, debería ser fácil reescribirlo utilizando AWK en su lugar; por lo que si deseas hacerlo así, encontrarás el dichoso guión en "extra/scripts/initfini.pl" dentro del código fuente de la uClibc. Se agradecen los parches (y en este caso, deberías enviarlos directamente a la gente de la uClibc) P: Sigo viendo el mensaje "the 'setlocale' function supports only C|POSIX locales" con muchos paquetes. ¿Es un problema? R: No. La uClibc puede compilarse con soporte para variables locales (es decir soporta otras locales que las C/POSIX), pero es algo horrible de hacer que además emplea partes de la glibc. Recomiendo encarecidamente dejarlo estar. P: ¿A qué fin tanto '--disable-nls' en un montón de paquetes?. Algunos paquetes compilan sin problema usando soporte de lenguajes nativos. R: Aunque compilen, la parte de soporte de lenguajes nativos (NLS) no funciona. Lo único que se consigue es que los binarios y los ficheros compilados empleen algo más de espacio y de memoria RAM a cambio de nada. P: ¿Podré usar las XFree86? R: Puedes, pero esta receta no te explica cómo (tendrás problemas) P: ¿Puedo compilar binarios C++ enlazados con la uClibc usando una versión estática enlazada con la glibc del compilador GCC C++? R: Si, pero puede dar malos resultados (por ejemplo, violaciones de segmento frecuentes) con algunos programas o paquetes. Evita C++ en lo posible. P: La receta dice que de heco puedo compilar groff si tengo un compilador estático GCC C++. ¿Cómo creo uno? R: Algunas versiones del libro LFS desactivan la creación del compilador de C++ en el capítulo 5 ya que no se emplea. Si quieres uno, crea de nuevo gcc de la misma forma que antes pero usando la opción "--enable-languages=c,c++" P: Ejecuté man2cat y ví un montón de mensajes de advertencia/error durante el proceso. ¿Me faltarán algunas páginas man? R: Normalmente, son sólo mensajes de advertencia que indican errores de sintaxis en algunas páginas man. Sin embargo, dichas páginas se formatean de todos modos y resultan legibles, algunas partes de las mismas pueden aparecer desajustadas o visualizarse de forma un tanto rara. P: ¿Y que es eso de "warning: can't find character with input code ..."? No quiero perder caracteres... R: Trata de utilizar pues man2cat -roff "groff -mandoc -Tlatin1". -Tascii por defecto para asegurar que se visualicen correctamente en cualquier terminal. P: Ejecuté man2cat y emplea mucho más espacio que mis antiguas páginas man ¡incluso cuando las comprimo! R: Por ahora, man2cat no crea enlaces simbólicos para páginas cat duplicadas, aunque probablemente lo haga en el futuro. (En otras palabras, tienes muchas páginas duplicadas ocupando espacio - Eres libre de crear un guión para buscarlas y enlazarlas simbólicamente si el espacio es muy importante para tí) P: Ejecuté man2cat pero no convirtió mis páginas en idioma .... "inserta el que tú prefieras". R: No se soporta en este momento y probablemente no se soporte jamás a menos que alguien mande un parche. P: Esta receta me dice cómo crear un sistema LFS normal que use uClibc, pero yo la quería emplear para crear un sistema de tamaño mínimo. ¿Qué paquetes tengo que quitar? R: Un "sistema mínimo" es algo muy relativo en función de qué quieres hacer con él. El hecho es que puedes tener un sistema linux funcionando con nada más que un núcleo y un procesador de órdenes (un shell). A partir de aquí: - ¿Necesitas compilar binarios? (desarrollo) - ¿Te hace falta entrar en el sistema con un login? - ¿Quieres tener documentación? - ¿Quieres algún intérprete del lenguaje que sea? - etc... Pista: Tendrías que mirar el paquete busybox (http://www.busybox.net/) ====================== Fin de la receta ====================== |