VirtualBox

source: vbox/trunk/src/VBox/Installer/linux/install.sh@ 36700

Last change on this file since 36700 was 36700, checked in by vboxsync, 13 years ago

Installer/linux: include VBoxBalloonCtrl and the associated service

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Author Date Id Revision
File size: 19.7 KB
Line 
1#!/bin/sh
2#
3# Oracle VM VirtualBox
4# VirtualBox linux installation script
5
6#
7# Copyright (C) 2007-2011 Oracle Corporation
8#
9# This file is part of VirtualBox Open Source Edition (OSE), as
10# available from http://www.virtualbox.org. This file is free software;
11# you can redistribute it and/or modify it under the terms of the GNU
12# General Public License (GPL) as published by the Free Software
13# Foundation, in version 2 as it comes in the "COPYING" file of the
14# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16#
17
18PATH=$PATH:/bin:/sbin:/usr/sbin
19
20# Source functions needed by the installer
21. ./routines.sh
22
23LOG="/var/log/vbox-install.log"
24VERSION="_VERSION_"
25SVNREV="_SVNREV_"
26BUILD="_BUILD_"
27ARCH="_ARCH_"
28HARDENED="_HARDENED_"
29CONFIG_DIR="/etc/vbox"
30CONFIG="vbox.cfg"
31CONFIG_FILES="filelist"
32DEFAULT_FILES=`pwd`/deffiles
33GROUPNAME="vboxusers"
34INSTALLATION_DIR="/opt/VirtualBox"
35LICENSE_ACCEPTED=""
36PREV_INSTALLATION=""
37PYTHON="_PYTHON_"
38ACTION=""
39SELF=$1
40DKMS=`which dkms 2> /dev/null`
41RC_SCRIPT=0
42if [ -n "$HARDENED" ]; then
43 VBOXDRV_MODE=0600
44 VBOXDRV_GRP="root"
45else
46 VBOXDRV_MODE=0660
47 VBOXDRV_GRP=$GROUPNAME
48fi
49VBOXUSB_MODE=0664
50VBOXUSB_GRP=$GROUPNAME
51
52
53##############################################################################
54# Helper routines #
55##############################################################################
56
57usage() {
58 info ""
59 info "Usage: install | uninstall"
60 info ""
61 info "Example:"
62 info "$SELF install"
63 exit 1
64}
65
66module_loaded() {
67 lsmod | grep -q "vboxdrv[^_-]"
68}
69
70# This routine makes sure that there is no previous installation of
71# VirtualBox other than one installed using this install script or a
72# compatible method. We do this by checking for any of the VirtualBox
73# applications in /usr/bin. If these exist and are not symlinks into
74# the installation directory, then we assume that they are from an
75# incompatible previous installation.
76
77## Helper routine: test for a particular VirtualBox binary and see if it
78## is a link into a previous installation directory
79##
80## Arguments: 1) the binary to search for and
81## 2) the installation directory (if any)
82## Returns: false if an incompatible version was detected, true otherwise
83check_binary() {
84 binary=$1
85 install_dir=$2
86 test ! -e $binary 2>&1 > /dev/null ||
87 ( test -n "$install_dir" &&
88 readlink $binary 2>/dev/null | grep "$install_dir" > /dev/null
89 )
90}
91
92## Main routine
93##
94## Argument: the directory where the previous installation should be
95## located. If this is empty, then we will assume that any
96## installation of VirtualBox found is incompatible with this one.
97## Returns: false if an incompatible installation was found, true otherwise
98check_previous() {
99 install_dir=$1
100 # These should all be symlinks into the installation folder
101 check_binary "/usr/bin/VirtualBox" "$install_dir" &&
102 check_binary "/usr/bin/VBoxManage" "$install_dir" &&
103 check_binary "/usr/bin/VBoxSDL" "$install_dir" &&
104 check_binary "/usr/bin/VBoxVRDP" "$install_dir" &&
105 check_binary "/usr/bin/VBoxHeadless" "$install_dir" &&
106 check_binary "/usr/bin/VBoxBalloonCtrl" "$install_dir" &&
107 check_binary "/usr/bin/vboxwebsrv" "$install_dir"
108}
109
110##############################################################################
111# Main script #
112##############################################################################
113
114info "VirtualBox Version $VERSION r$SVNREV ($BUILD) installer"
115
116
117# Make sure that we were invoked as root...
118check_root
119
120# Set up logging before anything else
121create_log $LOG
122
123# Now stop the ballon control service otherwise it will keep VBoxSVC running
124stop_init_script vboxballoonctrl-service
125
126# Now stop the web service otherwise it will keep VBoxSVC running
127stop_init_script vboxweb-service
128
129# Now check if no VBoxSVC daemon is running
130check_running
131
132log "VirtualBox $VERSION r$SVNREV installer, built $BUILD."
133log ""
134log "Testing system setup..."
135
136# Sanity check: figure out whether build arch matches uname arch
137cpu=`uname -m`;
138case "$cpu" in
139 i[3456789]86|x86)
140 cpu="x86"
141 ;;
142 x86_64)
143 cpu="amd64"
144 ;;
145esac
146if [ "$cpu" != "$ARCH" ]; then
147 info "Detected unsupported $cpu environment."
148 log "Detected unsupported $cpu environment."
149 exit 1
150fi
151
152# Check that the system is setup correctly for the installation
153have_bzip2="`check_bzip2; echo $?`" # Do we have bzip2?
154have_gmake="`check_gmake; echo $?`" # Do we have GNU make?
155have_ksource="`check_ksource; echo $?`" # Can we find the kernel source?
156have_gcc="`check_gcc; echo $?`" # Is GCC installed?
157
158if [ $have_bzip2 -eq 1 -o $have_gmake -eq 1 -o $have_ksource -eq 1 \
159 -o $have_gcc -eq 1 ]; then
160 info "Problems were found which would prevent VirtualBox from installing."
161 info "Please correct these problems and try again."
162 log "Giving up due to the problems mentioned above."
163 exit 1
164else
165 log "System setup appears correct."
166 log ""
167fi
168
169# Sensible default actions
170ACTION="install"
171BUILD_MODULE="true"
172while true
173do
174 if [ "$2" = "" ]; then
175 break
176 fi
177 shift
178 case "$1" in
179 install)
180 ACTION="install"
181 ;;
182
183 uninstall)
184 ACTION="uninstall"
185 ;;
186
187 force)
188 FORCE_UPGRADE=1
189 ;;
190 license_accepted_unconditionally)
191 # Legacy option
192 ;;
193 no_module)
194 BUILD_MODULE=""
195 ;;
196 *)
197 if [ "$ACTION" = "" ]; then
198 info "Unknown command '$1'."
199 usage
200 fi
201 info "Specifying an installation path is not allowed -- using /opt/VirtualBox!"
202 ;;
203 esac
204done
205
206if [ "$ACTION" = "install" ]; then
207 # Find previous installation
208 if [ ! -r $CONFIG_DIR/$CONFIG ]; then
209 mkdir -p -m 755 $CONFIG_DIR
210 touch $CONFIG_DIR/$CONFIG
211 else
212 . $CONFIG_DIR/$CONFIG
213 PREV_INSTALLATION=$INSTALL_DIR
214 fi
215 if ! check_previous $INSTALL_DIR
216 then
217 info
218 info "You appear to have a version of VirtualBox on your system which was installed"
219 info "from a different source or using a different type of installer (or a damaged"
220 info "installation of VirtualBox). We strongly recommend that you remove it before"
221 info "installing this version of VirtualBox."
222 info
223 info "Do you wish to continue anyway? [yes or no]"
224 read reply dummy
225 if ! expr "$reply" : [yY] && ! expr "$reply" : [yY][eE][sS]
226 then
227 info
228 info "Cancelling installation."
229 log "User requested cancellation of the installation"
230 exit 1
231 fi
232 fi
233
234 # Terminate Server and VBoxNetDHCP if running
235 terminate_proc VBoxSVC
236 terminate_proc VBoxNetDHCP
237
238 # Remove previous installation
239 if [ -n "$PREV_INSTALLATION" -a -z "$FORCE_UPGRADE" -a ! "$VERSION" = "$INSTALL_VER" ] &&
240 expr "$INSTALL_VER" "<" "1.6.0" > /dev/null 2>&1
241 then
242 info
243 info "If you are upgrading from VirtualBox 1.5 or older and if some of your virtual"
244 info "machines have saved states, then the saved state information will be lost"
245 info "after the upgrade and will have to be discarded. If you do not want this then"
246 info "you can cancel the upgrade now."
247 info
248 info "Do you wish to continue? [yes or no]"
249 read reply dummy
250 if ! expr "$reply" : [yY] && ! expr "$reply" : [yY][eE][sS]
251 then
252 info
253 info "Cancelling upgrade."
254 log "User requested cancellation of the installation"
255 exit 1
256 fi
257 fi
258
259 if [ ! "$VERSION" = "$INSTALL_VER" -a ! "$BUILD_MODULE" = "true" -a -n "$DKMS" ]
260 then
261 # Not doing this can confuse dkms
262 info "Rebuilding the kernel module after version change"
263 BUILD_MODULE=true
264 fi
265
266 if [ -n "$PREV_INSTALLATION" ]; then
267 [ -n "$INSTALL_REV" ] && INSTALL_REV=" r$INSTALL_REV"
268 info "Removing previous installation of VirtualBox $INSTALL_VER$INSTALL_REV from $PREV_INSTALLATION"
269 log "Removing previous installation of VirtualBox $INSTALL_VER$INSTALL_REV from $PREV_INSTALLATION"
270 log ""
271
272 stop_init_script vboxnet
273 delrunlevel vboxnet > /dev/null 2>&1
274 if [ "$BUILD_MODULE" = "true" ]; then
275 stop_init_script vboxdrv
276 if [ -n "$DKMS" ]
277 then
278 $DKMS remove -m vboxhost -v $INSTALL_VER --all > /dev/null 2>&1
279 $DKMS remove -m vboxdrv -v $INSTALL_VER --all > /dev/null 2>&1
280 $DKMS remove -m vboxnetflt -v $INSTALL_VER --all > /dev/null 2>&1
281 $DKMS remove -m vboxnetadp -v $INSTALL_VER --all > /dev/null 2>&1
282 fi
283 # OSE doesn't always have the initscript
284 rmmod vboxnetadp > /dev/null 2>&1
285 rmmod vboxnetflt > /dev/null 2>&1
286 rmmod vboxdrv > /dev/null 2>&1
287
288 module_loaded && {
289 info "Warning: could not stop VirtualBox kernel module."
290 info "Please restart your system to apply changes."
291 log "Unable to remove the old VirtualBox kernel module."
292 log " An old version of VirtualBox may be running."
293 }
294 else
295 VBOX_DONT_REMOVE_OLD_MODULES=1
296 fi
297
298 VBOX_NO_UNINSTALL_MESSAGE=1
299 . ./uninstall.sh
300
301 fi
302
303 info "Installing VirtualBox to $INSTALLATION_DIR"
304 log "Installing VirtualBox to $INSTALLATION_DIR"
305 log ""
306
307 # Verify the archive
308 mkdir -p -m 755 $INSTALLATION_DIR
309 bzip2 -d -c VirtualBox.tar.bz2 | tar -tf - > $CONFIG_DIR/$CONFIG_FILES
310 RETVAL=$?
311 if [ $RETVAL != 0 ]; then
312 rmdir $INSTALLATION_DIR 2> /dev/null
313 rm -f $CONFIG_DIR/$CONFIG 2> /dev/null
314 rm -f $CONFIG_DIR/$CONFIG_FILES 2> /dev/null
315 log 'Error running "bzip2 -d -c VirtualBox.tar.bz2 | tar -tf - > '"$CONFIG_DIR/$CONFIG_FILES"'".'
316 abort "Error installing VirtualBox. Installation aborted"
317 fi
318
319 # Create installation directory and install
320 bzip2 -d -c VirtualBox.tar.bz2 | tar -xf - -C $INSTALLATION_DIR
321 RETVAL=$?
322 if [ $RETVAL != 0 ]; then
323 cwd=`pwd`
324 cd $INSTALLATION_DIR
325 rm -f `cat $CONFIG_DIR/$CONFIG_FILES` 2> /dev/null
326 cd $pwd
327 rmdir $INSTALLATION_DIR 2> /dev/null
328 rm -f $CONFIG_DIR/$CONFIG 2> /dev/null
329 log 'Error running "bzip2 -d -c VirtualBox.tar.bz2 | tar -xf - -C '"$INSTALLATION_DIR"'".'
330 abort "Error installing VirtualBox. Installation aborted"
331 fi
332
333 cp uninstall.sh routines.sh $INSTALLATION_DIR
334 echo "routines.sh" >> $CONFIG_DIR/$CONFIG_FILES
335 echo "uninstall.sh" >> $CONFIG_DIR/$CONFIG_FILES
336
337 # XXX SELinux: allow text relocation entries
338 if [ -x /usr/bin/chcon ]; then
339 chcon -t texrel_shlib_t $INSTALLATION_DIR/VBox* > /dev/null 2>&1
340 chcon -t texrel_shlib_t $INSTALLATION_DIR/VBoxAuth.so > /dev/null 2>&1
341 chcon -t texrel_shlib_t $INSTALLATION_DIR/VirtualBox.so > /dev/null 2>&1
342 chcon -t texrel_shlib_t $INSTALLATION_DIR/components/VBox*.so > /dev/null 2>&1
343 chcon -t java_exec_t $INSTALLATION_DIR/VirtualBox > /dev/null 2>&1
344 chcon -t java_exec_t $INSTALLATION_DIR/VBoxSDL > /dev/null 2>&1
345 chcon -t java_exec_t $INSTALLATION_DIR/VBoxHeadless > /dev/null 2>&1
346 chcon -t java_exec_t $INSTALLATION_DIR/VBoxNetDHCP > /dev/null 2>&1
347 chcon -t java_exec_t $INSTALLATION_DIR/VBoxExtPackHelperApp > /dev/null 2>&1
348 chcon -t java_exec_t $INSTALLATION_DIR/vboxwebsrv > /dev/null 2>&1
349 chcon -t java_exec_t $INSTALLATION_DIR/webtest > /dev/null 2>&1
350 fi
351
352 # Hardened build: Mark selected binaries set-user-ID-on-execution,
353 # create symlinks for working around unsupported $ORIGIN/.. in VBoxC.so (setuid),
354 # and finally make sure the directory is only writable by the user (paranoid).
355 if [ -n "$HARDENED" ]; then
356 test -e $INSTALLATION_DIR/VirtualBox && chmod 4511 $INSTALLATION_DIR/VirtualBox
357 test -e $INSTALLATION_DIR/VBoxSDL && chmod 4511 $INSTALLATION_DIR/VBoxSDL
358 test -e $INSTALLATION_DIR/VBoxHeadless && chmod 4511 $INSTALLATION_DIR/VBoxHeadless
359 test -e $INSTALLATION_DIR/VBoxNetDHCP && chmod 4511 $INSTALLATION_DIR/VBoxNetDHCP
360
361 ln -sf $INSTALLATION_DIR/VBoxVMM.so $INSTALLATION_DIR/components/VBoxVMM.so
362 ln -sf $INSTALLATION_DIR/VBoxREM.so $INSTALLATION_DIR/components/VBoxREM.so
363 ln -sf $INSTALLATION_DIR/VBoxRT.so $INSTALLATION_DIR/components/VBoxRT.so
364 ln -sf $INSTALLATION_DIR/VBoxDDU.so $INSTALLATION_DIR/components/VBoxDDU.so
365 ln -sf $INSTALLATION_DIR/VBoxXPCOM.so $INSTALLATION_DIR/components/VBoxXPCOM.so
366
367 chmod go-w $INSTALLATION_DIR
368 fi
369
370 # This binary needs to be suid root in any case, even if not hardened
371 test -e $INSTALLATION_DIR/VBoxNetAdpCtl && chmod 4511 $INSTALLATION_DIR/VBoxNetAdpCtl
372
373 # Install runlevel scripts
374 install_init_script vboxdrv.sh vboxdrv
375 install_init_script vboxballoonctrl-service.sh vboxballoonctrl-service
376 install_init_script vboxweb-service.sh vboxweb-service
377 delrunlevel vboxdrv > /dev/null 2>&1
378 addrunlevel vboxdrv 20 80 # This may produce useful output
379 delrunlevel vboxballoonctrl-service > /dev/null 2>&1
380 addrunlevel vboxballoonctrl-service 25 75 # This may produce useful output
381 delrunlevel vboxweb-service > /dev/null 2>&1
382 addrunlevel vboxweb-service 25 75 # This may produce useful output
383
384 # Create users group
385 groupadd $GROUPNAME 2> /dev/null
386
387 # Create symlinks to start binaries
388 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VirtualBox
389 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxManage
390 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxSDL
391 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxVRDP
392 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxHeadless
393 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxBalloonCtrl
394 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/vboxwebsrv
395 ln -sf $INSTALLATION_DIR/VBox.png /usr/share/pixmaps/VBox.png
396 ln -sf $INSTALLATION_DIR/virtualbox.desktop /usr/share/applications/virtualbox.desktop
397 ln -sf $INSTALLATION_DIR/virtualbox.xml /usr/share/mime/packages/virtualbox.xml
398 ln -sf $INSTALLATION_DIR/rdesktop-vrdp /usr/bin/rdesktop-vrdp
399 ln -sf $INSTALLATION_DIR/src/vboxhost /usr/src/vboxhost-_VERSION_
400
401 # Convenience symlinks. The creation fails if the FS is not case sensitive
402 ln -sf VirtualBox /usr/bin/virtualbox > /dev/null 2>&1
403 ln -sf VBoxManage /usr/bin/vboxmanage > /dev/null 2>&1
404 ln -sf VBoxSDL /usr/bin/vboxsdl > /dev/null 2>&1
405 ln -sf VBoxHeadless /usr/bin/vboxheadless > /dev/null 2>&1
406
407 # Icons
408 cur=`pwd`
409 cd $INSTALLATION_DIR/icons
410 for i in *; do
411 cd $i
412 if [ -d /usr/share/icons/hicolor/$i ]; then
413 for j in *; do
414 if [ -d /usr/share/icons/hicolor/$i/mimetypes ]; then
415 ln -s $INSTALLATION_DIR/icons/$i/$j /usr/share/icons/hicolor/$i/mimetypes/$j
416 echo /usr/share/icons/hicolor/$i/mimetypes/$j >> $CONFIG_DIR/$CONFIG_FILES
417 fi
418 done
419 fi
420 cd -
421 done
422 cd $cur
423
424 # Update the MIME database
425 update-mime-database /usr/share/mime 2>/dev/null
426
427 # Update the desktop database
428 update-desktop-database -q 2>/dev/null
429
430 # If Python is available, install Python bindings
431 if [ -n "$PYTHON" ]; then
432 maybe_run_python_bindings_installer $INSTALLATION_DIR
433 fi
434
435 # Create udev description file
436 if [ -d /etc/udev/rules.d ]; then
437 udev_call=""
438 udev_app=`which udevadm 2> /dev/null`
439 if [ $? -eq 0 ]; then
440 udev_call="${udev_app} version 2> /dev/null"
441 else
442 udev_app=`which udevinfo 2> /dev/null`
443 if [ $? -eq 0 ]; then
444 udev_call="${udev_app} -V 2> /dev/null"
445 fi
446 fi
447 udev_fix="="
448 if [ "${udev_call}" != "" ]; then
449 udev_out=`${udev_call}`
450 udev_ver=`expr "$udev_out" : '[^0-9]*\([0-9]*\)'`
451 if [ "$udev_ver" = "" -o "$udev_ver" -lt 55 ]; then
452 udev_fix=""
453 fi
454 fi
455 # Write udev rules
456 echo "KERNEL=${udev_fix}\"vboxdrv\", NAME=\"vboxdrv\", OWNER=\"root\", GROUP=\"$VBOXDRV_GRP\", MODE=\"$VBOXDRV_MODE\"" \
457 > /etc/udev/rules.d/10-vboxdrv.rules
458 echo "SUBSYSTEM=${udev_fix}\"usb_device\", ACTION=${udev_fix}\"add\", RUN=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}\"" \
459 >> /etc/udev/rules.d/10-vboxdrv.rules
460 echo "SUBSYSTEM=${udev_fix}\"usb\", ACTION=${udev_fix}\"add\", ENV{DEVTYPE}==\"usb_device\", RUN=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}\"" \
461 >> /etc/udev/rules.d/10-vboxdrv.rules
462 echo "SUBSYSTEM=${udev_fix}\"usb_device\", ACTION=${udev_fix}\"remove\", RUN=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\"" \
463 >> /etc/udev/rules.d/10-vboxdrv.rules
464 echo "SUBSYSTEM=${udev_fix}\"usb\", ACTION=${udev_fix}\"remove\", ENV{DEVTYPE}==\"usb_device\", RUN=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\"" \
465 >> /etc/udev/rules.d/10-vboxdrv.rules
466 fi
467 # Remove old udev description file
468 if [ -f /etc/udev/rules.d/60-vboxdrv.rules ]; then
469 rm -f /etc/udev/rules.d/60-vboxdrv.rules 2> /dev/null
470 fi
471
472 # Build our device tree
473 for i in /sys/bus/usb/devices/*; do
474 if test -r "$i/dev"; then
475 dev="`cat "$i/dev" 2> /dev/null`"
476 major="`expr "$dev" : '\(.*\):' 2> /dev/null`"
477 minor="`expr "$dev" : '.*:\(.*\)' 2> /dev/null`"
478 class="`cat $i/bDeviceClass 2> /dev/null`"
479 sh "$INSTALLATION_DIR/VBoxCreateUSBNode.sh" "$major" "$minor" "$class" 2>/dev/null
480 fi
481 done
482
483 # Write the configuration. Do this before we call /etc/init.d/vboxdrv setup!
484 echo "# VirtualBox installation directory" > $CONFIG_DIR/$CONFIG
485 echo "INSTALL_DIR='$INSTALLATION_DIR'" >> $CONFIG_DIR/$CONFIG
486 echo "# VirtualBox version" >> $CONFIG_DIR/$CONFIG
487 echo "INSTALL_VER='$VERSION'" >> $CONFIG_DIR/$CONFIG
488 echo "INSTALL_REV='$SVNREV'" >> $CONFIG_DIR/$CONFIG
489
490 # Make kernel module
491 MODULE_FAILED="false"
492 if [ "$BUILD_MODULE" = "true" ]
493 then
494 info "Building the VirtualBox kernel modules"
495 log "Output from the module build process (the Linux kernel build system) follows:"
496 cur=`pwd`
497 log ""
498 setup_init_script vboxdrv
499 # Start VirtualBox kernel module
500 if [ $RETVAL -eq 0 ] && ! start_init_script vboxdrv; then
501 info "Failed to load the kernel module."
502 MODULE_FAILED="true"
503 RC_SCRIPT=1
504 fi
505 start_init_script vboxballoonctrl-service
506 start_init_script vboxweb-service
507 log ""
508 log "End of the output from the Linux kernel build system."
509 cd $cur
510 fi
511
512 info ""
513 if [ ! "$MODULE_FAILED" = "true" ]
514 then
515 info "VirtualBox has been installed successfully."
516 else
517 info "VirtualBox has been installed successfully, but the kernel module could not"
518 info "be built. When you have fixed the problems preventing this, execute"
519 info " /etc/init.d/vboxdrv setup"
520 info "as administrator to build it."
521 fi
522 info ""
523 info "You will find useful information about using VirtualBox in the user manual"
524 info " $INSTALLATION_DIR/UserManual.pdf"
525 info "and in the user FAQ"
526 info " http://www.virtualbox.org/wiki/User_FAQ"
527 info ""
528 info "We hope that you enjoy using VirtualBox."
529 info ""
530 log "Installation successful"
531elif [ "$ACTION" = "uninstall" ]; then
532 . ./uninstall.sh
533fi
534exit $RC_SCRIPT
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