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


Reply via email to