Avui, buscant al llibre “Linux 6a Edicion” he trobat un subcapitul anomenat “Uso de ldd para localizar las bibliotecas compartidas necesarias”, que estava dintre el capitul “Compatibilidad entre bibliotecas”, que es un dels problemes que tinc. Aqui reproduire algunes de les parts mes importants.
Per examinar les biblioteques compartides que necessita un programa ho podem fer de la seguent forma:
# ldd /usr/bin/vi
libncurses.so.5 => /lib/libncurses.so.5 (0×40022000)
libgpm.so.1 => /usr/lib/libgpm.so.1 (0×40063000)
libperl.so.1 => /usr/lib/libperl.so.1 (0×40069000)
libutil.so.1 => /lib/libutil.so.1 (0×40168000)
libc.so.6 => /lib/libc.so.6 (0x4016b000)
libpthread.so.0 => /lib/libpthread.so.0 (0x4029a000)
libm.so.6 => /lib/libm.so.6 (0x402ec000)
libdl.so.2 => /lib/libdl.so.2 (0x4030e000)
libnsl.so.1 => /lib/libnsl.so.1 (0×40311000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0×40326000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0×40000000)
Aqui tenim una mostra de totes les llibreries que usa el vi.
“Si la biblioteca que falta tiene un numero de version principal diferente, simplemente encuentre el paquete que ofrece la version de biblioteca que necesita, e instalelo. Si los numeros de la version principal son diferentes, el restante software de su sistema no resultara afectado por la adicion de otra biblioteca, aunque se llame igual.”
Aixo es el que em passa amb la llibreria libc, que tinc instalades 2 versions amb diferent implementacio.
“Otra solucion es crear un enlace simbolico para el nombre de la biblioteca compartida que necesita. Enlacelo a una biblioteca ya existente en su sistema y confie en que la biblioteca sea compatible. Esto es posible que funcione en algunas circunstancias, dependiendo de cuanto se usa esa biblioteca y a que subrutinas hace referencia el programa. Sin embargo, esta es una medida para salir del paso, y deberia usarse solo cuando se sabe con seguridad que las versiones en cuestion son compatibles para los propositos del programa.”
Seguint a la pagina 422 explica el mecanisme que utilitza Linux per carregar els programes.
Mes endavant, i canviant de tema, hi ha un capitol anomenat “Consultas avanzadas sobre paquetes RPM” amb un subcapitol que diu “Extraccion de los contenidos de un paquete rpm (rpm2cpio)”, que explica com treure els fitxers d’un paquet RPM.
# rpm2cpio kernel-2.4.22-1.2174.nptl.src.rpm | cpio -ivd
Llistat dels fitxers extrets
Pozi, realment funciona be, fa exactament el que buscava fer. UOLE! Dintre contenia un tots els arxius .patch i el codi font del kernel 2.4.22, a part d’alguns scripts en awk que suposo que son per instalar tots els parches.
He d’acabar de llegir aquest capitol, ja que explica moltes coses que no sabia i necessito.
Be, tornant a la feina, novetats. He obert el kernel RHEL de la Rocks, el kernel-2.4.21-15.0.3.EL.src.rpm, i es mes intuitiu del que em pensava. Dintre hi ha el fitxer kernel-2.3.spec, que es l’encarregat de construir tot el paquet, agafant com a base el vanilla kernel que porta (un linux-2.4.21.tar.bz2) i despres li aplica tots els parches que troba oportuns (clarament especificats al .spec). Molt ben pensat, si senyor.
Despres de l’analisi del .spec he trobat el que buscava. Per a l’arquitectura x86 hi ha 2 pegats de l’NPTL:
- linux-2.4.20-o1-nptl.patch
- linux-2.4.21-nptl-network.patch
- I por si las moscas tb apunto el linux-2.4.21-tux.patch
Probare d’aplicar-los al kernel 2.4.22, a veure que passa. A la 2.4.22 directament no l’he pogut aplicar, pq em donava un munt d’errors, ja que els parches no estaven preparats per a aplicar-se directament.
Seguint el .spec original he vist que el parche de l’nptl (el o1) era el 4t en aplicar-se sobre un kernel 2.4.21, de forma que he reproduit el procediment i sembla que ha funcionat. Ara ja l’estic compilant com si fos un kernel Rocks (vigilar pq fa preguntes sobre opcions noves del kernel). D’aqui 30 minuts sabrem mes (aixo es com preparar un pastis xD).
De moment poso els pegats i l’ordre en que els he posat:
- linux-2.4.21-dailybk.patch
- linux-2.4.21-select-upstream-bits.patch
- linux-2.4.21-selected-ac-bits.patch
Recent Comments