diff options
Diffstat (limited to 'src/VBox/Installer/darwin')
14 files changed, 399 insertions, 269 deletions
diff --git a/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool b/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool index 31b70047..9f5150fa 100755 --- a/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool +++ b/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool @@ -1,8 +1,11 @@ -#!/bin/sh -# +#!/bin/bash +# $Id: VirtualBox_Uninstall.tool $ +## @file # VirtualBox Uninstaller Script. # -# Copyright (C) 2007-2010 Oracle Corporation + +# +# Copyright (C) 2007-2013 Oracle Corporation # # This file is part of VirtualBox Open Source Edition (OSE), as # available from http://www.virtualbox.org. This file is free software; @@ -45,69 +48,82 @@ fi # Collect directories and files to remove. # Note: Do NOT attempt adding directories or filenames with spaces! # -my_directories="" -my_files="" +declare -a my_directories +declare -a my_files # Users files first -test -f "${HOME}/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist" && my_files="$my_files ${HOME}/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist" - -test -d /Library/StartupItems/VirtualBox/ && my_directories="$my_directories /Library/StartupItems/VirtualBox/" -test -d /Library/Receipts/VBoxStartupItems.pkg/ && my_directories="$my_directories /Library/Receipts/VBoxStartupItems.pkg/" - -test -d /Library/Extensions/VBoxDrv.kext/ && my_directories="$my_directories /Library/Extensions/VBoxDrv.kext/" -test -d /Library/Extensions/VBoxUSB.kext/ && my_directories="$my_directories /Library/Extensions/VBoxUSB.kext/" -test -d /Library/Extensions/VBoxNetFlt.kext/ && my_directories="$my_directories /Library/Extensions/VBoxNetFlt.kext/" -test -d /Library/Extensions/VBoxNetAdp.kext/ && my_directories="$my_directories /Library/Extensions/VBoxNetAdp.kext/" +test -f "${HOME}/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist" && my_files+=("${HOME}/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist") + +test -d /Library/StartupItems/VirtualBox/ && my_directories+=("/Library/StartupItems/VirtualBox/") +test -d /Library/Receipts/VBoxStartupItems.pkg/ && my_directories+=("/Library/Receipts/VBoxStartupItems.pkg/") + +test -d "/Library/Application Support/VirtualBox/LaunchDaemons/" && my_directories+=("/Library/Application Support/VirtualBox/LaunchDaemons/") +test -d "/Library/Application Support/VirtualBox/VBoxDrv.kext/" && my_directories+=("/Library/Application Support/VirtualBox/VBoxDrv.kext/") +test -d "/Library/Application Support/VirtualBox/VBoxUSB.kext/" && my_directories+=("/Library/Application Support/VirtualBox/VBoxUSB.kext/") +test -d "/Library/Application Support/VirtualBox/VBoxNetFlt.kext/" && my_directories+=("/Library/Application Support/VirtualBox/VBoxNetFlt.kext/") +test -d "/Library/Application Support/VirtualBox/VBoxNetAdp.kext/" && my_directories+=("/Library/Application Support/VirtualBox/VBoxNetAdp.kext/") +# Pre 4.3.0rc1 locations: +test -d /Library/Extensions/VBoxDrv.kext/ && my_directories+=("/Library/Extensions/VBoxDrv.kext/") +test -d /Library/Extensions/VBoxUSB.kext/ && my_directories+=("/Library/Extensions/VBoxUSB.kext/") +test -d /Library/Extensions/VBoxNetFlt.kext/ && my_directories+=("/Library/Extensions/VBoxNetFlt.kext/") +test -d /Library/Extensions/VBoxNetAdp.kext/ && my_directories+=("/Library/Extensions/VBoxNetAdp.kext/") # Tiger support is obsolete, but we leave it here for a clean removing of older # VirtualBox versions -test -d /Library/Extensions/VBoxDrvTiger.kext/ && my_directories="$my_directories /Library/Extensions/VBoxDrvTiger.kext/" -test -d /Library/Extensions/VBoxUSBTiger.kext/ && my_directories="$my_directories /Library/Extensions/VBoxUSBTiger.kext/" -test -d /Library/Receipts/VBoxKEXTs.pkg/ && my_directories="$my_directories /Library/Receipts/VBoxKEXTs.pkg/" - -test -f /usr/bin/VirtualBox && my_files="$my_files /usr/bin/VirtualBox" -test -f /usr/bin/VBoxManage && my_files="$my_files /usr/bin/VBoxManage" -test -f /usr/bin/VBoxVRDP && my_files="$my_files /usr/bin/VBoxVRDP" -test -f /usr/bin/VBoxHeadless && my_files="$my_files /usr/bin/VBoxHeadless" -test -f /usr/bin/vboxwebsrv && my_files="$my_files /usr/bin/vboxwebsrv" -test -f /usr/bin/VBoxBalloonCtrl && my_files="$my_files /usr/bin/VBoxBalloonCtrl" -test -f /usr/bin/VBoxAutostart && my_files="$my_files /usr/bin/VBoxAutostart" -test -f /usr/bin/vbox-img && my_files="$my_files /usr/bin/vbox-img" -test -d /Library/Receipts/VirtualBoxCLI.pkg/ && my_directories="$my_directories /Library/Receipts/VirtualBoxCLI.pkg/" - -test -d /Applications/VirtualBox.app/ && my_directories="$my_directories /Applications/VirtualBox.app/" -test -d /Library/Receipts/VirtualBox.pkg/ && my_directories="$my_directories /Library/Receipts/VirtualBox.pkg/" +test -d /Library/Extensions/VBoxDrvTiger.kext/ && my_directories+=("/Library/Extensions/VBoxDrvTiger.kext/") +test -d /Library/Extensions/VBoxUSBTiger.kext/ && my_directories+=("/Library/Extensions/VBoxUSBTiger.kext/") +test -d /Library/Receipts/VBoxKEXTs.pkg/ && my_directories+=("/Library/Receipts/VBoxKEXTs.pkg/") + +test -f /usr/bin/VirtualBox && my_files+=("/usr/bin/VirtualBox") +test -f /usr/bin/VBoxManage && my_files+=("/usr/bin/VBoxManage") +test -f /usr/bin/VBoxVRDP && my_files+=("/usr/bin/VBoxVRDP") +test -f /usr/bin/VBoxHeadless && my_files+=("/usr/bin/VBoxHeadless") +test -f /usr/bin/vboxwebsrv && my_files+=("/usr/bin/vboxwebsrv") +test -f /usr/bin/VBoxBalloonCtrl && my_files+=("/usr/bin/VBoxBalloonCtrl") +test -f /usr/bin/VBoxAutostart && my_files+=("/usr/bin/VBoxAutostart") +test -f /usr/bin/vbox-img && my_files+=("/usr/bin/vbox-img") +test -d /Library/Receipts/VirtualBoxCLI.pkg/ && my_directories+=("/Library/Receipts/VirtualBoxCLI.pkg/") +test -f /Library/LaunchDaemons/org.virtualbox.startup.plist && my_files+=("/Library/LaunchDaemons/org.virtualbox.startup.plist") + +test -d /Applications/VirtualBox.app/ && my_directories+=("/Applications/VirtualBox.app/") +test -d /Library/Receipts/VirtualBox.pkg/ && my_directories+=("/Library/Receipts/VirtualBox.pkg/") # legacy -test -d /Library/Receipts/VBoxDrv.pkg/ && my_directories="$my_directories /Library/Receipts/VBoxDrv.pkg/" -test -d /Library/Receipts/VBoxUSB.pkg/ && my_directories="$my_directories /Library/Receipts/VBoxUSB.pkg/" +test -d /Library/Receipts/VBoxDrv.pkg/ && my_directories+=("/Library/Receipts/VBoxDrv.pkg/") +test -d /Library/Receipts/VBoxUSB.pkg/ && my_directories+=("/Library/Receipts/VBoxUSB.pkg/") # python stuff python_versions="2.3 2.5 2.6 2.7" for p in $python_versions; do - test -f /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.py && my_files="$my_files /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.py" - test -f /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.pyc && my_files="$my_files /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.pyc" - test -f /Library/Python/$p/site-packages/vboxapi/__init__.py && my_files="$my_files /Library/Python/$p/site-packages/vboxapi/__init__.py" - test -f /Library/Python/$p/site-packages/vboxapi/__init__.pyc && my_files="$my_files /Library/Python/$p/site-packages/vboxapi/__init__.pyc" - test -f /Library/Python/$p/site-packages/vboxapi-1.0-py$p.egg-info && my_files="$my_files /Library/Python/$p/site-packages/vboxapi-1.0-py$p.egg-info" - test -d /Library/Python/$p/site-packages/vboxapi/ && my_directories="$my_directories /Library/Python/$p/site-packages/vboxapi/" + test -f /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.py && my_files+=("/Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.py") + test -f /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.pyc && my_files+=("/Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.pyc") + test -f /Library/Python/$p/site-packages/vboxapi/__init__.py && my_files+=("/Library/Python/$p/site-packages/vboxapi/__init__.py") + test -f /Library/Python/$p/site-packages/vboxapi/__init__.pyc && my_files+=("/Library/Python/$p/site-packages/vboxapi/__init__.pyc") + test -f /Library/Python/$p/site-packages/vboxapi-1.0-py$p.egg-info && my_files+=("/Library/Python/$p/site-packages/vboxapi-1.0-py$p.egg-info") + test -d /Library/Python/$p/site-packages/vboxapi/ && my_directories+=("/Library/Python/$p/site-packages/vboxapi/") done # # Collect KEXTs to remove. # Note that the unload order is significant. # -my_kexts="" +declare -a my_kexts for kext in org.virtualbox.kext.VBoxUSB org.virtualbox.kext.VBoxNetFlt org.virtualbox.kext.VBoxNetAdp org.virtualbox.kext.VBoxDrv; do if /usr/sbin/kextstat -b $kext -l | grep -q $kext; then - my_kexts="$my_kexts $kext" + my_kexts+=("$kext") fi done # +# Collect packages to forget +# +my_pb='org\.virtualbox\.pkg\.' +my_pkgs=`/usr/sbin/pkgutil --pkgs="${my_pb}vboxkexts|${my_pb}vboxstartupitems|${my_pb}virtualbox|${my_pb}virtualboxcli"` + +# # Did we find anything to uninstall? # -if test -z "$my_directories" -a -z "$my_files" -a -z "$my_kexts"; then - echo "No VirtualBox files, directories or KEXTs to uninstall." +if test -z "${my_directories[*]}" -a -z "${my_files[*]}" -a -z "${my_kexts[*]}" -a -z "$my_pkgs"; then + echo "No VirtualBox files, directories, KEXTs or packages to uninstall." echo "Done." exit 0; fi @@ -120,7 +136,7 @@ fi # # Note! comm isn't supported on Tiger, so we make -c to do the stripping. # -my_processes="`ps -axco 'pid uid command' | grep -wEe '(VirtualBox|VirtualBoxVM|VBoxManage|VBoxHeadless|vboxwebsrv|VBoxXPCOMIPCD|VBoxSVC|VBoxNetDHCP)' | grep -vw grep | grep -vw VirtualBox_Uninstall.tool | tr '\n' '\a'`"; +my_processes="`ps -axco 'pid uid command' | grep -wEe '(VirtualBox|VirtualBoxVM|VBoxManage|VBoxHeadless|vboxwebsrv|VBoxXPCOMIPCD|VBoxSVC|VBoxNetDHCP|VBoxNetNAT)' | grep -vw grep | grep -vw VirtualBox_Uninstall.tool | tr '\n' '\a'`"; if test -n "$my_processes"; then echo 'Warning! Found the following active VirtualBox processes:' echo "$my_processes" | tr '\a' '\n' @@ -144,16 +160,22 @@ fi # Display the files and directories that will be removed # and get the user's consent before continuing. # -if test -n "$my_files" -o -n "$my_directories"; then +if test -n "${my_files[*]}" -o -n "${my_directories[*]}"; then echo "The following files and directories (bundles) will be removed:" - for file in $my_files; do echo " $file"; done - for dir in $my_directories; do echo " $dir"; done + for file in "${my_files[@]}"; do echo " $file"; done + for dir in "${my_directories[@]}"; do echo " $dir"; done + echo "" fi -if test -n "$my_kexts"; then -echo "And the following KEXTs will be unloaded:" - for kext in $my_kexts; do echo " $kext"; done +if test -n "${my_kexts[*]}"; then + echo "And the following KEXTs will be unloaded:" + for kext in "${my_kexts[@]}"; do echo " $kext"; done + echo "" +fi +if test -n "$my_pkgs"; then + echo "And the traces of following packages will be removed:" + for kext in $my_pkgs; do echo " $kext"; done + echo "" fi -echo "" if test "$my_default_prompt" != "Yes"; then echo "Do you wish to uninstall VirtualBox (Yes/No)?" @@ -182,8 +204,8 @@ echo "because some of the installed files cannot be removed by a normal" echo "user. You may be prompted for your password now..." echo "" -if test -n "$my_files" -o -n "$my_directories"; then - /usr/bin/sudo -p "Please enter %u's password:" /bin/rm -Rf $my_files $my_directories +if test -n "${my_files[*]}" -o -n "${my_directories[*]}"; then + /usr/bin/sudo -p "Please enter %u's password:" /bin/rm -Rf "${my_files[@]}" "${my_directories[@]}" my_rc=$? if test "$my_rc" -ne 0; then echo "An error occurred durning 'sudo rm', there should be a message above. (rc=$my_rc)" @@ -196,7 +218,7 @@ if test -n "$my_files" -o -n "$my_directories"; then fi my_rc=0 -for kext in $my_kexts; do +for kext in "${my_kexts[@]}"; do echo unloading $kext /usr/bin/sudo -p "Please enter %u's password (unloading $kext):" /sbin/kextunload -m $kext my_rc2=$? @@ -208,10 +230,17 @@ for kext in $my_kexts; do fi done if test "$my_rc" -eq 0; then - echo "Successfully uninstalled VirtualBox." + echo "Successfully unloaded VirtualBox kernel extensions." else - echo "Failed to unload on or more KEXTs, please reboot the machine to complete the uninstall." + echo "Failed to unload one or more KEXTs, please reboot the machine to complete the uninstall." + exit 1; fi + +# Cleaning up pkgutil database +for my_pkg in $my_pkgs; do + /usr/bin/sudo -p "Please enter %u's password (removing $my_pkg):" /usr/sbin/pkgutil --forget "$my_pkg" +done + echo "Done." exit 0; diff --git a/src/VBox/Installer/darwin/Makefile.kmk b/src/VBox/Installer/darwin/Makefile.kmk index a4f901b0..e3bdfaa1 100644 --- a/src/VBox/Installer/darwin/Makefile.kmk +++ b/src/VBox/Installer/darwin/Makefile.kmk @@ -165,7 +165,6 @@ endif # The meta-package. # $(VBOX_PATH_PACK_TMP)/DiskImage/VirtualBox.pkg: \ - $(VBOX_PATH_PACK_TMP)/Packages/VBoxStartupItems.pkg \ $(VBOX_PATH_PACK_TMP)/Packages/VBoxKEXTs.pkg \ $(VBOX_PATH_PACK_TMP)/Packages/VirtualBoxCLI.pkg \ $(VBOX_PATH_PACK_TMP)/Packages/VirtualBox.pkg \ @@ -232,14 +231,13 @@ $(VBOX_PATH_PACK_TMP)/DiskImage/VirtualBox.pkg: \ --identifier org.VirtualBox.mpkg.virtualbox \ --version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \ $(if $(VBOX_MACOSX_INSTALLER_SIGN),--sign "$(VBOX_MACOSX_INSTALLER_SIGN)",) \ - $@ + $@ @# Cleanup. sudo rm -Rf \ $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.root \ $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.desc \ $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res -VirtualBox.pkg:: $(VBOX_PATH_PACK_TMP)/DiskImage/VirtualBox.pkg # # The VirtualBox Kernel extensions. @@ -270,35 +268,40 @@ $(VBOX_PATH_PACK_TMP)/Packages/VBoxKEXTs.pkg: \ $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.desc \ $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.res \ $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.res/English.lproj - $(MKDIR) -p -m 1775 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library $(MKDIR) -p -m 0755 \ - $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library/Extensions \ + $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root \ + $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/LaunchDaemons \ $(foreach kext,$(VBOX_DI_KEXTS), \ - $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library/Extensions/$(kext).kext \ - $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library/Extensions/$(kext).kext/Contents \ - $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library/Extensions/$(kext).kext/Contents/MacOS ) + $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext \ + $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext/Contents \ + $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext/Contents/MacOS ) + @# Copy the launch daemon bits. + $(INSTALL) -m 0755 $(VBOX_PATH_DI_SRC)/VBoxKEXTs/VirtualBoxStartup.sh $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/LaunchDaemons/ + $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VBoxKEXTs/org.virtualbox.startup.plist $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/LaunchDaemons/ @# Copy the common files (Info.plist). $(foreach kext,$(VBOX_DI_KEXTS), \ - $(NLTAB)$(INSTALL) -m 0644 $(VBOX_PATH_DIST)/$(kext).kext/Contents/Info.plist $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library/Extensions/$(kext).kext/Contents/) + $(NLTAB)$(INSTALL) -m 0644 $(VBOX_PATH_DIST)/$(kext).kext/Contents/Info.plist $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext/Contents/) @# Copy the binaries and invoking lipo. ifdef VBOX_WITH_COMBINED_PACKAGE $(foreach kext,$(VBOX_DI_KEXTS_UNIVERSAL), \ $(NLTAB)$(VBOX_DI_LIPO) -create \ $(VBOX_PATH_DIST_32)/$(kext).kext/Contents/MacOS/$(kext) \ $(VBOX_PATH_DIST_64)/$(kext).kext/Contents/MacOS/$(kext) \ - -output $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library/Extensions/$(kext).kext/Contents/MacOS/$(kext)) + -output $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext/Contents/MacOS/$(kext)) else $(foreach kext,$(VBOX_DI_KEXTS), \ - $(NLTAB)$(INSTALL) -m 0755 $(VBOX_PATH_DIST)/$(kext).kext/Contents/MacOS/$(kext) $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library/Extensions/$(kext).kext/Contents/MacOS/) + $(NLTAB)$(INSTALL) -m 0755 $(VBOX_PATH_DIST)/$(kext).kext/Contents/MacOS/$(kext) $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext/Contents/MacOS/) endif @# Signed the kext bundles. ifdef VBOX_SIGNING_MODE + $(foreach kext,$(VBOX_DI_KEXTS) \ + ,$(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext/Contents/MacOS/$(kext),org.virtualbox.app.kext.$(kext)) ) $(foreach kext,$(VBOX_DI_KEXTS), \ - $(NLTAB)$(call VBOX_SIGN_BUNDLE_FN,$(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library/Extensions/$(kext).kext,) ) + $(NLTAB)$(call VBOX_SIGN_BUNDLE_FN,$(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext,org.virtualbox.app.kext.$(kext)) ) +## @TODO check why this fails on the build box: $(foreach kext,$(VBOX_DI_KEXTS), $(NLTAB)codesign --verify --verbose=1 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext ) endif @# Set the correct owners. - sudo chown root:admin $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library - sudo chown -R root:wheel $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library/Extensions + sudo chown -R root:wheel $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/ @# Do keyword replacement in the package info and description files. $(SED) \ -e 's/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g' \ @@ -314,12 +317,12 @@ endif $(INSTALL) -m 0755 $(VBOX_PATH_DI_SRC)/VBoxKEXTs/postflight $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.res/ @# Build the package. $(VBOX_PKGBUILD) \ - --root $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/Library/Extensions/ \ + --root $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/ \ --component-plist $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.desc/PkgBuildComponent.plist \ --script $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.res \ --identifier org.virtualbox.pkg.vboxkexts \ --version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \ - --install-location /Library/Extensions/ \ + --install-location "/Library/Application Support/VirtualBox" \ --ownership preserve \ $(if $(VBOX_MACOSX_INSTALLER_SIGN),--sign "$(VBOX_MACOSX_INSTALLER_SIGN)",) \ $@ @@ -333,61 +336,6 @@ endif # -# The VirtualBox Startupitems. -# -$(VBOX_PATH_PACK_TMP)/Packages/VBoxStartupItems.pkg: \ - $$(wildcard $(VBOX_PATH_DI_SRC)/VBoxStartupItems/VirtualBox/* \ - $(VBOX_PATH_DI_SRC)/VBoxStartupItems/VirtualBox/Resources/*.lproj/*) \ - $$(wildcard $(VBOX_PATH_DI_SRC)/VBoxStartupItems/* \ - $(VBOX_PATH_DI_SRC)/VBoxStartupItems/*.lproj/*) \ - $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES), \ - $(VBOX_BRAND_$(f)_VBOXSTARTUPITEMS_DESCRIPTION_PLIST)) \ - $(VBOX_DARWIN_INST_DEP_ON_MAKEFILE) - $(call MSG_TOOL,pkgbuild,,,$@) - @# Cleanup any previously failed attempts. - sudo rm -Rf \ - $@ \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.desc \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.res - @# Correct directory permissions are important. - $(MKDIR) -p \ - $(@D) \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.desc \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.res \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.res/English.lproj - $(MKDIR) -p -m 0775 $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library - $(MKDIR) -p -m 0755 \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library/StartupItems \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library/StartupItems/VirtualBox \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library/StartupItems/VirtualBox/Resources \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library/StartupItems/VirtualBox/Resources/English.lproj - @# Copy the files. - $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VBoxStartupItems/VirtualBox/StartupParameters.plist $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library/StartupItems/VirtualBox/ - $(INSTALL) -m 0755 $(VBOX_PATH_DI_SRC)/VBoxStartupItems/VirtualBox/VirtualBox $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library/StartupItems/VirtualBox/ - $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VBoxStartupItems/VirtualBox/Resources/English.lproj/Localizable.strings $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library/StartupItems/VirtualBox/Resources/English.lproj/ - @# Set the correct owners. - sudo chown root:admin $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library - sudo chown -R root:wheel $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library/StartupItems - @# Build the package. - $(VBOX_PKGBUILD) \ - --root $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library/StartupItems/ \ - --identifier org.virtualbox.pkg.vboxstartupitems \ - --version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \ - --install-location /Library/StartupItems/ \ - --ownership preserve \ - $(if $(VBOX_MACOSX_INSTALLER_SIGN),--sign "$(VBOX_MACOSX_INSTALLER_SIGN)",) \ - $@ - @# Cleanup - sudo chown -R "$(shell whoami)" \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root/Library - sudo rm -Rf \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.root \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.desc \ - $(VBOX_PATH_PACK_TMP)/VBoxStartupItems.pkg.res - - -# # Figure out which languages that we support and construct # .qm and .lproj lists for these. # @@ -407,10 +355,10 @@ VBOX_DI_VBAPP_DYLIBS = \ MacOS/VBoxDDU.dylib \ MacOS/VBoxREM.dylib \ MacOS/VBoxRT.dylib \ - MacOS/VBoxSharedFolders.dylib \ - MacOS/VBoxSharedClipboard.dylib \ - MacOS/VBoxDragAndDropSvc.dylib \ - MacOS/VBoxGuestPropSvc.dylib \ + $(if $(VBOX_WITH_SHARED_FOLDERS),MacOS/VBoxSharedFolders.dylib,) \ + $(if $(VBOX_WITH_SHARED_CLIPBOARD),MacOS/VBoxSharedClipboard.dylib,) \ + $(if $(VBOX_WITH_DRAG_AND_DROP),MacOS/VBoxDragAndDropSvc.dylib,) \ + $(if $(VBOX_WITH_GUEST_PROPS),MacOS/VBoxGuestPropSvc.dylib,) \ MacOS/VBoxHostChannel.dylib \ MacOS/VBoxVMM.dylib \ MacOS/VBoxXPCOM.dylib \ @@ -419,15 +367,12 @@ VBOX_DI_VBAPP_DYLIBS = \ MacOS/components/VBoxSVCM.dylib \ MacOS/components/VBoxXPCOMIPCC.dylib \ MacOS/VBoxAuth.dylib \ - MacOS/VBoxAuthSimple.dylib + MacOS/VBoxAuthSimple.dylib \ + $(if $(VBOX_WITH_GUEST_CONTROL),MacOS/VBoxGuestControlSvc.dylib,) ifneq ($(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/accessible/libqtaccessiblewidgets.dylib),) VBOX_DI_VBAPP_DYLIBS += \ MacOS/accessible/libqtaccessiblewidgets.dylib endif -ifdef VBOX_WITH_GUEST_CONTROL - VBOX_DI_VBAPP_DYLIBS += \ - MacOS/VBoxGuestControlSvc.dylib -endif if defined(VBOX_WITH_VRDP) && !defined(VBOX_WITH_EXTPACK_PUEL) VBOX_DI_VBAPP_DYLIBS += \ MacOS/VBoxVRDP.dylib @@ -447,6 +392,7 @@ ifdef VBOX_WITH_HARDENING VBOX_DI_VBAPP_DYLIBS += \ MacOS/VirtualBox.dylib \ MacOS/VBoxNetDHCP.dylib \ + MacOS/VBoxNetNAT.dylib \ MacOS/VBoxHeadless.dylib endif ifdef VBOX_WITH_HDDPARALLELS_INSTALL @@ -494,17 +440,15 @@ VBOX_DI_VBAPP_PROGS = \ MacOS/VBoxSVC \ MacOS/VBoxHeadless \ MacOS/VBoxXPCOMIPCD \ - MacOS/VirtualBox \ - MacOS/VirtualBoxVM \ MacOS/VBoxNetAdpCtl \ MacOS/VBoxNetDHCP \ + MacOS/VBoxNetNAT \ MacOS/VBoxExtPackHelperApp \ MacOS/VBoxBalloonCtrl \ - MacOS/VBoxAutostart -ifdef VBOX_WITH_WEBSERVICES - VBOX_DI_VBAPP_PROGS += \ - MacOS/vboxwebsrv -endif + MacOS/VBoxAutostart \ + MacOS/VirtualBoxVM \ + $(if $(VBOX_WITH_WEBSERVICES),MacOS/vboxwebsrv) \ + MacOS/VirtualBox VBOX_DI_VBAPP_UNIVERSAL_PROGS = \ MacOS/vmstarter @@ -677,9 +621,9 @@ $(VBOX_PATH_PACK_TMP)/Packages/VirtualBox.pkg: \ ifdef VBOX_WITH_WEBSERVICES $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VirtualBox/org.virtualbox.vboxwebsrv.plist $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/ endif - $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VirtualBox/org.virtualbox.vboxballoonctrl.plist $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/ - $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VirtualBox/org.virtualbox.vboxautostart.plist $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/ - $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VirtualBox/VBoxAutostartDarwin.sh $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/ + $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VirtualBox/org.virtualbox.vboxballoonctrl.plist $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/ + $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VirtualBox/org.virtualbox.vboxautostart.plist $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/ + $(INSTALL) -m 0755 $(VBOX_PATH_DI_SRC)/VirtualBox/VBoxAutostartDarwin.sh $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/ @# Install the python stuff ifdef VBOX_WITH_PYTHON $(foreach f,$(VBOX_DI_VBAPP_PYTHON_FILES) \ @@ -806,6 +750,21 @@ ifdef VBOX_SIGNING_MODE , $(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(dylib),org.virtualbox.app.macos.$(notdir $(dylib))) ) $(foreach bin, $(VBOX_DI_VBAPP_UNIVERSAL_PROGS) \ , $(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(bin),org.virtualbox.app.macos.$(notdir $(bin))) ) + ifdef VBOX_NOT_OSX_105 # Still being hacked on, everything needs to be signed that lives in Contents/MacOS, guess we have to MOVE files out. + $(foreach other, $(VBOX_DI_VBAPP_OTHER_UNIVERSAL_BINS) \ + , $(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other),org.virtualbox.app.macos.$(notdir $(other))) ) + $(foreach arch, $(if-expr defined(VBOX_WITH_COMBINED_PACKAGE), amd64 x86, $(KBUILD_TARGET_ARCH)) \ + , $(foreach other, $(VBOX_DI_VBAPP_OTHER_BINS) \ + , $(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other)-$(arch),org.virtualbox.app.macos.$(notdir $(other))-$(arch)) ) ) + $(foreach other, $(filter MacOS/%,$(VBOX_DI_VBAPP_MISC_FILES)) \ + , $(NLTAB)$(call VBOX_SIGN_VMM_MOD_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other),org.virtualbox.app.macos.$(notdir $(other))) ) + else + $(foreach other, $(VBOX_DI_VBAPP_OTHER_UNIVERSAL_BINS) \ + , $(NLTAB)$(call VBOX_SIGN_VMM_MOD_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other),org.virtualbox.app.macos.$(notdir $(other))) ) + $(foreach arch, $(if-expr defined(VBOX_WITH_COMBINED_PACKAGE), amd64 x86, $(KBUILD_TARGET_ARCH)) \ + , $(foreach other, $(VBOX_DI_VBAPP_OTHER_BINS) \ + , $(NLTAB)$(call VBOX_SIGN_VMM_MOD_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other)-$(arch),org.virtualbox.app.macos.$(notdir $(other))-$(arch)) ) ) + endif $(foreach arch, $(if-expr defined(VBOX_WITH_COMBINED_PACKAGE), amd64 x86, $(KBUILD_TARGET_ARCH)) \ , $(foreach bin, $(VBOX_DI_VBAPP_PROGS) \ , \ @@ -813,12 +772,7 @@ ifdef VBOX_SIGNING_MODE $(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(bin),org.virtualbox.app.macos.$(notdir $(bin))) \ $(NLTAB)$(MV) -- $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(bin) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(bin)-$(arch) \ )) - $(foreach other, $(VBOX_DI_VBAPP_OTHER_UNIVERSAL_BINS) \ - , $(NLTAB)$(call VBOX_SIGN_VMM_MOD_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other),org.virtualbox.app.macos.$(notdir $(other))) ) - $(foreach arch, $(if-expr defined(VBOX_WITH_COMBINED_PACKAGE), amd64 x86, $(KBUILD_TARGET_ARCH)) \ - , $(foreach other, $(VBOX_DI_VBAPP_OTHER_BINS) \ - , $(NLTAB)$(call VBOX_SIGN_VMM_MOD_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other)-$(arch),org.virtualbox.app.macos.$(notdir $(other))-$(arch)) ) ) - if 0 # requires codesign+framworks from Lion or later. Snow Leopard codesign says object file format invalid or unsuitable. + ifdef VBOX_NOT_OSX_105 # requires codesign+framworks from Lion or later. Snow Leopard codesign says object file format invalid or unsuitable. $(call VBOX_SIGN_BUNDLE_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Resources/VirtualBoxVM.app,) $(call VBOX_SIGN_BUNDLE_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Resources/vmstarter.app,) $(call VBOX_SIGN_BUNDLE_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app,) @@ -829,12 +783,12 @@ endif ifdef VBOX_WITH_HARDENING ifdef VBOX_WITH_COMBINED_PACKAGE sudo chmod u+s \ - $(foreach bin,VBoxHeadless VirtualBox VirtualBoxVM VBoxNetAdpCtl VBoxNetDHCP,\ + $(foreach bin,VBoxHeadless VirtualBox VirtualBoxVM VBoxNetAdpCtl VBoxNetDHCP VBoxNetNAT,\ $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/$(bin)-x86 \ $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/$(bin)-amd64) else sudo chmod u+s \ - $(foreach bin,VBoxHeadless VirtualBox VirtualBoxVM VBoxNetAdpCtl VBoxNetDHCP,\ + $(foreach bin,VBoxHeadless VirtualBox VirtualBoxVM VBoxNetAdpCtl VBoxNetDHCP VBoxNetNAT,\ $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/$(bin)-$(KBUILD_TARGET_ARCH)) endif endif @@ -850,6 +804,7 @@ endif --output $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.desc/PkgBuildComponent.plist \ $(VBOX_PATH_DI_SRC)/VirtualBox/PkgBuildComponent.plist @# Copy the resources. + $(INSTALL) -m 0755 $(VBOX_PATH_DI_SRC)/VirtualBox/preflight $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.res/ $(INSTALL) -m 0755 $(VBOX_PATH_DI_SRC)/VirtualBox/postflight $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.res/ @# Build the package. $(VBOX_PKGBUILD) \ @@ -898,22 +853,22 @@ $(VBOX_PATH_PACK_TMP)/Packages/VirtualBoxCLI.pkg: \ $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr \ $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin @# Generate the wrapper scripts. - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VirtualBox '#!/bin/bash' - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VirtualBox 'exec /Applications/VirtualBox.app/Contents/MacOS/VirtualBox "$$@"' - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxManage '#!/bin/bash' - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxManage 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxManage "$$@"' - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxVRDP '#!/bin/bash' - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxVRDP 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxHeadless "$$@"' - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxHeadless '#!/bin/bash' - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxHeadless 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxHeadless "$$@"' + $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VirtualBox \ + '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VirtualBox "$$@"' + $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxManage \ + '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxManage "$$@"' + $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxVRDP \ + '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxHeadless "$$@"' + $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxHeadless \ + '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxHeadless "$$@"' ifdef VBOX_WITH_WEBSERVICES - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/vboxwebsrv '#!/bin/bash' - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/vboxwebsrv 'exec /Applications/VirtualBox.app/Contents/MacOS/vboxwebsrv "$$@"' + $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/vboxwebsrv \ + '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/vboxwebsrv "$$@"' endif - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxBalloonCtrl '#!/bin/bash' - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxBalloonCtrl 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxBalloonCtrl "$$@"' - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxAutostart '#!/bin/bash' - $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxAutostart 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxAutostart "$$@"' + $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxBalloonCtrl \ + '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxBalloonCtrl "$$@"' + $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxAutostart \ + '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxAutostart "$$@"' @# Set the correct owners and file permissions. sudo chmod 0755 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/* sudo chown root:admin $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root @@ -936,3 +891,11 @@ endif $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.res +# +# Aliases. +# +VBoxKEXTs.pkg: $(VBOX_PATH_PACK_TMP)/Packages/VBoxKEXTs.pkg +VirtualBoxCLI.pkg: $(VBOX_PATH_PACK_TMP)/Packages/VirtualBoxCLI.pkg +VirtualBox.pkg: $(VBOX_PATH_PACK_TMP)/Packages/VirtualBox.pkg +VirtualBox.mpkg: $(VBOX_PATH_PACK_TMP)/DiskImage/VirtualBox.pkg +VirtualBox.dmg: $(VBOX_PATH_DIST)/VirtualBox-$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)-r$(VBOX_SVN_REV).dmg diff --git a/src/VBox/Installer/darwin/VBoxStartupItems/VirtualBox/VirtualBox b/src/VBox/Installer/darwin/VBoxKEXTs/VirtualBoxStartup.sh index b44af242..c132ccdb 100755 --- a/src/VBox/Installer/darwin/VBoxStartupItems/VirtualBox/VirtualBox +++ b/src/VBox/Installer/darwin/VBoxKEXTs/VirtualBoxStartup.sh @@ -1,7 +1,12 @@ #!/bin/sh +# $Id: VirtualBoxStartup.sh $ +## @file +# Startup service for loading the kernel extensions and select the set of VBox +# binaries that matches the kernel architecture. +# # -# Copyright (C) 2007-2010 Oracle Corporation +# Copyright (C) 2007-2013 Oracle Corporation # # This file is part of VirtualBox Open Source Edition (OSE), as # available from http://www.virtualbox.org. This file is free software; @@ -12,7 +17,52 @@ # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. # -. /etc/rc.common +if false; then + . /etc/rc.common +else + # Fake the startup item functions we're using. + + ConsoleMessage() + { + if [ "$1" != "-f" ]; then + echo "$@" + else + shift + echo "Fatal error: $@" + exit 1; + fi + } + + RunService() + { + case "$1" in + "start") + StartService + exit $?; + ;; + "stop") + StopService + exit $?; + ;; + "restart") + RestartService + exit $?; + ;; + "launchd") + if RestartService; then + while true; + do + sleep 3600 + done + fi + exit $?; + ;; + **) + echo "Error: Unknown action '$1'" + exit 1; + esac + } +fi StartService() @@ -35,8 +85,8 @@ StartService() VBOX_LINKNAME=`echo "$VBOX_TRG" | sed -e 's|-'"${VBOX_ARCH}"'$||' ` if test "$VBOX_LINKNAME" != "$VBOX_TRG"; then rm -f "$VBOX_LINKNAME" - if ! ln -vh "$VBOX_TRG" "$VBOX_LINKNAME"; then - ConsoleMessage "Error: ln -vh $VBOX_TRG $VBOX_LINKNAME failed" + if ! /bin/ln -vh "$VBOX_TRG" "$VBOX_LINKNAME"; then + ConsoleMessage "Error: /bin/ln -vh $VBOX_TRG $VBOX_LINKNAME failed" VBOX_RC=1 fi else @@ -48,20 +98,20 @@ StartService() # # Check that all the directories exist first. # - if [ ! -d /Library/Extensions/${VBOXDRV}.kext ]; then - ConsoleMessage "Error: /Library/Extensions/${VBOXDRV}.kext is missing" + if [ ! -d "/Library/Application Support/VirtualBox/${VBOXDRV}.kext" ]; then + ConsoleMessage "Error: /Library/Application Support/VirtualBox/${VBOXDRV}.kext is missing" VBOX_RC=1 fi - if [ ! -d /Library/Extensions/${VBOXUSB}.kext ]; then - ConsoleMessage "Error: /Library/Extensions/${VBOXUSB}.kext is missing" + if [ ! -d "/Library/Application Support/VirtualBox/${VBOXUSB}.kext" ]; then + ConsoleMessage "Error: /Library/Application Support/VirtualBox/${VBOXUSB}.kext is missing" VBOX_RC=1 fi - if [ ! -d /Library/Extensions/VBoxNetFlt.kext ]; then - ConsoleMessage "Error: /Library/Extensions/VBoxNetFlt.kext is missing" + if [ ! -d "/Library/Application Support/VirtualBox/VBoxNetFlt.kext" ]; then + ConsoleMessage "Error: /Library/Application Support/VirtualBox/VBoxNetFlt.kext is missing" VBOX_RC=1 fi - if [ ! -d /Library/Extensions/VBoxNetAdp.kext ]; then - ConsoleMessage "Error: /Library/Extensions/VBoxNetAdp.kext is missing" + if [ ! -d "/Library/Application Support/VirtualBox/VBoxNetAdp.kext" ]; then + ConsoleMessage "Error: /Library/Application Support/VirtualBox/VBoxNetAdp.kext is missing" VBOX_RC=1 fi @@ -71,19 +121,19 @@ StartService() # if [ $VBOX_RC -eq 0 ]; then if kextstat -lb org.virtualbox.kext.VBoxDrv 2>&1 | grep -q org.virtualbox.kext.VBoxDrv; then - ConsoleMessage -v "Error: ${VBOXDRV}.kext is already loaded" + ConsoleMessage "Error: ${VBOXDRV}.kext is already loaded" VBOX_RC=1 fi if kextstat -lb org.virtualbox.kext.VBoxUSB 2>&1 | grep -q org.virtualbox.kext.VBoxUSB; then - ConsoleMessage -v "Error: ${VBOXUSB}.kext is already loaded" + ConsoleMessage "Error: ${VBOXUSB}.kext is already loaded" VBOX_RC=1 fi if kextstat -lb org.virtualbox.kext.VBoxNetFlt 2>&1 | grep -q org.virtualbox.kext.VBoxNetFlt; then - ConsoleMessage -v "Error: VBoxNetFlt.kext is already loaded" + ConsoleMessage "Error: VBoxNetFlt.kext is already loaded" VBOX_RC=1 fi if kextstat -lb org.virtualbox.kext.VBoxNetAdp 2>&1 | grep -q org.virtualbox.kext.VBoxNetAdp; then - ConsoleMessage -v "Error: VBoxNetAdp.kext is already loaded" + ConsoleMessage "Error: VBoxNetAdp.kext is already loaded" VBOX_RC=1 fi fi @@ -93,26 +143,26 @@ StartService() # if [ $VBOX_RC -eq 0 ]; then ConsoleMessage "Loading ${VBOXDRV}.kext" - if ! kextload /Library/Extensions/${VBOXDRV}.kext; then - ConsoleMessage "Error: Failed to load /Library/Extensions/${VBOXDRV}.kext" + if ! kextload "/Library/Application Support/VirtualBox/${VBOXDRV}.kext"; then + ConsoleMessage "Error: Failed to load /Library/Application Support/VirtualBox/${VBOXDRV}.kext" VBOX_RC=1 fi ConsoleMessage "Loading ${VBOXUSB}.kext" - if ! kextload -d /Library/Extensions/${VBOXDRV}.kext /Library/Extensions/${VBOXUSB}.kext; then - ConsoleMessage "Error: Failed to load /Library/Extensions/${VBOXUSB}.kext" + if ! kextload -d "/Library/Application Support/VirtualBox/${VBOXDRV}.kext" "/Library/Application Support/VirtualBox/${VBOXUSB}.kext"; then + ConsoleMessage "Error: Failed to load /Library/Application Support/VirtualBox/${VBOXUSB}.kext" VBOX_RC=1 fi ConsoleMessage "Loading VBoxNetFlt.kext" - if ! kextload -d /Library/Extensions/${VBOXDRV}.kext /Library/Extensions/VBoxNetFlt.kext; then - ConsoleMessage "Error: Failed to load /Library/Extensions/VBoxNetFlt.kext" + if ! kextload -d "/Library/Application Support/VirtualBox/${VBOXDRV}.kext" "/Library/Application Support/VirtualBox/VBoxNetFlt.kext"; then + ConsoleMessage "Error: Failed to load /Library/Application Support/VirtualBox/VBoxNetFlt.kext" VBOX_RC=1 fi ConsoleMessage "Loading VBoxNetAdp.kext" - if ! kextload -d /Library/Extensions/${VBOXDRV}.kext /Library/Extensions/VBoxNetAdp.kext; then - ConsoleMessage "Error: Failed to load /Library/Extensions/VBoxNetAdp.kext" + if ! kextload -d "/Library/Application Support/VirtualBox/${VBOXDRV}.kext" "/Library/Application Support/VirtualBox/VBoxNetAdp.kext"; then + ConsoleMessage "Error: Failed to load /Library/Application Support/VirtualBox/VBoxNetAdp.kext" VBOX_RC=1 fi @@ -144,7 +194,7 @@ StopService() if kextstat -lb org.virtualbox.kext.VBoxUSB 2>&1 | grep -q org.virtualbox.kext.VBoxUSB; then ConsoleMessage "Unloading ${VBOXUSB}.kext" if ! kextunload -m org.virtualbox.kext.VBoxUSB; then - ConsoleMessage -v "Error: Failed to unload VBoxUSB.kext" + ConsoleMessage "Error: Failed to unload VBoxUSB.kext" VBOX_RC=1 fi fi @@ -152,7 +202,7 @@ StopService() if kextstat -lb org.virtualbox.kext.VBoxNetFlt 2>&1 | grep -q org.virtualbox.kext.VBoxNetFlt; then ConsoleMessage "Unloading VBoxNetFlt.kext" if ! kextunload -m org.virtualbox.kext.VBoxNetFlt; then - ConsoleMessage -v "Error: Failed to unload VBoxNetFlt.kext" + ConsoleMessage "Error: Failed to unload VBoxNetFlt.kext" VBOX_RC=1 fi fi @@ -160,7 +210,7 @@ StopService() if kextstat -lb org.virtualbox.kext.VBoxNetAdp 2>&1 | grep -q org.virtualbox.kext.VBoxNetAdp; then ConsoleMessage "Unloading VBoxNetAdp.kext" if ! kextunload -m org.virtualbox.kext.VBoxNetAdp; then - ConsoleMessage -v "Error: Failed to unload VBoxNetAdp.kext" + ConsoleMessage "Error: Failed to unload VBoxNetAdp.kext" VBOX_RC=1 fi fi @@ -169,7 +219,7 @@ StopService() if kextstat -lb org.virtualbox.kext.VBoxDrv 2>&1 | grep -q org.virtualbox.kext.VBoxDrv; then ConsoleMessage "Unloading ${VBOXDRV}.kext" if ! kextunload -m org.virtualbox.kext.VBoxDrv; then - ConsoleMessage -v "Error: Failed to unload VBoxDrv.kext" + ConsoleMessage "Error: Failed to unload VBoxDrv.kext" VBOX_RC=1 fi fi diff --git a/src/VBox/Installer/darwin/VBoxKEXTs/org.virtualbox.startup.plist b/src/VBox/Installer/darwin/VBoxKEXTs/org.virtualbox.startup.plist new file mode 100644 index 00000000..490c9ba6 --- /dev/null +++ b/src/VBox/Installer/darwin/VBoxKEXTs/org.virtualbox.startup.plist @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>Label</key> <string>org.virtualbox.startup</string> + <key>Disabled</key> <false/> + <key>RunAtLoad</key> <true/> + <key>KeepAlive</key> <false/> + <key>LaunchOnlyOnce</key> <true/> + <key>ProgramArguments</key> + <array> + <string>/Library/Application Support/VirtualBox/LaunchDaemons/VirtualBoxStartup.sh</string> + <string>restart</string> + </array> +</dict> +</plist> + diff --git a/src/VBox/Installer/darwin/VBoxKEXTs/postflight b/src/VBox/Installer/darwin/VBoxKEXTs/postflight index 3dd5a699..4cbfea13 100755 --- a/src/VBox/Installer/darwin/VBoxKEXTs/postflight +++ b/src/VBox/Installer/darwin/VBoxKEXTs/postflight @@ -1,7 +1,11 @@ #!/bin/sh +# $Id$ +## @file +# Reloads the new kernel extension at the end of installation. +# # -# Copyright (C) 2007-2010 Oracle Corporation +# Copyright (C) 2007-2013 Oracle Corporation # # This file is part of VirtualBox Open Source Edition (OSE), as # available from http://www.virtualbox.org. This file is free software; @@ -13,6 +17,38 @@ # # +# Make sure the old startup items are gone. +# +if [ -d /Library/StartupItems/VirtualBox/ ]; then + rm -vf "/Library/StartupItems/VirtualBox/StartupParameters.plist" + rm -vf "/Library/StartupItems/VirtualBox/VirtualBox" + rm -vf "/Library/StartupItems/VirtualBox/Resources/English.lproj/Localizable.strings" + test -d "/Library/StartupItems/VirtualBox/Resources/English.lproj/" && rmdir "/Library/StartupItems/VirtualBox/Resources/English.lproj/" + test -d "/Library/StartupItems/VirtualBox/Resources/" && rmdir "/Library/StartupItems/VirtualBox/Resources/" + test -d "/Library/StartupItems/VirtualBox/" && rmdir "/Library/StartupItems/VirtualBox/" +fi + +# +# Make sure old kernel extensions are gone (moved to "/Library/Application Support/VirtualBox/" with 4.3). +# +rm -Rfv \ + "/Library/Extensions/VBoxDrv.kext/" \ + "/Library/Extensions/VBoxNetFlt.kext/" \ + "/Library/Extensions/VBoxNetAdp.kext/" \ + "/Library/Extensions/VBoxUSB.kext/" \ + "/Library/Extensions/VBoxDrvTiger.kext/" \ + "/Library/Extensions/VBoxUSBTiger.kext/" + +# +# Install the launchd script. +# +rm -vf "/Library/LaunchDaemons/org.virtualbox.startup.plist" +set -e +ln -s "../Application Support/VirtualBox/LaunchDaemons/org.virtualbox.startup.plist" \ + "/Library/LaunchDaemons/org.virtualbox.startup.plist" +set +e + +# # Unload any old extension that might be loaded already (ignore failures). # sync @@ -33,8 +69,9 @@ fi # Load the extension, exit on first error. # sync -kextload /Library/Extensions/VBoxDrv.kext -kextload -d /Library/Extensions/VBoxDrv.kext /Library/Extensions/VBoxUSB.kext -kextload -d /Library/Extensions/VBoxDrv.kext /Library/Extensions/VBoxNetFlt.kext -kextload -d /Library/Extensions/VBoxDrv.kext /Library/Extensions/VBoxNetAdp.kext +set -e +kextload '/Library/Application Support/VirtualBox/VBoxDrv.kext' +kextload -d '/Library/Application Support/VirtualBox/VBoxDrv.kext' '/Library/Application Support/VirtualBox/VBoxUSB.kext' +kextload -d '/Library/Application Support/VirtualBox/VBoxDrv.kext' '/Library/Application Support/VirtualBox/VBoxNetFlt.kext' +kextload -d '/Library/Application Support/VirtualBox/VBoxDrv.kext' '/Library/Application Support/VirtualBox/VBoxNetAdp.kext' diff --git a/src/VBox/Installer/darwin/VBoxStartupItems/VirtualBox/Resources/English.lproj/Localizable.strings b/src/VBox/Installer/darwin/VBoxStartupItems/VirtualBox/Resources/English.lproj/Localizable.strings deleted file mode 100644 index 77a25c99..00000000 --- a/src/VBox/Installer/darwin/VBoxStartupItems/VirtualBox/Resources/English.lproj/Localizable.strings +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd"> -<plist version="0.9"> -<dict> - <key>VirtualBox Support Driver</key> <string>VirtualBox Support Driver</string> - <key>Loading VBoxDrv.kext</key> <string>Loading VBoxDrv.kext</string> - <key>Loading VBoxUSB.kext</key> <string>Loading VBoxUSB.kext</string> - <key>Loading VBoxNetFlt.kext</key> <string>Loading VBoxNetFlt.kext</string> - <key>Loading VBoxNetAdp.kext</key> <string>Loading VBoxNetAdp.kext</string> - <key>Unloading VBoxDrv.kext</key> <string>Unloading VBoxDrv.kext</string> - <key>Unloading VBoxUSB.kext</key> <string>Unloading VBoxUSB.kext</string> - <key>Unloading VBoxNetFlt.kext</key> <string>Unloading VBoxNetFlt.kext</string> - <key>Unloading VBoxNetAdp.kext</key> <string>Unloading VBoxNetAdp.kext</string> - <key>Error: /Library/Extensions/VBoxDrv.kext is missing</key> <string>Error: /Library/Extensions/VBoxDrv.kext is missing</string> - <key>Error: /Library/Extensions/VBoxUSB.kext is missing</key> <string>Error: /Library/Extensions/VBoxUSB.kext is missing</string> - <key>Error: /Library/Extensions/VBoxNetFlt.kext is missing</key> <string>Error: /Library/Extensions/VBoxNetFlt.kext is missing</string> - <key>Error: /Library/Extensions/VBoxNetAdp.kext is missing</key> <string>Error: /Library/Extensions/VBoxNetAdp.kext is missing</string> - <key>Error: VBoxDrv.kext is already loaded</key> <string>Error: VBoxDrv.kext is already loaded</string> - <key>Error: VBoxUSB.kext is already loaded</key> <string>Error: VBoxUSB.kext is already loaded</string> - <key>Error: VBoxNetFlt.kext is already loaded</key> <string>Error: VBoxNetFlt.kext is already loaded</string> - <key>Error: VBoxNetAdp.kext is already loaded</key> <string>Error: VBoxNetAdp.kext is already loaded</string> - <key>Error: Failed to load /Library/Extensions/VBoxDrv.kext</key> <string>Error: Failed to load /Library/Extensions/VBoxDrv.kext</string> - <key>Error: Failed to load /Library/Extensions/VBoxUSB.kext</key> <string>Error: Failed to load /Library/Extensions/VBoxUSB.kext</string> - <key>Error: Failed to load /Library/Extensions/VBoxNetFlt.kext</key> <string>Error: Failed to load /Library/Extensions/VBoxNetFlt.kext</string> - <key>Error: Failed to load /Library/Extensions/VBoxNetAdp.kext</key> <string>Error: Failed to load /Library/Extensions/VBoxNetAdp.kext</string> - <key>Error: Failed to unload VBoxDrv.kext</key> <string>Error: Failed to unload VBoxDrv.kext</string> - <key>Error: Failed to unload VBoxUSB.kext</key> <string>Error: Failed to unload VBoxUSB.kext</string> - <key>Error: Failed to unload VBoxNetFlt.kext</key> <string>Error: Failed to unload VBoxNetFlt.kext</string> - <key>Error: Failed to unload VBoxNetAdp.kext</key> <string>Error: Failed to unload VBoxNetAdp.kext</string> -</dict> -</plist> - diff --git a/src/VBox/Installer/darwin/VBoxStartupItems/VirtualBox/StartupParameters.plist b/src/VBox/Installer/darwin/VBoxStartupItems/VirtualBox/StartupParameters.plist deleted file mode 100644 index 13566bfd..00000000 --- a/src/VBox/Installer/darwin/VBoxStartupItems/VirtualBox/StartupParameters.plist +++ /dev/null @@ -1,5 +0,0 @@ -{ - Description = "VirtualBox Support and USB Drivers"; - Provides = ("VirtualBox"); - OrderPreference = "None"; -} diff --git a/src/VBox/Installer/darwin/VirtualBox/PkgBuildComponent.plist b/src/VBox/Installer/darwin/VirtualBox/PkgBuildComponent.plist index a73d8102..a67ae42c 100644 --- a/src/VBox/Installer/darwin/VirtualBox/PkgBuildComponent.plist +++ b/src/VBox/Installer/darwin/VirtualBox/PkgBuildComponent.plist @@ -8,6 +8,7 @@ <key>BundleIsVersionChecked</key> <false/> <key>BundleHasStrictIdentifier</key> <false/> <key>BundleOverwriteAction</key> <string>upgrade</string> + <key>BundlePreInstallScriptPath</key> <string>preflight</string> <key>BundlePostInstallScriptPath</key> <string>postflight</string> </dict> </array> diff --git a/src/VBox/Installer/darwin/VirtualBox/VBoxAutostartDarwin.sh b/src/VBox/Installer/darwin/VirtualBox/VBoxAutostartDarwin.sh index 87c23a34..16c1dfdf 100755 --- a/src/VBox/Installer/darwin/VirtualBox/VBoxAutostartDarwin.sh +++ b/src/VBox/Installer/darwin/VirtualBox/VBoxAutostartDarwin.sh @@ -17,7 +17,7 @@ # and starts the VMs. # -function vboxStartAllUserVms() +function vboxStartStopAllUserVms() { # Go through the list and filter out all users without a shell and a # non existing home. @@ -33,14 +33,29 @@ function vboxStartAllUserVms() continue fi - # Start the daemon - su ${user} -c "/Applications/VirtualBox.app/Contents/MacOS/VBoxAutostart --quiet --start --background --config ${1}" - + case "${1}" in + start) + # Start the daemon + su ${user} -c "/Applications/VirtualBox.app/Contents/MacOS/VBoxAutostart --quiet --start --background --config ${CONFIG}" + ;; + stop) + # Start the daemon + su ${user} -c "/Applications/VirtualBox.app/Contents/MacOS/VBoxAutostart --quiet --stop --config ${CONFIG}" + ;; + *) + echo "Usage: start|stop" + exit 1 + esac done } -case $1 in - --start) vboxStartAllUserVms ${2};; - *) echo "Unknown option ${1}";; -esac +function vboxStopAllUserVms() +{ + vboxStartStopAllUserVms "stop" +} + +CONFIG=${1} +vboxStartStopAllUserVms "start" +trap vboxStopAllUserVms HUP KILL TERM + diff --git a/src/VBox/Installer/darwin/VirtualBox/org.virtualbox.vboxautostart.plist b/src/VBox/Installer/darwin/VirtualBox/org.virtualbox.vboxautostart.plist index 1d97e16b..ca0b770e 100644 --- a/src/VBox/Installer/darwin/VirtualBox/org.virtualbox.vboxautostart.plist +++ b/src/VBox/Installer/darwin/VirtualBox/org.virtualbox.vboxautostart.plist @@ -4,15 +4,16 @@ <dict> <key>Disabled</key> <true/> - <key>KeepAlive</key> - <false/> <key>Label</key> <string>org.virtualbox.vboxautostart</string> <key>ProgramArguments</key> <array> <string>/Applications/VirtualBox.app/Contents/MacOS/VBoxAutostartDarwin.sh</string> - <string>--start</string> <string>/etc/vbox/autostart.cfg</string> </array> + <key>RunAtLoad</key> + <true/> + <key>LaunchOnlyOnce</key> + <true/> </dict> </plist> diff --git a/src/VBox/Installer/darwin/VirtualBox/postflight b/src/VBox/Installer/darwin/VirtualBox/postflight index a7f5f9b4..57271316 100755 --- a/src/VBox/Installer/darwin/VirtualBox/postflight +++ b/src/VBox/Installer/darwin/VirtualBox/postflight @@ -16,12 +16,6 @@ CP="/bin/cp -f" CPDIR="${CP} -R" # -# Correct the ownership of the directories in case there -# was an existing installation. -# -chown -R root:admin /Applications/VirtualBox.app - -# # Select the right architecture. # MY_ARCH=`uname -m` @@ -39,7 +33,7 @@ do exit 1; fi rm -f "$linkname" - ln -vh "$trg" "$linkname" + /bin/ln -vh "$trg" "$linkname" done # @@ -90,5 +84,22 @@ if [[ -e "${LSREGISTER}" && "x" != "x${USER}" ]]; then /usr/bin/sudo -u "${USER}" ${LSREGISTER} -f /Applications/VirtualBox.app/Contents/Resources/vmstarter.app fi -exit 0; +# Check environment. +if [ "${INSTALLER_TEMP}x" == "x" ]; then + echo "Required environment variable INSTALLER_TEMP is missing. Aborting installation." + exit 1; +fi +# Restore previously installed Extension Packs (if any) +if [ -d "${INSTALLER_TEMP}/ExtensionPacks" ]; then + cp -r "${INSTALLER_TEMP}/ExtensionPacks" "${VBOX_INSTALL_PATH}" + rm -rf "${INSTALLER_TEMP}/ExtensionPacks" +fi + +# +# Correct the ownership of the directories in case there +# was an existing installation. +# +chown -R root:admin /Applications/VirtualBox.app + +exit 0; diff --git a/src/VBox/Installer/darwin/VirtualBox/preflight b/src/VBox/Installer/darwin/VirtualBox/preflight new file mode 100755 index 00000000..9c264851 --- /dev/null +++ b/src/VBox/Installer/darwin/VirtualBox/preflight @@ -0,0 +1,31 @@ +#!/bin/sh + +# +# Copyright (C) 2007-2013 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +set -e + +# Check environment. +if [ "${INSTALLER_TEMP}x" == "x" ]; then + echo "Required environment variable INSTALLER_TEMP is missing. Aborting installation." + exit 1; +fi + +# Backup previously installed Extension Packs before +# installation process will completely remove previously installed +# VirtualBox distribution. +EXTPACKS_ROOT_PATH="/Applications/VirtualBox.app/Contents/MacOS/ExtensionPacks" +if [ -d "${EXTPACKS_ROOT_PATH}" ]; then + cp -r "${EXTPACKS_ROOT_PATH}" "${INSTALLER_TEMP}" +fi + +exit 0; diff --git a/src/VBox/Installer/darwin/VirtualBox_mpkg/Localizable.strings b/src/VBox/Installer/darwin/VirtualBox_mpkg/Localizable.strings index f64f4903..0a2e8eee 100644 --- a/src/VBox/Installer/darwin/VirtualBox_mpkg/Localizable.strings +++ b/src/VBox/Installer/darwin/VirtualBox_mpkg/Localizable.strings @@ -1,10 +1,7 @@ 'VirtualBox_title' = '@VBOX_PRODUCT@'; 'choiceVBoxKEXTs_title' = '@VBOX_PRODUCT@ Kernel Extensions'; -'choiceVBoxKEXTs_msg' = 'Installs the @VBOX_PRODUCT@ Kernel Extensions into /Library/Extensions.'; - -'choiceVBoxStartup_title' = '@VBOX_PRODUCT@ Startup Items'; -'choiceVBoxStartup_msg' = 'Installs the @VBOX_PRODUCT@ Startup Items to /Library/StartupItems/VirtualBox.'; +'choiceVBoxKEXTs_msg' = 'Installs the @VBOX_PRODUCT@ Kernel Extensions into /Library/Application Support/VirtualBox.'; 'choiceVBox_title' = '@VBOX_PRODUCT@'; 'choiceVBox_msg' = 'Installs the @VBOX_PRODUCT@ application into /Applications.'; @@ -12,8 +9,8 @@ 'choiceVBoxCLI_title' = '@VBOX_PRODUCT@ Command Line Utilities'; 'choiceVBoxCLI_msg' = 'Installs the @VBOX_PRODUCT@ command line utilities into /usr/bin.'; -'RUNNING_VMS_TLE' = "Running VirtualBox VM's detected!"; -'RUNNING_VMS_MSG' = "The installer has detected running Virtual Machines. Please shutdown all running VirtualBox machines and then restart the installation."; +'RUNNING_VMS_TLE' = "Running VirtualBox virtual machines detected!"; +'RUNNING_VMS_MSG' = "The installer has detected running virtual machines. Please shut down all running VirtualBox machines and then restart the installation."; 'UNSUPPORTED_HW_MACHINE_TLE' = "Unsupported hardware architecture detected!"; 'UNSUPPORTED_HW_MACHINE_MSG' = "The installer has detected an unsupported architecture. VirtualBox only runs on the x86 and amd64 architectures."; diff --git a/src/VBox/Installer/darwin/VirtualBox_mpkg/distribution.dist b/src/VBox/Installer/darwin/VirtualBox_mpkg/distribution.dist index a2e7d633..3749e358 100644 --- a/src/VBox/Installer/darwin/VirtualBox_mpkg/distribution.dist +++ b/src/VBox/Installer/darwin/VirtualBox_mpkg/distribution.dist @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- # -# Copyright (C) 2008-2012 Oracle Corporation +# Copyright (C) 2008-2014 Oracle Corporation # # This file is part of VirtualBox Open Source Edition (OSE), as # available from http://www.virtualbox.org. This file is free software; @@ -18,6 +18,7 @@ <installation-check script="checkPrerequisite()"></installation-check> <domains enable_anywhere="false" enable_currentUserHome="false" enable_localSystem="true"/> <script> +//<![CDATA[ /* js:pkmk:start */ function checkPrerequisite() { @@ -53,9 +54,27 @@ try { + /* The following shell script uses tools which were added in 10.8 + (Mountain Lion) and later, in particular pgrep and pkill. */ + if (system.compareVersions(system.version['ProductVersion'], '10.8') >= 0) + { + /* Embedded scripts are not available here. So, just do a + command line checking if any VBoxXPCOMIPCD has more than one + client, and if there are none, kill all the usual suspects to + get a clean slate. This is done because the VirtualBox event + handling had a bug which allowed no longer present passive + event listeners to block VBoxSVC processes from exiting until + the waiting time was elapsed. In the extreme case this was + infinitely long, blocking updates. */ + system.run('/bin/sh', '-c', 'pids=`/usr/bin/pgrep VBoxXPCOMIPCD` rc=0; [ -z "$pids" ] && rc=1; for i in $pids; do c=`/usr/sbin/lsof -p $i | /usr/bin/grep -E \'^[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +unix\' | wc -l`; [ $c -le 2 ] || rc=1; done; if [ $rc -eq 0 ]; then pkill -KILL \'^(VirtualBox)|(VBoxNetDHCP)|(VBoxNetNAT)|(VBoxHeadless)|(VBoxXPCOMIPCD)|(VBoxSVC)$\'; sleep 1; fi'); + } + } catch (e) { system.log(e); } + + try + { /* Embedded scripts are not available here. So, just do a command line checking for running VMs instead. */ - rcScript = system.run('/bin/sh', '-c', '/bin/ps -e | /usr/bin/grep -E "VirtualBoxVM.*startvm|VBoxNetDHCP" | /usr/bin/grep -qv grep'); + rcScript = system.run('/bin/sh', '-c', '/bin/ps -e | /usr/bin/grep -E \'[V]irtualBox.*startvm|[V]BoxNetDHCP|[V]BoxNetNAT|[V]BoxHeadless|[V]BoxSVC\''); result = (rcScript != 0); system.log("system.run /bin/sh .. returned: " + rcScript + " result=" + result); } catch (e) { system.log(e); result = false; } @@ -72,21 +91,18 @@ return result; } /* js:pkmk:end */ +//]]> </script> <background file="background.tif" alignment="topleft" scaling="none"/> <welcome file="Welcome.rtf" mime-type="text/rtf" uti="public.rtf"/> <choices-outline> <line choice="choiceVBoxKEXTs"></line> - <line choice="choiceVBoxStartup"></line> <line choice="choiceVBox"></line> <line choice="choiceVBoxCLI"></line> </choices-outline> <choice id="choiceVBoxKEXTs" title="choiceVBoxKEXTs_title" description="choiceVBoxKEXTs_msg" start_selected="true" start_enabled="false" start_visible="true"> <pkg-ref id="org.virtualbox.pkg.vboxkexts"></pkg-ref> </choice> - <choice id="choiceVBoxStartup" title="choiceVBoxStartup_title" description="choiceVBoxStartup_msg" start_selected="true" start_enabled="false" start_visible="true"> - <pkg-ref id="org.virtualbox.pkg.vboxstartupitems"></pkg-ref> - </choice> <choice id="choiceVBox" title="choiceVBox_title" description="choiceVBox_msg" start_selected="true" start_enabled="false" start_visible="true"> <pkg-ref id="org.virtualbox.pkg.virtualbox"></pkg-ref> </choice> @@ -94,7 +110,6 @@ <pkg-ref id="org.virtualbox.pkg.virtualboxcli"></pkg-ref> </choice> <pkg-ref id="org.virtualbox.pkg.vboxkexts" auth="Root">file:./Contents/Packages/VBoxKEXTs.pkg</pkg-ref> - <pkg-ref id="org.virtualbox.pkg.vboxstartupitems" auth="Root">file:./Contents/Packages/VBoxStartupItems.pkg</pkg-ref> <pkg-ref id="org.virtualbox.pkg.virtualbox" auth="Root">file:./Contents/Packages/VirtualBox.pkg</pkg-ref> <pkg-ref id="org.virtualbox.pkg.virtualboxcli" auth="Root">file:./Contents/Packages/VirtualBoxCLI.pkg</pkg-ref> </installer-gui-script> |