Hi,

Few of our web stack components, in their manifest file, define the service name
as "network/httpd" and component name as the instance name.
e.g.,
   Squid's manifest file looks like this.
       <service
        name='network/http'
        ....
         <instance name='sun-squid' enabled='false'>
         ....
       </service>


   Lighttpd's looks like this:
       <service
        name='network/http'
        ....
         <instance name='sun-lighttpd14' enabled='false'>
        ....
        </service>


   Apache has:
       <service
        name='network/http'
        ....
         <instance name='sun-apache22' enabled='false'>
        ....
        </service>


All these components have a common service name.  The issue with the common 
service name is that r.manifest deletes the instance and the service during 
pkgrm of any one of the above listed packages. And because of that, after the 
pkgrm, one cannot start/stop other services which have the same service name.

-------- Snippet of r.manifest ------
while read mfst; do
        if [ "$smf_alive" = "yes" ]; then
                ENTITIES=`$SVCCFG inventory $mfst`

                for fmri in $ENTITIES; do

                        # Determine whether fmri refers to an instance or a 
service.
                        $SVCPROP -p restarter/state $fmri >/dev/null 2>&1
                        if [ $? -eq 1 ]; then
                                # this is a service fmri, all instances have 
been deleted
                                $SVCCFG delete $fmri 2>/dev/null
                                # process next instance
                                continue
                        fi

                        #
                        # Try to disable the instance within a reasonable 
amount of time
                        # (eg. 60 secs). If it fails, forcibly delete the 
instance.
                        #
                        echo "Waiting up to $STOP_DELAY seconds for $fmri to 
stop..."
                        $SVCADM disable $fmri 2>/dev/null
                        if [ $? -eq 0 ]; then
                                wait_disable $fmri $STOP_DELAY
                                if [ $? -eq 0 ]; then
                                        # the instance is disabled and can be 
safely deleted
                                        $SVCCFG delete $fmri 2>/dev/null
                                        # process next instance
                                        continue
                                fi
                                echo "Failed to disable $fmri after $STOP_DELAY 
seconds"
                        else
                                echo "Failed to disable $fmri"
                        fi

                        echo "Force deleting $fmri"

                        ctid=`$SVCPROP -p restarter/contract $fmri 2>/dev/null`
                        tctid=`$SVCPROP -p restarter/transient_contract $fmri 
2>/dev/null`

                        $SVCCFG delete -f $fmri

 ....
....
----------

How do I fix this issue ? 
Should I change the service name within the manifest file to a unique value ( 
with the instance name as "default" ) or  modify the r.manifest class action 
script to delete only the instances and not the service ?


Thanks,
Seema.
-- 
This message posted from opensolaris.org

Reply via email to