From 551e8f6a9a74b84aaca32c82ced678fe9b698ded Mon Sep 17 00:00:00 2001
From: Simon Rettberg
Date: Mon, 3 Feb 2014 16:07:48 +0100
Subject: [vmware] Fix /etc/vmware/config generation to include build/version,
add usbarb.conf, some other minor fixes
---
.../modules/vmware/data/etc/vmware-vix/bootstrap | 2 ++
remote/modules/vmware/data/etc/vmware/bootstrap | 12 ++++++++
remote/modules/vmware/data/etc/vmware/config | 9 ------
remote/modules/vmware/data/etc/vmware/icu | 1 +
remote/modules/vmware/data/etc/vmware/locations | 3 ++
remote/modules/vmware/data/etc/vmware/usbarb.rules | 4 +++
remote/modules/vmware/templates/vmware/config | 24 +++++++++++++++
remote/modules/vmware/vmware.build | 34 +++++++++++++---------
8 files changed, 66 insertions(+), 23 deletions(-)
create mode 100644 remote/modules/vmware/data/etc/vmware-vix/bootstrap
create mode 100644 remote/modules/vmware/data/etc/vmware/bootstrap
delete mode 100644 remote/modules/vmware/data/etc/vmware/config
create mode 120000 remote/modules/vmware/data/etc/vmware/icu
create mode 100644 remote/modules/vmware/data/etc/vmware/locations
create mode 100644 remote/modules/vmware/data/etc/vmware/usbarb.rules
create mode 100644 remote/modules/vmware/templates/vmware/config
(limited to 'remote/modules/vmware')
diff --git a/remote/modules/vmware/data/etc/vmware-vix/bootstrap b/remote/modules/vmware/data/etc/vmware-vix/bootstrap
new file mode 100644
index 00000000..425074de
--- /dev/null
+++ b/remote/modules/vmware/data/etc/vmware-vix/bootstrap
@@ -0,0 +1,2 @@
+BINDIR="/usr/bin"
+
diff --git a/remote/modules/vmware/data/etc/vmware/bootstrap b/remote/modules/vmware/data/etc/vmware/bootstrap
new file mode 100644
index 00000000..0cc4af90
--- /dev/null
+++ b/remote/modules/vmware/data/etc/vmware/bootstrap
@@ -0,0 +1,12 @@
+PREFIX="/usr"
+BINDIR="/usr/bin"
+SBINDIR="/usr/sbin"
+LIBDIR="/usr/lib"
+DATADIR="/usr/share"
+SYSCONFDIR="/etc"
+DOCDIR="/usr/share/doc"
+MANDIR="/usr/share/man"
+INCLUDEDIR="/usr/include"
+INITDIR="/etc"
+INITSCRIPTDIR="/etc/init.d"
+
diff --git a/remote/modules/vmware/data/etc/vmware/config b/remote/modules/vmware/data/etc/vmware/config
deleted file mode 100644
index c76cc885..00000000
--- a/remote/modules/vmware/data/etc/vmware/config
+++ /dev/null
@@ -1,9 +0,0 @@
-.encoding = "UTF-8"
-prefvmx.minVmMemPct = "100"
-prefvmx.useRecommendedLockedMemSize = "TRUE"
-libdir = "/usr/lib/vmware"
-mks.ctlAltDel.ignore = "TRUE"
-mks.fullscreen.allowScreenSaver = "TRUE"
-fullScreenSwitch.onSeparateDesktop = "TRUE"
-msg.autoAnswer = "TRUE"
-
diff --git a/remote/modules/vmware/data/etc/vmware/icu b/remote/modules/vmware/data/etc/vmware/icu
new file mode 120000
index 00000000..d1ebea7d
--- /dev/null
+++ b/remote/modules/vmware/data/etc/vmware/icu
@@ -0,0 +1 @@
+/usr/lib/vmware/icu
\ No newline at end of file
diff --git a/remote/modules/vmware/data/etc/vmware/locations b/remote/modules/vmware/data/etc/vmware/locations
new file mode 100644
index 00000000..2d419546
--- /dev/null
+++ b/remote/modules/vmware/data/etc/vmware/locations
@@ -0,0 +1,3 @@
+# Empty locations file to catch downgrade
+# to WS 6.0
+# OpenSLX: No idea what above means, but better have this file... ;-)
diff --git a/remote/modules/vmware/data/etc/vmware/usbarb.rules b/remote/modules/vmware/data/etc/vmware/usbarb.rules
new file mode 100644
index 00000000..ae107c7b
--- /dev/null
+++ b/remote/modules/vmware/data/etc/vmware/usbarb.rules
@@ -0,0 +1,4 @@
+{
+ "version": 1,
+ "rules": []
+}
diff --git a/remote/modules/vmware/templates/vmware/config b/remote/modules/vmware/templates/vmware/config
new file mode 100644
index 00000000..d8420e0d
--- /dev/null
+++ b/remote/modules/vmware/templates/vmware/config
@@ -0,0 +1,24 @@
+.encoding = "UTF-8"
+installerDefaults.componentDownloadEnabled = "no"
+installerDefaults.dataCollectionEnabled = "no"
+installerDefaults.transferVersion = "1"
+installerDefaults.autoSoftwareUpdateEnabled = "no"
+NETWORKING = "yes"
+VMBLOCK_CONFED = "yes"
+VMCI_CONFED = "yes"
+VSOCK_CONFED = "yes"
+gksu.rootMethod = "sudo"
+MemTrimRate = "0"
+prefvmx.minVmMemPct = "100"
+prefvmx.useRecommendedLockedMemSize = "TRUE"
+libdir = "/usr/lib/vmware"
+mks.ctlAltDel.ignore = "TRUE"
+mks.fullscreen.allowScreenSaver = "TRUE"
+fullScreenSwitch.onSeparateDesktop = "TRUE"
+msg.autoAnswer = "TRUE"
+authd.fullpath = "/usr/sbin/vmware-authd"
+bindir = "/usr/bin"
+vix.config.version = "1"
+player.product.version = "%PLAYER_VERSION%"
+product.buildNumber = "%BUILD_NUMBER%"
+
diff --git a/remote/modules/vmware/vmware.build b/remote/modules/vmware/vmware.build
index 29b7491f..2ff6e895 100644
--- a/remote/modules/vmware/vmware.build
+++ b/remote/modules/vmware/vmware.build
@@ -27,6 +27,12 @@ fetch_source() {
build() {
local SRCDIR="./src/bundle"
[ ! -d "$SRCDIR" ] && perror "Extracted vmplayer bundle not found in $SRCDIR - please clean vmplayer module."
+ local PLAYER_MANIFEST="$MODULE_DIR/$SRCDIR/vmware-player-app/manifest.xml"
+ local WORKSTATION_MANIFEST="$MODULE_DIR/$SRCDIR/vmware-workstation/manifest.xml"
+ local BUILD_NUMBER=$(grep -o -E '[0-9]*' "$PLAYER_MANIFEST" | grep -o -E '[0-9]*')
+ local PLAYER_VERSION=$(grep -o -E '[0-9\.]*' "$PLAYER_MANIFEST" | grep -o -E '[0-9\.]*')
+ local WORKSTATION_VERSION=$(grep -o -E '[0-9\.]*' "$WORKSTATION_MANIFEST" 2>/dev/null | grep -o -E '[0-9\.]*')
+ local CORE_VERSION=$(grep -o -E '[0-9\.]*' "$PLAYER_MANIFEST" | grep -o -E '[0-9\.]*')
local TARGET="$MODULE_BUILD_DIR/usr/lib/vmware/"
mkdir -p "$TARGET"{lib,share,bin}
pinfo "Copying data to build dir"
@@ -60,6 +66,10 @@ build() {
sed -i 's#@@LIBCONF_DIR@@#/usr/lib/vmware/libconf#g' "$file"
done
+ # Copy vmware config template
+ mkdir -p "$MODULE_BUILD_DIR/etc/vmware"
+ sed "s#%PLAYER_VERSION%#$PLAYER_VERSION#g;s#%BUILD_NUMBER%#$BUILD_NUMBER#g" "$MODULE_DIR/templates/vmware/config" > "$MODULE_BUILD_DIR/etc/vmware/config"
+
# Compile kernel modules
pinfo "Compiling required kernel modules."
# build modules
@@ -72,7 +82,7 @@ post_copy() {
tarcopy "$(find /usr/lib/ /usr/lib64 -name gconv -type d)" "$TARGET_BUILD_DIR"
#Update Icon cache for vmplayer
gtk-update-icon-cache-3.0 "${TARGET_BUILD_DIR}/usr/share/icons/hicolor/" || pwarning "update-icon-cache-3.0 failed."
- #fix vmware-usbarbotrator bug
+ #fix vmware-usbarbitrator bug
date +'%Y.%m.%d' >"${TARGET_BUILD_DIR}/etc/arch-release"
copy_modules
}
@@ -83,15 +93,11 @@ build_modules() {
local VMWARE_MODCONFIG="$MODULE_DIR/$SRCDIR/vmware-vmx/bin/vmware-modconfig"
[ -e "$VMWARE_MODCONFIG" ] && chmod +x "$VMWARE_MODCONFIG" || perror "Could not find $VMWARE_MODCONFIG"
# link vmware-modconfig-console in the build dir
- local MANIFEST="$MODULE_DIR/$SRCDIR/vmware-vmx/manifest.xml"
- local BUILD_NUMBER="$(grep -o -E '[0-9]*' "$MANIFEST"|grep -o -E '[0-9]*')"
- local VERSION="$(grep -o -E '[0-9\.]*' "$MANIFEST"|grep -o -E '[0-9\.]*')"
- local CORE_VERSION="$(grep -o -E '[0-9\.]*' "$MANIFEST"|grep -o -E '[0-9\.]*')"
# /etc/vmware/config gen
- sed -i.bak1 '/^ETCDIR/d;/^VMISETCDIR/d;/bootstrap/d' "$VMWARE_MODCONFIG"
- sed -i.bak2 "s/libdir=.*/libdir=$(echo $MODULE_BUILD_DIR | escape_replace)\/usr\/lib\/vmware/g" "$VMWARE_MODCONFIG"
- sed -i.bak3 "s#set -e#set -e\nPREFIX=\"/usr\"\nBINDIR=\"/usr/bin\"\nSBINDIR=\"/usr/sbin\"\nLIBDIR=\"/usr/lib\"\nDATADIR=\"/usr/share\"\nSYSCONFDIR=\"/etc\"\nDOCDIR=\"/usr/share/doc\"\nMANDIR=\"/usr/share/man\"\nINCLUDEDIR=\"/usr/include\"\nINITDIR=\"/etc\"\nINITSCRIPTDIR=\"/etc/init.d\"\nVMWARE_INSTALLER=\"/usr/lib/vmware-installer/$CORE_VERSION\"\nVERSION=\"$CORE_VERSION\"\nVMISVERSION=\"$CORE_VERSION\"\nVMISPYVERSION=\"25\"#g" "$VMWARE_MODCONFIG"
+ sed -i '/^ETCDIR/d;/^VMISETCDIR/d;/bootstrap/d' "$VMWARE_MODCONFIG"
+ sed -i "s/libdir=.*/libdir=$(echo $MODULE_BUILD_DIR | escape_replace)\/usr\/lib\/vmware/g" "$VMWARE_MODCONFIG"
+ sed -i "s#set -e#set -e\nPREFIX=\"/usr\"\nBINDIR=\"/usr/bin\"\nSBINDIR=\"/usr/sbin\"\nLIBDIR=\"/usr/lib\"\nDATADIR=\"/usr/share\"\nSYSCONFDIR=\"/etc\"\nDOCDIR=\"/usr/share/doc\"\nMANDIR=\"/usr/share/man\"\nINCLUDEDIR=\"/usr/include\"\nINITDIR=\"/etc\"\nINITSCRIPTDIR=\"/etc/init.d\"\nVMWARE_INSTALLER=\"/usr/lib/vmware-installer/$CORE_VERSION\"\nVERSION=\"$CORE_VERSION\"\nVMISVERSION=\"$CORE_VERSION\"\nVMISPYVERSION=\"25\"#g" "$VMWARE_MODCONFIG"
[ -e "/etc/vmware/config" ] && cp "/etc/vmware/config" "/etc/vmware/config.mltk.bak"
@@ -113,17 +119,17 @@ authd.fullpath = "/usr/sbin/vmware-authd"
bindir = "/usr/bin"
vmware.fullpath = "/usr/bin/vmware"
vix.libdir = "/usr/lib/vmware-vix"
-vix.config.version = "1"
-player.product.version = "$VERSION"
+vix.config.version = "1"
+player.product.version = "$PLAYER_VERSION"
product.buildNumber = "$BUILD_NUMBER"
authd.client.port = "902"
authd.proxy.nfc = "vmware-hostd:ha-nfc"
authd.soapserver = "TRUE"
-product.version = "$VERSION"
-workstation.product.version = "$VERSION"
-product.name = "VMware Workstation"
+product.version = "$PLAYER_VERSION"
+workstation.product.version = "$WORKSTATION_VERSION"
+product.name = "VMware Player"
EOF
- mkdir -p "$MODULE_BUILD_DIR/usr/lib/vmware/modules"
+ mkdir -p "$MODULE_BUILD_DIR/usr/lib/vmware/modules"
ln -sf "$MODULE_DIR/$SRCDIR/vmware-vmx/extra/modules.xml" "$MODULE_BUILD_DIR/usr/lib/vmware/modules/"
ln -sf "$MODULE_DIR/$SRCDIR/vmware-vmx/lib/modules/source" "$MODULE_BUILD_DIR/usr/lib/vmware/modules/"
--
cgit v1.2.3-55-g7522
From 8a34e9349a76a18aaf849839afad42d26158d9ea Mon Sep 17 00:00:00 2001
From: Simon Rettberg
Date: Fri, 14 Feb 2014 19:41:38 +0100
Subject: Overhauled vmware kernel module patching, also added global kernel
version variables
Variables are now:
KERNEL_CURRENT_VERSION - currently running kernel (uname -r)
SYS_UTS_RELEASE - What uname -r will yield on the generated system
SYS_KERNEL - Just version number of SYS_UTS_RELEASE (eg. 3.5.6-12-openslx -> 3.5.6)
---
data/kernel.wanted.config | 2 +
remote/includes/kernel.inc | 18 ++-
remote/includes/versioncompare.inc | 63 +++++++++++
.../patches/vmblock__3.0-3.9__1.0-100.0.patch | 11 ++
.../vmware/patches/vmblock__3.10__1.0-100.0.patch | 34 ++++++
.../patches/vmblock__3.11-9.9__1.0-100.0.patch | 123 +++++++++++++++++++++
remote/modules/vmware/vmware.build | 63 ++++++++---
remote/setup_target | 3 +
8 files changed, 298 insertions(+), 19 deletions(-)
create mode 100644 remote/includes/versioncompare.inc
create mode 100644 remote/modules/vmware/patches/vmblock__3.0-3.9__1.0-100.0.patch
create mode 100644 remote/modules/vmware/patches/vmblock__3.10__1.0-100.0.patch
create mode 100644 remote/modules/vmware/patches/vmblock__3.11-9.9__1.0-100.0.patch
(limited to 'remote/modules/vmware')
diff --git a/data/kernel.wanted.config b/data/kernel.wanted.config
index 62dc3b37..ee41a80b 100644
--- a/data/kernel.wanted.config
+++ b/data/kernel.wanted.config
@@ -238,4 +238,6 @@ CONFIG_IP_PNP_DHCP=n
CONFIG_IP_PNP_BOOTP=n
CONFIG_IP_PNP_RARP=n
CONFIG_RD_XZ=y
+CONFIG_OPENVSWITCH=m
+CONFIG_OPENVSWITCH_GRE=n
diff --git a/remote/includes/kernel.inc b/remote/includes/kernel.inc
index ae5791df..ccd10970 100644
--- a/remote/includes/kernel.inc
+++ b/remote/includes/kernel.inc
@@ -13,13 +13,23 @@
# must be given as kernel/fs/nfs/nfs.ko
#
-# determine kernel version
-KERNEL_CURRENT_VERSION=$(uname -r)
-[ -z "$KERNEL_CURRENT_VERSION" ] && pwarning "Could not determine kernel version."
-
# set global KERNEL_TARGET_NAME
KERNEL_TARGET_NAME="kernel"
+get_kernel_version () {
+ # determine kernel version currently running on this machine
+ KERNEL_CURRENT_VERSION=$(uname -r)
+ [ -z "$KERNEL_CURRENT_VERSION" ] && pwarning "Could not determine kernel version."
+ # determine kernel version that will be running in the generated system
+ if [ -e "$MODULES_DIR/kernel/ksrc/include/generated/utsrelease.h" ]; then
+ SYS_UTS_RELEASE=$(grep 'UTS_RELEASE' "$MODULES_DIR/kernel/ksrc/include/generated/utsrelease.h" | awk -F '"' '{print $2}')
+ SYS_KERNEL=$(echo "$SYS_UTS_RELEASE" | grep -o -E '^[0-9\.]+')
+ else
+ SYS_UTS_RELEASE="(unknown-not-compiled-yet)"
+ SYS_KERNEL="$SYS_UTS_RELEASE"
+ fi
+}
+
check_kernel_build_dir() {
[ -d "${MODULES_DIR}/kernel/build" ] && KERNEL_BUILD_DIR="${MODULES_DIR}/kernel/build" \
|| perror "No build directory set for the kernel. Was is built?"
diff --git a/remote/includes/versioncompare.inc b/remote/includes/versioncompare.inc
new file mode 100644
index 00000000..75f59456
--- /dev/null
+++ b/remote/includes/versioncompare.inc
@@ -0,0 +1,63 @@
+
+# From http://stackoverflow.com/a/4025065/2043481
+# Returns 0 when equal, 1 when $1 > $2, 2 otherwise
+version_compare () {
+ if [[ "$1" == "$2" ]]; then
+ return 0
+ fi
+ local IFS=".-_"
+ local i ver1=($1) ver2=($2)
+ # fill empty fields in ver1 with zeros
+ for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)); do
+ ver1[i]=0
+ done
+ for ((i=0; i<${#ver1[@]}; i++)); do
+ if [[ -z "${ver2[i]}" ]]; then
+ # fill empty fields in ver2 with zeros
+ ver2[i]=0
+ fi
+ if ((10#${ver1[i]} > 10#${ver2[i]})); then
+ return 1
+ fi
+ if ((10#${ver1[i]} < 10#${ver2[i]})); then
+ return 2
+ fi
+ done
+ return 0
+}
+
+version_ge () {
+ version_compare "$1" "$2"
+ local RET=$?
+ [ "$RET" == "2" ] && return 1
+ return 0
+}
+
+version_le () {
+ version_compare "$1" "$2"
+ local RET=$?
+ [ "$RET" == "1" ] && return 1
+ return 0
+}
+
+version_gt () {
+ version_compare "$1" "$2"
+ local RET=$?
+ [ "$RET" == "1" ] && return 0
+ return 1
+}
+
+version_lt () {
+ version_compare "$1" "$2"
+ local RET=$?
+ [ "$RET" == "2" ] && return 0
+ return 1
+}
+
+version_eq () {
+ version_compare "$1" "$2"
+ return $?
+}
+
+version_eq "1.0" "1" && ! version_eq "1.0" "1.1" && version_ge "1.1" "1.0"
+
diff --git a/remote/modules/vmware/patches/vmblock__3.0-3.9__1.0-100.0.patch b/remote/modules/vmware/patches/vmblock__3.0-3.9__1.0-100.0.patch
new file mode 100644
index 00000000..89b3a7c6
--- /dev/null
+++ b/remote/modules/vmware/patches/vmblock__3.0-3.9__1.0-100.0.patch
@@ -0,0 +1,11 @@
+--- a/linux/control.c 2013-10-18 19:56:11.000000000 +0200
++++ b/linux/control.c 2014-02-14 15:54:59.895201379 +0100
+@@ -293,7 +293,7 @@
+
+ retval = i < 0 ? -EINVAL : blockOp(name, blocker);
+
+- putname(name);
++ __putname(name);
+
+ return retval;
+ }
diff --git a/remote/modules/vmware/patches/vmblock__3.10__1.0-100.0.patch b/remote/modules/vmware/patches/vmblock__3.10__1.0-100.0.patch
new file mode 100644
index 00000000..e54317f9
--- /dev/null
+++ b/remote/modules/vmware/patches/vmblock__3.10__1.0-100.0.patch
@@ -0,0 +1,34 @@
+--- a/linux/control.c 2013-10-18 19:56:11.000000000 +0200
++++ b/linux/control.c 2014-02-14 16:20:18.667236035 +0100
+@@ -208,17 +208,18 @@
+ VMBlockSetProcEntryOwner(controlProcMountpoint);
+
+ /* Create /proc/fs/vmblock/dev */
+- controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
++ /* controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
+ VMBLOCK_CONTROL_MODE,
+- controlProcDirEntry);
+- if (!controlProcEntry) {
++ controlProcDirEntry);*/
++ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME, VMBLOCK_CONTROL_MODE, controlProcDirEntry, &ControlFileOps);
++ if (controlProcEntry == NULL) {
+ Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n");
+ remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry);
+ remove_proc_entry(VMBLOCK_CONTROL_PROC_DIRNAME, NULL);
+ return -EINVAL;
+ }
+
+- controlProcEntry->proc_fops = &ControlFileOps;
++ /*controlProcEntry->proc_fops = &ControlFileOps;*/
+ return 0;
+ }
+
+@@ -293,7 +294,7 @@
+
+ retval = i < 0 ? -EINVAL : blockOp(name, blocker);
+
+- putname(name);
++ __putname(name);
+
+ return retval;
+ }
diff --git a/remote/modules/vmware/patches/vmblock__3.11-9.9__1.0-100.0.patch b/remote/modules/vmware/patches/vmblock__3.11-9.9__1.0-100.0.patch
new file mode 100644
index 00000000..dedb2646
--- /dev/null
+++ b/remote/modules/vmware/patches/vmblock__3.11-9.9__1.0-100.0.patch
@@ -0,0 +1,123 @@
+--- a/linux/control.c 2013-10-18 19:56:11.000000000 +0200
++++ b/linux/control.c 2014-02-14 16:20:18.667236035 +0100
+@@ -208,17 +208,18 @@
+ VMBlockSetProcEntryOwner(controlProcMountpoint);
+
+ /* Create /proc/fs/vmblock/dev */
+- controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
++ /* controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
+ VMBLOCK_CONTROL_MODE,
+- controlProcDirEntry);
+- if (!controlProcEntry) {
++ controlProcDirEntry);*/
++ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME, VMBLOCK_CONTROL_MODE, controlProcDirEntry, &ControlFileOps);
++ if (controlProcEntry == NULL) {
+ Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n");
+ remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry);
+ remove_proc_entry(VMBLOCK_CONTROL_PROC_DIRNAME, NULL);
+ return -EINVAL;
+ }
+
+- controlProcEntry->proc_fops = &ControlFileOps;
++ /*controlProcEntry->proc_fops = &ControlFileOps;*/
+ return 0;
+ }
+
+@@ -293,7 +294,7 @@
+
+ retval = i < 0 ? -EINVAL : blockOp(name, blocker);
+
+- putname(name);
++ __putname(name);
+
+ return retval;
+ }
+--- a/linux/file.c 2013-10-18 19:56:11.000000000 +0200
++++ b/linux/file.c 2014-02-14 16:20:21.455236098 +0100
+@@ -38,46 +38,6 @@
+ typedef ino_t inode_num_t;
+ #endif
+
+-/* Specifically for our filldir_t callback */
+-typedef struct FilldirInfo {
+- filldir_t filldir;
+- void *dirent;
+-} FilldirInfo;
+-
+-
+-/*
+- *----------------------------------------------------------------------------
+- *
+- * Filldir --
+- *
+- * Callback function for readdir that we use in place of the one provided.
+- * This allows us to specify that each dentry is a symlink, but pass through
+- * everything else to the original filldir function.
+- *
+- * Results:
+- * Original filldir's return value.
+- *
+- * Side effects:
+- * Directory information gets copied to user's buffer.
+- *
+- *----------------------------------------------------------------------------
+- */
+-
+-static int
+-Filldir(void *buf, // IN: Dirent buffer passed from FileOpReaddir
+- const char *name, // IN: Dirent name
+- int namelen, // IN: len of dirent's name
+- loff_t offset, // IN: Offset
+- inode_num_t ino, // IN: Inode number of dirent
+- unsigned int d_type) // IN: Type of file
+-{
+- FilldirInfo *info = buf;
+-
+- /* Specify DT_LNK regardless */
+- return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK);
+-}
+-
+-
+ /* File operations */
+
+ /*
+@@ -166,11 +126,10 @@
+
+ static int
+ FileOpReaddir(struct file *file, // IN
+- void *dirent, // IN
+- filldir_t filldir) // IN
++ struct dir_context *ctx) // IN
+ {
+ int ret;
+- FilldirInfo info;
++
+ struct file *actualFile;
+
+ if (!file) {
+@@ -184,12 +143,10 @@
+ return -EINVAL;
+ }
+
+- info.filldir = filldir;
+- info.dirent = dirent;
+-
+- actualFile->f_pos = file->f_pos;
+- ret = vfs_readdir(actualFile, Filldir, &info);
+- file->f_pos = actualFile->f_pos;
++ /* Ricky Wong Yung Fei:
++ * Manipulation of pos is now handled internally by iterate_dir().
++ */
++ ret = iterate_dir(actualFile, ctx);
+
+ return ret;
+ }
+@@ -237,7 +194,7 @@
+
+
+ struct file_operations RootFileOps = {
+- .readdir = FileOpReaddir,
++ .iterate = FileOpReaddir,
+ .open = FileOpOpen,
+ .release = FileOpRelease,
+ };
diff --git a/remote/modules/vmware/vmware.build b/remote/modules/vmware/vmware.build
index 2ff6e895..16ee4c77 100644
--- a/remote/modules/vmware/vmware.build
+++ b/remote/modules/vmware/vmware.build
@@ -136,24 +136,46 @@ EOF
ln -sf "appLoader" "$MODULE_BUILD_DIR/usr/lib/vmware/bin/vmware-modconfig"
ln -sf "appLoader" "$MODULE_BUILD_DIR/usr/lib/vmware/bin/vmware-modconfig-console"
- [ ! -e "$MODULES_DIR/kernel/ksrc/include/generated/utsrelease.h" ] && perror "Could not find uts release!!!"
- local UTS_RELEASE="$(cat "$MODULES_DIR/kernel/ksrc/include/generated/utsrelease.h" | awk -F '"' '{print $2}')"
- pinfo "Patching vmblock.tar"
+ # See what we need to patch
cd "$MODULE_BUILD_DIR/usr/lib/vmware/modules/source" || perror "cd failed."
- tar xf "vmblock.tar" || perror "untar of vmblock.tar failed."
- for sourcefile in $(grep -l -r -E '\sputname' "vmblock-only/"); do
- sed -r -i 's/\sputname/__putname/g' "$sourcefile" || perror "sed of $sourcefile failed."
+ local KMOD SHORT PATCH MIN_KERN MAX_KERN
+ for KMOD in *.tar; do
+ SHORT="${KMOD%%.tar}"
+ [ -e ".${SHORT}.patched" ] && continue
+ for PATCH in $(find "${MODULE_DIR}/patches/" -name "${SHORT}__*__*.patch"); do
+ parse_patch_name "$PATCH"
+ [ -z "${MIN_KERN}" -o -z "${MAX_KERN}" ] && perror "Could not parse patch filename"
+ if version_lt "$SYS_KERNEL" "$MIN_KERN" || version_gt "$SYS_KERNEL" "$MAX_KERN"; then
+ pinfo "*NOT* applying $PATCH (min=$MIN_KERN max=$MAX_KERN cmp=$SYS_KERNEL)"
+ continue # Not suitable for our kernel
+ fi
+ pinfo "Applying $PATCH (min=$MIN_KERN max=$MAX_KERN cmp=$SYS_KERNEL)"
+ [ ! -d "${SHORT}-only" ] && tar xf "$KMOD"
+ [ ! -d "${SHORT}-only" ] && perror "untar of $KMOD failed."
+ cd "${SHORT}-only" || perror "Where is ${SHORT}-only?"
+ if ! patch -p1 < "$PATCH"; then
+ cd ..
+ rm -rf -- "${SHORT}-only"
+ perror "Applying $PATCH failed."
+ fi
+ cd ..
+ done
+ if [ -d "${SHORT}-only" ]; then
+ tar cf "$KMOD" "${SHORT}-only/" || perror "repacking of $KMOD failed."
+ rm -rf -- "${SHORT}-only"
+ touch ".${SHORT}.patched"
+ fi
done
- tar cf "vmblock.tar" "vmblock-only/" || perror "repacking of vmblock.tar failed."
- cd -
-
+ cd "$MODULE_DIR" || perror "wat."
+ #
+ # Then, compile
pinfo "KOMPILIERE VMWARE KERNEL MODULE"
for MOD in vsock vmblock vmmon vmnet vmci; do
pinfo "Kompiliere $MOD"
- [ -s "/lib/modules/$UTS_RELEASE/vmplayer/$MOD.ko" ] && unlink "/lib/modules/$UTS_RELEASE/vmplayer/$MOD.ko"
- "$VMWARE_MODCONFIG" --console --build-mod -k "$UTS_RELEASE" "$MOD" "$(which gcc)" "$MODULES_DIR/kernel/ksrc/include" "vmplayer" "$MOD"
- [ ! -s "/lib/modules/$UTS_RELEASE/vmplayer/$MOD.ko" ] && perror "Error compiling via $VMWARE_MODCONFIG"
- done
+ [ -s "/lib/modules/$SYS_UTS_RELEASE/vmplayer/$MOD.ko" ] && unlink "/lib/modules/$SYS_UTS_RELEASE/vmplayer/$MOD.ko"
+ "$VMWARE_MODCONFIG" --console --build-mod -k "$SYS_UTS_RELEASE" "$MOD" "$(which gcc)" "$MODULES_DIR/kernel/ksrc/include" "vmplayer" "$MOD"
+ [ ! -s "/lib/modules/$SYS_UTS_RELEASE/vmplayer/$MOD.ko" ] && perror "Error compiling via $VMWARE_MODCONFIG"
+ done
cd -
@@ -163,8 +185,19 @@ EOF
}
function copy_modules() {
- local UTS_RELEASE="$(cat "$MODULES_DIR/kernel/ksrc/include/generated/utsrelease.h" | awk -F '"' '{print $2}')"
mkdir -p "$TARGET_BUILD_DIR/lib/modules/vmware/"
- cp "/lib/modules/$UTS_RELEASE/vmplayer/"* "$TARGET_BUILD_DIR/lib/modules/vmware/" || perror "Could not cp vmware modules to target!"
+ cp "/lib/modules/$SYS_UTS_RELEASE/vmplayer/"* "$TARGET_BUILD_DIR/lib/modules/vmware/" || perror "Could not cp vmware modules to target!"
+}
+
+function parse_patch_name() {
+ [ $# -ne 1 ] && perror "parse_patch_name: Wrong parameter count."
+ local PATCH="$1"
+ MIN_KERN=$(echo "$PATCH" | sed -r 's/^[^_]+__([0-9\.]+)-[0-9\.]+__[^_]+\.patch$/\1/g')
+ [[ "$MIN_KERN" == /* ]] && MIN_KERN=$(echo "$PATCH" | sed -r 's/^[^_]+__([0-9\.]+)__[^_]+\.patch$/\1/g')
+ MAX_KERN=$(echo "$PATCH" | sed -r 's/^[^_]+__[0-9\.]+-([0-9\.]+)__[^_]+\.patch$/\1/g')
+ [[ "$MAX_KERN" == /* ]] && MAX_KERN=$(echo "$PATCH" | sed -r 's/^[^_]+__([0-9\.]+)__[^_]+\.patch$/\1/g')
+ [[ "$MIN_KERN" == /* ]] && MIN_KERN=
+ [[ "$MAX_KERN" == /* ]] && MAX_KERN=
+ # TODO: Parse min and max vmplayer/workstation version
}
diff --git a/remote/setup_target b/remote/setup_target
index 9ae948ab..4b026a6d 100755
--- a/remote/setup_target
+++ b/remote/setup_target
@@ -60,6 +60,7 @@ EXPORT_DIR="/export/build"
PROCESSED_MODULES=""
initial_checks () {
+ get_kernel_version
detect_distribution
}
@@ -390,6 +391,8 @@ process_module() {
pdebug "## Installing dependencies"
cd "${MODULE_DIR}" || perror "cd to '${MODULE_DIR}' failed."
install_dependencies
+ # update kernel version variables before running a module, as the last one might have been the kernel...
+ get_kernel_version
# Fetch source code
if [ ! -e "$SOURCE_FLAG" ]; then
pinfo "## Fetching source"
--
cgit v1.2.3-55-g7522