Linux From Scratch VIII: Terminando con el sistema temporal

Después de dejar compilados gran parte de los paquetes del sistema temporal de Linux From Scratch en mi anterior artículo, en este nuevo post toca terminar de compilar el resto. Con este artículo terminaré de generar un sistema capaz de compilar un linux independientemente de los programas del sistema operativo que estoy usando. Para ello continúo con el siguiente paquete, que es M4.

Compilando M4

En primer lugar y como siempre, decomprimimos el paquete y nos situamos en el directorio que se genera al hacerlo.

[lfs@corellia sources]$ tar xvjf m4-1.4.16.tar.bz2 

...

m4-1.4.16/build-aux/gnupload
m4-1.4.16/build-aux/missing
m4-1.4.16/build-aux/mdate-sh
m4-1.4.16/build-aux/announce-gen
[lfs@corellia sources]$ cd m4-1.4.16
[lfs@corellia m4-1.4.16]$ sed -i -e '/gets is a/d' lib/stdio.in.h
[lfs@corellia m4-1.4.16]$

El último comando hace la corrección de stdio.in.h que también habíamos hecho en algunos paquetes en el post anterior. El resto de los pasos son los típicos.

[lfs@corellia m4-1.4.16]$ ./configure --prefix=/tools

...

config.status: creating examples/Makefile
config.status: creating lib/config.h
config.status: executing depfiles commands
config.status: executing stamp-h commands
[lfs@corellia m4-1.4.16]$ make

...

make[4]: Leaving directory `/mnt/lfs/sources/m4-1.4.16/tests'
make[3]: Leaving directory `/mnt/lfs/sources/m4-1.4.16/tests'
make[2]: Leaving directory `/mnt/lfs/sources/m4-1.4.16/tests'
make[1]: Leaving directory `/mnt/lfs/sources/m4-1.4.16'
[lfs@corellia m4-1.4.16]$ make install

...

make[4]: Leaving directory `/mnt/lfs/sources/m4-1.4.16/tests'
make[3]: Leaving directory `/mnt/lfs/sources/m4-1.4.16/tests'
make[2]: Leaving directory `/mnt/lfs/sources/m4-1.4.16/tests'
make[1]: Leaving directory `/mnt/lfs/sources/m4-1.4.16'
[lfs@corellia m4-1.4.16]$ cd ..
[lfs@corellia sources]$ rm -rf m4-1.4.16
[lfs@corellia sources]$

Compilando make y patch

Los paquetes make y patch son de los que se compilan con los comandos típicos sin necesidad de hacer nada especial, así que pongo los comandos seguidos. No hace falta comentar nada.

[lfs@corellia sources]$ tar xvjf make-3.82.tar.bz2 

...

make-3.82/default.c
make-3.82/main.c
make-3.82/README.OS2
make-3.82/remote-cstms.c
[lfs@corellia sources]$ cd make-3.82
[lfs@corellia make-3.82]$ ./configure --prefix=/tools

...

config.status: executing default-1 commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
config.status: creating build.sh
[lfs@corellia make-3.82]$ make

...

gcc  -g -O2   -o make ar.o arscan.o commands.o default.o dir.o expand.o file.o function.o getopt.o getopt1.o implicit.o job.o main.o misc.o read.o remake.o remote-stub.o rule.o signame.o strcache.o variable.o version.o vpath.o hash.o   -lrt 
make[2]: Leaving directory `/mnt/lfs/sources/make-3.82'
make[1]: Leaving directory `/mnt/lfs/sources/make-3.82'
[lfs@corellia make-3.82]$ make install

...

  /tools/bin/install -c make '/tools/bin'
 /tools/bin/install -c -m 644 make.1 '/tools/share/man/man1'
make[2]: Leaving directory `/mnt/lfs/sources/make-3.82'
make[1]: Leaving directory `/mnt/lfs/sources/make-3.82'
[lfs@corellia make-3.82]$ cd ..
[lfs@corellia sources]$ rm -rf make-3.82
[lfs@corellia sources]$ tar xvjf patch-2.6.1.tar.bz2 

...

patch-2.6.1/tests/remember-reject-files
patch-2.6.1/tests/test-lib.sh
patch-2.6.1/tests/unmodified-files
patch-2.6.1/update-version.sh
[lfs@corellia sources]$ cd patch-2.6.1
[lfs@corellia patch-2.6.1]$ ./configure --prefix=/tools

...

checking for long file names... (cached) yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
[lfs@corellia patch-2.6.1]$ make

...

gcc -std=gnu99 -c  -DHAVE_CONFIG_H -Ded_PROGRAM=\"ed\" -DENABLE_MERGE -I. -I./src -I./gl/lib -g -O2 -o src/version.o src/version.c
gcc -std=gnu99 -o src/patch -g -O2  gl/lib/argmatch.o gl/lib/backupfile.o gl/lib/basename.o gl/lib/dirname.o gl/lib/stripslash.o gl/lib/exitfail.o gl/lib/hash.o gl/lib/quote.o gl/lib/quotearg.o gl/lib/safe-write.o gl/lib/xmalloc.o gl/lib/xstrndup.o gl/lib/error.o gl/lib/full-write.o src/merge.o src/inp.o src/maketime.o src/partime.o src/patch.o src/pch.o src/quotesys.o src/util.o src/version.o 
[lfs@corellia patch-2.6.1]$ make install
/bin/sh ./mkinstalldirs /tools/bin /tools/share/man/man1
/tools/bin/install -c src/patch /tools/bin/`echo patch | sed 's,x,x,'`
/tools/bin/install -c -m 644 ./patch.man /tools/share/man/man1/`echo patch | sed 's,x,x,'`.1
[lfs@corellia patch-2.6.1]$ cd ..
[lfs@corellia sources]$ rm -rf patch-2.6.1
[lfs@corellia sources]$

Ha funcionado sin novedad. Pasemos a Perl.

Compilando Perl

Perl requiere aplicar un parche y configurar de una forma especial. Vamos paso a paso. Primero descomprimir y entrar en el directorio.

[lfs@corellia sources]$ tar xvjf perl-5.16.1.tar.bz2 

...

perl-5.16.1/cpan/Archive-Extract/lib/Archive/Extract.pm
perl-5.16.1/beos/beos.c
perl-5.16.1/beos/beosish.h
perl-5.16.1/beos/nm.c
[lfs@corellia sources]$ cd perl-5.16.1
[lfs@corellia perl-5.16.1]$

Ahora aplicar el parche y configurar.

[lfs@corellia perl-5.16.1]$ patch -Np1 -i ../perl-5.16.1-libc-2.patch
patching file hints/linux.sh
[lfs@corellia perl-5.16.1]$ sh Configure -des -Dprefix=/tools

...

make[1]: Leaving directory `/mnt/lfs/sources/perl-5.16.1/x2p'
Now you must run 'make'.

If you compile perl5 on a different machine or from a different object
directory, copy the Policy.sh file from this object directory to the
new one before you run Configure -- this will help you with most of
the policy defaults.

[lfs@corellia perl-5.16.1]$

Todo bien. Ya podemos compilar.

[lfs@corellia perl-5.16.1]$ make
make[1]: Leaving directory `/mnt/lfs/sources/perl-5.16.1/x2p'
./perl -f -Ilib pod/buildtoc -q

    Everything is up to date. Type 'make test' to run test suite.
[lfs@corellia perl-5.16.1]$

La instalación vamos a hacerla de forma manual, porque sólo necesitamos parte de los ficheros, así que no merece la pena instalarlo todo.

[lfs@corellia perl-5.16.1]$ cp -v perl cpan/podlators/pod2man /tools/bin
'perl' -> '/tools/bin/perl'
'cpan/podlators/pod2man' -> '/tools/bin/pod2man'
[lfs@corellia perl-5.16.1]$ mkdir -pv /tools/lib/perl5/5.16.1
mkdir: created directory '/tools/lib/perl5'
mkdir: created directory '/tools/lib/perl5/5.16.1'
[lfs@corellia perl-5.16.1]$ cp -Rv lib/* /tools/lib/perl5/5.16.1

...

'lib/warnings' -> '/tools/lib/perl5/5.16.1/warnings'
'lib/warnings/register.pm' -> '/tools/lib/perl5/5.16.1/warnings/register.pm'
'lib/warnings.pm' -> '/tools/lib/perl5/5.16.1/warnings.pm'
'lib/warnings.t' -> '/tools/lib/perl5/5.16.1/warnings.t'
[lfs@corellia perl-5.16.1]$

Ahora borramos el directorio de código fuente como siempre y listo.

[lfs@corellia perl-5.16.1]$ cd ..
[lfs@corellia sources]$ rm -rf perl-5.16.1
[lfs@corellia sources]$

Compilando sed, tar, texinfo y xz

Estos cuatro paquetes son de los que se compilan con los comandos normales. La única excepción es tar, que hay que aplicarle la corrección de stdio.in.h que ya he hecho anteriormente en otros paquetes. De nuevo pongo todos los comandos juntos.

[lfs@corellia sources]$ tar xvjf sed-4.2.1.tar.bz2 

...

sed-4.2.1/BUGS
sed-4.2.1/NEWS
sed-4.2.1/bootstrap.sh
sed-4.2.1/aclocal.m4
[lfs@corellia sources]$ cd sed-4.2.1
[lfs@corellia sed-4.2.1]$ ./configure --prefix=/tools

...

config.status: executing depfiles commands
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
[lfs@corellia sed-4.2.1]$ make

...

make[2]: Leaving directory `/mnt/lfs/sources/sed-4.2.1/testsuite'
make[2]: Entering directory `/mnt/lfs/sources/sed-4.2.1'
make[2]: Leaving directory `/mnt/lfs/sources/sed-4.2.1'
make[1]: Leaving directory `/mnt/lfs/sources/sed-4.2.1'
[lfs@corellia sed-4.2.1]$ make install

,,,

make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/mnt/lfs/sources/sed-4.2.1'
make[1]: Leaving directory `/mnt/lfs/sources/sed-4.2.1'
[lfs@corellia sed-4.2.1]$ cd ..
[lfs@corellia sources]$ rm -rf sed-4.2.1
[lfs@corellia sources]$ tar xvjf tar-1.26.tar.bz2 

...

tar-1.26/INSTALL
tar-1.26/ABOUT-NLS
tar-1.26/ChangeLog
tar-1.26/COPYING
[lfs@corellia sources]$ cd tar-1.26
[lfs@corellia tar-1.26]$ sed -i -e '/gets is a/d' gnu/stdio.in.h
[lfs@corellia tar-1.26]$ ./configure --prefix=/tools

...

config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
config.status: executing tests/atconfig commands
[lfs@corellia tar-1.26]$ make

...

make[2]: Leaving directory `/mnt/lfs/sources/tar-1.26/tests'
make[2]: Entering directory `/mnt/lfs/sources/tar-1.26'
make[2]: Leaving directory `/mnt/lfs/sources/tar-1.26'
make[1]: Leaving directory `/mnt/lfs/sources/tar-1.26'
[lfs@corellia tar-1.26]$ make install

...

make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/mnt/lfs/sources/tar-1.26'
make[1]: Leaving directory `/mnt/lfs/sources/tar-1.26'
[lfs@corellia tar-1.26]$ cd ..
[lfs@corellia sources]$ rm -rf tar-1.26
[lfs@corellia sources]$ tar xvzf texinfo-4.13a.tar.gz 

...

texinfo-4.13/makeinfo/node.h
texinfo-4.13/makeinfo/float.h
texinfo-4.13/makeinfo/cmds.h
texinfo-4.13/makeinfo/toc.h
[lfs@corellia sources]$ cd texinfo-4.13
[lfs@corellia texinfo-4.13]$ ./configure --prefix=/tools

...

config.status: executing depfiles commands
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
[lfs@corellia texinfo-4.13]$ make

...

make[2]: Leaving directory `/mnt/lfs/sources/texinfo-4.13/doc'
make[2]: Entering directory `/mnt/lfs/sources/texinfo-4.13'
make[2]: Leaving directory `/mnt/lfs/sources/texinfo-4.13'
make[1]: Leaving directory `/mnt/lfs/sources/texinfo-4.13'
[lfs@corellia texinfo-4.13]$ make install

...

make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/mnt/lfs/sources/texinfo-4.13'
make[1]: Leaving directory `/mnt/lfs/sources/texinfo-4.13'
[lfs@corellia texinfo-4.13]$ cd ..
[lfs@corellia sources]$ rm -rf texinfo-4.13
[lfs@corellia sources]$ tar xvJf xz-5.0.4.tar.xz

...

xz-5.0.4/build-aux/config.sub
xz-5.0.4/build-aux/config.rpath
xz-5.0.4/build-aux/config.guess
xz-5.0.4/build-aux/compile
[lfs@corellia sources]$ cd xz-5.0.4
[lfs@corellia xz-5.0.4]$ ./configure --prefix=/tools

...

config.status: executing libtool commands
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
[lfs@corellia xz-5.0.4]$ make

...

make[2]: Leaving directory `/mnt/lfs/sources/xz-5.0.4/tests'
make[2]: Entering directory `/mnt/lfs/sources/xz-5.0.4'
make[2]: Leaving directory `/mnt/lfs/sources/xz-5.0.4'
make[1]: Leaving directory `/mnt/lfs/sources/xz-5.0.4'
[lfs@corellia xz-5.0.4]$ make install

...

 /tools/bin/install -c -m 644 AUTHORS COPYING COPYING.GPLv2 NEWS README THANKS TODO doc/faq.txt doc/history.txt doc/xz-file-format.txt doc/lzma-file-format.txt '/tools/share/doc/xz'
make[2]: Leaving directory `/mnt/lfs/sources/xz-5.0.4'
make[1]: Leaving directory `/mnt/lfs/sources/xz-5.0.4'
[lfs@corellia xz-5.0.4]$ cd ..
[lfs@corellia sources]$ rm -rf xz-5.0.4
[lfs@corellia sources]$

Todo compilado sin problemas. Por ahora no hay nada más que compilar hasta el siguiente capítulo del libro. Ya sólo faltan algunos detalles para dejar listo el sistema temporal.

Últimos detalles

Para terminar con el sistema temporal, lo primero que vamos a hacer es un poco de limpieza. Vamos a empezar eliminando los símbolos de depuración de las librerías y ejecutables que hemos generado. Estos símbolos no sirven para nada si no vamos a depurar y están ocupando espacio innecesariamente.

[lfs@corellia sources]$ strip --strip-debug /tools/lib/*

...

strip: Warning: '/tools/lib/tcl8' is not an ordinary file
strip: Warning: '/tools/lib/tcl8.5' is not an ordinary file
strip:/tools/lib/tclConfig.sh: File format not recognized
strip: Warning: '/tools/lib/terminfo' is not an ordinary file
[lfs@corellia sources]$ strip --strip-unneeded /tools/{,s}bin/*

...

strip:/tools/bin/zgrep: File format not recognized
strip:/tools/bin/zless: File format not recognized
strip:/tools/bin/zmore: File format not recognized
strip:/tools/bin/znew: File format not recognized
[lfs@corellia sources]$

Los mensajes sobre ficheros que no son ordinarios salen porque hay algunos directorios en /tools/lib, /tools/bin y /tools/sbin. Esto es normal. Me preocupa un poco más los que se quejan de formatos de fichero no reconocidos, pero por lo que veo aquí, también son normales.

Ahora vamos a borrar también la documentación, páginas info, manual, etc. No tiene sentido tener eso en el sistema temporal ocupando espacio.

[lfs@corellia sources]$ rm -rf /tools/{,share}/{info,man,doc}
[lfs@corellia sources]$

El último paso es cambiar el propietario de todos los ficheros de /tools. Ahora mismo, los ficheros de este directorio pertenecen al usuario lfs, que existe sólo en mi sistema real. Cuando el Linux From Scratch que estoy compilando esté terminado, ese usuario no va a existir, así que es mejor hacer que este directorio pertenezca a root.

[lfs@corellia sources]$ su -c "chown -R root:root $LFS/tools"
Password: 
[lfs@corellia sources]$

Y con esto está todo el sistema temporal compilado. Aquí termina el capítulo 5 del libro. En el siguiente capítulo, empezaré a crear un Linux From Scratch de verdad compilando todos los paquetes con las heramientas generadas hasta ahora.

EOF

Anuncios

2 pensamientos en “Linux From Scratch VIII: Terminando con el sistema temporal

  1. Damian Rivera

    Listo!!!

    Sin problemas,un poco tardado pero sin problemas 😀

    El que mas se tardo después de gcc fue el gran perl:

    real 22m34.703s
    user 18m48.633s
    sys 0m56.856s

    Le daré una ojeada al capitulo 6 del libro

    Para ver que es lo siguiente

    Saludos 😀

Los comentarios están cerrados.