Linux From Scratch VI: Continuamos por tcl

Como lo prometido es deuda, continúo esta serie de artículos sobre la instalación de Linux From Scratch compilando, para el sistema temporal, tcl y algunos paquetes más que van a ser necesarios cuando empieze a crear el sistema definitivo.

En el post anterior se me olvidó decir que después de dejar gcc compilado, he borrado el directorio de compilación y el del código fuente descomprimido. Nada que no haya supuesto ya todo el mundo. 🙂 Empezemos a compilar tcl.

Compilando tcl

El primer paso es el de siempre. Descomprimir el paquete y entrar en el directorio que crea como resultado.

[lfs@corellia sources]$ tar xvzf tcl8.5.12-src.tar.gz 
tcl8.5.12/
tcl8.5.12/ChangeLog.2003
tcl8.5.12/tools/
tcl8.5.12/tools/man2html.tcl
tcl8.5.12/tools/tcl.hpj.in

...

tcl8.5.12/win/tclWinDde.c
tcl8.5.12/win/README
tcl8.5.12/win/tclWinInt.h
tcl8.5.12/win/tclWinSerial.c
tcl8.5.12/win/tclWinThrd.h
[lfs@corellia sources]$ cd tcl8.5.12
[lfs@corellia tcl8.5.12]$

Ahora empiezo a seguir los comandos del libro. El configure está en el directorio unix, pero por lo demás es una compilación más parecida a la de cualquier paquete de código fuente que se instala en un linux cualquiera. No tiene tantas cosas raras como binutils o el gcc.

[lfs@corellia tcl8.5.12]$ cd unix
[lfs@corellia unix]$ ./configure --prefix=/tools

...

checking whether the cpuid instruction is usable... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating dltest/Makefile
config.status: creating tclConfig.sh
[lfs@corellia unix]$ make

...

py.o bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_set_int.o bn_mp_init_size.o bn_mp_karatsuba_mul.o bn_mp_karatsuba_sqr.o bn_mp_lshd.o bn_mp_mod.o bn_mp_mod_2d.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_neg.o bn_mp_or.o bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_read_radix.o bn_mp_rshd.o bn_mp_set.o bn_mp_set_int.o bn_mp_shrink.o bn_mp_sqr.o bn_mp_sqrt.o bn_mp_sub.o bn_mp_sub_d.o bn_mp_to_unsigned_bin.o bn_mp_to_unsigned_bin_n.o bn_mp_toom_mul.o bn_mp_toom_sqr.o bn_mp_toradix_n.o bn_mp_unsigned_bin_size.o bn_mp_xor.o bn_mp_zero.o bn_s_mp_add.o bn_s_mp_mul_digs.o bn_s_mp_sqr.o bn_s_mp_sub.o  -ldl  -lieee -lm   -Wl,-rpath,/tools/lib
gcc -O2  -pipe    -Wl,--export-dynamic  tclAppInit.o -L/mnt/lfs/sources/tcl8.5.12/unix -ltcl8.5 -ldl  -lieee -lm  \
    -Wl,-rpath,/tools/lib -o tclsh

Ahora puedo pasar los tests. Este paso es opcional en este capítulo del libro, pero prefiero hacerlo. El libro dice que bajo ciertas circunstancias, el test puede fallar y que esto no es crítico y puede ignorarse. Sin embargo, si los tests pasaran, me quedaría más tranquilo. A ver si hay suerte.

[lfs@corellia unix]$ TZ=UTC make test

...

Tests ended at Wed Dec 26 16:52:49 UTC 2012
all.tcl:    Total    27048    Passed    25846    Skipped    1155    Failed    47
Sourced 137 Test Files.
Files with failing tests: http.test httpold.test socket.test

Han fallado algunos tests relaccionados con la red. Qué se le va a hacer. Como no es crítico no me voy a preocupar. Sigo con la instalación.

[lfs@corellia unix]$ make install
Installing message catalogs
Making directory /tools/man
Installing libtcl8.5.so to /tools/lib/
Making directory /tools/man/man1
    Creating msgs

...

Installing package platform 1.0.10 as a Tcl Module
Installing package platform::shell 1.1.4 as a Tcl Module
Installing library encoding directory
Installing and cross-linking command (.n) docs

En este caso ha tardado 23 segundos frente a los 31 que tendría que haber tardado con el SBU que he calculado originalmente. Está bien, pero con un tiempo tan pequeño no es muy significativo.

Sólo quedan algunos pequeños pasos que dar para terminar con esto.

[lfs@corellia unix]$ chmod -v u+w /tools/lib/libtcl8.5.so
mode of '/tools/lib/libtcl8.5.so' changed from 0555 (r-xr-xr-x) to 0755 (rwxr-xr-x)
[lfs@corellia unix]$ make install-private-headers
Installing private header files
[lfs@corellia unix]$ ln -sv tclsh8.5 /tools/bin/tclsh
'/tools/bin/tclsh' -> 'tclsh8.5'
[lfs@corellia unix]$

El primer comando modifica los permisos de la librería para que se puedan eliminar los símbolos de depuración más adelante, el segundo instala las cabeceras necesarias para compilar paquetes que usen tcl (expect las necesita) y el tercero crea un enlace para poder acceder a tcl a través del comando tclsh, que muchos programas usan.

Ahora borramos el código fuente descomprimido.

[lfs@corellia unix]$ cd ../..
[lfs@corellia sources]$ rm -rf tcl8.5.12
[lfs@corellia sources]$

Y con esto, tcl queda listo. Ha sido facil. Pasamos ahora a expect.

Compilando expect

La compilación de expect también es bastante facil. Sólo necesita un par de trucos. Empezemos.

[lfs@corellia sources]$ tar xvzf expect5.45.tar.gz 

...

expect5.45/exp_tstamp.h
expect5.45/exp_chan.c
expect5.45/exp_log.c
expect5.45/configure
expect5.45/libexpect.man
[lfs@corellia sources]$ cd expect5.45
[lfs@corellia expect5.45]$ cp -v configure{,.orig}
'configure' -> 'configure.orig'
[lfs@corellia expect5.45]$ sed 's:/usr/local/bin:/bin:' configure.orig > configure
[lfs@corellia expect5.45]$

En los dos últimos comandos se ve el primer truco: cambiar /usr/local/bin por /bin en el configure para que utilice /bin/stty en lugar de /usr/local/bin/stty. Ahora empezamos a compilar.

[lfs@corellia expect5.45]$ ./configure --prefix=/tools --with-tcl=/tools/lib \
>   --with-tclinclude=/tools/include

...

checking sys/param.h usability... yes
checking sys/param.h presence... yes
checking for sys/param.h... yes
configure: creating ./config.status
config.status: creating Makefile
[lfs@corellia expect5.45]$ make

...

    -L/mnt/lfs/sources/expect5.45 -lexpect5.45 \
    -L/tools/lib -ltcl8.5 \
    -ldl  -lieee -lm \
    -Wl,-rpath,/tools/lib \
    -Wl,-rpath,/tools/lib/expect5.45
: expect

En todo este capítulo del libro los test son opcionales, pero voy a lanzarlos también a ver si hay suerte.

[lfs@corellia expect5.45]$ make test

...
send.test
spawn.test
stty.test
all.tcl:    Total    29    Passed    29    Skipped    0    Failed    0
Sourced 0 Test Files.
[lfs@corellia expect5.45]$

Así da gusto. 🙂 Sólo queda instalar y borrar el directorio de código fuente.

[lfs@corellia expect5.45]$ make SCRIPTS="" install

...

Installing ./tcldbg.h
for i in  end_of_list ; do \
  if [ -f $i ] ; then \
    /usr/bin/install -c $i /tools/bin/$i ; \
    rm -f $i ; \
  else true; fi ; \
done
[lfs@corellia expect5.45]$ cd ..
[lfs@corellia sources]$ rm -rf expect5.45
[lfs@corellia sources]$

Lo único destacable aquí es el parámetro que se le pasa a make para que no instale los scripts, que no son necesarios ahora.

Así de facil. Ha tardado 9 segundos, así que ni me molesto en compararlo con el SBU. Pasemos al siguiente paquete.

Compilando DejaGNU

Si los anteriores eran fáciles, éste roza lo ridículo. Pongo directamente los comandos:

[lfs@corellia sources]$ tar xvzf dejagnu-1.5.tar.gz 

...

dejagnu-1.5/MAINTAINERS
dejagnu-1.5/configure.ac
dejagnu-1.5/NEWS
dejagnu-1.5/ChangeLog
dejagnu-1.5/README
[lfs@corellia sources]$ cd dejagnu-1.5
[lfs@corellia dejagnu-1.5]$ ./configure --prefix=/tools
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk

...

checking Tcl version 8.3 or greater... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: executing depfiles commands
[lfs@corellia dejagnu-1.5]$ make install

...

 /usr/bin/install -c runtest.exp lib/debugger.exp lib/dejagnu.exp lib/dg.exp lib/framework.exp lib/ftp.exp lib/kermit.exp lib/libgloss.exp lib/remote.exp lib/rlogin.exp lib/rsh.exp lib/standard.exp lib/target.exp lib/targetdb.exp lib/telnet.exp lib/tip.exp lib/utils.exp '/tools/share/dejagnu'
 install-info --info-dir='/tools/share/info' '/tools/share/info/dejagnu.info'
make[1]: Leaving directory `/mnt/lfs/sources/dejagnu-1.5'
[lfs@corellia dejagnu-1.5]$ cd ..
[lfs@corellia sources]$ rm -rf dejagnu-1.5
[lfs@corellia sources]$

Así de fácil. Como son todo scripts en expect, no tiene compilación. Es solamente configurar e instalar. Y el tiempo que ha tardado, viendo que el libro dice que es menor que 0.1 SBU, ni lo he medido. Ha sido casi inmediato.

Compilando Check

El siguiente paquete es check. Un framework de tests unitarios para C. Y, aunque ya lleva compilación, también es trivial.

[lfs@corellia sources]$ tar xvzf check-0.9.8.tar.gz 

...

check-0.9.8/TODO
check-0.9.8/AUTHORS
check-0.9.8/check.m4
check-0.9.8/config.h.in
check-0.9.8/check.pc.in
[lfs@corellia sources]$ cd check-0.9.8
[lfs@corellia check-0.9.8]$ ./configure --prefix=/tools

...

config.status: creating tests/Makefile
config.status: creating tests/test_vars
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
[lfs@corellia check-0.9.8]$ make

...

_check-check_check_pack.o check_check-check_check_exit.o check_check-check_check_main.o  ../src/.libs/libcheckinternal.a ../lib/.libs/libcompat.a -pthread
make[2]: Leaving directory `/mnt/lfs/sources/check-0.9.8/tests'
make[1]: Leaving directory `/mnt/lfs/sources/check-0.9.8'

Sería gracioso que el framework de test no pase los tests. Vamos a comprobarlo.

[lfs@corellia check-0.9.8]$ make check

...

PASS: test_log_output.sh
==================
All 5 tests passed
==================
make[2]: Leaving directory `/mnt/lfs/sources/check-0.9.8/tests'
make[1]: Leaving directory `/mnt/lfs/sources/check-0.9.8/tests'

Perfecto. Pues ahora instalamos y limpiamos.

[lfs@corellia check-0.9.8]$ make install

...

make[2]: Entering directory `/mnt/lfs/sources/check-0.9.8/tests'
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/check-0.9.8/tests'
make[1]: Leaving directory `/mnt/lfs/sources/check-0.9.8/tests'
[lfs@corellia check-0.9.8]$ cd ..
[lfs@corellia sources]$ rm -rf check-0.9.8
[lfs@corellia sources]$

¿Será más dificil Ncurses?

Compilando Ncurses

Pues no. Aparte de algunos parámetros en el configure para desactivar algunas cosas es tan sencillo como esto:

[lfs@corellia sources]$ tar xvzf ncurses-5.9.tar.gz 

...

ncurses-5.9/configure.in
ncurses-5.9/README.emx
ncurses-5.9/mk-1st.awk
ncurses-5.9/NEWS
[lfs@corellia sources]$ cd ncurses-5.9
[lfs@corellia ncurses-5.9]$ ./configure --prefix=/tools --with-shared \
>     --without-debug --without-ada --enable-overwrite

...

      bin directory: /tools/bin
      lib directory: /tools/lib
  include directory: /tools/include
      man directory: /tools/man
 terminfo directory: /tools/share/terminfo
[lfs@corellia ncurses-5.9]$ make

...

a - ../obj_s/cursesapp.o
a - ../obj_s/cursesmain.o
ranlib ../lib/libncurses++.a
/tools/bin/g++  -o demo ../obj_s/demo.o -L../lib -lncurses++ -L../lib -lform -lmenu -lpanel -lncurses    -lutil   -Wl,-rpath,/mnt/lfs/sources/ncurses-5.9/lib  -I../c++ -I../include -I. -DHAVE_CONFIG_H  -D_GNU_SOURCE -DNDEBUG -I. -I../include -I/tools/include -O2  -fPIC 
make[1]: Leaving directory `/mnt/lfs/sources/ncurses-5.9/c++'
[lfs@corellia ncurses-5.9]$ make install

...

installing ./cursesw.h in /tools/include
installing ./cursslk.h in /tools/include
installing etip.h in /tools/include
make[1]: Leaving directory `/mnt/lfs/sources/ncurses-5.9/c++'
[lfs@corellia ncurses-5.9]$ cd ..
[lfs@corellia sources]$ rm -rf ncurses-5.9
[lfs@corellia sources]$

Por ahora lo voy a dejar aquí. En el próximo post toca compilar el grandioso bash.

EOF

Anuncios

2 pensamientos en “Linux From Scratch VI: Continuamos por tcl

  1. Damian Rivera

    Termine con ncurses 😀

    En tcl no me salieron errores:

    Tests ended at Fri Jan 04 20:17:58 UTC 2013
    all.tcl: Total 27048 Passed 25933 Skipped 1115 Failed 0

    Haber como me va con lo siguiente

    Saludos

    1. hexborg Autor de la entrada

      ¡Genial!! Ya te queda menos para tener el sistema temporal. 🙂 Que suerte lo de tcl. A lo mejor te funcionan los test de los demás paquetes. Yo he dejado de pasarlos. Al fin y al cabo en este capítulo son opcionales, pero en el siguiente sí que hay que lanzarlos todos.

      Saludos.

Los comentarios están cerrados.