[Lunar-commits] <moonbase> virtualbox-module: new module.
Zachary McGrew
zmcgrew at lunar-linux.org
Fri Feb 20 00:12:12 CET 2009
commit bc156e38415df6360ee41dd455ec67e72c1e5caf
Author: Zachary McGrew <zmcgrew at lunar-linux.org>
Date: Thu Feb 19 15:12:12 2009 -0800
virtualbox-module: new module.
this is the kernel module needed by virtualbox.
---
kernel/virtualbox-module/BUILD | 6 +
kernel/virtualbox-module/DEPENDS | 1 +
kernel/virtualbox-module/DETAILS | 12 +
kernel/virtualbox-module/init.d/vboxdrv | 227 ++++++++++++++++
kernel/virtualbox-module/init.d/vboxnet | 400 ++++++++++++++++++++++++++++
kernel/virtualbox-module/init.d/virtualbox | 43 +++
6 files changed, 689 insertions(+), 0 deletions(-)
diff --git a/kernel/virtualbox-module/BUILD b/kernel/virtualbox-module/BUILD
new file mode 100644
index 0000000..9749ad8
--- /dev/null
+++ b/kernel/virtualbox-module/BUILD
@@ -0,0 +1,6 @@
+(
+
+ # Build and install kernel module
+ KERN_DIR=/usr/src/linux default_make
+
+) > $C_FIFO 2>&1
diff --git a/kernel/virtualbox-module/DEPENDS b/kernel/virtualbox-module/DEPENDS
new file mode 100644
index 0000000..a84d248
--- /dev/null
+++ b/kernel/virtualbox-module/DEPENDS
@@ -0,0 +1 @@
+depends virtualbox
diff --git a/kernel/virtualbox-module/DETAILS b/kernel/virtualbox-module/DETAILS
new file mode 100644
index 0000000..abdb225
--- /dev/null
+++ b/kernel/virtualbox-module/DETAILS
@@ -0,0 +1,12 @@
+ MODULE=virtualbox-module
+ VERSION=`module_version virtualbox`
+ SOURCE=$MODULE-$VERSION.tar.bz2
+SOURCE_DIRECTORY=$BUILD_DIRECTORY/src/
+ WEB_SITE=http://virtualbox.org
+ ENTERED=20090202
+ UPDATED=20090202
+ SHORT="Kernel module for VirtualBox"
+
+cat << EOF
+Sources to the kernel level portion of VirtualBox
+EOF
diff --git a/kernel/virtualbox-module/init.d/vboxdrv b/kernel/virtualbox-module/init.d/vboxdrv
new file mode 100755
index 0000000..054daa9
--- /dev/null
+++ b/kernel/virtualbox-module/init.d/vboxdrv
@@ -0,0 +1,227 @@
+#! /bin/sh
+# innotek VirtualBox
+# Linux kernel module init script
+
+#
+# Copyright (C) 2006-2007 innotek GmbH
+#
+# 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 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.
+
+# chkconfig: 35 30 60
+# description: VirtualBox Linux kernel module
+#
+### BEGIN INIT INFO
+# Provides: vboxdrv
+# Required-Start: $syslog
+# Required-Stop:
+# Default-Start: 3 5
+# Default-Stop:
+# Description: VirtualBox Linux kernel module
+### END INIT INFO
+
+PATH=$PATH:/bin:/sbin:/usr/sbin
+CONFIG="/etc/vbox/vbox.cfg"
+
+if [ -f /etc/redhat-release ]; then
+ system=redhat
+elif [ -f /etc/SuSE-release ]; then
+ system=suse
+elif [ -f /etc/gentoo-release ]; then
+ system=gentoo
+else
+ system=other
+fi
+
+if [ "$system" = "redhat" ]; then
+ . /etc/init.d/functions
+ fail_msg() {
+ echo_failure
+ echo
+ }
+
+ succ_msg() {
+ echo_success
+ echo
+ }
+
+ begin() {
+ echo -n "$1"
+ }
+fi
+
+if [ "$system" = "suse" ]; then
+ . /etc/rc.status
+ fail_msg() {
+ rc_failed 1
+ rc_status -v
+ }
+
+ succ_msg() {
+ rc_reset
+ rc_status -v
+ }
+
+ begin() {
+ echo -n "$1"
+ }
+fi
+
+if [ "$system" = "gentoo" ]; then
+ . /sbin/functions.sh
+ fail_msg() {
+ eend 1
+ }
+
+ succ_msg() {
+ eend $?
+ }
+
+ begin() {
+ ebegin $1
+ }
+
+ if [ "`which $0`" = "/sbin/rc" ]; then
+ shift
+ fi
+fi
+
+if [ "$system" = "other" ]; then
+ fail_msg() {
+ echo " ...fail!"
+ }
+
+ succ_msg() {
+ echo " ...done."
+ }
+
+ begin() {
+ echo -n $1
+ }
+fi
+
+
+kdir=/lib/modules/`uname -r`/misc
+dev=/dev/vboxdrv
+modname=vboxdrv
+groupname=vboxusers
+
+fail() {
+ if [ "$system" = "gentoo" ]; then
+ eerror $1
+ exit 1
+ fi
+ fail_msg
+ echo "($1)"
+ exit 1
+}
+
+running() {
+ lsmod | grep -q $modname[^_-]
+}
+
+start() {
+ begin "Starting VirtualBox kernel module "
+ test -f "$kdir/$modname.o" -o -f "$kdir/$modname.ko" || {
+ fail "Kernel module not found"
+ }
+ running || {
+ rm -f $dev || {
+ fail "Cannot remove $dev"
+ }
+
+ modprobe $modname || {
+ fail "modprobe $modname failed"
+ }
+
+ sleep 1
+ }
+ if [ ! -c $dev ]; then
+ maj=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/devices`
+ if [ ! -z "$maj" ]; then
+ min=0
+ else
+ min=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/misc`
+ if [ ! -z "$min" ]; then
+ maj=10
+ fi
+ fi
+ test -z "$maj" && {
+ rmmod $modname
+ fail "Cannot locate the VirtualBox device"
+ }
+
+ mknod -m 0664 $dev c $maj $min || {
+ rmmod $modname
+ fail "Cannot create device $dev with major $maj and minor $min"
+ }
+ fi
+
+ chown :$groupname $dev || {
+ rmmod $modname
+ fail "Cannot change owner $groupname for device $dev"
+ }
+
+ succ_msg
+ return 0
+}
+
+stop() {
+ begin "Stopping VirtualBox kernel module "
+ if running; then
+ rmmod $modname || fail "Cannot unload module $modname"
+ rm -f $dev || fail "Cannot unlink $dev"
+ fi
+ succ_msg
+ return 0
+}
+
+restart() {
+ stop && start
+ return 0
+}
+
+setup() {
+ . "$CONFIG"
+ stop
+ begin "Recompiling VirtualBox kernel module "
+ lin -c virtualbox-module
+ succ_msg
+ start
+}
+
+dmnstatus() {
+ if running; then
+ echo "VirtualBox kernel module is loaded."
+ else
+ echo "VirtualBox kernel module is not loaded."
+ fi
+}
+
+case "$1" in
+start)
+ start
+ ;;
+stop)
+ stop
+ ;;
+restart)
+ restart
+ ;;
+setup)
+ setup
+ ;;
+status)
+ dmnstatus
+ ;;
+*)
+ echo "Usage: $0 {start|stop|restart|status|setup}"
+ exit 1
+esac
+
+exit
diff --git a/kernel/virtualbox-module/init.d/vboxnet b/kernel/virtualbox-module/init.d/vboxnet
new file mode 100755
index 0000000..85af235
--- /dev/null
+++ b/kernel/virtualbox-module/init.d/vboxnet
@@ -0,0 +1,400 @@
+#! /bin/sh
+# innotek VirtualBox
+# Linux static host networking interface initialization
+#
+
+#
+# Copyright (C) 2007 innotek GmbH
+#
+# 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 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.
+
+# chkconfig: 35 30 60
+# description: VirtualBox permanent host networking setup
+#
+### BEGIN INIT INFO
+# Provides: vboxnet
+# Required-Start: $network
+# Required-Stop:
+# Default-Start: 3 5
+# Default-Stop:
+# Description: VirtualBox permanent host networking setup
+### END INIT INFO
+
+PATH=$PATH:/bin:/sbin:/usr/sbin
+CONFIG="/etc/vbox/interfaces"
+VARDIR="/var/run/VirtualBox"
+VARFILE="/var/run/VirtualBox/vboxnet"
+TAPDEV="/dev/net/tun"
+
+if [ -f /etc/redhat-release ]; then
+ system=redhat
+elif [ -f /etc/SuSE-release ]; then
+ system=suse
+elif [ -f /etc/gentoo-release ]; then
+ system=gentoo
+else
+ system=other
+fi
+
+if [ "$system" = "redhat" ]; then
+ . /etc/init.d/functions
+ fail_msg() {
+ echo_failure
+ echo
+ }
+
+ succ_msg() {
+ echo_success
+ echo
+ }
+
+ begin() {
+ echo -n "$1"
+ }
+fi
+
+if [ "$system" = "suse" ]; then
+ . /etc/rc.status
+ fail_msg() {
+ rc_failed 1
+ rc_status -v
+ }
+
+ succ_msg() {
+ rc_reset
+ rc_status -v
+ }
+
+ begin() {
+ echo -n "$1"
+ }
+fi
+
+if [ "$system" = "gentoo" ]; then
+ . /sbin/functions.sh
+ fail_msg() {
+ eend 1
+ }
+
+ succ_msg() {
+ eend $?
+ }
+
+ begin() {
+ ebegin $1
+ }
+
+ if [ "`which $0`" = "/sbin/rc" ]; then
+ shift
+ fi
+fi
+
+if [ "$system" = "other" ]; then
+ fail_msg() {
+ echo " ...fail!"
+ }
+
+ succ_msg() {
+ echo " ...done."
+ }
+
+ begin() {
+ echo -n $1
+ }
+fi
+
+fail() {
+ if [ "$system" = "gentoo" ]; then
+ eerror $1
+ exit 1
+ fi
+ fail_msg
+ echo "($1)"
+ exit 1
+}
+
+running() {
+ test -f "$VARFILE"
+}
+
+valid_ifname() {
+ if expr match "$1" "vbox[0-9][0-9]*$" > /dev/null 2>&1
+ then
+ return 0
+ else
+ return 1
+ fi
+}
+
+# Create all permanent TAP devices registered on the system, add them to a
+# bridge if required and keep a record of proceedings in the file
+# /var/run/VirtualBox/vboxnet. If this file already exists, assume that the
+# script has already been started and do nothing.
+start_network() {
+ begin "Starting VirtualBox host networking"
+ # If the service is already running, return successfully.
+ if [ -f "$VARFILE" ]
+ then
+ succ_msg
+ return 0
+ fi
+ # Fail if we can't create our runtime record file
+ if [ ! -d "$VARDIR" ]
+ then
+ if ! mkdir "$VARDIR" 2> /dev/null
+ then
+ fail_msg
+ return 1
+ fi
+ fi
+ if ! touch "$VARFILE" 2> /dev/null
+ then
+ fail_msg
+ return 1
+ fi
+ # If there is no configuration file, report success
+ if [ ! -f "$CONFIG" ]
+ then
+ succ_msg
+ return 0
+ fi
+ # Fail if we can't read our configuration
+ if [ ! -r "$CONFIG" ]
+ then
+ fail_msg
+ return 1
+ fi
+ # Fail if we don't have tunctl
+ if ! VBoxTunctl -h 2>&1 | grep VBoxTunctl > /dev/null
+ then
+ fail_msg
+ return 1
+ fi
+ succ_msg
+ # Read the configuration file entries line by line and create the
+ # interfaces
+ while read line
+ do
+ set ""$line
+ # If the line is a comment then ignore it
+ if ((! expr match "$1" "#" > /dev/null) && (! test -z "$1"))
+ then
+ # Check that the line is correctly formed (an interface name plus one
+ # or two non-comment entries, possibly followed by a comment).
+ if ((! expr match "$2" "#" > /dev/null) &&
+ (test -z "$4" || expr match "$4" "#" > /dev/null) &&
+ (valid_ifname "$1"))
+ then
+ # Try to create the interface
+ if VBoxTunctl -t "$1" -u "$2" > /dev/null 2>&1
+ then
+ # On SUSE Linux Enterprise Server, the interface does not
+ # appear immediately, so we loop trying to bring it up.
+ i=1
+ while [ $i -le 10 ]
+ do
+ ifconfig "$1" up 2> /dev/null
+ if ifconfig | grep "$1" > /dev/null 2>&1
+ then
+ # Add the interface to a bridge if one was specified
+ if [ ! -z "$3" ]
+ then
+ if brctl addif "$3" "$1" 2> /dev/null
+ then
+ echo "$1 $2 $3" > "$VARFILE"
+ else
+ echo "$1 $2" > "$VARFILE"
+ echo "Warning - failed to add interface $1 to the bridge $3"
+ fi
+ else
+ echo "$1 $2" > $VARFILE
+ fi
+ i=20
+ else
+ i=`expr $i + 1`
+ sleep .1
+ fi
+ done
+ if [ $i -ne 20 ]
+ then
+ echo "Warning - failed to bring up the interface $1"
+ fi
+ else
+ echo "Warning - failed to create the interface $1 for the user $2"
+ fi
+ else
+ echo "Warning - invalid line in $CONFIG:"
+ echo " $line"
+ fi
+ fi
+ done < "$CONFIG"
+ # Set /dev/net/tun to belong to the group vboxusers if it exists and does
+ # yet belong to a group.
+ if ls -g "$TAPDEV" 2>/dev/null | grep root
+ then
+ chgrp vboxusers "$TAPDEV"
+ chmod 0660 "$TAPDEV"
+ fi
+ return 0
+}
+
+# Shut down VirtualBox host networking and remove all permanent TAP
+# interfaces. This action will fail if some interfaces could not be removed.
+stop_network() {
+ begin "Shutting down VirtualBox host networking"
+ # If there is no runtime record file, assume that the service is not
+ # running.
+ if [ ! -f "$VARFILE" ]
+ then
+ succ_msg
+ return 0
+ fi
+ # Fail if we can't read our runtime record file or write to the
+ # folder it is located in
+ if [ ! -r "$VARFILE" -o ! -w "$VARDIR" ]
+ then
+ fail_msg
+ return 1
+ fi
+ # Fail if we don't have tunctl
+ if ! VBoxTunctl -h 2>&1 | grep VBoxTunctl > /dev/null
+ then
+ fail_msg
+ return 1
+ fi
+ # Read the runtime record file entries line by line and delete the
+ # interfaces. The format of the runtime record file is not checked for
+ # errors.
+ while read line
+ do
+ set ""$line
+ # Remove the interface from a bridge if it is part of one
+ if [ ! -z "$3" ]
+ then
+ brctl delif "$3" "$1" 2> /dev/null
+ fi
+ # Remove the interface. Roll back everything and fail if this is not
+ # possible
+ if (! ifconfig "$1" down 2> /dev/null ||
+ ! VBoxTunctl -d "$1" > /dev/null 2>&1)
+ then
+ while read line
+ do
+ set ""$line
+ VBoxTunctl -t "$1" -u "$2" > /dev/null 2>&1
+ ifconfig "$1" up 2> /dev/null
+ if [ ! -z "$3" ]
+ then
+ brctl addif "$3" "$1"
+ fi
+ done < "$VARFILE"
+ fail_msg
+ return 1
+ fi
+ done < "$VARFILE"
+ rm -f "$VARFILE" 2> /dev/null
+ succ_msg
+ return 0
+}
+
+# Shut down VirtualBox host networking and remove all permanent TAP
+# interfaces. This action will succeed even if not all interfaces could be
+# removed. It is only intended for exceptional circumstances such as
+# uninstalling VirtualBox.
+force_stop_network() {
+ begin "Shutting down VirtualBox host networking"
+ # If there is no runtime record file, assume that the service is not
+ # running.
+ if [ ! -f "$VARFILE" ]
+ then
+ succ_msg
+ return 0
+ fi
+ # Fail if we can't read our runtime record file or write to the
+ # folder it is located in
+ if [ ! -r "$VARFILE" -o ! -w "$VARDIR" ]
+ then
+ fail_msg
+ return 1
+ fi
+ # Fail if we don't have tunctl
+ if ! VBoxTunctl -h 2>&1 | grep VBoxTunctl > /dev/null
+ then
+ fail_msg
+ return 1
+ fi
+ # Read the runtime record file entries line by line and delete the
+ # interfaces. The format of the runtime record file is not checked for
+ # errors.
+ while read line
+ do
+ set ""$line
+ # Remove the interface from a bridge if it is part of one
+ if [ ! -z "$3" ]
+ then
+ brctl delif "$3" "$1" 2> /dev/null
+ fi
+ # Remove the interface.
+ ifconfig "$1" down 2> /dev/null
+ VBoxTunctl -d "$1" > /dev/null 2>&1
+ done < "$VARFILE"
+ rm -f "$VARFILE" 2> /dev/null
+ succ_msg
+ return 0
+}
+
+start() {
+ start_network
+}
+
+stop() {
+ stop_network
+}
+
+force_stop() {
+ force_stop_network
+}
+
+restart() {
+ stop_network && start_network
+}
+
+status() {
+ if running; then
+ echo "VirtualBox host networking is loaded."
+ else
+ echo "VirtualBox host networking is not loaded."
+ fi
+}
+
+case "$1" in
+start)
+ start
+ ;;
+stop)
+ stop
+ ;;
+restart)
+ restart
+ ;;
+force-reload)
+ restart
+ ;;
+force-stop)
+ force_stop
+ ;;
+status)
+ status
+ ;;
+*)
+ echo "Usage: `basename $0` {start|stop|restart|force-reload|status}"
+ exit 1
+esac
+
+exit
diff --git a/kernel/virtualbox-module/init.d/virtualbox b/kernel/virtualbox-module/init.d/virtualbox
new file mode 100755
index 0000000..7371fba
--- /dev/null
+++ b/kernel/virtualbox-module/init.d/virtualbox
@@ -0,0 +1,43 @@
+#!/bin/bash
+#
+# Startup script for VirtualBox
+#
+# chkconfig: 345 50 50
+# description: Initializes VirtualBox
+# short: VirtualBox
+
+load_kernel_module () {
+ modprobe vboxdrv
+}
+
+unload_kernel_module () {
+ rmmod vboxdrv
+}
+
+set_permissions () {
+ chgrp vboxusers /dev/vboxdrv &&
+ chmod g+rwx /dev/vboxdrv
+}
+
+start () {
+ echo -n "Starting VirtualBox: "
+ load_kernel_module && set_permissions
+ if [ $? == 0 ]; then
+ echo -e $RESULT_OK
+ else
+ echo -e $RESULT_FAIL
+ fi
+}
+
+stop () {
+ echo -n "Stopping VirtualBox: "
+ unload_kernel_module
+ echo -e $RESULT_OK
+}
+
+restart () {
+ stop
+ start
+}
+
+. /lib/lsb/init-functions
More information about the Lunar-commits
mailing list