VirtualBox

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

Last change on this file since 48286 was 47894, checked in by vboxsync, 11 years ago

VBoxNetLwipNAT => VBoxNetNAT

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