f86f2dc613a22ee06add9b878197922466df641bvboxsync#!/bin/bash
f86f2dc613a22ee06add9b878197922466df641bvboxsync## @file
f86f2dc613a22ee06add9b878197922466df641bvboxsync# For development.
f86f2dc613a22ee06add9b878197922466df641bvboxsync#
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsync#
c58f1213e628a545081c70e26c6b67a841cff880vboxsync# Copyright (C) 2006-2012 Oracle Corporation
f86f2dc613a22ee06add9b878197922466df641bvboxsync#
f86f2dc613a22ee06add9b878197922466df641bvboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
f86f2dc613a22ee06add9b878197922466df641bvboxsync# available from http://www.virtualbox.org. This file is free software;
f86f2dc613a22ee06add9b878197922466df641bvboxsync# you can redistribute it and/or modify it under the terms of the GNU
f86f2dc613a22ee06add9b878197922466df641bvboxsync# General Public License (GPL) as published by the Free Software
f86f2dc613a22ee06add9b878197922466df641bvboxsync# Foundation, in version 2 as it comes in the "COPYING" file of the
f86f2dc613a22ee06add9b878197922466df641bvboxsync# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
f86f2dc613a22ee06add9b878197922466df641bvboxsync# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
f86f2dc613a22ee06add9b878197922466df641bvboxsync#
f86f2dc613a22ee06add9b878197922466df641bvboxsync
334052e6de7b55199f6159fa6dfe5bf19591f12bvboxsyncSCRIPT_NAME="loadnetadp"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncXNU_VERSION=`LC_ALL=C uname -r | LC_ALL=C cut -d . -f 1`
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsyncDRVNAME="VBoxNetAdp.kext"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncBUNDLE="org.virtualbox.kext.VBoxNetAdp"
f86f2dc613a22ee06add9b878197922466df641bvboxsync
06543b599e791c535ed75819cc8a579e2463e001vboxsyncDEP_DRVNAME="VBoxDrv.kext"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncDEP_BUNDLE="org.virtualbox.kext.VBoxDrv"
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsyncDIR=`dirname "$0"`
f86f2dc613a22ee06add9b878197922466df641bvboxsyncDIR=`cd "$DIR" && pwd`
f86f2dc613a22ee06add9b878197922466df641bvboxsyncDEP_DIR="$DIR/$DEP_DRVNAME"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncDIR="$DIR/$DRVNAME"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncif [ ! -d "$DIR" ]; then
f86f2dc613a22ee06add9b878197922466df641bvboxsync echo "Cannot find $DIR or it's not a directory..."
f86f2dc613a22ee06add9b878197922466df641bvboxsync exit 1;
f86f2dc613a22ee06add9b878197922466df641bvboxsyncfi
f86f2dc613a22ee06add9b878197922466df641bvboxsyncif [ ! -d "$DEP_DIR" ]; then
f86f2dc613a22ee06add9b878197922466df641bvboxsync echo "Cannot find $DEP_DIR or it's not a directory... (dependency)"
f86f2dc613a22ee06add9b878197922466df641bvboxsync exit 1;
f86f2dc613a22ee06add9b878197922466df641bvboxsyncfi
f86f2dc613a22ee06add9b878197922466df641bvboxsyncif [ -n "$*" ]; then
f86f2dc613a22ee06add9b878197922466df641bvboxsync OPTS="$*"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncelse
f86f2dc613a22ee06add9b878197922466df641bvboxsync OPTS="-t"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncfi
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsynctrap "sudo chown -R `whoami` $DIR $DEP_DIR; exit 1" INT
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsync# Try unload any existing instance first.
f86f2dc613a22ee06add9b878197922466df641bvboxsyncLOADED=`kextstat -b $BUNDLE -l`
f86f2dc613a22ee06add9b878197922466df641bvboxsyncif test -n "$LOADED"; then
f86f2dc613a22ee06add9b878197922466df641bvboxsync echo "${SCRIPT_NAME}.sh: Unloading $BUNDLE..."
f86f2dc613a22ee06add9b878197922466df641bvboxsync sudo kextunload -v 6 -b $BUNDLE
f86f2dc613a22ee06add9b878197922466df641bvboxsync LOADED=`kextstat -b $BUNDLE -l`
f86f2dc613a22ee06add9b878197922466df641bvboxsync if test -n "$LOADED"; then
f86f2dc613a22ee06add9b878197922466df641bvboxsync echo "${SCRIPT_NAME}.sh: failed to unload $BUNDLE, see above..."
f86f2dc613a22ee06add9b878197922466df641bvboxsync exit 1;
f86f2dc613a22ee06add9b878197922466df641bvboxsync fi
f86f2dc613a22ee06add9b878197922466df641bvboxsync echo "${SCRIPT_NAME}.sh: Successfully unloaded $BUNDLE"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncfi
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsyncset -e
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsync# Copy the .kext to the symbols directory and tweak the kextload options.
f86f2dc613a22ee06add9b878197922466df641bvboxsyncif test -n "$VBOX_DARWIN_SYMS"; then
f86f2dc613a22ee06add9b878197922466df641bvboxsync echo "${SCRIPT_NAME}.sh: copying the extension the symbol area..."
f86f2dc613a22ee06add9b878197922466df641bvboxsync rm -Rf "$VBOX_DARWIN_SYMS/$DRVNAME"
f86f2dc613a22ee06add9b878197922466df641bvboxsync mkdir -p "$VBOX_DARWIN_SYMS"
f86f2dc613a22ee06add9b878197922466df641bvboxsync cp -R "$DIR" "$VBOX_DARWIN_SYMS/"
f86f2dc613a22ee06add9b878197922466df641bvboxsync OPTS="$OPTS -s $VBOX_DARWIN_SYMS/ "
f86f2dc613a22ee06add9b878197922466df641bvboxsync sync
f86f2dc613a22ee06add9b878197922466df641bvboxsyncfi
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsync# On smbfs, this might succeed just fine but make no actual changes,
f86f2dc613a22ee06add9b878197922466df641bvboxsync# so we might have to temporarily copy the driver to a local directory.
5dddec1355c8adc42db429187f2eb18b2bae94bevboxsyncif sudo chown -R root:wheel "$DIR" "$DEP_DIR"; then
5dddec1355c8adc42db429187f2eb18b2bae94bevboxsync OWNER=`/usr/bin/stat -f "%u" "$DIR"`
5dddec1355c8adc42db429187f2eb18b2bae94bevboxsyncelse
5dddec1355c8adc42db429187f2eb18b2bae94bevboxsync OWNER=1000
5dddec1355c8adc42db429187f2eb18b2bae94bevboxsyncfi
f86f2dc613a22ee06add9b878197922466df641bvboxsyncif test "$OWNER" -ne 0; then
f86f2dc613a22ee06add9b878197922466df641bvboxsync TMP_DIR=/tmp/${SCRIPT_NAME}.tmp
f86f2dc613a22ee06add9b878197922466df641bvboxsync echo "${SCRIPT_NAME}.sh: chown didn't work on $DIR, using temp location $TMP_DIR/$DRVNAME"
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsync # clean up first (no sudo rm)
f86f2dc613a22ee06add9b878197922466df641bvboxsync if test -e "$TMP_DIR"; then
f86f2dc613a22ee06add9b878197922466df641bvboxsync sudo chown -R `whoami` "$TMP_DIR"
f86f2dc613a22ee06add9b878197922466df641bvboxsync rm -Rf "$TMP_DIR"
f86f2dc613a22ee06add9b878197922466df641bvboxsync fi
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsync # make a copy and switch over DIR
f86f2dc613a22ee06add9b878197922466df641bvboxsync mkdir -p "$TMP_DIR/"
f86f2dc613a22ee06add9b878197922466df641bvboxsync sudo cp -Rp "$DIR" "$TMP_DIR/"
f86f2dc613a22ee06add9b878197922466df641bvboxsync DIR="$TMP_DIR/$DRVNAME"
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsync # load.sh puts it here.
f86f2dc613a22ee06add9b878197922466df641bvboxsync DEP_DIR="/tmp/loaddrv.tmp/$DEP_DRVNAME"
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsync # retry
f86f2dc613a22ee06add9b878197922466df641bvboxsync sudo chown -R root:wheel "$DIR" "$DEP_DIR"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncfi
f86f2dc613a22ee06add9b878197922466df641bvboxsync
f86f2dc613a22ee06add9b878197922466df641bvboxsyncsudo chmod -R o-rwx "$DIR"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncsync
f86f2dc613a22ee06add9b878197922466df641bvboxsyncif [ "$XNU_VERSION" -ge "10" ]; then
f86f2dc613a22ee06add9b878197922466df641bvboxsync echo "${SCRIPT_NAME}.sh: loading $DIR... (kextutil $OPTS -d \"$DEP_DIR\" \"$DIR\")"
f86f2dc613a22ee06add9b878197922466df641bvboxsync sudo kextutil $OPTS -d "$DEP_DIR" "$DIR"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncelse
f86f2dc613a22ee06add9b878197922466df641bvboxsync echo "${SCRIPT_NAME}.sh: loading $DIR... (kextload $OPTS -d \"$DEP_DIR\" \"$DIR\")"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncsudo kextload $OPTS -d "$DEP_DIR" "$DIR"
f86f2dc613a22ee06add9b878197922466df641bvboxsyncfi
f86f2dc613a22ee06add9b878197922466df641bvboxsyncsync
f86f2dc613a22ee06add9b878197922466df641bvboxsyncsudo chown -R `whoami` "$DIR" "$DEP_DIR"
f86f2dc613a22ee06add9b878197922466df641bvboxsynckextstat | grep org.virtualbox.kext
f86f2dc613a22ee06add9b878197922466df641bvboxsync