-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvmware-player.install
187 lines (133 loc) · 5.97 KB
/
vmware-player.install
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
patch_kernel_modules() {
# FIXME: Thi is method broken. Don't work
# INFO: https://github.com/mkubecek/vmware-host-modules/blob/player-15.5.0/INSTALL
pkgver=$(echo $1 | sed -e 's/-[0-9]$//')
kernel_branch=$(uname -r | sed -r 's/[\.][0-9A-Z\-]+$//')
if [[ "${pkgver}" > 14.999 && "${pkgver}" < 16.0 ]] && [[ "${kernel_branch}" > 4.8 ]]; then
echo "==> Patch VMWare kernel modules. pkgver=${pkgver}, kernel_branch=${kernel_branch}"
tmpdir=$(mktemp -d -t 'vmware_host_modules.XXXXXXX')
cd "${tmpdir}" && \
git clone --single-branch --branch p${pkgver}-k${kernel_branch} https://github.com/mkubecek/vmware-host-modules.git && \
cd ./vmware-host-modules && \
tar -cf /lib/vmware/modules/source/vmmon.tar vmmon-only && \
tar -cf /lib/vmware/modules/source/vmnet.tar vmnet-only
rm -r "${tmpdir}"
fi
}
download_patched_modules(){
# INFO: https://github.com/mkubecek/vmware-host-modules/blob/player-15.5.0/INSTALL
echo '==> Download patched modules'
pkgver=$(echo $1 | sed -e 's/-[0-9]$//')
kernel_branch=$(uname -r | sed -r 's/[\.][0-9A-Z\-]+$//')
if [[ "${pkgver}" > 14.999 && "${pkgver}" < 20.0 ]] && [[ "${kernel_branch}" > 4.8 ]]; then
tmpdir=$(mktemp -d -t 'vmware_host_modules.XXXXXXX')
cd "${tmpdir}" && \
echo "==> Download to temp dir: ${tmpdir}/p${pkgver}-k${kernel_branch}.tar.gz" && \
wget -nv https://github.com/mkubecek/vmware-host-modules/archive/refs/tags/p${pkgver}-k${kernel_branch}.tar.gz && \
echo "==> Extracting archive: p${pkgver}-k${kernel_branch}.tar.gz" && \
tar -xzf p${pkgver}-k${kernel_branch}.tar.gz && \
cd vmware-host-modules-p${pkgver}-k${kernel_branch} && \
tar -cf vmmon.tar vmmon-only && \
tar -cf vmnet.tar vmnet-only && \
cp -v vmmon.tar vmnet.tar /usr/lib/vmware/modules/source/
if [ $? -eq 0 ]; then echo "==> Patches for kernel modules succsess dowloaded"; fi
rm -r "${tmpdir}"
fi
}
build_kernel_modules(){
echo '==> Build and install VMWare kernel modules with vmware-modconfig'
vmware-modconfig --console --install-all
if [ $? -eq 0 ]; then
echo "==> Patches for kernel modules compiled and installed is success";
else
echo "==> Compiling kernel modules finished with mistakes. Result code=$?";
fi
# FIXME: vmware-modconfig do not work correct, need run manual:
# depmod
# modprobe vmmon
#
# Then check, do is running?
# lsmod | grep vmmon
}
pre_install() {
return
}
post_install() {
download_patched_modules $1 && build_kernel_modules
systemctl restart systemd-modules-load # Load kernel modules listed in /usr/lib/modules-load.d/
systemctl enable vmware-usbarbitrator.service && \
systemctl start vmware-usbarbitrator.service && \
systemctl restart vmware-networks-configuration.service # Creating net config in /etc/vmware
systemctl enable vmware-networks.service && \
sleep 10 && \ # Fixing SystemD issue: vmware-networks.service: Start request repeated too quickly
systemctl start vmware-networks.service
}
pre_upgrade() {
systemctl stop vmware-usbarbitrator.service && \
systemctl stop vmware-networks.service
echo '==> Backup /etc/vmware-installer/database'
mv /etc/vmware-installer/database /etc/vmware-installer/database.bak
}
post_upgrade() {
echo '==> Migration data from /etc/vmware-installer/database.bak to /etc/vmware-installer/database'
sqlite3 << EOF
attach '/etc/vmware-installer/database' as db_new;
attach '/etc/vmware-installer/database.bak' as db_old;
--Moving records from db_old.files to db_new.files
INSERT OR REPLACE INTO db_new.files (id, path, mtime, type, component_id)
SELECT *
FROM db_old.files;
--Moving records from db_old.setting to db_new.setting
INSERT OR REPLACE INTO db_new.settings (key, value, component_name)
SELECT *
FROM db_old.settings as t
WHERE t.component_name in ('vmware-player-app', 'vmware-player', 'vmware-vmx');
-- Moving excepting setting from db_old to db_new
INSERT INTO db_new.settings
SELECT *
FROM db_old.settings as t
WHERE t.key in (SELECT key FROM db_old.settings
EXCEPT
SELECT key FROM db_new.settings);
EOF
rm /etc/vmware-installer/database.bak
# patch_kernel_modules $1
download_patched_modules $1
build_kernel_modules
systemctl daemon-reload
systemctl start vmware-networks.service
systemctl start vmware-usbarbitrator.service
}
pre_remove() {
# Calling native VMWare uninstaller:
vmware-installer -u vmware-player
systemctl stop vmware-usbarbitrator.service
systemctl disable vmware-usbarbitrator.service
systemctl stop vmware-networks.service
systemctl disable vmware-networks.service
############################################################################################################
###### This code needed as alternative uninstalling kernel modules instead native vmware uninstaller #######
# vmw_vmci - High performance communication interface between host and guest
# vmmon - Virtual Machine Monitor
# vmnet - Networking driver
local modules=(vmmon, vmnet)
echo "==> Remove kernel modules: ${modules[@]}"
# Remove kernel modules
for mod in ${modules[@]}; do
mod_filename=$(modinfo $mod | grep filename | sed 's/^filename: *//')
modprobe -r $mod > /dev/null; # 2>&1
if [ "$?" -eq "0" ]; then
rm "$mod_filename"
rmdir --ignore-fail-on-non-empty "$(dirname $mod_filename)" # Try remove empty dir
fi
done
depmod # Rebuilding modules database (/lib/modules/$(uname -r)/modules*)
############################################################################################################
}
post_remove() {
# TODO: Сделать удаление модулей для старых ядер в:
# /lib/modules/4.20.15-1-MANJARO/misc/vmmon.ko
# /lib/modules/4.20.15-1-MANJARO/misc/vmnet.ko
rm -R /usr/lib/vmware-installer
echo '==> To remove VMware settings complete, need to delete directories: /etc/vmware and /etc/vmware-installer'
}