VirtualBox

source: vbox/trunk/src/VBox/Installer/solaris/checkinstall.sh@ 98278

Last change on this file since 98278 was 98103, checked in by vboxsync, 2 years ago

Copyright year updates by scm.

  • Property svn:eol-style set to LF
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 8.3 KB
Line 
1#!/bin/sh
2# $Id: checkinstall.sh 98103 2023-01-17 14:15:46Z vboxsync $
3## @file
4#
5# VirtualBox checkinstall script for Solaris.
6#
7
8#
9# Copyright (C) 2009-2023 Oracle and/or its affiliates.
10#
11# This file is part of VirtualBox base platform packages, as
12# available from https://www.virtualbox.org.
13#
14# This program is free software; you can redistribute it and/or
15# modify it under the terms of the GNU General Public License
16# as published by the Free Software Foundation, in version 3 of the
17# License.
18#
19# This program is distributed in the hope that it will be useful, but
20# WITHOUT ANY WARRANTY; without even the implied warranty of
21# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22# General Public License for more details.
23#
24# You should have received a copy of the GNU General Public License
25# along with this program; if not, see <https://www.gnu.org/licenses>.
26#
27# SPDX-License-Identifier: GPL-3.0-only
28#
29
30infoprint()
31{
32 echo 1>&2 "$1"
33}
34
35errorprint()
36{
37 echo 1>&2 "## $1"
38}
39
40abort_error()
41{
42 errorprint "Please close all VirtualBox processes and re-run this installer."
43 exit 1
44}
45
46checkdep_ips()
47{
48 if test -z "$1"; then
49 errorprint "Missing argument to checkdep_ips"
50 return 1
51 fi
52 # using "list" without "-a" only lists installed pkgs which is what we need
53 $BIN_PKG $BASEDIR_OPT list "$1" >/dev/null 2>&1
54 if test "$?" -eq 0; then
55 return 0
56 fi
57 PKG_MISSING_IPS="$PKG_MISSING_IPS $1"
58 return 1
59}
60
61checkdep_ips_either()
62{
63 if test -z "$1" || test -z "$2"; then
64 errorprint "Missing argument to checkdep_ips_either"
65 return 1
66 fi
67 # using "list" without "-a" only lists installed pkgs which is what we need
68 $BIN_PKG $BASEDIR_OPT list "$1" >/dev/null 2>&1
69 if test "$?" -eq 0; then
70 return 0
71 fi
72 $BIN_PKG $BASEDIR_OPT list "$2" >/dev/null 2>&1
73 if test "$?" -eq 0; then
74 return 0
75 fi
76 PKG_MISSING_IPS="$PKG_MISSING_IPS $1 or $2"
77 return 1
78}
79
80disable_service()
81{
82 if test -z "$1" || test -z "$2"; then
83 errorprint "Missing argument to disable_service"
84 return 1
85 fi
86 servicefound=`$BIN_SVCS -H "$1" 2> /dev/null | grep '^online'`
87 if test ! -z "$servicefound"; then
88 infoprint "$2 ($1) is still enabled. Disabling..."
89 $BIN_SVCADM disable -s "$1"
90 # Don't delete the service, handled by manifest class action
91 # /usr/sbin/svccfg delete $1
92 fi
93}
94
95# find_bin_path()
96# !! failure is always fatal
97find_bin_path()
98{
99 if test -z "$1"; then
100 errorprint "missing argument to find_bin_path()"
101 exit 1
102 fi
103
104 binfilename=`basename $1`
105 binfilepath=`which $binfilename 2> /dev/null`
106 if test -x "$binfilepath"; then
107 echo "$binfilepath"
108 return 0
109 else
110 errorprint "$1 missing or is not an executable"
111 exit 1
112 fi
113}
114
115# find_bins()
116# !! failure is always fatal
117find_mandatory_bins()
118{
119 # Search only for binaries that might be in different locations
120 if test ! -x "$BIN_SVCS"; then
121 BIN_SVCS=`find_bin_path "$BIN_SVCS"`
122 fi
123
124 if test ! -x "$BIN_SVCADM"; then
125 BIN_SVCADM=`find_bin_path "$BIN_SVCADM"`
126 fi
127}
128
129
130#
131# Begin execution
132#
133
134# Nothing to check for remote install
135REMOTE_INST=0
136if test "x${PKG_INSTALL_ROOT:=/}" != "x/"; then
137 BASEDIR_OPT="-R $PKG_INSTALL_ROOT"
138 REMOTE_INST=1
139fi
140
141# Nothing to check for non-global zones
142currentzone=`zonename`
143if test "x$currentzone" != "xglobal"; then
144 exit 0
145fi
146
147PKG_MISSING_IPS=""
148BIN_PKG=/usr/bin/pkg
149BIN_SVCS=/usr/bin/svcs
150BIN_SVCADM=/usr/sbin/svcadm
151
152# Check non-optional binaries
153find_mandatory_bins
154
155infoprint "Checking package dependencies..."
156
157if test -x "$BIN_PKG"; then
158 checkdep_ips "system/library/iconv/iconv-core"
159 checkdep_ips "x11/library/libice"
160 checkdep_ips "x11/library/libsm"
161 checkdep_ips "x11/library/libx11"
162 checkdep_ips "x11/library/libxcb"
163 checkdep_ips "x11/library/libxext"
164 checkdep_ips "x11/library/libxfixes"
165 checkdep_ips "x11/library/libxkbcommon"
166 checkdep_ips "x11/library/libxrender"
167 checkdep_ips "x11/library/mesa"
168 checkdep_ips "x11/library/toolkit/libxt"
169 checkdep_ips "x11/library/xcb-util"
170 checkdep_ips_either "runtime/python-26" "runtime/python-27" "runtime/python-35" "runtime/python-36" "runtime/python-37" "runtime/python-38" "runtime/python-39"
171 checkdep_ips_either "system/library/gcc/gcc-c++-runtime" "system/library/gcc/gcc-c++-runtime-9"
172 checkdep_ips_either "system/library/gcc/gcc-c-runtime" "system/library/gcc/gcc-c-runtime-9"
173else
174 PKG_MISSING_IPS="runtime/python-37 system/library/iconv/iconv-core system/library/gcc/gcc-c++-runtime-9 system/library/gcc/gcc-c-runtime-9"
175fi
176
177if test "x$PKG_MISSING_IPS" != "x"; then
178 if test ! -x "$BIN_PKG"; then
179 errorprint "Missing or non-executable binary: pkg ($BIN_PKG)."
180 errorprint "Cannot check for dependencies."
181 errorprint ""
182 errorprint "Please install one of the required packaging system."
183 exit 1
184 fi
185 errorprint "Missing packages: $PKG_MISSING_IPS"
186 errorprint ""
187 errorprint "Please install these packages before installing VirtualBox."
188 exit 1
189else
190 infoprint "Done."
191fi
192
193# Nothing more to do for remote installs
194if test "$REMOTE_INST" -eq 1; then
195 exit 0
196fi
197
198# Check & disable running services
199disable_service "svc:/application/virtualbox/zoneaccess" "VirtualBox zone access service"
200disable_service "svc:/application/virtualbox/webservice" "VirtualBox web service"
201disable_service "svc:/application/virtualbox/autostart" "VirtualBox auto-start service"
202disable_service "svc:/application/virtualbox/balloonctrl" "VirtualBox balloon-control service"
203
204# Check if VBoxSVC is currently running
205VBOXSVC_PID=`ps -eo pid,fname | grep VBoxSVC | grep -v grep | awk '{ print $1 }'`
206if test ! -z "$VBOXSVC_PID" && test "$VBOXSVC_PID" -ge 0; then
207 errorprint "VirtualBox's VBoxSVC (pid $VBOXSVC_PID) still appears to be running."
208 abort_error
209fi
210
211# Check if VBoxNetDHCP is currently running
212VBOXNETDHCP_PID=`ps -eo pid,fname | grep VBoxNetDHCP | grep -v grep | awk '{ print $1 }'`
213if test ! -z "$VBOXNETDHCP_PID" && test "$VBOXNETDHCP_PID" -ge 0; then
214 errorprint "VirtualBox's VBoxNetDHCP (pid $VBOXNETDHCP_PID) still appears to be running."
215 abort_error
216fi
217
218# Check if VBoxNetNAT is currently running
219VBOXNETNAT_PID=`ps -eo pid,fname | grep VBoxNetNAT | grep -v grep | awk '{ print $1 }'`
220if test ! -z "$VBOXNETNAT_PID" && test "$VBOXNETNAT_PID" -ge 0; then
221 errorprint "VirtualBox's VBoxNetNAT (pid $VBOXNETNAT_PID) still appears to be running."
222 abort_error
223fi
224
225# Check if vboxnet is still plumbed, if so try unplumb it
226BIN_IFCONFIG=`which ifconfig 2> /dev/null`
227if test -x "$BIN_IFCONFIG"; then
228 vboxnetup=`$BIN_IFCONFIG vboxnet0 >/dev/null 2>&1`
229 if test "$?" -eq 0; then
230 infoprint "VirtualBox NetAdapter is still plumbed"
231 infoprint "Trying to remove old NetAdapter..."
232 $BIN_IFCONFIG vboxnet0 unplumb
233 if test "$?" -ne 0; then
234 errorprint "VirtualBox NetAdapter 'vboxnet0' couldn't be unplumbed (probably in use)."
235 abort_error
236 fi
237 fi
238 vboxnetup=`$BIN_IFCONFIG vboxnet0 inet6 >/dev/null 2>&1`
239 if test "$?" -eq 0; then
240 infoprint "VirtualBox NetAdapter (Ipv6) is still plumbed"
241 infoprint "Trying to remove old NetAdapter..."
242 $BIN_IFCONFIG vboxnet0 inet6 unplumb
243 if test "$?" -ne 0; then
244 errorprint "VirtualBox NetAdapter 'vboxnet0' IPv6 couldn't be unplumbed (probably in use)."
245 abort_error
246 fi
247 fi
248fi
249
250# Make sure that SMF has finished removing any services left over from a
251# previous installation which may interfere with installing new ones.
252# This is only relevant on Solaris 11 for SysV packages.
253#
254# See BugDB 14838646 for the original problem and @bugref{7866} for
255# follow up fixes.
256for i in 1 2 3 4 5 6 7 8 9 10; do
257 $BIN_SVCS -H "svc:/application/virtualbox/autostart" >/dev/null 2>&1 ||
258 $BIN_SVCS -H "svc:/application/virtualbox/webservice" >/dev/null 2>&1 ||
259 $BIN_SVCS -H "svc:/application/virtualbox/zoneaccess" >/dev/null 2>&1 ||
260 $BIN_SVCS -H "svc:/application/virtualbox/balloonctrl" >/dev/null 2>&1 || break
261 if test "${i}" = "1"; then
262 printf "Waiting for services from previous installation to be removed."
263 elif test "${i}" = "10"; then
264 printf "\nWarning!!! Some service(s) still appears to be present"
265 else
266 printf "."
267 fi
268 sleep 1
269done
270test "${i}" = "1" || printf "\n"
271
272exit 0
273
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette