{{{#!td {{{#!th style="background: #AFA" '''NOTA:''' }}} {{{#!td style="background: #eef" Este documento sustituye y amplia a [https://webmail.uco.es/drupal/?q=node/443 este de drupal] }}} }}} '''1.''' Bajarse la versión y descomprimir en {{{/INSTALACIONES/glibc}}} '''2.''' Crear las carpetas {{{glibc-XXX-obj32}}} y {{{glibc-XXX-obj64}}} '''3.''' Si hubiera dependencias para esa versión ponerlas en la carpeta {{{PARA-glibc-XXX}}} '''4.''' En cada una de las carpetas obj32 y obj64, hacer el {{{../glibc-XXX/configure}}} con las opciones que se estimen '''5.''' Hacer el {{{make}}} y {{{make check}}} para ver que todo va bien '''6.''' Crear los directorios {{{/INSTALACIONES/dirtmp32}}} e {{{/INSTALACIONES/dirtmp64}}} '''7.''' Desde cada uno de los directorios obj, hacer {{{make install_root=/INSTALACIONES/dirtmpXX install}}} donde XX es 32 o 64. '''8.''' '''En la máquina donde estemos compilando''', que tiene que tener acceso RW y de root al repositorio TS3, montar en {{{/DESTINO}}} el repositorio de test, normalmente será /TS3/TEST y sincronizar la versión de 32 bits con {{{rsync -aHSv /INSTALACIONES/dirtmp32/ /DESTINO/}}} '''9.''' '''En la máquina que se utilizará para probar la nueva glibc''', que usará el repositorio TEST como /usr/local (debía estar arrancada de antes para asegurarnos poder hacer este paso), hacer {{{ldconfig -v}}} y asegurarnos de que se haya copiado {{{/etc/ld.so.cache}}} a {{{/usr/local/etc/ld.so.cache}}} '''10.''' (NO ES NECESARIO) Si la glibc no hubiera creado el locale es_ES por defecto, se crearía con {{{localedef -i es_ES -f ISO-8859-1 es_ES}}}, aunque puede que no haga falta en glibc modernas pues lo hace lo del punto 14. '''11.''' '''En el entorno de desarrollo de imágenes''', crear el paquete para esta nueva glibc. Hay que asegurarse de que será el último que se incluya en el proceso de generación de la imagen, para lo que lo precedemos por los caracteres necesarios para que salga el último en el {{{ls}}}. Esto es así porque las librerías y binarios de este paquete hay que asegurarse que sean los que se incluyan en el initrd que se genere. '''12.''' En el paquete anterior copiamos el {{{etc}}} de la versión anterior y en su caso customizamos el {{{glibc-init}}} si fuera necesario (se documentaría en el ticket específico de cada versión las customizaciones realizadas). El directorio {{{lib}}} llevará el contenido de {{{/INSTALACIONES/dirtmp32/lib}}} y el {{{bin}}} del {{{/INSTALACIONES/dirtmp32/bin}}}. Aparte copiamos el {{{nscd}}} del {{{sbin}}} al {{{bin}}} '''13.''' Generamos la imagen y la subimos al tftp, configuramos la máquina de test para que use el repositorio de TEST, generamos y subimos al tftp, modificamos el dhcp para que arranque dicha imagen y comprobamos que arranca bien. '''14.''' '''En la máquina de test con la nueva glibc arrancada''' seguramente nos aparecerán errores al hacer {{{LC_ALL=es_ES.UTF8}}} o al ejecutar {{{locale}}} con un usuario que tenga el idioma diferente de {{{C}}} o {{{POSIX}}}. Esto se debe a que los locales son incompatibles entre versiones y hay que generarlos de nuevo. Para ello hacemos {{{cp /usr/local/etc/locale.gen /etc}}} y después {{{/usr/local/sbin/locale-gen}}}. Esto actualiza el {{{/lib/locale.archive}}} y no se si otras cosas más. '''15.''' Rebotamos, comprobamos que todo va bien incluyendo los locales. Volvemos a montar {{{/INSTALACIONES}}} con {{{prepjhbuild}}} y sincronizamos las librerías de 64 bits con {{{rsync -aHSV /INSTALACIONES/dirtmp64/lib /usr/local/lib64/}}}, hacemos lo mismo con el directorio {{{bin}}} En principio en este punto tendría que estar todo correcto a falta de realizar los tests de integridad. == PASOS POSTERIORES == Aunque en este punto la máquina con la nueva glibc debe arrancar y ejecutar la mayoría de las aplicaciones y servisios correctamente, hay algunos pasos posteriores para que funcione bien el entorno de 64bits y sobre todo la compilación en 64bits. Estos son: - '''Copiar los includes de 64 bits de la nueva glibc:''' Se encuentran en /usr/local/include/x86_64-linux-gnu. Hay que copiarlos desde /INSTALACIONES/dirtmp64/include. - '''libc.so en lib64:''' Este fichero tiene la ruta de la libc. Cuando se compila la versión de 64 bits se piensa que /lib/libc.so.6 será la versión de 64bits, porque así se lo hemos dicho al compilarla, cuando no será así pues pondremos la libc de 64 en /lib64, así que el fichero hay que cambiarlo de este: {{{ /* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf64-x86-64) GROUP ( //lib/libc.so.6 //lib/libc_nonshared.a AS_NEEDED ( //lib/ld-linux-x86-64.so.2 ) ) }}} a este: {{{ /* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf64-x86-64) GROUP ( /lib/x86_64-linux-gnu/libc.so.6 /usr/lib/x86_64-linux-gnu/libc_nonshared.a AS_NEEDED ( /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ) ) }}} - '''Binarios de 64 que están en 32:''' En principio para binarios normales daría un poco igual la ruta, a menos que tengamos versiones de aplicaciones en 64 y 32 que difieran. Pero si es importante para aplicaciones como ldd, gdb, etc. En principio para estas habría que usar las versiones de 64 bits, luego es mejor que en /usr/local/bin se enlazen a ../bin64