VirtualBox

source: vbox/trunk/src/VBox/Installer/linux/vboxautostart-service.sh@ 96407

Last change on this file since 96407 was 96407, checked in by vboxsync, 21 months ago

scm copyright and license note update

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Author Date Id Revision
File size: 4.2 KB
Line 
1#!/bin/sh
2# $Id: vboxautostart-service.sh 96407 2022-08-22 17:43:14Z vboxsync $
3## @file
4# VirtualBox autostart service init script.
5#
6
7#
8# Copyright (C) 2012-2022 Oracle and/or its affiliates.
9#
10# This file is part of VirtualBox base platform packages, as
11# available from https://www.virtualbox.org.
12#
13# This program is free software; you can redistribute it and/or
14# modify it under the terms of the GNU General Public License
15# as published by the Free Software Foundation, in version 3 of the
16# License.
17#
18# This program is distributed in the hope that it will be useful, but
19# WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21# General Public License for more details.
22#
23# You should have received a copy of the GNU General Public License
24# along with this program; if not, see <https://www.gnu.org/licenses>.
25#
26# SPDX-License-Identifier: GPL-3.0-only
27#
28
29# chkconfig: 345 35 65
30# description: VirtualBox autostart service
31#
32### BEGIN INIT INFO
33# Provides: vboxautostart-service
34# Required-Start: vboxdrv
35# Required-Stop: vboxdrv
36# Default-Start: 2 3 4 5
37# Default-Stop: 0 1 6
38# Description: VirtualBox autostart service
39### END INIT INFO
40
41PATH=$PATH:/bin:/sbin:/usr/sbin
42SCRIPTNAME=vboxautostart-service.sh
43
44[ -f /etc/debian_release -a -f /lib/lsb/init-functions ] || NOLSB=yes
45[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg
46
47if [ -n "$INSTALL_DIR" ]; then
48 binary="$INSTALL_DIR/VBoxAutostart"
49else
50 binary="/usr/lib/virtualbox/VBoxAutostart"
51fi
52
53# silently exit if the package was uninstalled but not purged,
54# applies to Debian packages only (but shouldn't hurt elsewhere)
55[ ! -f /etc/debian_release -o -x $binary ] || exit 0
56
57[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
58
59# Preamble for Gentoo
60if [ "`which $0`" = "/sbin/rc" ]; then
61 shift
62fi
63
64begin_msg()
65{
66 test -n "${2}" && echo "${SCRIPTNAME}: ${1}."
67 logger -t "${SCRIPTNAME}" "${1}."
68}
69
70succ_msg()
71{
72 logger -t "${SCRIPTNAME}" "${1}."
73}
74
75fail_msg()
76{
77 echo "${SCRIPTNAME}: failed: ${1}." >&2
78 logger -t "${SCRIPTNAME}" "failed: ${1}."
79}
80
81start_daemon() {
82 usr="$1"
83 shift
84 su - $usr -c "$*"
85}
86
87if which start-stop-daemon >/dev/null 2>&1; then
88 start_daemon() {
89 usr="$1"
90 shift
91 bin="$1"
92 shift
93 start-stop-daemon --chuid $usr --start --exec $bin -- $@
94 }
95fi
96
97vboxdrvrunning() {
98 lsmod | grep -q "vboxdrv[^_-]"
99}
100
101valid_db_entry() {
102
103 entry="$1"
104 [ -z "$entry" ] && return 1
105
106 user="$2"
107 [ -z "$user" ] && return 1
108
109 user_name=$(id -n -u "$user" 2>/dev/null)
110 [ -z "$user_name" ] && return 1
111
112 user_id=$(id -u "$user" 2>/dev/null)
113
114 # Verify that @user identifies a user *by name* (i.e. not a numeric id).
115 # Careful, all numeric user names are legal.
116 if [ "$user_id" = "$user" ] && [ "$user_name" != "$user" ]; then
117 return 1
118 fi
119
120 # Verify whether file name is the same as file owner name.
121 [ -z "$(find "$entry" -user "$user" -type f 2>/dev/null)" ] && return 1
122
123 return 0
124}
125
126start() {
127 [ -z "$VBOXAUTOSTART_DB" ] && exit 0
128 [ -z "$VBOXAUTOSTART_CONFIG" ] && exit 0
129 begin_msg "Starting VirtualBox VMs configured for autostart" console;
130 vboxdrvrunning || {
131 fail_msg "VirtualBox kernel module not loaded!"
132 exit 0
133 }
134 PARAMS="--background --start --config $VBOXAUTOSTART_CONFIG"
135
136 # prevent inheriting this setting to VBoxSVC
137 unset VBOX_RELEASE_LOG_DEST
138
139 for entry in "$VBOXAUTOSTART_DB"/*.start
140 do
141 user=$(basename "$entry" .start)
142 [ "$user" = "*" ] && break
143 valid_db_entry "$entry" "$user" || continue
144
145 start_daemon "$user" "$binary" $PARAMS > /dev/null 2>&1
146 done
147
148 return $RETVAL
149}
150
151stop() {
152 [ -z "$VBOXAUTOSTART_DB" ] && exit 0
153 [ -z "$VBOXAUTOSTART_CONFIG" ] && exit 0
154
155 PARAMS="--stop --config $VBOXAUTOSTART_CONFIG"
156
157 # prevent inheriting this setting to VBoxSVC
158 unset VBOX_RELEASE_LOG_DEST
159
160 for entry in "$VBOXAUTOSTART_DB"/*.stop
161 do
162 user=$(basename "$entry" .stop)
163 [ "$user" = "*" ] && break
164 valid_db_entry "$entry" "$user" || continue
165
166 start_daemon "$user" "$binary" $PARAMS > /dev/null 2>&1
167 done
168
169 return $RETVAL
170}
171
172case "$1" in
173start)
174 start
175 ;;
176stop)
177 stop
178 ;;
179*)
180 echo "Usage: $0 {start|stop}"
181 exit 1
182esac
183
184exit $RETVAL
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use