summaryrefslogtreecommitdiffstats
path: root/core/modules/vbox-src
diff options
context:
space:
mode:
authorJonathan Bauer2018-02-01 17:59:54 +0100
committerJonathan Bauer2018-02-01 17:59:54 +0100
commitd6f7dfe7dc92953ba9883cbf97a60db2333ea573 (patch)
tree46318dd4ece6b21c45821bd420fd8a7ce0f20c96 /core/modules/vbox-src
parentsetup_target: Print warning when trying to clean invalid module (diff)
downloadmltk-d6f7dfe7dc92953ba9883cbf97a60db2333ea573.tar.gz
mltk-d6f7dfe7dc92953ba9883cbf97a60db2333ea573.tar.xz
mltk-d6f7dfe7dc92953ba9883cbf97a60db2333ea573.zip
[vbox-src] finalized build script + conf
Diffstat (limited to 'core/modules/vbox-src')
-rw-r--r--core/modules/vbox-src/LocalConfig.kmk8
-rw-r--r--core/modules/vbox-src/module.build46
-rw-r--r--core/modules/vbox-src/module.conf4
3 files changed, 55 insertions, 3 deletions
diff --git a/core/modules/vbox-src/LocalConfig.kmk b/core/modules/vbox-src/LocalConfig.kmk
new file mode 100644
index 00000000..dc84240b
--- /dev/null
+++ b/core/modules/vbox-src/LocalConfig.kmk
@@ -0,0 +1,8 @@
+VBOX_PATH_APP_PRIVATE_ARCH := /usr/lib/virtualbox
+VBOX_PATH_SHARED_LIBS := $(VBOX_PATH_APP_PRIVATE_ARCH)
+VBOX_WITH_ORIGIN :=
+VBOX_WITH_RUNPATH := $(VBOX_PATH_APP_PRIVATE_ARCH)
+VBOX_PATH_APP_PRIVATE := /usr/share/virtualbox
+VBOX_PATH_APP_DOCS := /usr/share/doc/virtualbox
+VBOX_WITH_TESTCASES :=
+VBOX_WITH_TESTSUITE :=
diff --git a/core/modules/vbox-src/module.build b/core/modules/vbox-src/module.build
index b409b036..09e4aa1d 100644
--- a/core/modules/vbox-src/module.build
+++ b/core/modules/vbox-src/module.build
@@ -13,7 +13,6 @@ build() {
cd "${MODULE_WORK_DIR}/src/VirtualBox-${REQUIRED_VBOX_VERSION}" || \
perror "Could not cd to '${MODULE_WORK_DIR}/src/VirtualBox-${REQUIRED_VBOX_VERSION}'."
[ -n "${KERNEL_HEADERS_DIR}" ] || perror "KERNEL_HEADERS_DIR not set, kernel module present?"
- local VBOX_BUILD_DIR="${MODULE_WORK_DIR}/build"
./configure \
--disable-docs \
--disable-java \
@@ -21,12 +20,53 @@ build() {
--disable-libvpx \
--build-headless \
--with-linux="${KERNEL_HEADERS_DIR}" \
- --out-path="${VBOX_BUILD_DIR}" \
+ --out-path="${MODULE_BUILD_DIR}" \
|| perror "'configure' failed."
# the configure script should have created a file called 'env.sh'
- source "${VBOX_BUILD_DIR}/env.sh" || perror "Failed to source '${VBOX_BUILD_DIR}/env.sh'."
+ source "${MODULE_BUILD_DIR}/env.sh" || perror "Failed to source '${MODULE_BUILD_DIR}/env.sh'."
+ # copy the LocalConfig.kmk to the build dir to be more LSB-compliant
+ cp "${MODULE_DIR}/LocalConfig.kmk" "${MODULE_BUILD_DIR}" || \
+ perror "Failed to cp LocalConfig.kmk to build dir"
kmk || perror "Failed to execute 'kmk'."
+
+ # check the generated build directory, use BUILD_PLATFORM_ARCH defined in env.sh
+ local VBOX_RELEASE_BUILD_DIR="${MODULE_BUILD_DIR}/linux.${BUILD_PLATFORM_ARCH}/release"
+ [ -d "${VBOX_RELEASE_BUILD_DIR}" ] || \
+ perror "No release build dir found under '${VBOX_RELEASE_BUILD_DIR}'. Build failed?"
+
+ # the resulting linux.<arch>/release/bin folder contains the whole build,
+ # copy it over to usr/lib/virtualbox
+ mkdir -p "${MODULE_BUILD_DIR}/usr/lib/virtualbox" || \
+ perror "Failed to mkdir '${MODULE_BUILD_DIR}/usr/lib/virtualbox'."
+ cp -r "${VBOX_RELEASE_BUILD_DIR}/bin/"* "${MODULE_BUILD_DIR}/usr/lib/virtualbox" || \
+ perror "Failed to cp -r '${VBOX_RELEASE_BUILD_DIR}/bin' to '${MODULE_BUILD_DIR}/usr/lib/virtualbox'."
+
+ # set suid bits
+ for BIN in VBoxHeadless VBoxNetAdpCtl VBoxNetDHCP VBoxSDL VBoxVolInfo VirtualBox VBoxNetAdpCtl; do
+ if ! [ -e "${MODULE_BUILD_DIR}/usr/lib/virtualbox/$BIN" ]; then
+ pwarning "No such file: '${MODULE_BUILD_DIR}/usr/lib/virtualbox/$BIN', cannot add suid bit."
+ continue
+ fi
+ chmod u+s "${MODULE_BUILD_DIR}/usr/lib/virtualbox/${BIN}" || perror "Failed to set suid bit on '${BIN}'."
+ done
+
+ ## Kernel modules
+ # build kernel modules from the release dir
+ cd "${VBOX_RELEASE_BUILD_DIR}/bin/src" || \
+ perror "Failed to cd to '${VBOX_RELEASE_BUILD_DIR}/bin/src'."
+ make \
+ KERN_DIR="${KERNEL_HEADERS_DIR}" \
+ KERN_VER="${TARGET_KERNEL_LONG}" \
+ || perror "Build kernel modules failed."
+ # check they were, in fact, built and copy them to build dir
+ mkdir -p "${MODULE_BUILD_DIR}/lib/modules/vbox" || \
+ perror "Failed to mkdir '${MODULE_BUILD_DIR}/lib/modules/vbox'."
+ for MOD in $(find * -maxdepth 0 -type d); do
+ [ -e "$MOD.ko" ] || perror "Module '$MOD' was not built!"
+ cp "$MOD.ko" "${MODULE_BUILD_DIR}/lib/modules/vbox/" || \
+ perror "Failed to cp $MOD.ko to '${MODULE_BUILD_DIR}/lib/modules/vbox/'."
+ done
}
post_copy() {
diff --git a/core/modules/vbox-src/module.conf b/core/modules/vbox-src/module.conf
index 8f3f7f91..eaac50a7 100644
--- a/core/modules/vbox-src/module.conf
+++ b/core/modules/vbox-src/module.conf
@@ -1,2 +1,6 @@
REQUIRED_MODULES="kernel"
REQUIRED_VBOX_VERSION="5.2.6"
+REQUIRED_DIRECTORIES="
+ /lib/modules
+ /usr/lib/virtualbox
+"