Saturday, December 21, 2019

solaris - Compiling Apache mod_ssl for different target hardware (hardware capability unsupported SSE2 error)



I am building and packaging the following on one machine (the "build" machine) and attempting to install and use on other machines ("target" machines) some of which have different processors.




  • OpenSSL 0.9.8l


  • Apache 2.2.14

  • Tomcat Connectors 1.2.28



The problem, as far as I can tell, is that the build machine has more CPU capabilities than the target machine resulting in binaries that are not executable on the target machine. I have attempted to use configure and compiler flags to disable use of the offending instructions without luck.



Ultimately I get this error:



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


Here is my complete build process. Full output from each command can be viewed here. I can't link to them each directly since I don't have enough SF rep.




The Build Machine



$ 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


The Target Machine



$ 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 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



view full output:
openssl-configure.txt



$ make && make test


view full output:
openssl-make-and-test.txt



$ sudo make install



view full output:
openssl-make-install.txt



Compile 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



view full output:
apache-configure.txt



$ make


view full output:
apache-make.txt



$ sudo make install



view full output:
apache-make-install.txt



Compile Tomcat Connectors 1.2.28



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


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

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


view full output:
tomcat-connector-configure.txt




$ make


view full output:
tomcat-connector-make.txt



$ sudo make install



view full output:
tomcat-connector-make-install.txt



Testing



At this point everything will work on the build machine. Once I package these files and install them on the target machine, I get this error when Apache is started with mod_ssl enabled.



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

Answer



I worked around this problem by building the packages on a machine with equivalent hardware to the target machine and using the Sun Studio CC compiler instead of gcc.


No comments:

Post a Comment

linux - How to SSH to ec2 instance in VPC private subnet via NAT server

I have created a VPC in aws with a public subnet and a private subnet. The private subnet does not have direct access to external network. S...