J'ai essayé de construire H2O avec LibreSSL 2.7.0 sorti le 21 mars.
Ensuite, le processus de génération échoue avec les messages d'erreur ci-dessous.
(à la fois branche principale (commit 0376131) et H2O v2.2.4)
In file included from //rpmbuild/BUILD/repo/include/h2o/socket.h:34:0,
from //rpmbuild/BUILD/repo/include/h2o/multithread.h:27,
from //rpmbuild/BUILD/repo/include/h2o/hostinfo.h:32,
from //rpmbuild/BUILD/repo/lib/common/hostinfo.c:22:
//rpmbuild/BUILD/repo/include/h2o/openssl_backport.h:37:27: error: static declaration of 'BIO_meth_new' follows non-static declaration
static inline BIO_METHOD *BIO_meth_new(int type, const char *name)
^~~~~~~~~~~~
In file included from /var/tmp/h2o-nightly-2.3.0-0.nightly20180323t195237.git0376131.el7.jp3cki-libressl-2.7.0-root/include/openssl/evp.h:67:0,
from /var/tmp/h2o-nightly-2.3.0-0.nightly20180323t195237.git0376131.el7.jp3cki-libressl-2.7.0-root/include/openssl/hmac.h:67,
from /var/tmp/h2o-nightly-2.3.0-0.nightly20180323t195237.git0376131.el7.jp3cki-libressl-2.7.0-root/include/openssl/ssl.h:149,
from //rpmbuild/BUILD/repo/include/h2o/socket.h:31,
from //rpmbuild/BUILD/repo/include/h2o/multithread.h:27,
from //rpmbuild/BUILD/repo/include/h2o/hostinfo.h:32,
from //rpmbuild/BUILD/repo/lib/common/hostinfo.c:22:
/var/tmp/h2o-nightly-2.3.0-0.nightly20180323t195237.git0376131.el7.jp3cki-libressl-2.7.0-root/include/openssl/bio.h:338:13: note: previous declaration of 'BIO_meth_new' was here
BIO_METHOD *BIO_meth_new(int type, const char *name);
^~~~~~~~~~~~
make[2]: *** [CMakeFiles/libh2o-evloop.dir/lib/common/hostinfo.c.o] Error 1
make[2]: *** Waiting for unfinished jobs....
La note de version de LibreSSL dit "Ajout de la prise en charge de nombreuses API OpenSSL 1.0.2 et 1.1" et il semble que le code de rétroportage de H2O n'est pas compatible avec cela.
Je ne pense pas que ce problème dépende de l'environnement, mais je décris mon environnement.
cmake -DWITH_MRUBY=on -DCMAKE_INSTALL_PREFIX=%{_prefix} -DCMAKE_INCLUDE_PATH=%{libressl_root}/include -DCMAKE_LIBRARY_PATH=%{libressl_root}/lib
Il peut construire avec le même script de construction avec LibreSSL 2.6.4.
Peut-être que cela fonctionne si vous appliquez 3 correctifs ci-dessous :
diff --git a/include/h2o/openssl_backport.h b/include/h2o/openssl_backport.h
index b24440e..b59a519 100644
--- a/include/h2o/openssl_backport.h
+++ b/include/h2o/openssl_backport.h
@@ -25,7 +25,7 @@
#include <stdlib.h>
/* backports for OpenSSL 1.0.2 */
-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
#define BIO_get_data(bio) ((bio)->ptr)
#define BIO_set_data(bio, p) ((bio)->ptr = (p))
@@ -57,7 +58,7 @@ static inline BIO_METHOD *BIO_meth_new(int type, const char *name)
#endif
/* backports for OpenSSL 1.0.1 and LibreSSL */
-#if OPENSSL_VERSION_NUMBER < 0x10002000L || defined(LIBRESSL_VERSION_NUMBER)
+#if OPENSSL_VERSION_NUMBER < 0x10002000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
#define SSL_is_server(ssl) ((ssl)->server)
```patch
diff --git a/deps/neverbleed/neverbleed.cb/deps/neverbleed/neverbleed.c
indice 29b35a9..42356a6 100644
--- a/deps/neverbleed/neverbleed.c
+++ b/deps/neverbleed/neverbbleed.c
@@ -547,7 +547,7 @@ static int sign_stub(struct expbuf_t *buf)
renvoie 0 ;
}
-#if !OPENSSL_1_1_API
+#if !OPENSSL_1_1_API && (!defined(LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER < 0x2070000fL)
static void RSA_get0_key(const RSA rsa, const BIGNUM * n, const BIGNUM *e, const BIGNUM * d)
{
```patch
diff --git a/deps/picotls/lib/openssl.c b/deps/picotls/lib/openssl.c
index a19a29a..c4dfccb 100644
--- a/deps/picotls/lib/openssl.c
+++ b/deps/picotls/lib/openssl.c
@@ -41,13 +41,15 @@
#include "picotls.h"
#include "picotls/openssl.h"
-#if (OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER))
-#define OPENSSL_1_0_API 1
+#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100000L
+#define OPENSSL_1_1_API 1
+#elif defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x2070000fL
+#define OPENSSL_1_1_API 1
#else
-#define OPENSSL_1_0_API 0
+#define OPENSSL_1_1_API 0
#endif
-#if OPENSSL_1_0_API
+#if !OPENSSL_1_1_API
#define EVP_PKEY_up_ref(p) CRYPTO_add(&(p)->references, 1, CRYPTO_LOCK_EVP_PKEY)
#define X509_STORE_up_ref(p) CRYPTO_add(&(p)->references, 1, CRYPTO_LOCK_X509_STORE)
(Remarque : « H2O 2.2.4+ » signifie « H2O 2.2.4 + patchs »)
Bonne prise!
Non testé avec LibreSSL < 2.7.0
J'ai confirmé que H2O 2.2.4 et master avec vos correctifs peuvent être construits avec succès avec LibreSSL 2.6.3 sur OpenBSD 6.2.
Confirmez que cela fonctionne sur FreeBSD avec LibreSSL 2.7.1
Patch ici
J'ai construit H2O-HEAD vanilla + LibreSSL 2.7.2 et cela fonctionne.
Je ferme ce sujet maintenant.
Il n'est pas encore sorti.
Vous avez encore besoin du correctif ci-dessus si vous construisez la version publiée (v2.2.4) + LibreSSL 2.7.x.
Merci @kazuho pour votre travail.
Commentaire le plus utile
Peut-être que cela fonctionne si vous appliquez 3 correctifs ci-dessous :
```patch
diff --git a/deps/neverbleed/neverbleed.cb/deps/neverbleed/neverbleed.c
indice 29b35a9..42356a6 100644
--- a/deps/neverbleed/neverbleed.c
+++ b/deps/neverbleed/neverbbleed.c
@@ -547,7 +547,7 @@ static int sign_stub(struct expbuf_t *buf)
renvoie 0 ;
}
-#if !OPENSSL_1_1_API
+#if !OPENSSL_1_1_API && (!defined(LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER < 0x2070000fL)
static void RSA_get0_key(const RSA rsa, const BIGNUM * n, const BIGNUM *e, const BIGNUM * d)
{
(Remarque : « H2O 2.2.4+ » signifie « H2O 2.2.4 + patchs »)