summaryrefslogtreecommitdiffstats
path: root/remote/modules/vmplayer/vmplayer.build
blob: fc18936e41486ea653e96ccb65616f457b98f2b3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
fetch_source() {
	#mount vmware bundle directory
	[ ! -d /mnt/store ] && mkdir -p /mnt/store
	if [ "x$(ls /mnt/store)" == "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
	# 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/ -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() {
	pdebug "PAtCHIGN"
	# 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 '<buildNumber>[0-9]*</buildNumber>' "$MANIFEST"|grep -o -E '[0-9]*')"
	local VERSION="$(grep -o -E '<version>[0-9.]*</version>' "$MANIFEST"|grep -o -E '[0-9.]*')"
	local CORE_VERSION="$(grep -o -E '<coreVersion>[0-9.]*</coreVersion>' "$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"
	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 "KOMPALIERE VMWARE KERNEL MODULE"
	for MOD in vsock vmblock vmmon vmnet vmci; do
		pinfo "Kompaliere $MOD"
		"$VMWARE_MODCONFIG" --console --build-mod -k "$UTS_RELEASE $MOD" "$(which gcc)" "$MODULES_DIR/kernel/ksrc/include" "vmplayer" "$MOD"
	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!"
}