2016-09-01 2 views
2

J'ai essayé d'installer Postgres avec OpenSSL en faisantPostgres Configuration avec OpenSSL et option '--with-openssl'

./configure --with-openssl

mais je suis arrivé une erreur en disant

configure: error: header file openssl/ssl.h is required for OpenSSL

Cependant, je avoir OpenSSL installé. Si je lance openssl version je reçois cette sortie

OpenSSL 0.9.8zh 14 Jan 2016

je suis tombé sur this solution et essayé de faire

./configure --with-includes=/usr/local/ssl/include et installé sans aucun problème. Est-ce que quelqu'un peut expliquer ce qui se passe et la différence entre les deux versions de configuration?

+0

Ayant installé OpenSSL ne signifie pas que les fichiers de développement sont installés. Les distributions Linux divisent les bibliothèques en paquets distincts pour la simple utilisation et le développement, par exemple libssl-dev pour openssl sur les systèmes basés sur Debian. –

Répondre

2

Can someone explain whats going on and the difference between the two configure versions.

Vous pouvez exécuter ./configure --help pour obtenir un résumé des arguments:

$ ./configure --help | egrep -i '(ssl|includes)' 
    --with-includes=DIRS look for additional header files in DIRS 
    --with-openssl   build with OpenSSL support 

./configure --with-openssl

Cela permet simplement OpenSSL dans Postgres. Il permet de vérifier dans Autoconf, comme la recherche des symboles CRYPTO_new_ex_data et SSL_Library_init.

Il ressemble également à configurer définit #define USE_OPENSSL 1 qui active les chemins de code OpenSSL:

$ grep -IR OPENSSL * | grep '.c' 
... 
src/backend/postmaster/fork_process.c:#ifdef USE_OPENSSL 
src/backend/postmaster/fork_process.c:#ifdef USE_OPENSSL 
src/backend/utils/init/postinit.c:#ifdef USE_OPENSSL 
src/backend/utils/init/postinit.c:#ifdef USE_OPENSSL 
src/include/libpq/libpq-be.h:#ifdef USE_OPENSSL 
src/include/libpq/libpq-be.h:#ifdef USE_OPENSSL 
... 

./configure --with-includes=/usr/local/ssl/include

Ce probablement ne pas permettent OpenSSL. Il a simplement ajouté un chemin pour les en-têtes qui n'ont pas été utilisés lors de la compilation. Utilisez ldd sous Linux et otool -L sous OS X pour voir s'il existe des dépendances OpenSSL.


Vous devriez probablement utiliser ./configure --with-openssl --with-includes=/usr/local/ssl/include --with-libraries=/usr/local/ssl/lib. Vous devez probablement ajouter CFLAGS="-Wl,-rpath=/usr/local/ssl/lib pour assurer une liaison d'exécution correcte.

Voir aussi Postgres Issue 14308: Postgres 9.5.4 does not configure against OpenSSL 1.1.0

+0

J'ai donc installé OpenSSL en suivant les instructions du fichier d'installation. Cependant, mon répertoire '/ usr/local/ssl' ne contient pas de dossier' lib' ou de dossier 'include'. – Brosef

+0

@Brosef - Si vous avez besoin d'aide pour créer et installer OpenSSL sur une plate-forme, vous devriez poser une autre question. Veuillez indiquer la plate-forme (OS X?). J'ai presque * fourni * la recette pour OpenSSL et Postgres, mais la question ne se prêtait pas à la recette car elle était manquante pour Postgres/Autoconf et la plate-forme. – jww

+0

Désolé pour la confusion. Lorsque j'essaie votre solution avec mes chemins, j'obtiens l'erreur "configure: error: library 'ssl' est requis pour OpenSSL". Je dois exécuter './configure --with-openssl --with-includes =/usr/local/include/openssl --avec-libraries =/usr/local/lib'.Pour une raison quelconque, mes 'lib' et' include' ne sont pas contenues dans '/ usr/local/ssl', elles se trouvent à'/usr/local/lib' et '/ usr/local/include' – Brosef