Project

General

Profile

LighttpdOnSolaris » History » Revision 10

Revision 9 (simmel, 2008-03-26 12:26) → Revision 10/16 (Anonymous, 2008-03-26 12:42)

= Running lighttpd on Solaris Service Management Facility (SMF) = 

 If you want to use native Solaris management facility (SMF), you have to create two files describing lighttpd service: 

  * Manifest file: /var/svc/manifest/network/lighttpd.xml 

 {{{ 
 #!text/xml 
 <?xml version="1.0"?> 
 <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1"> 
 <!-- 
     Copyright 2005 Sergiusz Pawlowicz.    All rights reserved. 
     http://pawlowicz.name/ 
     Use is subject to license terms. 
 
     ident         "0.1" 

     Modified by Shanti Subramanyam to restrict privileges 
 --> 

 <service_bundle type='manifest' name='lighttpd'> 

 <service 
         name='network/lighttpd' 
         type='service' 
         version='1'> 

         <!-- 
           Because we may have multiple instances of network/lighttpd 
           provided by different implementations, we keep dependencies 
           and methods within the instance. 
         --> 

         <instance name='lighttpd' enabled='false'> 
                 <dependency name='loopback' 
                     grouping='require_all' 
                     restart_on='error' 
                     type='service'> 
                         <service_fmri value='svc:/network/loopback:default'/> 
                 </dependency> 

                 <dependency name='physical' 
                     grouping='optional_all' 
                     restart_on='error' 
                     type='service'> 
                         <service_fmri value='svc:/network/physical:default'/> 
                 </dependency> 

                 <dependency name='multiuser-server' 
                     grouping='require_all' 
                     restart_on='error' 
                     type='service'> 
                         <service_fmri value='svc:/milestone/multi-user-server:default'/> 
                 </dependency> 
                
                 <!-- restrict privileges and run as user webservd --> 
                 <method_context> 
                        <method_credential 
                                 user='webservd' group='webservd' 
                                 privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr' /> 
                 </method_context> 


                 

                 <exec_method 
                         type='method' 
                         name='start' 
                         exec='/lib/svc/method/http-lighttpd start' 
                         timeout_seconds='60' /> 

                 <exec_method 
                         type='method' 
                         name='stop' 
                         exec='/lib/svc/method/http-lighttpd stop' 
                         timeout_seconds='60' /> 

                         <!-- restrict privileges and run as user webservd --> 
                         <method_context> 
                             <method_credential 
                                 user='webservd' group='webservd' 
                                 privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr' /> 
                         </method_context> 


                 <exec_method 
                         type='method' 
                         name='refresh' 
                         exec='/lib/svc/method/http-lighttpd refresh' 
                         timeout_seconds='60' /> 

                 <property_group name='startd' type='framework'> 
                         <!-- sub-process core dumps shouldn't restart 
                                 session --> 
                         <propval name='ignore_error' type='astring' 
                                 value='core,signal' /> 
                 </property_group> 

         </instance> 

         <template> 
                 <common_name> 
                         <loctext xml:lang='C'> 
                                 Lighttpd HTTP server 
                         </loctext> 
                 </common_name> 
                 <documentation> 
                         <manpage title='lighttpd' section='1M' /> 
                         <doc_link name='lighttpd.net' 
                                 uri='http://www.lighttpd.net/' /> 
                 </documentation> 
         </template> 
 </service> 

 </service_bundle> 
 }}} 

 /var/svc/manifest/network/lighttpd.xml:26: element instance: validity error : Element instance content does not follow the DTD, expecting (restarter? , dependency* , dependent* , method_context? , exec_method* , property_group* , template?), got (dependency dependency dependency exec_method exec_method method_context exec_method property_group ) 
 svccfg: Document is not valid. 


  * init file: /lib/svc/method/http-lighttpd 

 {{{ 
 #!sh 
 #!/sbin/sh 
 # 
 # Copyright 2005 Sergiusz Pawlowicz    All rights reserved. 
 # Use is subject to license terms. 
 # 
 # ident "0.1" 
 # 


 LIGHTTPD_HOME=/global/lighttpd 
 CONF_FILE=/etc/lighttpd/lighttpd.conf 
 PIDFILE=/var/run/lighttpd.pid 
 HTTPD="${LIGHTTPD_HOME}/sbin/lighttpd" 

 [ ! -f ${CONF_FILE} ] &&    exit $CONF_FILE 

 case "$1" in 
 start) 
         /bin/rm -f ${PIDFILE} 
 # Enable NCA: 
         NCAKMODCONF=/etc/nca/ncakmod.conf 
         if [ -f $NCAKMODCONF ]; then 
             . $NCAKMODCONF 
             if [ "x$status" = "xenabled" ]; then 
                  HTTPD="env LD_PRELOAD=/usr/lib/ncad_addr.so $HTTPD" 
             fi 
         fi 
         exec $HTTPD -f ${CONF_FILE} 2>&1 
         ;; 
 refresh) 
         if [ -f "$PIDFILE" ]; then 
                 /usr/bin/kill -HUP `/usr/bin/cat $PIDFILE` 
         fi 
         ;; 
 stop) 
         if [ -f "$PIDFILE" ]; then 
                 /usr/bin/kill -QUIT `/usr/bin/cat $PIDFILE` 
         fi 
         ;; 
 *) 
         echo "Usage: $0 {start|stop|refresh}" 
         exit 1 
         ;; 
 esac 
 }}} 

 Now import the file into SMF database: 

 {{{ 
 #!ShellExample 
 # svccfg -v import /var/svc/manifest/network/lighttpd.xml 
 }}} 

 and enable this service: 

 {{{ 
 #!ShellExample 
 # svcadm enable network/lighttpd 
 }}} 

 Lastly, you can check verbose information about this service: 

 {{{ 
 #!ShellExample 
 # svcs -l network/lighttpd 
 fmri           svc:/network/lighttpd:lighttpd 
 name           Lighttpd HTTP server 
 enabled        true 
 state          online 
 next_state     none 
 state_time     Sun Sep 25 14:21:49 2005 
 logfile        /var/svc/log/network-lighttpd:lighttpd.log 
 restarter      svc:/system/svc/restarter:default 
 contract_id    143 
 dependency     require_all/error svc:/network/loopback:default (online) 
 dependency     optional_all/error svc:/network/physical:default (online) 
 dependency     require_all/error svc:/milestone/multi-user-server:default (online) 
 }}} 

 Of course it is simple example of such a service, if you have better one, please cut and paste it here.