Compilando o Apache mod_ssl para hardware de destino diferente (erro SSE2 não suportado por capacidade de hardware)

1

Estou construindo e empacotando o seguinte em uma máquina (a máquina "build") e tentando instalar e usar em outras máquinas (máquinas "alvo"), algumas das quais possuem processadores diferentes.

  • OpenSSL 0.9.8l
  • Apache 2.2.14
  • Conectores do Tomcat 1.2.28

O problema, até onde posso dizer, é que a máquina de compilação tem mais recursos de CPU do que a máquina de destino, resultando em binários que não são executáveis na máquina de destino. Eu tentei usar sinalizadores de configuração e compilador para desativar o uso das instruções ofensivas sem sorte.

Por fim, recebo este erro:

$ ./apachectl start 
httpd: Syntax error on line 58 of /usr/local/apache-2.2.14/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/mod_ssl.so into server: ld.so.1: httpd: 
fatal: /usr/local/openssl/lib/libssl.so.0.9.8: hardware capability unsupported: 
0x1000 [ SSE2 ]

Aqui está o meu processo completo de criação. A saída completa de cada comando pode ser vista aqui . Eu não posso ligar para eles diretamente, já que não tenho suficiente SF.

A máquina de compilação

$ echo $PATH
/usr/bin:/usr/ccs/bin:/usr/sfw/bin:/opt/sfw/bin:/usr/sbin

$ isainfo -v
32-bit i386 applications
        pause sse2 sse fxsr mmx cmov sep cx8 tsc fpu 

$ uname -a
SunOS bsiausstgdb02 5.10 Generic_120012-14 i86pc i386 i86pc

A máquina de destino

$ isainfo -v
32-bit i386 applications
        sse fxsr mmx cmov sep cx8 tsc fpu 

$ uname -a
SunOS bsiausdevweb01 5.10 Generic_120012-14 i86pc i386 i86pc

Compile o OpenSSL 0.9.8l

$ CC=/usr/bin/cc
$ export CC

$ CFLAGS="-xarch=sse"
$ export CFLAGS

$ ./Configure \
solaris-x86-cc \
shared \
no-asm \
no-sse2 \
-xarch=sse \
--openssldir=/usr/local/openssl-0.9.8l

visualizar saída completa: openssl-configure.txt

$ make && make test

visualizar saída completa: openssl-make-and-test.txt

$ sudo make install

visualizar saída completa: openssl-make-install.txt

Compile o Apache 2.2.14

$ CC=/usr/bin/cc
$ export CC

$ CFLAGS="-xarch=sse"
$ export CFLAGS

$ ./configure \
--prefix=/usr/local/apache-2.2.14 \
--with-mpm=prefork \
--enable-so \
--enable-unique-id=shared \
--enable-rewrite=shared \
--enable-spelling=shared \
--enable-info=shared \
--enable-headers=shared \
--enable-deflate=shared \
--enable-expires=shared \
--enable-unique-id=shared \
--enable-speling=shared \
--enable-ssl=shared \
--with-ssl=/usr/local/openssl

visualizar saída completa: apache-configure.txt

$ make

visualizar saída completa: apache-make.txt

$ sudo make install

visualizar saída completa: apache-make-install.txt

Compile os conectores do Tomcat 1.2.28

$ CC=/usr/bin/cc
$ export CC

$ CFLAGS="-xarch=sse"
$ export CFLAGS

$ cd native
$ ./configure \
--with-apxs=/usr/local/apache2/bin/apxs

visualizar saída completa: tomcat-connector-configure.txt

$ make

visualizar saída completa: tomcat-connector-make.txt

$ sudo make install

visualizar saída completa: tomcat-connector-make-install.txt

Teste

Neste ponto, tudo funcionará na máquina de construção. Depois de empacotar esses arquivos e instalá-los na máquina de destino, recebo esse erro quando o Apache é iniciado com o mod_ssl ativado.

$ ./apachectl start
httpd: Syntax error on line 58 of /usr/local/apache-2.2.14/conf/httpd.conf: 
Cannot load /usr/local/apache2/modules/mod_ssl.so into server: ld.so.1: httpd: 
fatal: /usr/local/openssl/lib/libssl.so.0.9.8: hardware capability unsupported: 
0x1000  [ SSE2 ]
    
por cope360 25.11.2009 / 17:49

2 respostas

1

Trabalhei em torno desse problema construindo os pacotes em uma máquina com hardware equivalente na máquina de destino e usando o compilador Sun Studio CC em vez do gcc.

    
por 14.01.2010 / 15:53
2

Aqui estão as etapas que fiz para criar e instalar com êxito o Apache httpd-2.4.10 e o OpenSSL openssl-1.0.1j no Solaris 10.

  1. Baixe o seguinte software
    openssl-1.0.1j.tar.gz
    httpd-2.4.10.tar.gz
    apr-1.5.1.tar.gz
    apr-util-1.5.4.tar.gz
    pcre-8.36.tar.gz

  2. Verifique se faz e CC
    Por padrão, gcc está em /usr/sfw/bin/gcc e make está em /usr/ccs/bin/make

    Inclua o seguinte no PATH | usr/local/ssl/bin:/usr/sfw/bin:/usr/local/bin:/usr/ccs/bin

    Inclua o seguinte no LD_LIBRARY_PATH de /usr/local/lib:/usr/local/ssl/lib

  3. Compile e instale o openssl-1.0.1j
    Descompacte e descompacte openssl-1.0.1j.tar.gz para /usr/local/openssl-1.0.1j
    Execute os seguintes comandos em ordem. O parâmetro compartilhado é muito importante para que possa ser vinculado à construção httpd-2.4.10 para habilitação SSL.

    $ cd /usr/local/openssl-1.0.1j
    $ ./config shared
    $ make
    $ make test
    $ make install
    

    Por padrão, ele instala o openssl em / usr / local / ssl

  4. Instalar o pcre-8.36 Descompacte e remova o arquivo pcre-8.36.tar.gz para / usr / local / pcre-8.36

    Execute os seguintes comandos na ordem

    $ cd /usr/local/ pcre-8.36
    $ ./configure 
    $ make
    $ make install
    

    Por padrão, make install instala os comandos do pacote sob /usr/local/bin , incluir arquivos em /usr/local/include , etc.

  5. Construa e instale o httpd-2.4.10

    Descompacte e descompacte httpd-2.4.10.tar.gz para /usr/local/httpd-2.4.10

    Descompacte e remova o tar-1.5.1.tar.gz para /usr/local/httpd-2.4.10/srclib
    Renomeie /usr/local/apr-1.5.1 para /usr/local/apr

    Descompacte e remova o tar apr-util-1.5.4.tar.gz para /usr/local/httpd-2.4.10/srclib
    Renomeie / usr / local / apr-util para /usr/local/apr-util

    Execute os seguintes comandos na ordem

    $ ./configure --prefix=/usr/local/apache2 --with-included-apr --enable-so –enable-ssl=shared --with-ssl=/usr/local/ssl
    $ make
    $ make install
    

    Ele é instalado em /usr/local/apache2

A instalação está completa. Para ativar o SSL e o Proxy, atualize /usr/local/apache2/conf/httpd.conf sem comentários seguindo as linhas

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule ssl_module modules/mod_ssl.so

Include conf/extra/httpd-ssl.conf

Agora você pode trabalhar no httpd-ssl.conf como normalmente faz para completar sua configuração

    
por 28.10.2014 / 16:13