smf-vboxwebsrv.sh revision dd0d37878d7689cf956055422a5d4f43972fdb44
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd#!/sbin/sh
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd# $Id$
fd9abdda70912b99b24e3bf1a38f26fde908a74cnd
fd9abdda70912b99b24e3bf1a38f26fde908a74cnd# Copyright (C) 2008 Sun Microsystems, Inc.
fd9abdda70912b99b24e3bf1a38f26fde908a74cnd#
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd# This file is part of VirtualBox Open Source Edition (OSE), as
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd# available from http://www.virtualbox.org. This file is free software;
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd# you can redistribute it and/or modify it under the terms of the GNU
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd# General Public License (GPL) as published by the Free Software
96ad5d81ee4a2cc66a4ae19893efc8aa6d06fae7jailletc# Foundation, in version 2 as it comes in the "COPYING" file of the
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen#
2e545ce2450a9953665f701bb05350f0d3f26275nd# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen# Clara, CA 95054 USA or visit http://www.sun.com if you need
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen# additional information or have any questions.
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd#
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd
af33a4994ae2ff15bc67d19ff1a7feb906745bf8rbowen#
3f08db06526d6901aa08c110b5bc7dde6bc39905nd# smf-vboxwebsrv method
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd#
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd# Argument is the method name (start, stop, ...)
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd
3f08db06526d6901aa08c110b5bc7dde6bc39905nd. /lib/svc/share/smf_include.sh
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd
a34d44ce259e68932a3db730a7cb0d3edde46860kessVW_OPT="$1"
a34d44ce259e68932a3db730a7cb0d3edde46860kessVW_EXIT=0
ecc5150d35c0dc5ee5119c2717e6660fa331abbftakashi
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7ndcase $VW_OPT in
fac8c35bfb158112226ab43ddf84d59daca5dc30nd start)
f086b4b402fa9a2fefc7dda85de2a3cc1cd0a654rjung if [ ! -x /opt/VirtualBox/vboxwebsrv ]; then
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd echo "ERROR: /opt/VirtualBox/vboxwebsrv does not exist."
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem return $SMF_EXIT_ERR_CONFIG
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem fi
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd if [ ! -f /opt/VirtualBox/vboxwebsrv ]; then
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd echo "ERROR: /opt/VirtualBox/vboxwebsrv does not exist."
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd return $SMF_EXIT_ERR_CONFIG
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd fi
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh # Get svc configuration
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd VW_USER=`/usr/bin/svcprop -p config/user $SMF_FMRI 2>/dev/null`
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd [ $? != 0 ] && VW_USER=
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd VW_HOST=`/usr/bin/svcprop -p config/host $SMF_FMRI 2>/dev/null`
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd [ $? != 0 ] && VW_HOST=
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak VW_PORT=`/usr/bin/svcprop -p config/port $SMF_FMRI 2>/dev/null`
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd [ $? != 0 ] && VW_PORT=
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak VW_TIMEOUT=`/usr/bin/svcprop -p config/timeout $SMF_FMRI 2>/dev/null`
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak [ $? != 0 ] && VW_TIMEOUT=
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd VW_CHECK_INTERVAL=`/usr/bin/svcprop -p config/checkinterval $SMF_FMRI 2>/dev/null`
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd [ $? != 0 ] && VW_CHECK_INTERVAL=
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd # Provide sensible defaults
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd [ -z "$VW_USER" ] && VW_USER=root
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd [ -z "$VW_HOST" ] && VW_HOST=localhost
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd [ -z "$VW_PORT" -o "$VW_PORT" -eq 0 ] && VW_PORT=18083
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd [ -z "$VW_TIMEOUT" ] && VW_TIMEOUT=20
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd [ -z "$VW_CHECK_INTERVAL" ] && VW_CHECK_INTERVAL=5
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd su - "$VW_USER" -c "/opt/VirtualBox/vboxwebsrv --background --host \"$VW_HOST\" --port \"$VW_PORT\" --timeout \"$VW_TIMEOUT\" --check-interval \"$VW_CHECK_INTERVAL\""
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak VW_EXIT=$?
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd if [ $VW_EXIT != 0 ]; then
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd echo "vboxwebsrv failed with $VW_EXIT."
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd VW_EXIT=1
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd fi
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd # Bump per-process semaphore limit of VBoxSVC
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd PRCTLBIN=`which prctl`
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd if test ! -f "$PRTCLBIN"; then
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd # Wait for VBoxSVC to spawn
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd TRIES=0
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd while test $TRIES -le 3; do
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd VBOXSVC_PID=`ps -eo pid,fname | grep VBoxSVC | grep -v grep | cut -f 1 -d " "`
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd if test $VBOXSVC_PID -ge 0; then
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd $PRCTLBIN -r -n project.max-sem-ids -v 1024 $VBOXSVC_PID
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd if test $? -eq 0; then
0a336dd9ddab495062363310a4a4d8a0fb69c495nd echo "Successfully bumped VBoxSVC (pid $VBOXSVC_PID) semaphore id limit to 1024."
0a336dd9ddab495062363310a4a4d8a0fb69c495nd else
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd echo "Failed to bump VBoxSVC (pid $VBOXSVC_PID) semaphore id limit."
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd fi
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd break
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd else
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd sleep 1
5383fa753e1bcd3a04ec34ba9810d671302380f2colm fi
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd TRIES=`expr $TRIES + 1`
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd done
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd if test $TRIES -eq 3; then
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd echo "Stopped waiting for VBoxSVC to spawn..."
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd echo "Failed to bump VBoxSVC process' semaphore id limit."
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd fi
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd else
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd echo "Failed to find prctl to bump VBoxSVC semaphore id limit."
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd echo "As a result, not more than 100 VMs can be started."
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd fi
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd ;;
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd stop)
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd # Kill service contract
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd smf_kill_contract $2 TERM 1
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd ;;
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd *)
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd VW_EXIT=$SMF_EXIT_ERR_CONFIG
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd ;;
71fccc298df6a1540d408151a26aa22beed55d0bndesac
71fccc298df6a1540d408151a26aa22beed55d0bnd
71fccc298df6a1540d408151a26aa22beed55d0bndexit $VW_EXIT
71fccc298df6a1540d408151a26aa22beed55d0bnd