summaryrefslogtreecommitdiffstats
path: root/remote/modules/vbox/module.build
blob: f095b4e2a5e5c5afe0213970e049c54725f21649 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/bash

patch_vbox_scripts() {
	# patching some virtualbox utility scripts to include openslx-busybox paths. Strange sed-ing, as the added
	# openslx paths need to be at the end of PATH to not impede with system binaries to not impede with system binaries  
	pinfo "Patching virtual box scripts to include openslx (busybox)-paths ..."
	# vboxmanage is a link to VBox; will get unlinked. Original link will be vboxmanage.original
	for i in virtualbox vboxmanage vboxheadless; do
		pinfo "Patching virtual box script $i ..."
		SCRIPTPATH=$(grep -m 1 PATH "${MODULE_BUILD_DIR}/usr/bin/$i"|sed 's/"//g')		# assume first hit is real path
		sed -i "-i.original" "/^PATH=/c ${SCRIPTPATH}:/opt/openslx/bin:/opt/openslx/usr/bin:/opt/openslx/sbin"\
		       	"${MODULE_BUILD_DIR}/usr/bin/$i"						# append openslx paths
	done
}

extract_extpack() {
	pinfo "Unpacking Extension Pack ..."
	mkdir -p ${MODULE_BUILD_DIR}/usr/lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack
	cp    ${MODULE_DIR}/src/vbox/extpack/[EP][xX][tE]* ${MODULE_BUILD_DIR}/usr/lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack
	if [ x${AMD64_X86} == "xamd64" ]; then
		pinfo "Unpacking 64bit branch of Extension Pack ..."
		cp -r ${MODULE_DIR}/src/vbox/extpack/linux.amd64 ${MODULE_BUILD_DIR}/usr/lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack
	else	# then we assume 32bit x86...
		pinfo "Unpacking32bit branch of Extension Pack ..."
		cp -r ${MODULE_DIR}/src/vbox/extpack/linux.x86 ${MODULE_BUILD_DIR}/usr/lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack
	fi
}

build_modules() {
	pinfo "Recompiling VirtualBox kernel modules ..."
	# Set some variables to use/patch VBox scripts
	local MODULE_SRC="${MODULE_BUILD_DIR}/usr/share/virtualbox/src/vboxhost"
	local BUILDINTMP="$MODULE_SRC/build_in_tmp"
	local BUILDSUBDIR="modules"

	# Some Vars for VBs kernel module makefiles
	MODULE_DIR_ALT="$MODULE_DIR"	# save usual MODULE_DIR
	export KERN_DIR="${MODULE_DIR}/../kernel/build/lib/modules/$(ls ${MODULE_DIR}/../kernel/build/lib/modules/)/build/"
	# export MODULE_DIR="${MODULE_DIR}/../kernel/build/lib/modules/$(ls ${MODULE_DIR}/../kernel/build/lib/modules/)/kernel/misc"
	export MODULE_DIR="${MODULE_DIR}/build/lib/modules/vbox"

	pinfo "Recompiling VirtualBox kernel module vboxdrv ..."
	if ! $BUILDINTMP \
		--save-module-symvers /tmp/vboxdrv-Module.symvers \
		--module-source "$MODULE_SRC/vboxdrv" \
		--no-print-directory install;
	then
		perror "[vbox]: Error compiling VirtualBox kernel module vboxdrv"
	fi
	pinfo "Recompiling VirtualBox kernel module vboxnetflt ..."
	if ! $BUILDINTMP \
		--use-module-symvers /tmp/vboxdrv-Module.symvers \
		--module-source "$MODULE_SRC/vboxnetflt" \
		--no-print-directory install;
	then
		perror "[vbox]: Error compiling VirtualBox kernel module vboxnetflt"
	fi
	pinfo "Recompiling VirtualBox kernel module vboxnetadp ..."
	if ! $BUILDINTMP \
		--use-module-symvers /tmp/vboxdrv-Module.symvers \
		--module-source "$MODULE_SRC/vboxnetadp" \
		--no-print-directory install;
	then
		perror "[vbox]: Error compiling VirtualBox kernel module vboxnetadp"
	fi
	pinfo "Recompiling VirtualBox kernel module vboxpci ..."
	if ! $BUILDINTMP \
		--use-module-symvers /tmp/vboxdrv-Module.symvers \
		--module-source "$MODULE_SRC/vboxpci" \
		--no-print-directory install;
	then
		perror "[vbox]: Error compiling VirtualBox kernel module vboxpci"
	fi
	pinfo "Compiled successfully the VirtualBox kernel modules."
	export MODULE_DIR="$MODULE_DIR_ALT"	# re-set MODULE_DIR
}


fetch_source() {
	mkdir -p "src/vbox"
	cd src/vbox
	# pinfo "Downloading $REQUIRED_VBOXBASEURL"
	download "$REQUIRED_VBOXBASEURL"
	# pinfo "Downloading $REQUIRED_VBOXEXTURL"
	download_untar "$REQUIRED_VBOXEXTURL" "extpack" "vbox_extpack.tar.gz"
	cd -
}


build() {
	case "$PACKET_HANDLER" in
		rpm)
			pinfo "Unpacking rpm ..."
			cd build || perror "Cannot cd to build directory!"
 			rpm2cpio ../src/vbox/$(basename "$REQUIRED_VBOXBASEURL")|cpio -idmv || perror "Could not unpack rpm-archive!"
			# it seems that sometimes directories from rpm will be created with 700-permissions,
			# if that directory is not explicitly mentioned to create. So eg. usr, etc will carry the
			# permissions 700, which is no fun. So we search for these directories and correct them.
			find .  -type d -perm 700 -exec chmod 755 {} \; 
			;;
		dpkg )
			pinfo "Unpacking deb ..."
			cd build || perror "Cannot cd to build directory!"
			dpkg -x ../src/vbox/$(basename "$REQUIRED_VBOXBASEURL") . || perror "Could not unpack deb-archive!"
			# VirtualBox needs to be suid-root:
			for i in VBoxHeadless VBoxNetAdpCtl VBoxNetDHCP VBoxSDL VBoxVolInfo VirtualBox; do
				chmod u+s ${MODULE_BUILD_DIR}/usr/lib/virtualbox/$i || pwarning "(Debian/Ubuntu) Could not suid $i executable!"
			done
			;;
		*) perror "Unknown Distribution: $SYS_DISTRIBUTION - Please specify its packet manager in remote/setup_target" ;;
	esac

	build_modules
	patch_vbox_scripts
	extract_extpack

	COPYLIST="list_dpkg_output"
	[ -e "$COPYLIST" ] && rm "$COPYLIST"
	list_packet_files >> "$COPYLIST"
	tarcopy "$(cat "$COPYLIST" | sort -u)" "${MODULE_BUILD_DIR}"
}

post_copy() {
	# clean a bit, as sometimes there are residual files in /tmp/vbox.*/
	rm -rf /tmp/vbox.*/
}