VirtualBox

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

Last change on this file since 36919 was 36885, checked in by vboxsync, 14 years ago

Linux/installer: vboxpci adaptions

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Author Date Id Revision
File size: 20.0 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 vboxpci > /dev/null 2>&1
285 rmmod vboxnetadp > /dev/null 2>&1
286 rmmod vboxnetflt > /dev/null 2>&1
287 rmmod vboxdrv > /dev/null 2>&1
288
289 module_loaded && {
290 info "Warning: could not stop VirtualBox kernel module."
291 info "Please restart your system to apply changes."
292 log "Unable to remove the old VirtualBox kernel module."
293 log " An old version of VirtualBox may be running."
294 }
295 else
296 VBOX_DONT_REMOVE_OLD_MODULES=1
297 fi
298
299 VBOX_NO_UNINSTALL_MESSAGE=1
300 . ./uninstall.sh
301
302 fi
303
304 info "Installing VirtualBox to $INSTALLATION_DIR"
305 log "Installing VirtualBox to $INSTALLATION_DIR"
306 log ""
307
308 # Verify the archive
309 mkdir -p -m 755 $INSTALLATION_DIR
310 bzip2 -d -c VirtualBox.tar.bz2 | tar -tf - > $CONFIG_DIR/$CONFIG_FILES
311 RETVAL=$?
312 if [ $RETVAL != 0 ]; then
313 rmdir $INSTALLATION_DIR 2> /dev/null
314 rm -f $CONFIG_DIR/$CONFIG 2> /dev/null
315 rm -f $CONFIG_DIR/$CONFIG_FILES 2> /dev/null
316 log 'Error running "bzip2 -d -c VirtualBox.tar.bz2 | tar -tf - > '"$CONFIG_DIR/$CONFIG_FILES"'".'
317 abort "Error installing VirtualBox. Installation aborted"
318 fi
319
320 # Create installation directory and install
321 bzip2 -d -c VirtualBox.tar.bz2 | tar -xf - -C $INSTALLATION_DIR
322 RETVAL=$?
323 if [ $RETVAL != 0 ]; then
324 cwd=`pwd`
325 cd $INSTALLATION_DIR
326 rm -f `cat $CONFIG_DIR/$CONFIG_FILES` 2> /dev/null
327 cd $pwd
328 rmdir $INSTALLATION_DIR 2> /dev/null
329 rm -f $CONFIG_DIR/$CONFIG 2> /dev/null
330 log 'Error running "bzip2 -d -c VirtualBox.tar.bz2 | tar -xf - -C '"$INSTALLATION_DIR"'".'
331 abort "Error installing VirtualBox. Installation aborted"
332 fi
333
334 cp uninstall.sh routines.sh $INSTALLATION_DIR
335 echo "routines.sh" >> $CONFIG_DIR/$CONFIG_FILES
336 echo "uninstall.sh" >> $CONFIG_DIR/$CONFIG_FILES
337
338 # XXX SELinux: allow text relocation entries
339 if [ -x /usr/bin/chcon ]; then
340 chcon -t texrel_shlib_t $INSTALLATION_DIR/VBox* > /dev/null 2>&1
341 chcon -t texrel_shlib_t $INSTALLATION_DIR/VBoxAuth.so > /dev/null 2>&1
342 chcon -t texrel_shlib_t $INSTALLATION_DIR/VirtualBox.so > /dev/null 2>&1
343 chcon -t texrel_shlib_t $INSTALLATION_DIR/components/VBox*.so > /dev/null 2>&1
344 chcon -t java_exec_t $INSTALLATION_DIR/VirtualBox > /dev/null 2>&1
345 chcon -t java_exec_t $INSTALLATION_DIR/VBoxSDL > /dev/null 2>&1
346 chcon -t java_exec_t $INSTALLATION_DIR/VBoxHeadless > /dev/null 2>&1
347 chcon -t java_exec_t $INSTALLATION_DIR/VBoxNetDHCP > /dev/null 2>&1
348 chcon -t java_exec_t $INSTALLATION_DIR/VBoxExtPackHelperApp > /dev/null 2>&1
349 chcon -t java_exec_t $INSTALLATION_DIR/vboxwebsrv > /dev/null 2>&1
350 chcon -t java_exec_t $INSTALLATION_DIR/webtest > /dev/null 2>&1
351 fi
352
353 # Hardened build: Mark selected binaries set-user-ID-on-execution,
354 # create symlinks for working around unsupported $ORIGIN/.. in VBoxC.so (setuid),
355 # and finally make sure the directory is only writable by the user (paranoid).
356 if [ -n "$HARDENED" ]; then
357 test -e $INSTALLATION_DIR/VirtualBox && chmod 4511 $INSTALLATION_DIR/VirtualBox
358 test -e $INSTALLATION_DIR/VBoxSDL && chmod 4511 $INSTALLATION_DIR/VBoxSDL
359 test -e $INSTALLATION_DIR/VBoxHeadless && chmod 4511 $INSTALLATION_DIR/VBoxHeadless
360 test -e $INSTALLATION_DIR/VBoxNetDHCP && chmod 4511 $INSTALLATION_DIR/VBoxNetDHCP
361
362 ln -sf $INSTALLATION_DIR/VBoxVMM.so $INSTALLATION_DIR/components/VBoxVMM.so
363 ln -sf $INSTALLATION_DIR/VBoxREM.so $INSTALLATION_DIR/components/VBoxREM.so
364 ln -sf $INSTALLATION_DIR/VBoxRT.so $INSTALLATION_DIR/components/VBoxRT.so
365 ln -sf $INSTALLATION_DIR/VBoxDDU.so $INSTALLATION_DIR/components/VBoxDDU.so
366 ln -sf $INSTALLATION_DIR/VBoxXPCOM.so $INSTALLATION_DIR/components/VBoxXPCOM.so
367
368 chmod go-w $INSTALLATION_DIR
369 fi
370
371 # This binary needs to be suid root in any case, even if not hardened
372 test -e $INSTALLATION_DIR/VBoxNetAdpCtl && chmod 4511 $INSTALLATION_DIR/VBoxNetAdpCtl
373
374 # Install runlevel scripts
375 install_init_script vboxdrv.sh vboxdrv
376 install_init_script vboxballoonctrl-service.sh vboxballoonctrl-service
377 install_init_script vboxweb-service.sh vboxweb-service
378 delrunlevel vboxdrv > /dev/null 2>&1
379 addrunlevel vboxdrv 20 80 # This may produce useful output
380 delrunlevel vboxballoonctrl-service > /dev/null 2>&1
381 addrunlevel vboxballoonctrl-service 25 75 # This may produce useful output
382 delrunlevel vboxweb-service > /dev/null 2>&1
383 addrunlevel vboxweb-service 25 75 # This may produce useful output
384
385 # Create users group
386 groupadd $GROUPNAME 2> /dev/null
387
388 # Create symlinks to start binaries
389 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VirtualBox
390 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxManage
391 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxSDL
392 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxVRDP
393 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxHeadless
394 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxBalloonCtrl
395 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/vboxwebsrv
396 ln -sf $INSTALLATION_DIR/VBox.png /usr/share/pixmaps/VBox.png
397 # Unity and Nautilus seem to look here for their icons
398 ln -sf $INSTALLATION_DIR/icons/128x128/virtualbox.png /usr/share/pixmaps/virtualbox.png
399 ln -sf $INSTALLATION_DIR/virtualbox.desktop /usr/share/applications/virtualbox.desktop
400 ln -sf $INSTALLATION_DIR/virtualbox.xml /usr/share/mime/packages/virtualbox.xml
401 ln -sf $INSTALLATION_DIR/rdesktop-vrdp /usr/bin/rdesktop-vrdp
402 ln -sf $INSTALLATION_DIR/src/vboxhost /usr/src/vboxhost-_VERSION_
403
404 # Convenience symlinks. The creation fails if the FS is not case sensitive
405 ln -sf VirtualBox /usr/bin/virtualbox > /dev/null 2>&1
406 ln -sf VBoxManage /usr/bin/vboxmanage > /dev/null 2>&1
407 ln -sf VBoxSDL /usr/bin/vboxsdl > /dev/null 2>&1
408 ln -sf VBoxHeadless /usr/bin/vboxheadless > /dev/null 2>&1
409
410 # Icons
411 cur=`pwd`
412 cd $INSTALLATION_DIR/icons
413 for i in *; do
414 cd $i
415 if [ -d /usr/share/icons/hicolor/$i ]; then
416 for j in *; do
417 if [ "$j" = "virtualbox.png" ]; then
418 dst=apps
419 else
420 dst=mimetypes
421 fi
422 if [ -d /usr/share/icons/hicolor/$i/$dst ]; then
423 ln -s $INSTALLATION_DIR/icons/$i/$j /usr/share/icons/hicolor/$i/$dst/$j
424 echo /usr/share/icons/hicolor/$i/$dst/$j >> $CONFIG_DIR/$CONFIG_FILES
425 fi
426 done
427 fi
428 cd -
429 done
430 cd $cur
431
432 # Update the MIME database
433 update-mime-database /usr/share/mime 2>/dev/null
434
435 # Update the desktop database
436 update-desktop-database -q 2>/dev/null
437
438 # If Python is available, install Python bindings
439 if [ -n "$PYTHON" ]; then
440 maybe_run_python_bindings_installer $INSTALLATION_DIR
441 fi
442
443 # Create udev description file
444 if [ -d /etc/udev/rules.d ]; then
445 udev_call=""
446 udev_app=`which udevadm 2> /dev/null`
447 if [ $? -eq 0 ]; then
448 udev_call="${udev_app} version 2> /dev/null"
449 else
450 udev_app=`which udevinfo 2> /dev/null`
451 if [ $? -eq 0 ]; then
452 udev_call="${udev_app} -V 2> /dev/null"
453 fi
454 fi
455 udev_fix="="
456 if [ "${udev_call}" != "" ]; then
457 udev_out=`${udev_call}`
458 udev_ver=`expr "$udev_out" : '[^0-9]*\([0-9]*\)'`
459 if [ "$udev_ver" = "" -o "$udev_ver" -lt 55 ]; then
460 udev_fix=""
461 fi
462 fi
463 # Write udev rules
464 echo "KERNEL=${udev_fix}\"vboxdrv\", NAME=\"vboxdrv\", OWNER=\"root\", GROUP=\"$VBOXDRV_GRP\", MODE=\"$VBOXDRV_MODE\"" \
465 > /etc/udev/rules.d/10-vboxdrv.rules
466 echo "SUBSYSTEM=${udev_fix}\"usb_device\", ACTION=${udev_fix}\"add\", RUN=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}\"" \
467 >> /etc/udev/rules.d/10-vboxdrv.rules
468 echo "SUBSYSTEM=${udev_fix}\"usb\", ACTION=${udev_fix}\"add\", ENV{DEVTYPE}==\"usb_device\", RUN=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}\"" \
469 >> /etc/udev/rules.d/10-vboxdrv.rules
470 echo "SUBSYSTEM=${udev_fix}\"usb_device\", ACTION=${udev_fix}\"remove\", RUN=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\"" \
471 >> /etc/udev/rules.d/10-vboxdrv.rules
472 echo "SUBSYSTEM=${udev_fix}\"usb\", ACTION=${udev_fix}\"remove\", ENV{DEVTYPE}==\"usb_device\", RUN=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\"" \
473 >> /etc/udev/rules.d/10-vboxdrv.rules
474 fi
475 # Remove old udev description file
476 if [ -f /etc/udev/rules.d/60-vboxdrv.rules ]; then
477 rm -f /etc/udev/rules.d/60-vboxdrv.rules 2> /dev/null
478 fi
479
480 # Build our device tree
481 for i in /sys/bus/usb/devices/*; do
482 if test -r "$i/dev"; then
483 dev="`cat "$i/dev" 2> /dev/null`"
484 major="`expr "$dev" : '\(.*\):' 2> /dev/null`"
485 minor="`expr "$dev" : '.*:\(.*\)' 2> /dev/null`"
486 class="`cat $i/bDeviceClass 2> /dev/null`"
487 sh "$INSTALLATION_DIR/VBoxCreateUSBNode.sh" "$major" "$minor" "$class" 2>/dev/null
488 fi
489 done
490
491 # Write the configuration. Do this before we call /etc/init.d/vboxdrv setup!
492 echo "# VirtualBox installation directory" > $CONFIG_DIR/$CONFIG
493 echo "INSTALL_DIR='$INSTALLATION_DIR'" >> $CONFIG_DIR/$CONFIG
494 echo "# VirtualBox version" >> $CONFIG_DIR/$CONFIG
495 echo "INSTALL_VER='$VERSION'" >> $CONFIG_DIR/$CONFIG
496 echo "INSTALL_REV='$SVNREV'" >> $CONFIG_DIR/$CONFIG
497
498 # Make kernel module
499 MODULE_FAILED="false"
500 if [ "$BUILD_MODULE" = "true" ]
501 then
502 info "Building the VirtualBox kernel modules"
503 log "Output from the module build process (the Linux kernel build system) follows:"
504 cur=`pwd`
505 log ""
506 setup_init_script vboxdrv
507 # Start VirtualBox kernel module
508 if [ $RETVAL -eq 0 ] && ! start_init_script vboxdrv; then
509 info "Failed to load the kernel module."
510 MODULE_FAILED="true"
511 RC_SCRIPT=1
512 fi
513 start_init_script vboxballoonctrl-service
514 start_init_script vboxweb-service
515 log ""
516 log "End of the output from the Linux kernel build system."
517 cd $cur
518 fi
519
520 info ""
521 if [ ! "$MODULE_FAILED" = "true" ]
522 then
523 info "VirtualBox has been installed successfully."
524 else
525 info "VirtualBox has been installed successfully, but the kernel module could not"
526 info "be built. When you have fixed the problems preventing this, execute"
527 info " /etc/init.d/vboxdrv setup"
528 info "as administrator to build it."
529 fi
530 info ""
531 info "You will find useful information about using VirtualBox in the user manual"
532 info " $INSTALLATION_DIR/UserManual.pdf"
533 info "and in the user FAQ"
534 info " http://www.virtualbox.org/wiki/User_FAQ"
535 info ""
536 info "We hope that you enjoy using VirtualBox."
537 info ""
538 log "Installation successful"
539elif [ "$ACTION" = "uninstall" ]; then
540 . ./uninstall.sh
541fi
542exit $RC_SCRIPT
Note: See TracBrowser for help on using the repository browser.

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