Назад | Перейти на главную страницу

Компиляция Apache mod_ssl для другого целевого оборудования (ошибка SSE2 не поддерживается)

Я собираю и упаковываю следующее на одной машине («сборочной» машине) и пытаюсь установить и использовать на других машинах («целевых» машинах), некоторые из которых имеют разные процессоры.

Насколько я могу судить, проблема в том, что у машины сборки больше возможностей ЦП, чем у целевой машины, что приводит к тому, что двоичные файлы не исполняются на целевой машине. Я безуспешно пытался использовать флаги конфигурации и компилятора, чтобы отключить использование оскорбительных инструкций.

В конечном итоге я получаю эту ошибку:

$ ./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 ]

Вот мой полный процесс сборки. Можно просмотреть полный вывод каждой команды Вот. Я не могу ссылаться на них напрямую, так как у меня недостаточно репутации SF.

Строительная машина

$ 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

Целевая машина

$ 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

Скомпилируйте 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

просмотреть полный вывод: openssl-configure.txt

$ make && make test

просмотреть полный вывод: openssl-make-and-test.txt

$ sudo make install

просмотреть полный вывод: openssl-make-install.txt

Скомпилируйте 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

просмотреть полный вывод: apache-configure.txt

$ make

просмотреть полный вывод: apache-make.txt

$ sudo make install

просмотреть полный вывод: apache-make-install.txt

Скомпилируйте коннекторы 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

просмотреть полный вывод: tomcat-коннектор-configure.txt

$ make

просмотреть полный вывод: tomcat-коннектор-make.txt

$ sudo make install

просмотреть полный вывод: tomcat-коннектор-make-install.txt

Тестирование

На этом этапе все будет работать на машине сборки. Как только я упакую эти файлы и установлю их на целевой машине, я получаю эту ошибку, когда Apache запускается с включенным mod_ssl.

$ ./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 ]

Вот шаги, которые я сделал для успешной сборки и установки Apache httpd-2.4.10 и OpenSSL openssl-1.0.1j на Solaris 10.

  1. Загрузите следующее программное обеспечение
    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. Подтвердите марку и копию
    По умолчанию gcc Я сидел /usr/sfw/bin/gcc и make Я сидел /usr/ccs/bin/make

    Включить в ПУТЬ
    usr/local/ssl/bin:/usr/sfw/bin:/usr/local/bin:/usr/ccs/bin

    Включите следующее в LD_LIBRARY_PATH
    /usr/local/lib:/usr/local/ssl/lib

  3. Соберите и установите openssl-1.0.1j
    Разархивируйте и разархивируйте openssl-1.0.1j.tar.gz в /usr/local/openssl-1.0.1j
    Выполните следующие команды по порядку. Общий параметр очень важен, так как его можно связать со сборкой httpd-2.4.10 для включения SSL.

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

    По умолчанию он устанавливает openssl в / usr / local / ssl

  4. Установите pcre-8.36 Распакуйте и распакуйте файл pcre-8.36.tar.gz в / usr / local / pcre-8.36

    Выполните следующие команды по порядку

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

    По умолчанию, make install устанавливает команды пакета в /usr/local/bin, включить файлы в /usr/local/include, и т.д.

  5. Соберите и установите httpd-2.4.10

    Разархивируйте и разархивируйте httpd-2.4.10.tar.gz в /usr/local/httpd-2.4.10

    Разархивируйте и разархивируйте архив apr-1.5.1.tar.gz в /usr/local/httpd-2.4.10/srclib
    Переименуйте /usr/local/apr-1.5.1 в /usr/local/apr

    Разархивируйте и распакуйте архив apr-util-1.5.4.tar.gz в /usr/local/httpd-2.4.10/srclib
    Переименуйте / usr / local / apr-util в /usr/local/apr-util

    Выполните следующие команды по порядку

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

    Он устанавливает его в /usr/local/apache2

Установка завершена. Чтобы включить SSL и прокси, обновите /usr/local/apache2/conf/httpd.conf с раскомментированием следующих строк

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

Теперь вы можете работать с httpd-ssl.conf, как обычно, чтобы завершить настройку.

Я решил эту проблему, создав пакеты на машине с аппаратным обеспечением, эквивалентным целевой машине, и использовал компилятор Sun Studio CC вместо gcc.