SMF support for Cool Stack Apache
Here are instructions on how to use SMF to manage Apache. These instructions assume no knowledge of SMF. All commands should be executed as root.
The manifest defines the service and controls the privileges with which the service will execute. We use the service name csk-httpd to distinguish this as a Cool Stack service (and not to cause any confusion with the httpd service that already exists).
Create a file named /var/svc/manifest/network/cskapache2.xml with the following contents :
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
Copyright 2006-2007 Sun Microsystems, Inc. All rights reserved.
CSKapache2 manifest - should reside in /var/svc/manifest/network.
-->
<service_bundle type='manifest' name='CSKamp:apache'>
<service
name='network/csk-http'
type='service'
version='1'>
<!--
Because we may have multiple instances of network/http
provided by different implementations, we keep dependencies
and methods within the instance.
-->
<instance name='CSKapache2' enabled='false'>
<!--
Wait for network interfaces to be initialized.
-->
<dependency name='network'
grouping='require_all'
restart_on='error'
type='service'>
<service_fmri value='svc:/milestone/network:default'/>
</dependency>
<!--
Wait for all local filesystems to be mounted.
-->
<dependency name='filesystem-local'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri
value='svc:/system/filesystem/local:default'/>
</dependency>
<!--
Wait for automounting to be available, as we may be
serving data from home directories or other remote
filesystems.
-->
<dependency name='autofs'
grouping='optional_all'
restart_on='error'
type='service'>
<service_fmri
value='svc:/system/filesystem/autofs:default'/>
</dependency>
<exec_method
type='method'
name='start'
exec='/opt/coolstack/lib/svc/method/svc-cskapache2 start'
timeout_seconds='60'>
<method_context>
<method_credential
user='webservd' group='webservd'
privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr' />
</method_context>
</exec_method>
<exec_method
type='method'
name='stop'
exec='/opt/coolstack/lib/svc/method/svc-cskapache2 stop'
timeout_seconds='60'>
<method_context />
</exec_method>
<exec_method
type='method'
name='refresh'
exec='/opt/coolstack/lib/svc/method/svc-cskapache2 refresh'
timeout_seconds='60'>
<method_context />
</exec_method>
<property_group name='httpd' type='application'>
<stability value='Evolving' />
<propval name='ssl' type='boolean' value='false' />
</property_group>
<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>
<stability value='Evolving' />
<template>
<common_name>
<loctext xml:lang='C'>
Apache 2 HTTP server
</loctext>
</common_name>
<documentation>
<manpage title='httpd' section='8'
manpath='/opt/coolstack/apache2/man' />
<doc_link name='apache.org'
uri='http://httpd.apache.org' />
</documentation>
</template>
</service>
</service_bundle>
Create the method
Create the file /opt/coolstack/lib/svc/method/svc-cskapache2 referenced in the manifest with the following contents and make it executable. You will have to create all directories below /opt/coolstack/lib first.This file assumes a certain name and location for the apache configuration and pid file. Edit it if you are not using the default settings from Cool Stack.
#!/sbin/sh
#
# Copyright 2004-2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "@(#)http-apache2 1.2 04/11/11 SMI"
# Modified for apache in CSKamp package of Cool Stack
# This file should reside in /opt/coolstack/lib/svc/method
. /lib/svc/share/smf_include.sh
APACHE_HOME=/opt/coolstack/apache2
CONF_FILE=$APACHE_HOME/conf/httpd.conf
PIDFILE=$APACHE_HOME/logs/httpd.pid
[ ! -f ${CONF_FILE} ] && exit $SMF_EXIT_ERR_CONFIG
case "$1" in
start)
/bin/rm -f ${PIDFILE}
cmd="start"
;;
refresh)
cmd="graceful"
;;
stop)
cmd="stop"
;;
*)
echo "Usage: $0 {start|stop|refresh}"
exit 1
;;
esac
exec ${APACHE_HOME}/bin/apachectl $cmd 2>&1
Change file ownership
Since we want to start apache as user webservd (not root), we need to ensure that this user can write to the log directory and the pid file. All these files reside in /opt/coolstack/apache2/logs by default.
# cd /opt/coolstack/apache2
# chown -R webservd logs
# chgrp -R webservd logs
Disable the Solaris http service
We do not want our service to conflict with the apache2 service that ships with Solaris. Note that by default, this service is disabled. You can check if it is enabled as follows :
# svcs |grep http
If no output is printed, then it is disabled. If you see something like :
maintenance 11:47:11 svc:/network/http:apache2
or
online 11:47:11 svc:/network/http:apache2
then, the service is up. Disable the service as follows :
# svcadm -v disable http
svc:/network/http:apache2 disabled.
Start the csk-http service
Import the new service config as follows :
# svccfg -v import /var/svc/manifest/network/cskapache2.xml
We are now ready to start our service. Start it as follows :
# svcadm -v enable csk-http
If the service starts successfully, you should see httpd processes running. A log of the service startup will be in /var/svc/log/network-csk-http:CSKapache2.log file. You can also get more detailed information for troubleshooting startup failures from the command svcs -x. More information on SMF can be found at http://www.sun.com/bigadmin/content/selfheal/smf-quickstart.html

Posted by Christian Probst on April 20, 2007 at 10:45 PM PDT #
Posted by kyu on April 21, 2007 at 02:46 PM PDT #
Posted by Shanti Subramanyam on April 23, 2007 at 08:16 AM PDT #
Posted by Roberto on June 27, 2007 at 11:47 PM PDT #
I repeate it to make it clear::
the service refuses to go online and goes in maintanance mode
I was able to send it online removing the :
---
<code> <method_context> <method_credential user='webservd' group='webservd' privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr' /> </method_context> </code>
---
part.
..yes
I applied the commands:
# cd /opt/coolstack/apache2
# chown -R webservd logs
# chgrp -R webservd logs
to the log folder.
Posted by 217.133.73.119 on June 27, 2007 at 11:52 PM PDT #
Posted by Jamie on July 02, 2007 at 05:00 AM PDT #
Posted by Jamie on July 02, 2007 at 05:24 AM PDT #
Posted by Spiff on August 01, 2007 at 03:58 AM PDT #