如何使用grass脚本在ubuntu 15 x86_64上使用openssl for x86构建nginx

时间:2016-04-01 07:54:05

标签: linux nginx gradle openssl

我正在尝试使用openssl 1.0.2g构建nginx 1.9.12。

nginx使用./config(来自openssl包的脚本)自行构建openssl。 不幸的是./config脚本检测操作系统架构:[ "$MACHINE" ] || MACHINE=``(uname -m) 2>/dev/null`` || MACHINE="unknown"并基于此创建Makefile(在这种情况下为x86_64)。

我通过nginx向openssl提供-m32参数,但这还不够。 我需要改变\提供环境。变量MACHINE,它等于x86。

似乎gradle“环境”(在Exec任务中)不起作用。它适用于nginx,但参数不会传递给子进程(./config)。

所以我遇到链接器失败的情况,因为无法将x86对象与x86_64链接。

有没有办法设置环境。 gradle脚本中的变量MACHINE?

1 个答案:

答案 0 :(得分:0)

  

我提供" -m32"通过nginx到openssl的争论,但还不够。我需要改变\提供环境。变量MACHINE,它等于x86。

您不能简单地添加-m32并构建OpenSSL源。您必须允许OpenSSL自行配置并写出<openssl/opensslconf.h>文件。

此:

[ "$MACHINE" ] || MACHINE=(uname -m) 2>/dev/null

表示您可以导出MACHINE,OpenSSL应该在该行上兑现它。您应该将其设置为i686:$ MACHINE=i686 ./config -m32。然而,事情之后的事情是一个废话,但是:)

由于设置MACHINE通常是为了交叉编译而进行的,所以进行了垃圾拍摄。还有一个名为CROSS_COMPILE的变量发挥作用。另请参阅OpenSSL的Configure脚本。

这里有几个测试:

# On i686 machine
$ MACHINE=i686 ./config 
Operating system: i686-whatever-linux2

# On i686 machine
$ MACHINE=x86_64 ./config 
Operating system: x86_64-whatever-linux2

# On x86_64 machine
$ MACHINE=i686 ./config 
Operating system: i686-whatever-linux2

# On x86_64 machine
$ MACHINE=x86_64 ./config 
Operating system: x86_64-whatever-linux2
  

有没有办法设置环境。 gradle脚本中的变量MACHINE?

抱歉,不知道。 Nginx正在加剧。我不确定我是否会添加另一个间接级别来解决问题更难解决。

也许这会有所帮助:Setting environment variables from Gradle

OpenSSL有一个Configure,它需要一个LIST参数:

$ ./Configure LIST | grep linux
...
linux-aarch64
linux-alpha-gcc
linux-aout
...
linux-generic32
linux-generic64
...

我认为您希望使用linux-generic32linux-elf配置OpenSSL。但是,我不相信你可以使用linux-elf,因为它会吸引主持人的架构。

过去,我在使用Nginx的构建系统时遇到了很多问题,特别是在使用FIPS验证的对象模块时。我似乎记得我需要修改他们的构建脚本以获得我需要的东西。您可能需要这样做。

这是我在Fedora 23 i686机器上看到的。请注意,它使用导致i686-whatever-linux2的{​​{1}}三元组。

linux-elf

$ cd openssl-master $ ./config Operating system: i686-whatever-linux2 Configuring for linux-elf Configuring OpenSSL version 1.1.0-pre5-dev (0x0x10100005L) no-crypto-mdebug [default] OPENSSL_NO_CRYPTO_MDEBUG (skip dir) no-crypto-mdebug-backtrace [forced] OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE (skip dir) no-dynamic-engine [forced] no-ec_nistp_64_gcc_128 [default] OPENSSL_NO_EC_NISTP_64_GCC_128 (skip dir) no-egd [default] OPENSSL_NO_EGD (skip dir) no-heartbeats [default] OPENSSL_NO_HEARTBEATS (skip dir) no-md2 [default] OPENSSL_NO_MD2 (skip dir) no-rc5 [default] OPENSSL_NO_RC5 (skip dir) no-sctp [default] OPENSSL_NO_SCTP (skip dir) no-shared [default] no-ssl-trace [default] OPENSSL_NO_SSL_TRACE (skip dir) no-ssl3 [default] OPENSSL_NO_SSL3 (skip dir) no-ssl3-method [default] OPENSSL_NO_SSL3_METHOD (skip dir) no-unit-test [default] OPENSSL_NO_UNIT_TEST (skip dir) no-weak-ssl-ciphers [default] OPENSSL_NO_WEAK_SSL_CIPHERS (skip dir) no-zlib [default] no-zlib-dynamic [default] Configuring for linux-elf CC =gcc CFLAG =-Wall -O3 -pthread -DL_ENDIAN -fomit-frame-pointer -Wa,--noexecstack SHARED_CFLAG =-fPIC DEFINES =DSO_DLFCN HAVE_DLFCN_H NDEBUG OPENSSL_THREADS OPENSSL_NO_DYNAMIC_ENGINE OPENSSL_PIC OPENSSL_BN_ASM_PART_WORDS OPENSSL_IA32_SSE2 OPENSSL_BN_ASM_MONT OPENSSL_BN_ASM_GF2m SHA1_ASM SHA256_ASM SHA512_ASM MD5_ASM RMD160_ASM AES_ASM VPAES_ASM WHIRLPOOL_ASM GHASH_ASM ECP_NISTZ256_ASM POLY1305_ASM LFLAG = PLIB_LFLAG = EX_LIBS =-ldl APPS_OBJ = CPUID_OBJ =x86cpuid.o UPLINK_OBJ = BN_ASM =bn-586.o co-586.o x86-mont.o x86-gf2m.o EC_ASM =ecp_nistz256.o ecp_nistz256-x86.o DES_ENC =des-586.o crypt586.o AES_ENC =aes-586.o vpaes-x86.o aesni-x86.o BF_ENC =bf-586.o CAST_ENC =c_enc.o RC4_ENC =rc4-586.o RC5_ENC =rc5-586.o MD5_OBJ_ASM =md5-586.o SHA1_OBJ_ASM =sha1-586.o sha256-586.o sha512-586.o RMD160_OBJ_ASM=rmd-586.o CMLL_ENC =cmll-x86.o MODES_OBJ =ghash-x86.o PADLOCK_OBJ =e_padlock-x86.o CHACHA_ENC =chacha-x86.o POLY1305_OBJ =poly1305-x86.o BLAKE2_OBJ = PROCESSOR = RANLIB =/usr/bin/ranlib ARFLAGS = PERL =/usr/bin/perl THIRTY_TWO_BIT mode BN_LLONG mode Configured for linux-elf. 看起来与linux-generic32i686-whatever-linux2非常相似:

linux-elf