¿Construir OpenSSL con RPATH?

Tengo Ubuntu 14.04. Vino con openssl 1.0.1f. Quiero instalar otra versión de openssl (1.0.2) y quiero comstackrla yo mismo.

Lo configuro de la siguiente manera:

LDFLAGS='-Wl,--export-dynamic -L/home/myhome/programs/openssl/i/lib -L/home/myhome/programs/zlib/i/lib' CPPFLAGS='-I/home/myhome/programs/openssl/i/include -I/home/myhome/programs/zlib/i/include' ./config --prefix=/home/myhome/programs/openssl/i \ zlib-dynamic shared --with-zlib-lib=/home/myhome/programs/zlib/i/lib \ --with-zlib-include=/home/myhome/programs/zlib/i/include make make install 

Después de la instalación, cuando ldd openssl el binario con ldd openssl , y el resultado es:

 ... libssl.so.1.0.0 => /home/myhome/programs/openssl/i/lib/libssl.so.1.0.0 (0x00007f91138c0000) libcrypto.so.1.0.0 => /home/myhome/programs/openssl/i/lib/libcrypto.so.1.0.0 (0x00007f9113479000) ... 

que se ve bien Pero cuando libssl.so ldd libssl.so , el resultado es:

 ... libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fac70930000) ... 

Todavía usa la versión del sistema de libcrypto. Probé diferentes formas de comstackr, pero el resultado siempre es el mismo.

Mi pregunta es cómo configurar la construcción de una manera, que puede codificar todas las dependencias binarias y de biblioteca de las bibliotecas compartidas sin usar LD_LIBRARY_PATH , o algo por el estilo.

Mi pregunta es cómo configurar la construcción de una manera, que puede codificar todas las dependencias binarias y de biblioteca de las bibliotecas compartidas sin usar LD_LIBRARY_PATH , o algo por el estilo.

OpenSSL admite RPATH de RPATH para objectives BSD (pero no otros). Desde Configurar:

 # Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time # linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on # .so objects. Apparently application RPATH is not global and does # not apply to .so linked with other .so. Problem manifests itself # when libssl.so fails to load libcrypto.so. One can argue that we # should engrave this into Makefile.shared rules or into BSD-* config # lines above. Meanwhile let's try to be cautious and pass -rpath to # linker only when --prefix is not /usr. if ($target =~ /^BSD\-/) { $shared_ldflag.=" -Wl,-rpath,\$(LIBRPATH)" if ($prefix !~ m|^/usr[/]*$|); } 

La forma más sencilla de hacerlo para OpenSSL 1.0.2 parece ser agregarlo como un CFLAG :

 ./config -Wl,-rpath=/usr/local/ssl/lib 

La siguiente forma más fácil de hacerlo para OpenSSL 1.0.2 parece ser agregar una línea Configurar y codificar el rpath . Por ejemplo, estoy trabajando en Debian x86_64. Así que abrí el archivo Configure en un editor, copié linux-x86_64 , lo linux-x86_64-rpath e hice el siguiente cambio para agregar la opción -rpath :

 "linux-x86_64-rpath", "gcc:-m64 -DL_ENDIAN -O3 -Wall -Wl,-rpath=/usr/local/ssl/lib:: -D_REENTRANT::-Wl,-rpath=/usr/local/ssl/lib -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL: ${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64", 

Arriba, los campos 2 y 6 fueron cambiados. Corresponden a $cflag y $ldflag en el sistema de comstackciones de OpenSSL.

Luego, configure con la nueva configuración:

 $ ./Configure linux-x86_64-rpath shared no-ssl2 no-ssl3 no-comp \ --openssldir=/usr/local/ssl enable-ec_nistp_64_gcc_128 

Finalmente, después de make , verifica la configuración:

 $ readelf -d ./libssl.so | grep -i rpath 0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib] $ readelf -d ./libcrypto.so | grep -i rpath 0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib] $ readelf -d ./apps/openssl | grep -i rpath 0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib] 

Una vez que realice make install , entonces ldd producirá los resultados esperados:

 $ ldd /usr/local/ssl/lib/libssl.so linux-vdso.so.1 => (0x00007ffceff6c000) libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00007ff5eff96000) ... $ ldd /usr/local/ssl/bin/openssl linux-vdso.so.1 => (0x00007ffc30d3a000) libssl.so.1.0.0 => /usr/local/ssl/lib/libssl.so.1.0.0 (0x00007f9e8372e000) libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00007f9e832c0000) ... 

OpenSSL tiene una comstackción e instalación en su wiki. Esto ahora se ha agregado a la wiki en Comstackción e Instalación | Usando RPATHs

    Intereting Posts