VirtualBox

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

Last change on this file since 58342 was 58342, checked in by vboxsync, 9 years ago

Installer/linux (host): check for VirtualBox running from the build folder too.

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Author Date Id Revision
File size: 13.8 KB
Line 
1#!/bin/sh
2#
3# Oracle VM VirtualBox
4# VirtualBox linux installation script
5
6#
7# Copyright (C) 2007-2015 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
23LOG="/var/log/vbox-install.log"
24VERSION="_VERSION_"
25SVNREV="_SVNREV_"
26BUILD="_BUILD_"
27ARCH="_ARCH_"
28HARDENED="_HARDENED_"
29# The "BUILD_" prefixes prevent the variables from being overwritten when we
30# read the configuration from the previous installation.
31BUILD_BUILDTYPE="_BUILDTYPE_"
32BUILD_USERNAME="_USERNAME_"
33CONFIG_DIR="/etc/vbox"
34CONFIG="vbox.cfg"
35CONFIG_FILES="filelist"
36DEFAULT_FILES=`pwd`/deffiles
37GROUPNAME="vboxusers"
38INSTALLATION_DIR="/opt/VirtualBox"
39LICENSE_ACCEPTED=""
40PREV_INSTALLATION=""
41PYTHON="_PYTHON_"
42ACTION=""
43SELF=$1
44RC_SCRIPT=0
45if [ -n "$HARDENED" ]; then
46 VBOXDRV_MODE=0600
47 VBOXDRV_GRP="root"
48else
49 VBOXDRV_MODE=0660
50 VBOXDRV_GRP=$GROUPNAME
51fi
52VBOXUSB_MODE=0664
53VBOXUSB_GRP=$GROUPNAME
54
55
56##############################################################################
57# Helper routines #
58##############################################################################
59
60usage() {
61 info ""
62 info "Usage: install | uninstall"
63 info ""
64 info "Example:"
65 info "$SELF install"
66 exit 1
67}
68
69module_loaded() {
70 lsmod | grep -q "vboxdrv[^_-]"
71}
72
73# This routine makes sure that there is no previous installation of
74# VirtualBox other than one installed using this install script or a
75# compatible method. We do this by checking for any of the VirtualBox
76# applications in /usr/bin. If these exist and are not symlinks into
77# the installation directory, then we assume that they are from an
78# incompatible previous installation.
79
80## Helper routine: test for a particular VirtualBox binary and see if it
81## is a link into a previous installation directory
82##
83## Arguments: 1) the binary to search for and
84## 2) the installation directory (if any)
85## Returns: false if an incompatible version was detected, true otherwise
86check_binary() {
87 binary=$1
88 install_dir=$2
89 test ! -e $binary 2>&1 > /dev/null ||
90 ( test -n "$install_dir" &&
91 readlink $binary 2>/dev/null | grep "$install_dir" > /dev/null
92 )
93}
94
95## Main routine
96##
97## Argument: the directory where the previous installation should be
98## located. If this is empty, then we will assume that any
99## installation of VirtualBox found is incompatible with this one.
100## Returns: false if an incompatible installation was found, true otherwise
101check_previous() {
102 install_dir=$1
103 # These should all be symlinks into the installation folder
104 check_binary "/usr/bin/VirtualBox" "$install_dir" &&
105 check_binary "/usr/bin/VBoxManage" "$install_dir" &&
106 check_binary "/usr/bin/VBoxSDL" "$install_dir" &&
107 check_binary "/usr/bin/VBoxVRDP" "$install_dir" &&
108 check_binary "/usr/bin/VBoxHeadless" "$install_dir" &&
109 check_binary "/usr/bin/VBoxDTrace" "$install_dir" &&
110 check_binary "/usr/bin/VBoxBalloonCtrl" "$install_dir" &&
111 check_binary "/usr/bin/VBoxAutostart" "$install_dir" &&
112 check_binary "/usr/bin/vboxwebsrv" "$install_dir" &&
113 check_binary "/usr/bin/vbox-img" "$install_dir" &&
114 check_binary "/sbin/rcvboxdrv" "$install_dir"
115}
116
117##############################################################################
118# Main script #
119##############################################################################
120
121info "VirtualBox Version $VERSION r$SVNREV ($BUILD) installer"
122
123
124# Make sure that we were invoked as root...
125check_root
126
127# Set up logging before anything else
128create_log $LOG
129
130log "VirtualBox $VERSION r$SVNREV installer, built $BUILD."
131log ""
132log "Testing system setup..."
133
134# Sanity check: figure out whether build arch matches uname arch
135cpu=`uname -m`;
136case "$cpu" in
137 i[3456789]86|x86)
138 cpu="x86"
139 ;;
140 x86_64)
141 cpu="amd64"
142 ;;
143esac
144if [ "$cpu" != "$ARCH" ]; then
145 info "Detected unsupported $cpu environment."
146 log "Detected unsupported $cpu environment."
147 exit 1
148fi
149
150# Sensible default actions
151ACTION="install"
152BUILD_MODULE="true"
153while true
154do
155 if [ "$2" = "" ]; then
156 break
157 fi
158 shift
159 case "$1" in
160 install)
161 ACTION="install"
162 ;;
163
164 uninstall)
165 ACTION="uninstall"
166 ;;
167
168 force)
169 FORCE_UPGRADE=1
170 ;;
171 license_accepted_unconditionally)
172 # Legacy option
173 ;;
174 no_module)
175 BUILD_MODULE=""
176 ;;
177 *)
178 if [ "$ACTION" = "" ]; then
179 info "Unknown command '$1'."
180 usage
181 fi
182 info "Specifying an installation path is not allowed -- using /opt/VirtualBox!"
183 ;;
184 esac
185done
186
187if [ "$ACTION" = "install" ]; then
188 # Choose a proper umask
189 umask 022
190
191 # Find previous installation
192 if test -r "$CONFIG_DIR/$CONFIG"; then
193 . $CONFIG_DIR/$CONFIG
194 PREV_INSTALLATION=$INSTALL_DIR
195 fi
196 if ! check_previous $INSTALL_DIR
197 then
198 info
199 info "You appear to have a version of VirtualBox on your system which was installed"
200 info "from a different source or using a different type of installer (or a damaged"
201 info "installation of VirtualBox). We strongly recommend that you remove it before"
202 info "installing this version of VirtualBox."
203 info
204 info "Do you wish to continue anyway? [yes or no]"
205 read reply dummy
206 if ! expr "$reply" : [yY] && ! expr "$reply" : [yY][eE][sS]
207 then
208 info
209 info "Cancelling installation."
210 log "User requested cancellation of the installation"
211 exit 1
212 fi
213 fi
214
215 # Do additional clean-up in case some-one is running from a build folder.
216 ./prerm-common.sh || exit 1
217
218 # Remove previous installation
219 test "${BUILD_MODULE}" = true || VBOX_DONT_REMOVE_OLD_MODULES=1
220
221 if [ -n "$PREV_INSTALLATION" ]; then
222 [ -n "$INSTALL_REV" ] && INSTALL_REV=" r$INSTALL_REV"
223 info "Removing previous installation of VirtualBox $INSTALL_VER$INSTALL_REV from $PREV_INSTALLATION"
224 log "Removing previous installation of VirtualBox $INSTALL_VER$INSTALL_REV from $PREV_INSTALLATION"
225 log ""
226
227 VBOX_NO_UNINSTALL_MESSAGE=1
228 # This also checks $BUILD_MODULE and $VBOX_DONT_REMOVE_OLD_MODULES
229 . ./uninstall.sh
230 fi
231
232 mkdir -p -m 755 $CONFIG_DIR
233 touch $CONFIG_DIR/$CONFIG
234
235 info "Installing VirtualBox to $INSTALLATION_DIR"
236 log "Installing VirtualBox to $INSTALLATION_DIR"
237 log ""
238
239 # Verify the archive
240 mkdir -p -m 755 $INSTALLATION_DIR
241 bzip2 -d -c VirtualBox.tar.bz2 > VirtualBox.tar
242 if ! tar -tf VirtualBox.tar > $CONFIG_DIR/$CONFIG_FILES; then
243 rmdir $INSTALLATION_DIR 2> /dev/null
244 rm -f $CONFIG_DIR/$CONFIG 2> /dev/null
245 rm -f $CONFIG_DIR/$CONFIG_FILES 2> /dev/null
246 log 'Error running "bzip2 -d -c VirtualBox.tar.bz2" or "tar -tf VirtualBox.tar".'
247 abort "Error installing VirtualBox. Installation aborted"
248 fi
249
250 # Create installation directory and install
251 if ! tar -xf VirtualBox.tar -C $INSTALLATION_DIR; then
252 cwd=`pwd`
253 cd $INSTALLATION_DIR
254 rm -f `cat $CONFIG_DIR/$CONFIG_FILES` 2> /dev/null
255 cd $pwd
256 rmdir $INSTALLATION_DIR 2> /dev/null
257 rm -f $CONFIG_DIR/$CONFIG 2> /dev/null
258 log 'Error running "tar -xf VirtualBox.tar -C '"$INSTALLATION_DIR"'".'
259 abort "Error installing VirtualBox. Installation aborted"
260 fi
261
262 cp uninstall.sh $INSTALLATION_DIR
263 echo "uninstall.sh" >> $CONFIG_DIR/$CONFIG_FILES
264
265 # XXX SELinux: allow text relocation entries
266 set_selinux_permissions "$INSTALLATION_DIR" \
267 "$INSTALLATION_DIR"
268
269 # Hardened build: Mark selected binaries set-user-ID-on-execution,
270 # create symlinks for working around unsupported $ORIGIN/.. in VBoxC.so (setuid),
271 # and finally make sure the directory is only writable by the user (paranoid).
272 if [ -n "$HARDENED" ]; then
273 test -e $INSTALLATION_DIR/VirtualBox && chmod 4511 $INSTALLATION_DIR/VirtualBox
274 test -e $INSTALLATION_DIR/VBoxSDL && chmod 4511 $INSTALLATION_DIR/VBoxSDL
275 test -e $INSTALLATION_DIR/VBoxHeadless && chmod 4511 $INSTALLATION_DIR/VBoxHeadless
276 test -e $INSTALLATION_DIR/VBoxNetDHCP && chmod 4511 $INSTALLATION_DIR/VBoxNetDHCP
277 test -e $INSTALLATION_DIR/VBoxNetNAT && chmod 4511 $INSTALLATION_DIR/VBoxNetNAT
278
279 ln -sf $INSTALLATION_DIR/VBoxVMM.so $INSTALLATION_DIR/components/VBoxVMM.so
280 ln -sf $INSTALLATION_DIR/VBoxRT.so $INSTALLATION_DIR/components/VBoxRT.so
281
282 chmod go-w $INSTALLATION_DIR
283 fi
284
285 # This binaries need to be suid root in any case, even if not hardened
286 test -e $INSTALLATION_DIR/VBoxNetAdpCtl && chmod 4511 $INSTALLATION_DIR/VBoxNetAdpCtl
287 test -e $INSTALLATION_DIR/VBoxVolInfo && chmod 4511 $INSTALLATION_DIR/VBoxVolInfo
288
289 # Write the configuration. Needs to be done before the vboxdrv service is
290 # started.
291 echo "# VirtualBox installation directory" > $CONFIG_DIR/$CONFIG
292 echo "INSTALL_DIR='$INSTALLATION_DIR'" >> $CONFIG_DIR/$CONFIG
293 echo "# VirtualBox version" >> $CONFIG_DIR/$CONFIG
294 echo "INSTALL_VER='$VERSION'" >> $CONFIG_DIR/$CONFIG
295 echo "INSTALL_REV='$SVNREV'" >> $CONFIG_DIR/$CONFIG
296 echo "# Build type and user name for logging purposes" >> $CONFIG_DIR/$CONFIG
297 echo "BUILD_TYPE='$BUILD_BUILDTYPE'" >> $CONFIG_DIR/$CONFIG
298 echo "USERNAME='$BUILD_USERNAME'" >> $CONFIG_DIR/$CONFIG
299
300 # Create users group
301 groupadd -r -f $GROUPNAME 2> /dev/null
302
303 # Create symlinks to start binaries
304 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VirtualBox
305 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxManage
306 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxSDL
307 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxVRDP
308 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxHeadless
309 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxBalloonCtrl
310 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxAutostart
311 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/vboxwebsrv
312 ln -sf $INSTALLATION_DIR/vbox-img /usr/bin/vbox-img
313 ln -sf $INSTALLATION_DIR/VBox.png /usr/share/pixmaps/VBox.png
314 if [ -f $INSTALLATION_DIR/VBoxDTrace ]; then
315 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxDTrace
316 fi
317 # Unity and Nautilus seem to look here for their icons
318 ln -sf $INSTALLATION_DIR/icons/128x128/virtualbox.png /usr/share/pixmaps/virtualbox.png
319 ln -sf $INSTALLATION_DIR/virtualbox.desktop /usr/share/applications/virtualbox.desktop
320 ln -sf $INSTALLATION_DIR/virtualbox.xml /usr/share/mime/packages/virtualbox.xml
321 ln -sf $INSTALLATION_DIR/rdesktop-vrdp /usr/bin/rdesktop-vrdp
322 ln -sf $INSTALLATION_DIR/src/vboxhost /usr/src/vboxhost-_VERSION_
323
324 # Convenience symlinks. The creation fails if the FS is not case sensitive
325 ln -sf VirtualBox /usr/bin/virtualbox > /dev/null 2>&1
326 ln -sf VBoxManage /usr/bin/vboxmanage > /dev/null 2>&1
327 ln -sf VBoxSDL /usr/bin/vboxsdl > /dev/null 2>&1
328 ln -sf VBoxHeadless /usr/bin/vboxheadless > /dev/null 2>&1
329 if [ -f $INSTALLATION_DIR/VBoxDTrace ]; then
330 ln -sf VBoxDTrace /usr/bin/vboxdtrace > /dev/null 2>&1
331 fi
332
333 # Icons
334 cur=`pwd`
335 cd $INSTALLATION_DIR/icons
336 for i in *; do
337 cd $i
338 if [ -d /usr/share/icons/hicolor/$i ]; then
339 for j in *; do
340 if expr "$j" : "virtualbox\..*" > /dev/null; then
341 dst=apps
342 else
343 dst=mimetypes
344 fi
345 if [ -d /usr/share/icons/hicolor/$i/$dst ]; then
346 ln -s $INSTALLATION_DIR/icons/$i/$j /usr/share/icons/hicolor/$i/$dst/$j
347 echo /usr/share/icons/hicolor/$i/$dst/$j >> $CONFIG_DIR/$CONFIG_FILES
348 fi
349 done
350 fi
351 cd -
352 done
353 cd $cur
354
355 # Update the MIME database
356 update-mime-database /usr/share/mime 2>/dev/null
357
358 # Update the desktop database
359 update-desktop-database -q 2>/dev/null
360
361 # If Python is available, install Python bindings
362 if [ -n "$PYTHON" ]; then
363 maybe_run_python_bindings_installer $INSTALLATION_DIR
364 fi
365
366 # Do post-installation common to all installer types, currently service
367 # script set-up.
368 if test "${BUILD_MODULE}" = "true"; then
369 START_SERVICES=
370 else
371 START_SERVICES="--nostart"
372 fi
373 "${INSTALLATION_DIR}/prerm-common.sh" >> "${LOG}"
374 "${INSTALLATION_DIR}/postinst-common.sh" ${START_SERVICES} >> "${LOG}"
375
376 info ""
377 if [ ! "$MODULE_FAILED" = "true" ]
378 then
379 info "VirtualBox has been installed successfully."
380 else
381 info "VirtualBox has been installed successfully, but the kernel module could not"
382 info "be built. When you have fixed the problems preventing this, execute"
383 info " /sbin/vboxconfig"
384 info "as administrator to build it."
385 fi
386 info ""
387 info "You will find useful information about using VirtualBox in the user manual"
388 info " $INSTALLATION_DIR/UserManual.pdf"
389 info "and in the user FAQ"
390 info " http://www.virtualbox.org/wiki/User_FAQ"
391 info ""
392 info "We hope that you enjoy using VirtualBox."
393 info ""
394 log "Installation successful"
395elif [ "$ACTION" = "uninstall" ]; then
396 . ./uninstall.sh
397fi
398exit $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