I am sponsoring this case for Amanda Waite. Timeout set to 3/18. Case materials 
below 
and in the case directory.


Template Version: @(#)sac_nextcase 1.64 07/13/07 SMI
This information is Copyright 2008 Sun Microsystems
1. Introduction
    1.1. Project/Component Working Name:
         Deliver Lighttpd 1.4.x into OpenSolaris
    1.2. Name of Document Author/Supplier:
         Author:  Amanda Waite
    1.3  Date of This Document:
        10 March, 2008
4. Technical Description

Deliver Lighttpd 1.4.x into OpenSolaris
10 March 2008

1.      Summary and motivation

        1.1. Introduction

        This project delivers Lighttpd 1.4.x into OpenSolaris

        Lighttpd is an Open Source Web Server that currently enjoys 4th 
        position in the Netcraft rankings of Market Share for Top Servers 
        across all domains.  Lighttpd became popular on the back of The 
        Ruby on Rails take-off in 2006.
        Much of it's popularity stems from it being extremely lightweight, 
        hence the name. Lighttpd supports both PHP and Ruby on Rails through 
        FastCGI

        For more information about Lighttpd see:

                http://lighttpd.net

        Lighttpd is a key component of an integrated Ruby on Rails stack which
        would include Ruby, Ruby on Rails, FastCGI, the fcgi Ruby Gem and an
        Open Source Database (MySQL, SQLlite and Postgres are all options here)

        This case seeks Minor Release Binding.


2.      Technical issues

        2.1. Key objects

        /usr/lighttpd/1.4/sbin/lighttpd

        /usr/lighttpd/1.4/bin/spawn-fcgi

        /usr/lighttpd/1.4/lib/mod_*.so

        /etc/lighttpd/1.4/lighttpd.conf

        /var/lighttpd/1.4/docroot


        2.2. Versioning

        The versioning model for Lighttpd is <major>.<minor>.<micro>.

        The compatibility expectations for Lighttpd are as follows:

        (1) Version x.y.z is compatible for different values of z, 
        such that z >= 0.
        (2) Version x.y.z is not expected to be compatible for different
        values of x or y

        At the time of writing the latest version of Lighttpd is
        1.4.18, a lot of work is going into 1.5.x but given that most
        Lighttpd deployments are on 1.4.x, we are not considering
        1.5.x at this time. We are however making provision for 1.5.x
        by versioning this integration as lighttpd14.


        2.3 Loadable Modules

        Lighttpd ships with a number of loadable modules which are enabled
        through directives in the config file. Some of these modules have
        library dependencies that must be satisfied through build time package
        options (supplied to the configure script). An example is mod_magnet.so
        which has a dependency on the libraries for the Lua programming 
        language. The module gets built even if the external library 
        dependencies are not satisfied and is effectively a "stub" library.
        If such a module is enabled at runtime through the lighttpd config
        file, lighttpd will dlopen() the stub library but will fail when
        it calls dlsym() on that library. It's not clear why this was done
        but as the behavior and errors generated by such a scenario are
        well documented it's proposed that any such stub libraries be left
        in the distribution. Currently two modules are affected. One is
        mod_cml and the other is mod_magnet. mod_magnet is the replacement
        for mod_cml.

        Attempts to include LDAP support with the authentication module
        mod_auth.so failed due to Lighttpd's use of OpenLDAP extensions
        not documented in the internet draft LDAP C-API document. This
        case defers inclusion of the LDAP support to a future project.
        

        2.4 Directory Naming and Structure

        The proposed directory layout for Lighttpd is:

        /usr/lighttpd/1.4
                         /sbin
                         /bin
                         /lib

        /etc/lighttpd/1.4
                         /conf.d

        /var/lighttpd/1.4
                         /docroot
                         /logs


        2.5 Users and Groups

        Binary distributions of Lighttpd generally include a default config 
        file. In this file, as with the likes of Apache, the user and group 
        name under which to run Lighttpd are specified. 
        The most common practice for user and group in the various binary 
        distros is to use generic web/www related names such as www-run, 
        www-data or webservd. It's understood at this time that it is not 
        possible to deliver a new user or group into Solaris via a package 
        install so the proposed user name and group is webservd:webservd

        2.6 Configuration File

        This project will use the standard convention and deliver
        configuration files under /etc/lighttpd/1.4

        The default configuration file provided with this integration
        should work out of the box and should therefore avoid relying
        on any dependent packages, particularly FastCGI.

        In addition, a directory conf.d will be created in /etc/lighttpd/1.4

        This directory will be used for module/directive-specific
        configuration files and configuration files for virtual hosts.
        These are added to the main configuration file using the
        include directive. For this integration conf.d will contain
        configuration files for SSL and fastcgi.


        2.7 Docroot and Log Files

        The Document Root for Lighttpd will be located in 
        /var/lighttpd/1.4/docroot and will include a welcome file. Lighttpd 
        source distributions do not include such a file so one will need to be 
        created (index.html). This would be similar to the one supplied with 
        Apache.

        Log Files will be located in /var/lighttpd/1.4/logs and will be named 
        access.log and error.log. This directory will also include the run.pid 
        file. /var/lighttpd/1.4 and it's files and sub directories will be 
        owned by webservd:webservd


        2.8 SMF and RBAC support

        On OpenSolaris, the public interface to Lighttpd will be SMF and
        the Lighttpd SMF service for this versions will be named:

        svc:/network/http:lighttpd14

        This was chosen to avoid confusion should multiple versions of 
        Lighttpd be installed on the system and is consistent with SMF
        being the public interface to Lighttpd. Having Lighttpd be an
        instance of svc:/network/http follows the convention set by the
        Apache integration.

        The appropriate manifest and method files will be provided in the 
        package.

        A Lighttpd Admin profile will be added to the system along with the 
        auths required to allow the Lighttpd Admin profile to manage the 
        lighttpd SMF service.

        2.9 Build features

        See Appendix 2 for a list of features that Lighttpd can be built
        with. 

        Build time package selection determines which Lighttpd loadable modules
        are available to the user at runtime. A complete list of Lighttpd 
        modules is available on the Lighttpd Wiki[1]

        The core packages recommended by the Lighttpd developers are 
        pcre, ssl and IPv6. Lua is also highly recommended as it is required
        by the mod_magnet module but currently there is no support for Lua
        in Solaris/OpenSolaris.

3.      Lighttpd documentation                                

        Lighttpd provides man pages for the lighttpd and spawn-fcgi 
        executables and the source distribution includes module 
        documentation. It is not common practice to include the
        module documentation and will not be included in this integration

        The Lighttpd man pages that are provided with the sources don't 
        cover all of command line flags. These man pages will be added to 
        as part of this integration in order to include all of the command 
        line flags and provide additional usage information to the user.
        The files affected by these additions are lighttpd.1 and 
        spawn-fcgi.1

        A "lighttpd" man page will be created and added to /usr/share/man/man1m
        This man page will provide the user with useful information for 
        getting started with Lighttpd on OpenSolaris.


4.      Packaging and Delivery

        We propose to package Lighttpd under the following packages:

        SUNWlighttpd14u - [usr] Server package (including server 
                        daemon, utility daemons, loadable modules, 
                        man pages)
        SUNWlighttpd14r - [root] (config files, smf files and data directory) 

        Multiple versions can coexist, and are distinguished by the naming
        scheme  (lighttpd14 for version 1.4.*, lighttpd15 for version 1.5.*).


5.      Lighttpd Interfaces

        5.1. Interface Stability

        Lighttpd has no obvious history of any interface instability and the
        expectation is that dot-dot releases of Lighttpd will be compatible.
        This is not completely guaranteed by the community and it is possible
        that interfaces may change due to the fixing of bugs.

        5.2. Imported Interfaces

        OpenSSL           External/Volatile     PSARC/2003/500
        PCRE              Uncommitted           PSARC/2007/164
        libmysqlclient    Committed             LSARC 2007/608

        5.3. Exported Interfaces

        NAME                                     STABILITY        NOTES

        SUNWlighttpd14r                          committed        package
        SUNWlighttpd14u                          committed        package

        lighttpd command line options            uncommitted      command line 
options
        lighttpd config file                     uncommitted      config file 
syntax
        lighttpd log file                        not an interface log file 
syntax
        lighttpd pid file                        project private  daemon pid 
file 
        lighttpd umbrella Man Page               committed        man page
        spawn-fcgi command line options          uncommitted      command line 
options

        /usr/lighttpd/1.4/bin/spawn-fcgi         uncommitted      executable
        /usr/lighttpd/1.4/sbin/lighttpd          uncommitted      executable
        /usr/lighttpd/1.4/sbin/lighttpd-angel    uncommitted      executable
        /usr/lighttpd/1.4/man/man1/lighttpd.1    uncommitted      man page
        /usr/lighttpd/1.4/man/man1/spawn-fcgi.1  uncommitted      man page
        /var/lighttpd/1.4/docroot                uncommitted      document root
        /var/lighttpd/1.4/docroot/index.html     uncommitted      welcome page
        /var/lighttpd/1.4/docroot/logo.png       uncommitted      image
        /var/lighttpd/1.4/logs                   uncommitted      log file dir
        /etc/lighttpd/1.4/lighttpd.conf          uncommitted      default conf 
file
        /etc/lighttpd/1.4/lighttpd.conf-fcgi     uncommitted      sample conf 
file
        /usr/lighttpd/1.4/lib/mod_*.so           project private  shared library

        svc:/network/http:lighttpd14             committed        FMRI
        /lib/svc/method/lighttpd14-svc           project private  SMF svc 
method script
        /var/svc/manifest/network/lighttpd14.xml project private  SMF Manifest



6. References

        [1] http://trac.lighttpd.net/trac/wiki/Docs


================================================================
Appendix 1: Lighttpd Integration Directory and File Structure.

1. The following files are included in the Lighttpd integration:

/usr/lighttpd/1.4
                 /bin
                     /spawn-fcgi
                 /sbin
                      /lighttpd
                      /lighttpd-angel
                 /man
                     /man1
                          /lighttpd.1
                          /spawn-fcgi.1
/var/lighttpd/1.4
                 /docroot
                         /index.html
                         /logo.png
                 /logs
                      /error.log
                      /access.log
                      /lighttpd.pid
/etc/lighttpd/1.4
                 /lighttpd.conf
                 /lighttpd.conf-fcgi
/usr/lighttpd/1.4/lib
                     /mod_flv_streaming.so  
                     /mod_evasive.so
                     /mod_webdav.so
                     /mod_magnet.so
                     /mod_cml.so
                     /mod_trigger_b4_dl.so
                     /mod_mysql_vhost.so
                     /mod_cgi.so
                     /mod_scgi.so
                     /mod_staticfile.so
                     /mod_dirlisting.so
                     /mod_indexfile.so
                     /mod_setenv.so
                     /mod_alias.so
                     /mod_userdir.so
                     /mod_rrdtool.so
                     /mod_usertrack.so
                     /mod_proxy.so
                     /mod_ssi.so
                     /mod_secdownload.so
                     /mod_expire.so
                     /mod_evhost.so
                     /mod_simple_vhost.so
                     /mod_fastcgi.so
                     /mod_extforward.so
                     /mod_access.so
                     /mod_compress.so
                     /mod_auth.so
                     /mod_rewrite.so
                     /mod_redirect.so
                     /mod_status.so
                     /mod_accesslog.so

/usr/share/man/man1m
                    /lighttpd.1m

/lib/svc/method/lighttpd14-svc
/var/svc/manifest/network/lighttpd14.xml


Appendix 2: Lighttpd Features and Packages

The following options are provided by the configure script for enabling or
disabling features and for adding/removing packages

Optional Features:
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --enable-maintainer-mode  enable make rules and dependencies not useful
                          (and sometimes confusing) to the casual installer
  --disable-dependency-tracking  speeds up one-time build
  --enable-dependency-tracking   do not reject slow dependency extractors
  --enable-static[=PKGS]  build static libraries [default=no]
  --enable-shared[=PKGS]  build shared libraries [default=yes]
  --enable-fast-install[=PKGS]
                          optimize for fast installation [default=yes]
  --disable-libtool-lock  avoid locking (might break parallel builds)
  --enable-lfs            Turn on Large File System (default)
  --disable-ipv6          disable IPv6 support

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
  --with-pic              try to use only PIC/non-PIC objects [default=use
                          both]
  --with-tags[=TAGS]      include additional configurations [automatic]
  --with-mysql[=PATH]     Include MySQL support. PATH is the path to
                          'mysql_config'
  --with-ldap             enable LDAP support
  --with-attr             enable extended attribute support
  --with-valgrind         enable internal support for valgrind
  --with-openssl[=DIR]    Include openssl support (default no)
  --with-openssl-includes=DIR
                          OpenSSL includes
  --with-openssl-libs=DIR OpenSSL libraries
  --with-kerberos5        use Kerberos5 support with OpenSSL
  --with-pcre             Enable pcre support (default yes)
  --with-bzip2            Enable bzip2 support for mod_compress
  --with-fam              fam/gamin for reducing number of stat() calls
  --with-webdav-props     properties in mod_webdav
  --with-webdav-locks     locks in mod_webdav
  --with-gdbm             gdbm storage for mod_trigger_b4_dl
  --with-memcache         memcached storage for mod_trigger_b4_dl
  --with-lua              lua engine for mod_cml


Appendix 3: Lighttpd man pages


Lighttpd
========

User Commands                                         LIGHTTPD(1)

NAME
     lighttpd - a fast, secure and flexible webserver

SYNOPSIS
     lighttpd -D -f <configfile>

DESCRIPTION
FILES
     /etc/lighttpd/lighttpd.conf

CONFORMING TO
     HTTP/1.0  HTTP/1.0  HTTP-Authentification  -  Basic,  Digest
     FastCGI CGI/1.1

SEE ALSO
     spawn-fcgi(1)

AUTHOR


spawn-fcgi
==========

User Commands                                        SPAWNFCGI(1)

NAME
     spawn-fcgi - spawning FastCGI processes

SYNOPSIS
     spawn-fcgi -f <fastcgi-binary> [-p <port> | -s <socket>] [-C
     <num-of-php-procs>]  [-c  <chroot-dir>]  [-u <username>] [-g
     <groupname>] spawn-fcgi -v spawn-fcgi -h

DESCRIPTION
     spawn-fcgi is used to spawn remote FastCGI processes.

SEE ALSO
     lighttpd(1)

AUTHOR


6. Resources and Schedule
    6.4. Steering Committee requested information
        6.4.1. Consolidation C-team Name:
                sfw
    6.5. ARC review type: FastTrack
    6.6. ARC Exposure: open


Reply via email to