From a2054903d7fa6d93549f9c5921e73ba1d0ebffbf Mon Sep 17 00:00:00 2001
From: Jonathan Bauer
Date: Tue, 11 Mar 2014 17:07:43 +0100
Subject: [vmware] port to new chroot-run functionality
---
remote/modules/vmware/vmware.build | 218 ++++++-------------------------------
remote/modules/vmware/vmware.conf | 23 +++-
2 files changed, 57 insertions(+), 184 deletions(-)
(limited to 'remote/modules/vmware')
diff --git a/remote/modules/vmware/vmware.build b/remote/modules/vmware/vmware.build
index 16ee4c77..8636f335 100644
--- a/remote/modules/vmware/vmware.build
+++ b/remote/modules/vmware/vmware.build
@@ -1,203 +1,57 @@
fetch_source() {
- [ -e "./src" ] && { rm -r ./src || perror "Could not delete old src dir."; }
- mkdir -p "./src" || perror "Could not mkdir src"
- cd "./src" || perror "cd fail."
+ [ -e "${MODULE_DIR}/src" -a -d "${MODULE_DIR}/src" ] && \
+ { rm -r "${MODULE_DIR}/src" || perror "Could not delete old src dir."; }
+ mkdir -p "${MODULE_DIR}/src" || perror "Could not mkdir src"
+ cd "${MODULE_DIR}/src" || perror "cd fail."
+
# Get directory listing
wget -O "index.html" "$REQUIRED_DOWNLOAD_BASE" || perror "Could not download vmware dir index"
- # # Try to treat it as version listing
- # local LATEST=$(grep -o -E '"[0-9]+\.[0-9]+\.[0-9]+/' "index.html" | cut -c 2- | sort --version-sort | tail -n 1)
- # if [ -n "$LATEST" ]; then
- # REQUIRED_DOWNLOAD_BASE+="$LATEST"
- # # Determine latest build
- # fi
- local FILE=$(grep -E -o -i "href=\"VMware-$REQUIRED_TYPE-[^\"]+[\._\-]$ARCHREGEX[\._\-][^\"]+\"" "index.html" | head -n 1 | awk -F '"' '{printf $2}')
- [ -z "$FILE" ] && perror "Could not determine vmware $REQUIRED_TYPE bundle file for current arch from $MODULE_DIR/src/index.html"
+
+ VMWARE_BUNDLE_FILE=$(grep -E -o -i "href=\"VMware-$REQUIRED_TYPE-[^\"]+[\._\-]$ARCHREGEX[\._\-][^\"]+\"" "index.html" | head -n 1 | awk -F '"' '{printf $2}')
+ [ -z "$VMWARE_BUNDLE_FILE" ] && perror "Could not determine vmware $REQUIRED_TYPE bundle file for current arch from $MODULE_DIR/src/index.html"
# Download file
- wget -O "$FILE" "$REQUIRED_DOWNLOAD_BASE/$FILE" || perror "Could not download $FILE from $REQUIRED_DOWNLOAD_BASE"
- if [[ "$FILE" == *.tar ]]; then
- tar -x "${FILE%.tar}" -f "$FILE" || perror "Could not untar downloaded $FILE"
- unlink "$FILE"
- FILE="${FILE%.tar}"
+ wget -O "$VMWARE_BUNDLE_FILE" "$REQUIRED_DOWNLOAD_BASE/$VMWARE_BUNDLE_FILE" || perror "Could not download $VMWARE_BUNDLE_FILE from $REQUIRED_DOWNLOAD_BASE"
+ if [[ "$VMWARE_BUNDLE_FILE" == *.tar ]]; then
+ tar -x "${VMWARE_BUNDLE_FILE%.tar}" -f "$VMWARE_BUNDLE_FILE" || perror "Could not untar downloaded $VMWARE_BUNDLE_FILE"
+ unlink "$VMWARE_BUNDLE_FILE"
+ VMWARE_BUNDLE_FILE="${VMWARE_BUNDLE_FILE%.tar}"
fi
- pinfo "Extracting bundle of VMware $(echo "$FILE" | grep -o -E '[0-9]+\.[0-9]+\.[0-9]+') build $(echo "$FILE" | grep -o -E '[0-9]{7,9}') for $(echo "$FILE" | grep -o -E "$ARCHREGEX")"
- ./$FILE -x "./bundle/" || perror "Extracting the vmware bundle failed."
- pinfo "done"
+
+ cd - >/dev/null
}
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"
- cp -r ./$SRCDIR/vmware-installer/lib/lib* "$TARGET" || perror "Could not copy libs from vmware-installer"
- cp -r ./$SRCDIR/vmware-network-editor/lib "$MODULE_BUILD_DIR/usr/" || perror "Could not copy libs from vmware-network-config"
- cp -r ./$SRCDIR/vmware-$REQUIRED_TYPE/lib/share "$TARGET" || perror "Could not copy lib/share from vmware-player"
- cp -r ./$SRCDIR/vmware-$REQUIRED_TYPE/share "$MODULE_BUILD_DIR/usr/" || perror "C0oudld not copy share from vmware-player"
- cp -r ./$SRCDIR/vmware-player-app/etc "$MODULE_BUILD_DIR/" || perror "Could not copy bin and etc from vmware-player-app."
- cp -r ./$SRCDIR/vmware-player-app/lib/* "$TARGET" || perror "Could not copy lib subtree from vmware-player-app."
- cp -r ./$SRCDIR/vmware-player-app/{bin,share} "$MODULE_BUILD_DIR/usr/" || perror "could not copy share from vmware-player-app."
- cp -r ./$SRCDIR/vmware-usbarbitrator/bin "$MODULE_BUILD_DIR/usr/" || perror "Could not copy bin from vmware-usbarbitrator."
- cp -r ./$SRCDIR/vmware-vmx/{bin,etc,sbin} "$MODULE_BUILD_DIR/usr/" || perror "could not copy bin,etc,sbin to usr for vmare-vmx."
- cp -r ./$SRCDIR/vmware-vmx/lib/{bin,icu,lib,libconf,scripts} "$TARGET" || perror "Could not copy many things from vmware-vmx."
- if [ -d "./$SRCDIR/vmware-workstation-server" ]; then
- cp -r ./$SRCDIR/vmware-workstation-server/{bin,lib} "$TARGET" || perror "Could not copy many things from vmware-workstation-server."
- fi
- [ ! -L "$TARGET/bin/vmplayer" ] && { ln -s /usr/lib/vmware/bin/appLoader "$TARGET/bin/vmplayer" || perror "Could not link vmplayer to appLoader."; }
- chmod +x "$TARGET"/bin/*
- chmod u+s "$TARGET"/bin/vmware-vmx* || perror "Error setting suid-bit on vmware-vmx*"
- chmod +x "$MODULE_BUILD_DIR"/usr/{bin,sbin}/*
- chmod u+s "$MODULE_BUILD_DIR"/usr/bin/vmware-mount || perror "Error setting suid-bit on vmware-mount"
- chmod u+s "$MODULE_BUILD_DIR"/usr/sbin/vmware-authd || perror "Error setting suid-bit on vmware-authd"
- chmod +x "$TARGET"/lib/*.sh
- find "$MODULE_BUILD_DIR" -name '*.sh' -exec chmod +x {} \;
- for file in $(grep -rl -E "^#!/" "$MODULE_BUILD_DIR"); do
- chmod +x "$file"
- done
- pinfo "Patching LIBCONF_DIR"
- local file=""
- for file in $(grep -rl "@@LIBCONF_DIR@@" "$MODULE_BUILD_DIR"); do
- 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
- build_modules
+ # prepare the build directory with the files needed during the chroot
+ cp "${MODULE_DIR}/src/$VMWARE_BUNDLE_FILE" "${MODULE_BUILD_DIR}/$VMWARE_BUNDLE_FILE"
+ cp -r "${MODULE_DIR}/patches" "${MODULE_BUILD_DIR}"
+
+ pinfo "Installing vmware per chroot..."
+ chroot_run "${MODULE_BUILD_DIR}" <<-EOF
+ yes | sh /"${VMWARE_BUNDLE_FILE}" --eulas-agreed --console --required
+ vmware-modconfig --console --build-mod -k "${SYS_UTS_RELEASE}" vmnet $(which gcc) "${MODULES_DIR}"/kernel/ksrc/include/ vmplayer vmnet
+ vmware-modconfig --console --build-mod -k "${SYS_UTS_RELEASE}" vmmon $(which gcc) "${MODULES_DIR}"/kernel/ksrc/include/ vmplayer vmmon
+ EOF
+
+ # cleanup unneeded files
+ rm -rf -- "${MODULE_BUILD_DIR}/etc/vmware-installer"
+ rm -rf -- "${MODULE_BUILD_DIR}/usr/lib/vmware-installer"
+ rm -rf -- "${MODULE_BUILD_DIR}/usr/lib/vmware-ovftool"
+ unlink "${MODULE_BUILD_DIR}/$VMWARE_BUNDLE_FILE"
}
post_copy() {
# FIXME: gconftool is copied without dependencies
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-usbarbitrator bug
- date +'%Y.%m.%d' >"${TARGET_BUILD_DIR}/etc/arch-release"
- copy_modules
-}
-build_modules() {
- # need to be in src
- cd "$MODULE_DIR/src" || perror "Could not cd to '$MODULE_DIR/src'"
- 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
- # /etc/vmware/config gen
-
- 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"
- mkdir -p "/etc/vmware" || perror "Could not create /etc/vmware"
- cat > "/etc/vmware/config" << EOF
-.encoding = "UTF-8"
-installerDefaults.componentDownloadEnabled = "yes"
-installerDefaults.dataCollectionEnabled = "no"
-installerDefaults.transferVersion = "1"
-installerDefaults.autoSoftwareUpdateEnabled = "yes"
-NETWORKING = "yes"
-VMBLOCK_CONFED = "yes"
-gksu.rootMethod = "sudo"
-libdir = "$MODULE_BUILD_DIR/usr/lib/vmware"
-VMCI_CONFED = "yes"
-VSOCK_CONFED = "yes"
-initscriptdir = "/etc/init.d"
-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 = "$PLAYER_VERSION"
-product.buildNumber = "$BUILD_NUMBER"
-authd.client.port = "902"
-authd.proxy.nfc = "vmware-hostd:ha-nfc"
-authd.soapserver = "TRUE"
-product.version = "$PLAYER_VERSION"
-workstation.product.version = "$WORKSTATION_VERSION"
-product.name = "VMware Player"
-EOF
- 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/"
-
- 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"
-
- # See what we need to patch
- cd "$MODULE_BUILD_DIR/usr/lib/vmware/modules/source" || perror "cd 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
- 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/$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 -
-
- [ -e /etc/vmware/config ] && rm -f /etc/vmware/config
- cp /etc/vmware/config.mltk.bak /etc/vmware/config
+ # 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-usbarbitrator bug
+ date +'%Y.%m.%d' >"${TARGET_BUILD_DIR}/etc/arch-release"
-function copy_modules() {
mkdir -p "$TARGET_BUILD_DIR/lib/modules/vmware/"
- 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
+ cp "${MODULE_BUILD_DIR}/lib/modules/$SYS_UTS_RELEASE/vmplayer/"* "$TARGET_BUILD_DIR/lib/modules/vmware/" || perror "Could not cp vmware modules to target!"
}
diff --git a/remote/modules/vmware/vmware.conf b/remote/modules/vmware/vmware.conf
index b040152e..51e73b85 100644
--- a/remote/modules/vmware/vmware.conf
+++ b/remote/modules/vmware/vmware.conf
@@ -1,4 +1,23 @@
-REQUIRED_DIRECTORIES="/etc /usr"
REQUIRED_DOWNLOAD_BASE="http://softwareupdate.vmware.com/cds/vmw-desktop/ws/10.0.1/1379776/linux/core/"
REQUIRED_TYPE="workstation"
-
+REQUIRED_DIRECTORIES="
+ /etc/vmware
+ /usr/sbin
+ /usr/lib/vmware/bin
+ /usr/lib/vmware/hostd
+ /usr/lib/vmware/icu
+ /usr/lib/vmware/lib
+ /usr/lib/vmware/libconf
+ /usr/lib/vmware/licenses
+ /usr/lib/vmware/resources
+ /usr/lib/vmware/scripts
+ /usr/lib/vmware/share
+ /usr/lib/vmware/xkeymap
+"
+REQUIRED_FILES="
+ /usr/lib/vmware/config
+ /usr/bin/vmware-usbarbitrator
+"
+REQUIRED_BINARIES="
+ vmnet-netifup
+"
--
cgit v1.2.3-55-g7522