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
======================
|