Passer LD_PRELOAD à apache 2.4 pour mod_wsgi

Je ne peux pas adapter cette question pour mod_wsgi .

J'ai une application de python qui utilise gtal. Je le lance de la manière suivante:

LD_PRELOAD=/opt/gdal-custom/lib/libgdal.so.1 PYTHONPATH=../somemodules/ scl enable python27 "source ../python27/bin/activate; python flaskapp.py" 

Cependant, j'aimerais l'héberger dans mod_wsgi. Faire LD_PRELOAD=/opt/gdal-custom/lib/libgdal.so.1 service httpd24-httpd restart ne semble pas fonctionner. Vous ne configurez pas non plus ce qui suit dans ma configuration apache:

 SetEnv LD_PRELOAD /opt/gdal-custom/lib/libgdal.so.1 LoadModule wsgi_module modules/mod_wsgi.so WSGIPythonHome /opt/rh/httpd24/root/var/www/wsgi-virtualenv WSGIPythonPath /opt/rh/httpd24/root/var/www/AppFolder:/opt/rh/httpd24/root/var/www/SomeModules WSGIScriptAlias /AppFolder /opt/rh/httpd24/root/var/www/AppFolder/app.wsgi <Directory /var/www/AppFolder> AllowOverride none Require all granted </Directory> 

Voici la sortie de ldd:

 (wsgi-virtualenv)ldd /opt/rh/httpd24/root/var/www/wsgi-virtualenv/lib/python2.7/site-packages/GDAL-1.11.2-py2.7-linux-x86_64.egg/osgeo/_gdal.so linux-vdso.so.1 => (0x00007fffac9ff000) libpython2.7.so.1.0 => /opt/rh/python27/root/usr/lib64/libpython2.7.so.1.0 (0x00007fce43438000) libgdal.so.1 => /opt/gdal-custom/lib/libgdal.so.1 (0x00007fce42490000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fce42176000) libm.so.6 => /lib64/libm.so.6 (0x00007fce41ef2000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fce41cdb000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fce41abe000) libc.so.6 => /lib64/libc.so.6 (0x00007fce4172a000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fce41525000) libutil.so.1 => /lib64/libutil.so.1 (0x00007fce41322000) libfreexl.so.1 => /usr/lib64/libfreexl.so.1 (0x00007fce41119000) libgeos_c.so.1 => /usr/lib64/libgeos_c.so.1 (0x00007fce40ef2000) libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007fce40c63000) libodbc.so.2 => /usr/lib64/libodbc.so.2 (0x00007fce409fc000) libodbcinst.so.2 => /usr/lib64/libodbcinst.so.2 (0x00007fce407ea000) libexpat.so.1 => /lib64/libexpat.so.1 (0x00007fce405c2000) libxerces-c-3.0.so => /usr/lib64/libxerces-c-3.0.so (0x00007fce40021000) libjasper.so.1 => /usr/lib64/libjasper.so.1 (0x00007fce3fdc7000) libnetcdf.so.6 => /usr/lib64/libnetcdf.so.6 (0x00007fce3fa82000) libhdf5.so.6 => /usr/lib64/libhdf5.so.6 (0x00007fce3f49a000) libogdi.so.3 => /usr/lib64/libogdi.so.3 (0x00007fce3f278000) libgif.so.4 => /usr/lib64/libgif.so.4 (0x00007fce3f06f000) libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00007fce3ee1f000) libgta.so.0 => /usr/lib64/libgta.so.0 (0x00007fce3ec14000) libpng12.so.0 => /usr/lib64/libpng12.so.0 (0x00007fce3e9ee000) libcfitsio.so.0 => /usr/lib64/libcfitsio.so.0 (0x00007fce3e63a000) libpq.so.5 => /usr/lib64/libpq.so.5 (0x00007fce3e411000) librt.so.1 => /lib64/librt.so.1 (0x00007fce3e209000) libpcre.so.0 => /lib64/libpcre.so.0 (0x00007fce3dfdd000) libcurl.so.4 => /usr/lib64/libcurl.so.4 (0x00007fce3dd88000) libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007fce3da35000) libz.so.1 => /lib64/libz.so.1 (0x00007fce3d81f000) /lib64/ld-linux-x86-64.so.2 (0x0000003e73a00000) libgeos-3.4.2.so => /usr/lib64/libgeos-3.4.2.so (0x00007fce3d479000) libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007fce3d270000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fce3d056000) libhdf5_hl.so.6 => /usr/lib64/libhdf5_hl.so.6 (0x00007fce3ce24000) libproj.so.0 => /usr/lib64/libproj.so.0 (0x00007fce3cbd7000) libSM.so.6 => /usr/lib64/libSM.so.6 (0x00007fce3c9ce000) libICE.so.6 => /usr/lib64/libICE.so.6 (0x00007fce3c7b2000) libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007fce3c475000) liblzma.so.0 => /usr/lib64/liblzma.so.0 (0x00007fce3c253000) libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fce3c042000) libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fce3bdd6000) libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007fce3b9f2000) libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fce3b7ae000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fce3b577000) libldap_r-2.4.so.2 => /lib64/libldap_r-2.4.so.2 (0x00007fce3b31e000) libidn.so.11 => /lib64/libidn.so.11 (0x00007fce3b0ec000) libldap-2.4.so.2 => /lib64/libldap-2.4.so.2 (0x00007fce3ae9c000) libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fce3abb5000) libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fce3a989000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fce3a785000) libssl3.so => /usr/lib64/libssl3.so (0x00007fce3a545000) libsmime3.so => /usr/lib64/libsmime3.so (0x00007fce3a319000) libnss3.so => /usr/lib64/libnss3.so (0x00007fce39fda000) libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007fce39dad000) libplds4.so => /lib64/libplds4.so (0x00007fce39ba9000) libplc4.so => /lib64/libplc4.so (0x00007fce399a4000) libnspr4.so => /lib64/libnspr4.so (0x00007fce39765000) libssh2.so.1 => /usr/lib64/libssh2.so.1 (0x00007fce3953d000) libuuid.so.1 => /lib64/libuuid.so.1 (0x00007fce39338000) libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007fce3911a000) libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fce38f0e000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fce38d0b000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fce38af1000) libfreebl3.so => /lib64/libfreebl3.so (0x00007fce388ed000) liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x00007fce386de000) libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00007fce384c4000) libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007fce382c0000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fce380a1000) 

Pourquoi utilisez-vous spécifiquement LD_PRELOAD ?

Normalement, si vous avez un module Python ou une application qui relie une bibliothèque partagée qui n'est pas dans un directory standard sur le path de search de la bibliothèque système, vous utiliserez LD_LIBRARY_PATH .

L'utilisation de LD_LIBRARY_PATH toujours pas la façon dont vous le faites car l'un ou l'autre doit être configuré dans l'environnement avant que le process de l'application ne démarre. Le directory SetEnv ne le fait pas pour mod_wsgi.

Ce que vous feriez normalement pour contourner ce problème, c'est de définir à nouveau une variable d'environnement différente, appelée LD_RUN_PATH , mais définissez-la au moment où vous comstackz le module Python, l'application ou la bibliothèque qui l'exige.

Ainsi, lors de l'installation du module Python qui l'exige, effectuez:

 LD_RUN_PATH=/opt/gdal-custom/lib pip install somemodule