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