VirtualBox

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

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

#8051: Installers: unify Linux host installers as far as possible: since we stopped inserting the common script code containing set_selinux_permissions() into VirtualBox.tmpl that function was no longer called. Move it to postinst-common.sh instead, and remove it from routines.sh and the .run installer.

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Author Date Id Revision
File size: 13.6 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 # Hardened build: Mark selected binaries set-user-ID-on-execution,
266 # create symlinks for working around unsupported $ORIGIN/.. in VBoxC.so (setuid),
267 # and finally make sure the directory is only writable by the user (paranoid).
268 if [ -n "$HARDENED" ]; then
269 test -e $INSTALLATION_DIR/VirtualBox && chmod 4511 $INSTALLATION_DIR/VirtualBox
270 test -e $INSTALLATION_DIR/VBoxSDL && chmod 4511 $INSTALLATION_DIR/VBoxSDL
271 test -e $INSTALLATION_DIR/VBoxHeadless && chmod 4511 $INSTALLATION_DIR/VBoxHeadless
272 test -e $INSTALLATION_DIR/VBoxNetDHCP && chmod 4511 $INSTALLATION_DIR/VBoxNetDHCP
273 test -e $INSTALLATION_DIR/VBoxNetNAT && chmod 4511 $INSTALLATION_DIR/VBoxNetNAT
274
275 ln -sf $INSTALLATION_DIR/VBoxVMM.so $INSTALLATION_DIR/components/VBoxVMM.so
276 ln -sf $INSTALLATION_DIR/VBoxRT.so $INSTALLATION_DIR/components/VBoxRT.so
277
278 chmod go-w $INSTALLATION_DIR
279 fi
280
281 # This binaries need to be suid root in any case, even if not hardened
282 test -e $INSTALLATION_DIR/VBoxNetAdpCtl && chmod 4511 $INSTALLATION_DIR/VBoxNetAdpCtl
283 test -e $INSTALLATION_DIR/VBoxVolInfo && chmod 4511 $INSTALLATION_DIR/VBoxVolInfo
284
285 # Write the configuration. Needs to be done before the vboxdrv service is
286 # started.
287 echo "# VirtualBox installation directory" > $CONFIG_DIR/$CONFIG
288 echo "INSTALL_DIR='$INSTALLATION_DIR'" >> $CONFIG_DIR/$CONFIG
289 echo "# VirtualBox version" >> $CONFIG_DIR/$CONFIG
290 echo "INSTALL_VER='$VERSION'" >> $CONFIG_DIR/$CONFIG
291 echo "INSTALL_REV='$SVNREV'" >> $CONFIG_DIR/$CONFIG
292 echo "# Build type and user name for logging purposes" >> $CONFIG_DIR/$CONFIG
293 echo "BUILD_TYPE='$BUILD_BUILDTYPE'" >> $CONFIG_DIR/$CONFIG
294 echo "USERNAME='$BUILD_USERNAME'" >> $CONFIG_DIR/$CONFIG
295
296 # Create users group
297 groupadd -r -f $GROUPNAME 2> /dev/null
298
299 # Create symlinks to start binaries
300 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VirtualBox
301 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxManage
302 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxSDL
303 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxVRDP
304 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxHeadless
305 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxBalloonCtrl
306 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxAutostart
307 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/vboxwebsrv
308 ln -sf $INSTALLATION_DIR/vbox-img /usr/bin/vbox-img
309 ln -sf $INSTALLATION_DIR/VBox.png /usr/share/pixmaps/VBox.png
310 if [ -f $INSTALLATION_DIR/VBoxDTrace ]; then
311 ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxDTrace
312 fi
313 # Unity and Nautilus seem to look here for their icons
314 ln -sf $INSTALLATION_DIR/icons/128x128/virtualbox.png /usr/share/pixmaps/virtualbox.png
315 ln -sf $INSTALLATION_DIR/virtualbox.desktop /usr/share/applications/virtualbox.desktop
316 ln -sf $INSTALLATION_DIR/virtualbox.xml /usr/share/mime/packages/virtualbox.xml
317 ln -sf $INSTALLATION_DIR/rdesktop-vrdp /usr/bin/rdesktop-vrdp
318 ln -sf $INSTALLATION_DIR/src/vboxhost /usr/src/vboxhost-_VERSION_
319
320 # Convenience symlinks. The creation fails if the FS is not case sensitive
321 ln -sf VirtualBox /usr/bin/virtualbox > /dev/null 2>&1
322 ln -sf VBoxManage /usr/bin/vboxmanage > /dev/null 2>&1
323 ln -sf VBoxSDL /usr/bin/vboxsdl > /dev/null 2>&1
324 ln -sf VBoxHeadless /usr/bin/vboxheadless > /dev/null 2>&1
325 if [ -f $INSTALLATION_DIR/VBoxDTrace ]; then
326 ln -sf VBoxDTrace /usr/bin/vboxdtrace > /dev/null 2>&1
327 fi
328
329 # Icons
330 cur=`pwd`
331 cd $INSTALLATION_DIR/icons
332 for i in *; do
333 cd $i
334 if [ -d /usr/share/icons/hicolor/$i ]; then
335 for j in *; do
336 if expr "$j" : "virtualbox\..*" > /dev/null; then
337 dst=apps
338 else
339 dst=mimetypes
340 fi
341 if [ -d /usr/share/icons/hicolor/$i/$dst ]; then
342 ln -s $INSTALLATION_DIR/icons/$i/$j /usr/share/icons/hicolor/$i/$dst/$j
343 echo /usr/share/icons/hicolor/$i/$dst/$j >> $CONFIG_DIR/$CONFIG_FILES
344 fi
345 done
346 fi
347 cd -
348 done
349 cd $cur
350
351 # Update the MIME database
352 update-mime-database /usr/share/mime 2>/dev/null
353
354 # Update the desktop database
355 update-desktop-database -q 2>/dev/null
356
357 # If Python is available, install Python bindings
358 if [ -n "$PYTHON" ]; then
359 maybe_run_python_bindings_installer $INSTALLATION_DIR
360 fi
361
362 # Do post-installation common to all installer types, currently service
363 # script set-up.
364 if test "${BUILD_MODULE}" = "true"; then
365 START_SERVICES=
366 else
367 START_SERVICES="--nostart"
368 fi
369 "${INSTALLATION_DIR}/prerm-common.sh" >> "${LOG}"
370 "${INSTALLATION_DIR}/postinst-common.sh" ${START_SERVICES} >> "${LOG}"
371
372 info ""
373 if [ ! "$MODULE_FAILED" = "true" ]
374 then
375 info "VirtualBox has been installed successfully."
376 else
377 info "VirtualBox has been installed successfully, but the kernel module could not"
378 info "be built. When you have fixed the problems preventing this, execute"
379 info " /sbin/vboxconfig"
380 info "as administrator to build it."
381 fi
382 info ""
383 info "You will find useful information about using VirtualBox in the user manual"
384 info " $INSTALLATION_DIR/UserManual.pdf"
385 info "and in the user FAQ"
386 info " http://www.virtualbox.org/wiki/User_FAQ"
387 info ""
388 info "We hope that you enjoy using VirtualBox."
389 info ""
390 log "Installation successful"
391elif [ "$ACTION" = "uninstall" ]; then
392 . ./uninstall.sh
393fi
394exit $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