H2o: لا يمكن البناء باستخدام LibreSSL 2.7.0

تم إنشاؤها على ٢٣ مارس ٢٠١٨  ·  4تعليقات  ·  مصدر: h2o/h2o

حاولت إنشاء H2O باستخدام LibreSSL 2.7.0 الذي تم إصداره في 21 مارس.
بعد ذلك ، تفشل عملية الإنشاء مع ظهور رسائل الخطأ أدناه.
(كلا الفرعين الرئيسيين (الالتزام 0376131) و 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....

تشير مذكرة إصدار LibreSSL إلى "دعم مضاف للعديد من واجهات برمجة تطبيقات OpenSSL 1.0.2 و 1.1" ويبدو أن رمز المنفذ الخلفي لـ H2O غير متوافق مع ذلك.

لا أعتقد أن هذه المشكلة تعتمد على البيئة ، لكنني أصف بيئتي.

  • CentOS 7 على Docker على CentOS 7 (Kernel 4.15.11 ، من ELRepo) على VPS (SAKURA internet)
  • بناء RPM

    • ارتباط ثابت بـ LibreSSL

    • cmake -DWITH_MRUBY=on -DCMAKE_INSTALL_PREFIX=%{_prefix} -DCMAKE_INCLUDE_PATH=%{libressl_root}/include -DCMAKE_LIBRARY_PATH=%{libressl_root}/lib

    • المستودع هنا

يمكنه البناء بنفس سكربت البناء باستخدام LibreSSL 2.6.4.

التعليق الأكثر فائدة

ربما يعمل إذا قمت بتطبيق 3 تصحيحات أدناه:

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)

رقعة
diff --git a / deps / Neverbleed / Neverbleed.cb / deps / Neverbleed / Neverbleed.c
الفهرس 29b35a9..42356a6 100644
--- أ / deps / نيفيلليد / نيفرليد ج
+++ b / deps / neverbleed / neverbleed.c
-547،7 +547،7static int sign_stub (هيكلة expbuf_t * buf)
العودة 0 ؛
}

- # إذا! OPENSSL_1_1_API
+ # if! OPENSSL_1_1_API && (! معرّفة (LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER <0x2070000fL)

ثابت باطل 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)
  • يمكن تطبيق بقع على

    • H2O- رأس (0376131)

    • H2O 2.2.4

  • البناء باستخدام OpenSSL / LibreSSL

    • مع OpenSSL

    • بني بنجاح H2O 2.2.4+ مع OpenSSL 1.0.2k (حزمة CentOS 7)

    • بني بنجاح H2O 2.2.4+ مع OpenSSL 1.1.0g

    • بني بنجاح H2O 2.2.4+ مع OpenSSL 1.1.1-pre3 (β1)

    • بني بنجاح H2O 2.2.4+ مع OpenSSL 1.0.1u

    • مع LibreSSL

    • بني بنجاح H2O 2.2.4+ & HEAD باستخدام LibreSSL 2.7.0 و 2.7.1.

    • بني بنجاح H2O 2.2.4+ مع LibreSSL 2.6.4

    • بني بنجاح H2O 2.2.4+ & HEAD مع LibreSSL 2.6.3 ( تم الإبلاغ عن

    • بنيت بنجاح H2O 2.2.4+ مع LibreSSL 2.4.5 (H2O المجمعة)

(ملاحظة: "H2O 2.2.4+" تعني "H2O 2.2.4 + patches")

ال 4 كومينتر

ربما يعمل إذا قمت بتطبيق 3 تصحيحات أدناه:

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)

رقعة
diff --git a / deps / Neverbleed / Neverbleed.cb / deps / Neverbleed / Neverbleed.c
الفهرس 29b35a9..42356a6 100644
--- أ / deps / نيفيلليد / نيفرليد ج
+++ b / deps / neverbleed / neverbleed.c
-547،7 +547،7static int sign_stub (هيكلة expbuf_t * buf)
العودة 0 ؛
}

- # إذا! OPENSSL_1_1_API
+ # if! OPENSSL_1_1_API && (! معرّفة (LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER <0x2070000fL)

ثابت باطل 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)
  • يمكن تطبيق بقع على

    • H2O- رأس (0376131)

    • H2O 2.2.4

  • البناء باستخدام OpenSSL / LibreSSL

    • مع OpenSSL

    • بني بنجاح H2O 2.2.4+ مع OpenSSL 1.0.2k (حزمة CentOS 7)

    • بني بنجاح H2O 2.2.4+ مع OpenSSL 1.1.0g

    • بني بنجاح H2O 2.2.4+ مع OpenSSL 1.1.1-pre3 (β1)

    • بني بنجاح H2O 2.2.4+ مع OpenSSL 1.0.1u

    • مع LibreSSL

    • بني بنجاح H2O 2.2.4+ & HEAD باستخدام LibreSSL 2.7.0 و 2.7.1.

    • بني بنجاح H2O 2.2.4+ مع LibreSSL 2.6.4

    • بني بنجاح H2O 2.2.4+ & HEAD مع LibreSSL 2.6.3 ( تم الإبلاغ عن

    • بنيت بنجاح H2O 2.2.4+ مع LibreSSL 2.4.5 (H2O المجمعة)

(ملاحظة: "H2O 2.2.4+" تعني "H2O 2.2.4 + patches")

مسكة جيدة!

لم يتم اختباره باستخدام LibreSSL <2.7.0

لقد أكدت أنه يمكن بناء H2O 2.2.4 وإتقان التصحيحات الخاصة بك بنجاح باستخدام LibreSSL 2.6.3 على OpenBSD 6.2.

تأكد من أن هذا يعمل على FreeBSD مع LibreSSL 2.7.1
التصحيح هنا

لقد قمت ببناء H2O-HEAD vanilla + LibreSSL 2.7.2 وهو يعمل.
أغلق هذه القضية الآن.

لم يتم إصداره بعد.
لا تزال بحاجة إلى التصحيح أعلاه إذا كنتم تنشئون إصدارًا تم إصداره (v2.2.4) + LibreSSL 2.7.x.

شكرا لك @ kazuho على عملك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

concatime picture concatime  ·  3تعليقات

utrenkner picture utrenkner  ·  3تعليقات

kazuho picture kazuho  ·  7تعليقات

Ys88 picture Ys88  ·  5تعليقات

Jxck picture Jxck  ·  7تعليقات