Including Apache 2.2.4 with Solaris
Stefan Teleman <Stefan.Teleman at Sun.COM>
15 March 2007
1. Summary and motivation
1.1. Introduction
This FastTrack proposes the integration of an updated version of
the Apache 2 Web Server [1], Apache 2.2.4, in Solaris. [2]
According to the HTTPD Home Page [3], "The Apache HTTP Server
Project is proud to announce the release of version 2.2.4 of
the Apache HTTP Server ["Apache"]. This version is principally a
bugfix release.
This version of Apache is a major release and the start of a new
stable branch, and represents the best available version of Apache
HTTP Server. New features include Smart Filtering, Improved Caching,
AJP Proxy, Proxy Load Balancing, Graceful Shutdown support, Large
File Support, the Event MPM, and refactored Authentication and
Authorization."
This FastTrack proposes the integration of the most recent stable
release of Apache 2, Apache 2.2.4. In addition to the canonical Apache
2.2.4 distribution, this FastTrack also proposes the simultaneous
integration of distcache 1.4.5 [8], as well as several additional
Modules [outlined below].
This case seeks Minor Release Binding.
1.2. Previous Relevant ARC Cases
PSARC 2004/676 Apache 2.x.x in Solaris
PSARC 2004/278 GSSAPI auth for Apache
PSARC 2001/266 Addition of Jakarta Tomcat for Apache
PSARC 2001/244 Apache moving to SFW Consolidation
PSARC 2000/040 Java Servlet Support in Apache
PSARC 1999/542 Apache for Solaris
2. Technical issues
2.1. Key objects
The Solaris Apache 2 distribution installs objects under three
distinct directory hierarchies: /usr/apache2, /etc/apache2 and
/var/apache2.
/usr/apache2/bin/apr-1-config
/usr/apache2/bin/apu-1-config
/usr/apache2/bin/dc_client
/usr/apache2/bin/dc_server
/usr/apache2/bin/dc_snoop
/usr/apache2/bin/dc_test
/usr/apache2/bin/nal_test
/usr/apache2/bin/piper
/usr/apache2/bin/sslswamp
/usr/apache2/bin/ab
/usr/apache2/bin/apachectl
/usr/apache2/bin/apxs
/usr/apache2/bin/checkgid
/usr/apache2/bin/dbmmanage
/usr/apache2/bin/envvars
/usr/apache2/bin/envvars-std
/usr/apache2/bin/htcacheclean
/usr/apache2/bin/htdbm
/usr/apache2/bin/htdigest
/usr/apache2/bin/htpasswd
/usr/apache2/bin/httpd
/usr/apache2/bin/httxt2dbm
/usr/apache2/bin/logresolve
/usr/apache2/bin/rotatelogs
/usr/apache2/bin/suexec.disabled
/usr/apache2/lib/apr.exp
/usr/apache2/lib/aprutil.exp
/usr/apache2/lib/libapr-1.so.0.2.8
/usr/apache2/lib/libapr-1.so -> libapr-1.so.0.2.8
/usr/apache2/lib/libapr-1.so.0 -> libapr-1.so.0.2.8
/usr/apache2/lib/libaprutil-1.so.0.2.8
/usr/apache2/lib/libaprutil-1.so.0 -> libaprutil-1.so.0.2.8
/usr/apache2/lib/libaprutil-1.so -> libaprutil-1.so.0.2.8
/usr/apache2/lib/libdistcache.so.1.0.1
/usr/apache2/lib/libdistcache.so.1 -> libdistcache.so.1.0.1
/usr/apache2/lib/libdistcache.so -> libdistcache.so.1.0.1
/usr/apache2/lib/libdistcacheserver.so.1.0.1
/usr/apache2/lib/libdistcacheserver.so.1 -> libdistcacheserver.so.1.0.1
/usr/apache2/lib/libdistcacheserver.so -> libdistcacheserver.so.1.0.1
/usr/apache2/lib/libnal.so.1.0.1
/usr/apache2/lib/libnal.so.1 -> libnal.so.1.0.1
/usr/apache2/lib/libnal.so -> libnal.so.1.0.1
/etc/apache2/httpd.conf-example
/etc/apache2/extra/httpd-autoindex.conf-example
/etc/apache2/extra/httpd-dav.conf-example
/etc/apache2/extra/httpd-default.conf-example
/etc/apache2/extra/httpd-info.conf-example
/etc/apache2/extra/httpd-java.conf-example
/etc/apache2/extra/httpd-languages.conf-example
/etc/apache2/extra/httpd-manual.conf-example
/etc/apache2/extra/httpd-mpm.conf-example
/etc/apache2/extra/httpd-multilang-errordoc.conf-example
/etc/apache2/extra/httpd-proxy.conf-example
/etc/apache2/extra/httpd-security.conf-example
/etc/apache2/extra/httpd-ssl.conf-example
/etc/apache2/extra/httpd-userdir.conf-example
/etc/apache2/extra/httpd-vhosts.conf-example
/usr/apache2/man/man1/
/usr/apache2/man/man3/
/usr/apache2/man/man8/
/usr/apache2/manual/
2.2. API and ABI compatibility
The Apache 2.2.x Module API/ABI is NOT binary compatible with the
Apache 2.0.x Module API/ABI:
"Add-in modules for Apache 1.3 or 2.0 are not compatible with
Apache 2.2. If you are running third party add-in modules, you
must obtain modules compiled or updated for Apache 2.2 from that
third party, before you attempt to upgrade from these previous
versions. Modules compiled for Apache 2.2 should continue to work
for all 2.2.x releases." [4]
Simply put, upgrading from Apache 2.0.x to Apache 2.2.x will break
existing Apache 2.0.x applications which have installed third party
Apache Modules. Extensive Release Notes detailing the consequences of
this breakage will be included with this new Integration. The original
ARC Case for Apache2 [PSARC 2004/676] proposed Standard Classification
Stability Level for the APR Interface. It was not possible to foresee,
at that time, that the APR Interface for Apache 2.2.x would become API
and ABI incompatible with the Apache 2.0.x APR Interface. [4]
In this FastTrack, we propose re-classifying the Commitment Level of
the APR Interface, and re-classifying it as Uncommitted. A Release
Note will be submitted for the Solaris Updates documenting that the
APR interface may change incompatibily in a subsequent release of
Solaris; in addition, a Release Note will be filed in that subsequent
release [aka Nevada] indicating that the interface had changed, and
that third-party modules will need to be recompiled and potentially
changed.
2.3. Request Handling MPM compatibility
In addition to the APR API and ABI compatibility breakage outlined
above, the currently proposed Apache upgrade promotes a significant
and binary incompatible change in the request handling mechanism.
Apache 2.0.x was delivered with the prefork-mpm request handler.
The currently proposed integration changes the request handler
model to the worker-mpm. This change introduces an Apache Module
ABI incompatibility: the worker-mpm assumes that all Apache Modules
have been written thread-safe [thread-safety refers to the actual
programmatic implementation of the respective modules, and is not
limited to run-time binding to reentrant interfaces]. Apache
Modules not written with concern for thread-safety will break at
runtime. Extensive Release Notes detailing the possiblity of breakage
will be included with this new Integration.
2.4. Packaging and Delivery
The current integration proposal does NOT allow for the inclusion and
coexistence of multiple versions of Apache 2.x.x. Installing Apache
2.2.4 will overwrite the existing Apache 2.0.x installation [with the
exception of the configuration files located under /etc/apache2, which
will be preserved].
This FastTrack proposes to maintain the existing Apache 2.0.x
packaging structure:
SUNWapch2r Apache Web Server V2 [root]
SUNWapch2u Apache Web Server V2 [usr]
SUNWapch2d Apache Web Server V2 [Documentation]
3. Apache 2 Modules
Just as the previous versions of Apache, Apache 2.2.x supports
dynamically loadable modules. This integration will include all
the modules provided by the Apache canonical distribution. In
addition, this integration will also deliver the following additional
modules [which are not part of the Apache canonical distribution]:
/usr/apache2/libexec/mod_security2.so [13]
/usr/apache2/libexec/mod_html.so [13]
/usr/apache2/libexec/mod_jk.so [15]
/usr/apache2/libexec/jni_connect.so [15]
/usr/apache2/libexec/mod_dtrace.so [16]
/usr/apache2/libexec/mod_auth_gss.so [17]
/usr/apache2/libexec/mod_perl.so [12]
4. Apache Internationalization.
Apache2 provides GNU iconv compatible I18N support via
libaprutil-1.so.0.2.8. The integration proposed in this FastTrack
relies on the GNU iconv compatibility layer available in Solaris'
libc.so.
5. Apache Documentation
Apache 2.2.x provides a full and complete documentation set, in
UNIX manual format, as well as HTML. This integration will deliver
both documentation sets.
6. Interfaces
6.1. Interface Stability
The Apache Project broke API and ABI compatibility between version
2.0.x and version 2.2.x of the canonical distribution. [3] We
propose that all Apache2 Interfaces be classified as Uncommitted.
6.2. Imported Interfaces
Apache 2.2.x imports interfaces from the Standard C Library, the
Network Services Layer Library and the Pthreads Library. In addition,
the following Interfaces are imported:
NAME
NOTES
Apache 2.x in Solaris PSARC 2004/676
OpenSSL PSARC/2003/500
PCRE PSARC/2007/000
Perl5 PSARC/1999/192
Kerberos 5 PSARC/1999/617 et seq.
LibEXPAT LSARC/2004/324
LDAP PSARC/1997/276 et seq.
JVM PSARC/1996/330 et seq.
DTrace PSARC/2001/466
GSSAPI auth for Apache PSARC 2004/278
6.3. Exported Interfaces
NAME STABILITY NOTES
/usr/apache2/bin/httpd Uncommitted Executable location
/usr/apache2/bin/apachectl Uncommitted Apache Startup script
/usr/apache2/bin/apxs Uncommitted Apache Configuration
Script
/etc/apache2/httpd.conf-example Uncommitted Master configuration
/etc/apache2/extra/httpd-autoindex.conf-example Uncommitted
Additional
configuration
/etc/apache2/extra/httpd-dav.conf-example Uncommitted
Additional confi
guration
/etc/apache2/extra/httpd-default.conf-example Uncommitted
Additional configuration
/etc/apache2/extra/httpd-info.conf-example Uncommitted
Additional configuration
/etc/apache2/extra/httpd-java.conf-example Uncommitted
Additional configuration
/etc/apache2/extra/httpd-languages.conf-example Uncommitted
Additional
configuration
/etc/apache2/extra/httpd-manual.conf-example Uncommitted
Additional configuration
/etc/apache2/extra/httpd-mpm.conf-example Uncommitted
Additional configuration
/etc/apache2/extra/httpd-multilang-errordoc.conf-example
Uncommitted Additional
configuration
/etc/apache2/extra/httpd-proxy.conf-example Uncommitted
Additional configuration
/etc/apache2/extra/httpd-security.conf-example Uncommitted
Additional configuration
/etc/apache2/extra/httpd-ssl.conf-example Uncommitted
Additional configuration
/etc/apache2/extra/httpd-userdir.conf-example Uncommitted
Additional configuration
/etc/apache2/extra/httpd-vhosts.conf-example Uncommitted
Additional configuration
/usr/apache2/include/apr.h Uncommitted Include file
/usr/apache2/include/apr_portable.h Uncommitted Include file
/usr/apache2/include/apu.h Uncommitted Include file
/usr/apache2/include/http_vhost.h Uncommitted Include file
/usr/apache2/include/httpd.h Uncommitted Include file
/usr/apache2/include/mpm.h Uncommitted Include file
/var/apache2/error/HTTP_BAD_GATEWAY.html.var Uncommitted Error
messages
/var/apache2/error/HTTP_BAD_REQUEST.html.var Uncommitted Error
messages
/var/apache2/error/HTTP_FORBIDDEN.html.var Uncommitted Error
messages
/var/apache2/error/HTTP_GONE.html.var Uncommitted Error
messages
/var/apache2/error/HTTP_INTERNAL_SERVER_ERROR.html.var Uncommitted
Error messages
/var/apache2/error/HTTP_METHOD_NOT_ALLOWED.html.var Uncommitted
Error messages
/var/apache2/error/HTTP_NOT_FOUND.html.var Uncommitted Error
messages
/var/apache2/error/HTTP_NOT_IMPLEMENTED.html.var Uncommitted
Error messages
/var/apache2/error/HTTP_PRECONDITION_FAILED.html.var Uncommitted
Error messages
/var/apache2/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
Uncommitted Error
messages
/var/apache2/error/HTTP_REQUEST_TIME_OUT.html.var Uncommitted
Error messages
/var/apache2/error/HTTP_REQUEST_URI_TOO_LARGE.html.var Uncommitted
Error messages
/var/apache2/error/HTTP_SERVICE_UNAVAILABLE.html.var Uncommitted
Error messages
/var/apache2/error/HTTP_UNAUTHORIZED.html.var Uncommitted Error
messages
/var/apache2/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var Uncommitted
Error messages
/var/apache2/error/HTTP_VARIANT_ALSO_VARIES.html.var Uncommitted
Error messages
/var/apache2/error/contact.html.var Uncommitted Error messages
/usr/apache2/libexec/httpd.exp Uncommitted Linker Map File
/usr/apache2/libexec/jni_connect.so Uncommitted Apache Module
/usr/apache2/libexec/mod_actions.so Uncommitted Apache Module
/usr/apache2/libexec/mod_alias.so Uncommitted Apache Module
/usr/apache2/libexec/mod_asis.so Uncommitted Apache Module
/usr/apache2/libexec/mod_auth_basic.so Uncommitted Apache Module
/usr/apache2/libexec/mod_auth_gss.so Uncommitted Apache Module
/usr/apache2/libexec/mod_auth_digest.so Uncommitted Apache Module
/usr/apache2/libexec/mod_authn_alias.so Uncommitted Apache Module
/usr/apache2/libexec/mod_authn_anon.so Uncommitted Apache Module
/usr/apache2/libexec/mod_authn_dbd.so Uncommitted Apache Module
/usr/apache2/libexec/mod_authn_dbm.so Uncommitted Apache Module
/usr/apache2/libexec/mod_authn_file.so Uncommitted Apache Module
/usr/apache2/libexec/mod_authnz_ldap.so Uncommitted Apache Module
/usr/apache2/libexec/mod_authz_dbm.so Uncommitted Apache Module
/usr/apache2/libexec/mod_authz_default.so Uncommitted Apache
Module
/usr/apache2/libexec/mod_authz_groupfile.so Uncommitted Apache
Module
/usr/apache2/libexec/mod_authz_host.so Uncommitted Apache Module
/usr/apache2/libexec/mod_authz_owner.so Uncommitted Apache Module
/usr/apache2/libexec/mod_authz_svn.so Uncommitted Apache Module
/usr/apache2/libexec/mod_authz_user.so Uncommitted Apache Module
/usr/apache2/libexec/mod_autoindex.so Uncommitted Apache Module
/usr/apache2/libexec/mod_bucketeer.so Uncommitted Apache Module
/usr/apache2/libexec/mod_cache.so Uncommitted Apache Module
/usr/apache2/libexec/mod_case_filter.so Uncommitted Apache Module
/usr/apache2/libexec/mod_case_filter_in.so Uncommitted Apache
Module
/usr/apache2/libexec/mod_cern_meta.so Uncommitted Apache Module
/usr/apache2/libexec/mod_cgi.so Uncommitted Apache Module
/usr/apache2/libexec/mod_cgid.so Uncommitted Apache Module
/usr/apache2/libexec/mod_charset_lite.so Uncommitted Apache
Module
/usr/apache2/libexec/mod_dav.so Uncommitted Apache Module
/usr/apache2/libexec/mod_dav_fs.so Uncommitted Apache Module
/usr/apache2/libexec/mod_dav_lock.so Uncommitted Apache Module
/usr/apache2/libexec/mod_dav_svn.so Uncommitted Apache Module
/usr/apache2/libexec/mod_dbd.so Uncommitted Apache Module
/usr/apache2/libexec/mod_deflate.so Uncommitted Apache Module
/usr/apache2/libexec/mod_dir.so Uncommitted Apache Module
/usr/apache2/libexec/mod_disk_cache.so Uncommitted Apache Module
/usr/apache2/libexec/mod_dtrace.so Uncommitted Apache Module
/usr/apache2/libexec/mod_dumpio.so Uncommitted Apache Module
/usr/apache2/libexec/mod_echo.so Uncommitted Apache Module
/usr/apache2/libexec/mod_env.so Uncommitted Apache Module
/usr/apache2/libexec/mod_example.so Uncommitted Apache Module
/usr/apache2/libexec/mod_expires.so Uncommitted Apache Module
/usr/apache2/libexec/mod_ext_filter.so Uncommitted Apache Module
/usr/apache2/libexec/mod_file_cache.so Uncommitted Apache Module
/usr/apache2/libexec/mod_filter.so Uncommitted Apache Module
/usr/apache2/libexec/mod_headers.so Uncommitted Apache Module
/usr/apache2/libexec/mod_ident.so Uncommitted Apache Module
/usr/apache2/libexec/mod_imagemap.so Uncommitted Apache Module
/usr/apache2/libexec/mod_include.so Uncommitted Apache Module
/usr/apache2/libexec/mod_info.so Uncommitted Apache Module
/usr/apache2/libexec/mod_isapi.so Uncommitted Apache Module
/usr/apache2/libexec/mod_jk.so Uncommitted Apache Module
/usr/apache2/libexec/mod_ldap.so Uncommitted Apache Module
/usr/apache2/libexec/mod_log_config.so Uncommitted Apache Module
/usr/apache2/libexec/mod_log_forensic.so Uncommitted Apache
Module
/usr/apache2/libexec/mod_logio.so Uncommitted Apache Module
/usr/apache2/libexec/mod_mem_cache.so Uncommitted Apache Module
/usr/apache2/libexec/mod_mime.so Uncommitted Apache Module
/usr/apache2/libexec/mod_mime_magic.so Uncommitted Apache Module
/usr/apache2/libexec/mod_negotiation.so Uncommitted Apache Module
/usr/apache2/libexec/mod_optional_fn_export.so Uncommitted Apache
Module
/usr/apache2/libexec/mod_optional_fn_import.so Uncommitted Apache
Module
/usr/apache2/libexec/mod_optional_hook_export.so Uncommitted
Apache Module
/usr/apache2/libexec/mod_optional_hook_import.so Uncommitted
Apache Module
/usr/apache2/libexec/mod_perl.so Uncommitted Apache Module
/usr/apache2/libexec/mod_proxy.so Uncommitted Apache Module
/usr/apache2/libexec/mod_proxy_ajp.so Uncommitted Apache Module
/usr/apache2/libexec/mod_proxy_balancer.so Uncommitted Apache
Module
/usr/apache2/libexec/mod_proxy_connect.so Uncommitted Apache
Module
/usr/apache2/libexec/mod_proxy_ftp.so Uncommitted Apache Module
/usr/apache2/libexec/mod_proxy_html.so Uncommitted Apache Module
/usr/apache2/libexec/mod_proxy_http.so Uncommitted Apache Module
/usr/apache2/libexec/mod_rewrite.so Uncommitted Apache Module
/usr/apache2/libexec/mod_security2.so Uncommitted Apache Module
/usr/apache2/libexec/mod_setenvif.so Uncommitted Apache Module
/usr/apache2/libexec/mod_speling.so Uncommitted Apache Module
/usr/apache2/libexec/mod_ssl.so Uncommitted Apache Module
/usr/apache2/libexec/mod_status.so Uncommitted Apache Module
/usr/apache2/libexec/mod_suexec.so Uncommitted Apache Module
/usr/apache2/libexec/mod_unique_id.so Uncommitted Apache Module
/usr/apache2/libexec/mod_userdir.so Uncommitted Apache Module
/usr/apache2/libexec/mod_usertrack.so Uncommitted Apache Module
/usr/apache2/libexec/mod_version.so Uncommitted Apache Module
/usr/apache2/libexec/mod_vhost_alias.so Uncommitted Apache Module
/usr/apache2/libexec/mod_html.so Uncommitted Apache Module
/usr/apache2/libexec/mod_security2.so Uncommitted Apache Module
/usr/apache2/libexec/mod_jk.so Uncommitted Apache Module
/usr/apache2/libexec/jni_connect.so Uncommitted Apache Module
/usr/apache2/libexec/mod_dtrace.so Uncommitted Apache Module
/usr/apache2/libexec/mod_perl.so Uncommitted Apache Module
/usr/apache2/libexec/mod_auth_gss.so Uncommitted Apache Module
/var/apache2/htdocs Uncommitted ServerRoot
/var/apache2/logs Uncommitted Errorlog reporting
/var/apache2/error Uncommitted Error message database
svc:/network/http:apache2 Committed FMRI
/var/svc/manifest/network/http-apache2.xml Project Private SMF
Manifest
7. References
[1] http://www.apache.org/
[2] http://sac.sfbay/PSARC/2004/676/
[3] http://httpd.apache.org/
[4] http://httpd.apache.org/download.cgi
[5] http://apr.apache.org/docs/apr/1.2/index.html
[6] http://apr.apache.org/docs/apr-util/1.2/
[7] http://apr.apache.org/docs/apr-iconv/1.1/index.html
[8] http://distcache.sourceforge.net/
[9] http://sourceforge.net/projects/distcache/
[10] http://www.pcre.org/
[11] http://www.openssl.org/
[12] http://www.perl.org/
[13] http://www.modsecurity.org/
[14] http://www.libexpat.org/
[15] http://tomcat.apache.org/download-connectors.cgi
[16] http://prefetch.net/projects/apache_modtrace/index.html
[17] http://sac.sfbay/PSARC/2004/278/
--
Stefan Teleman
Sun Microsystems, Inc.
Stefan.Teleman at Sun.COM