fetch_source() {
#mount vmware bundle directory
[ ! -d /mnt/store ] && mkdir -p /mnt/store
if [ "x$(ls /mnt/store/vmware/*.bundle)" == "x" ]; then
mount -t nfs -o ro,async,nolock 132.230.8.113:/srv/vmext /mnt/store || perror "Could not mount vmware bundle directory. Exiting."
fi
ARCH="$(uname -m)"
[ "$ARCH" = "i686" ] && ARCH=i386
local BUNDLE="$(find /mnt/store/vmware -type f -name "VMware-Player*.${ARCH}.bundle" | head -1)"
[ -z "$BUNDLE" ] && perror "Could not find vmplayer at /mnt/store for ARCH = $ARCH"
[ -e "./src" ] && { rm -r ./src || perror "Could not delete old src dir."; }
pinfo "Extracting bundle"
$BUNDLE -x ./src/ || perror "Extracting the vmplayer bundle failed."
pinfo "done"
}
build() {
[ ! -d "./src/vmware-player" ] && perror "Extracted vmplayer bundle not found in ./src - please clean vmplayer module."
local TARGET="$MODULE_BUILD_DIR/usr/lib/vmware/"
mkdir -p "$TARGET"{lib,share,bin}
pinfo "Copying data to build dir"
cp -r ./src/vmware-installer/lib/lib* "$TARGET" || perror "Could not copy libs from vmware-installer"
cp -r ./src/vmware-network-editor/lib "$MODULE_BUILD_DIR/usr/" || perror "Could not copy libs from vmware-network-config"
cp -r ./src/vmware-player/lib/share "$TARGET" || perror "Could not copy lib/share from vmware-player"
cp -r ./src/vmware-player/share "$MODULE_BUILD_DIR/usr/" || perror "C0oudld not copy share from vmware-player"
cp -r ./src/vmware-player-app/etc "$MODULE_BUILD_DIR/" || perror "Could not copy bin and etc from vmware-player-app."
cp -r ./src/vmware-player-app/lib/* "$TARGET" || perror "Could not copy lib subtree from vmware-player-app."
cp -r ./src/vmware-player-app/{bin,share} "$MODULE_BUILD_DIR/usr/" || perror "could not copy share from vmware-player-app."
cp -r ./src/vmware-usbarbitrator/bin "$MODULE_BUILD_DIR/usr/" || perror "Could not copy bin from vmware-usbarbitrator."
cp -r ./src/vmware-vmx/{bin,etc,sbin} "$MODULE_BUILD_DIR/usr/" || perror "could not copy bin,etc,sbin to usr for vmare-vmx."
cp -r ./src/vmware-vmx/lib/{bin,icu,lib,libconf,scripts} "$TARGET" || perror "Could not copy many things from vmware-vmx."
[ ! -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
# REMOVED: libgconf stuff was an old hackfix? seems not needed anymore
# Extract libgconf-2 stuff
#COPYLIST="list_dpkg_output"
#[ -e "${COPYLIST}" ] && rm "${COPYLIST}"
#list_packet_files >> "${COPYLIST}"
#tarcopy "$(cat "${COPYLIST}" | sort -u)" "${MODULE_BUILD_DIR}"
# Compile kernel modules
pinfo "Compiling required kernel modules."
# build modules
build_modules
}
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-usbarbotrator 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/src/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/src/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"
[ -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 = "$VERSION"
product.buildNumber = "$BUILD_NUMBER"
authd.client.port = "902"
authd.proxy.nfc = "vmware-hostd:ha-nfc"
authd.soapserver = "TRUE"
product.version = "9.0.1"
workstation.product.version = "9.0.1"
product.name = "VMware Workstation"
EOF
mkdir -p "$MODULE_BUILD_DIR/usr/lib/vmware/modules"
ln -sf "$MODULE_DIR/src/vmware-vmx/extra/modules.xml" "$MODULE_BUILD_DIR/usr/lib/vmware/modules/"
ln -sf "$MODULE_DIR/src/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"
[ ! -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"
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."
done
tar cf "vmblock.tar" "vmblock-only/" || perror "repacking of vmblock.tar failed."
cd -
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
cd -
[ -e /etc/vmware/config ] && rm -f /etc/vmware/config
cp /etc/vmware/config.mltk.bak /etc/vmware/config
}
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!"
}