biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / applications / virtualization / vmware-workstation / default.nix
blob93da1b1f68052e3f22a77e5fe69fe902caefdf9f
1 { stdenv
2 , buildFHSEnv
3 , fetchurl
4 , lib
5 , zlib
6 , gdbm
7 , bzip2
8 , libxslt
9 , libxml2
10 , libuuid
11 , readline
12 , xz
13 , cups
14 , glibc
15 , libaio
16 , vulkan-loader
17 , alsa-lib
18 , libpulseaudio
19 , libxcrypt-legacy
20 , libGL
21 , numactl
22 , libX11
23 , libXi
24 , kmod
25 , python3
26 , autoPatchelfHook
27 , makeWrapper
28 , sqlite
29 , enableInstaller ? false
30 , enableMacOSGuests ? false, fetchFromGitHub, gnutar, unzip
33 let
34   # macOS - versions
35   fusionVersion = "13.5.1";
36   fusionBuild = "23298085";
37   unlockerVersion = "3.0.5";
39   # macOS - ISOs
40   darwinIsoSrc = fetchurl {
41     url = "https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${fusionVersion}/${fusionBuild}/universal/core/com.vmware.fusion.zip.tar";
42     sha256 = "sha256-bn6hoicby2YVj1pZTBzBhabNhKefzVQTm5vIrdTO2K4=";
43   };
45   # macOS - Unlocker
46   unlockerSrc = fetchFromGitHub {
47     owner = "paolo-projects";
48     repo = "unlocker";
49     rev = "${unlockerVersion}";
50     sha256 = "sha256-JSEW1gqQuLGRkathlwZU/TnG6dL/xWKW4//SfE+kO0A=";
51   };
53   gdbm3 = gdbm.overrideAttrs (old: rec {
54     version = "1.8.3";
56     src = fetchurl {
57       url = "mirror://gnu/gdbm/gdbm-${version}.tar.gz";
58       sha256 = "sha256-zDQDOKLii0AFirnrU1SiHVP4ihWC6iG6C7GFw3ooHck=";
59     };
61     installPhase = ''
62       mkdir -p $out/lib
63       cp .libs/libgdbm*.so* $out/lib/
64     '';
65   });
67   vmware-unpack-env = buildFHSEnv rec {
68     name = "vmware-unpack-env";
69     targetPkgs = pkgs: [ zlib ];
70   };
72 stdenv.mkDerivation rec {
73   pname = "vmware-workstation";
74   version = "17.5.1";
75   build = "23298084";
77   buildInputs = [
78     libxslt
79     libxml2
80     libuuid
81     gdbm3
82     readline
83     xz
84     cups
85     glibc
86     libaio
87     vulkan-loader
88     alsa-lib
89     libpulseaudio
90     libxcrypt-legacy
91     libGL
92     numactl
93     libX11
94     libXi
95     kmod
96   ];
98   nativeBuildInputs = [ python3 vmware-unpack-env autoPatchelfHook makeWrapper ]
99     ++ lib.optionals enableInstaller [ sqlite bzip2 ]
100     ++ lib.optionals enableMacOSGuests [ gnutar unzip ];
102   src = fetchurl {
103     url = "https://download3.vmware.com/software/WKST-${builtins.replaceStrings ["."] [""] version}-LX/VMware-Workstation-Full-${version}-${build}.x86_64.bundle";
104     sha256 = "sha256-qmC3zvKoes77z3x6UkLHsJ17kQrL1a/rxe9mF+UMdJY=";
105   };
107   unpackPhase = ''
108     ${vmware-unpack-env}/bin/vmware-unpack-env -c "sh ${src} --extract unpacked"
110     ${lib.optionalString enableMacOSGuests ''
111       mkdir -p fusion/
112       tar -xvpf "${darwinIsoSrc}" -C fusion/
113       unzip "fusion/com.vmware.fusion.zip" \
114         "payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwin.iso" \
115         "payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwinPre15.iso" \
116         -d fusion/
117     ''}
118   '';
120   patchPhase = lib.optionalString enableMacOSGuests ''
121     cp -R "${unlockerSrc}" unlocker/
123     substituteInPlace unlocker/unlocker.py --replace \
124       "/usr/lib/vmware/bin/" "$out/lib/vmware/bin"
126     substituteInPlace unlocker/unlocker.py --replace \
127       "/usr/lib/vmware/lib/libvmwarebase.so/libvmwarebase.so" "$out/lib/vmware/lib/libvmwarebase.so/libvmwarebase.so"
128   '';
130   installPhase = ''
131     mkdir -p \
132       $out/bin \
133       $out/etc/vmware \
134       $out/etc/init.d \
135       $out/lib/vmware \
136       $out/share/doc
138     #### Replicate vmware-installer's order but VMX first because of appLoader
139     ${lib.optionalString enableInstaller ''
140       ## VMware installer
141       echo "Installing VMware Installer"
142       unpacked="unpacked/vmware-installer"
143       vmware_installer_version=$(cat "unpacked/vmware-installer/manifest.xml" | grep -oPm1 "(?<=<version>)[^<]+")
144       dest="$out/lib/vmware-installer/$vmware_installer_version"
146       mkdir -p $dest
147       cp -r $unpacked/vmis* $dest/
148       cp -r $unpacked/sopython $dest/
149       cp -r $unpacked/python $dest/
150       cp -r $unpacked/cdsHelper $dest/
151       cp -r $unpacked/vmware* $dest/
152       cp -r $unpacked/bin $dest/
153       cp -r $unpacked/lib $dest/
155       chmod +x $dest/vmis-launcher $dest/sopython/* $dest/python/init.sh $dest/vmware-*
156       ln -s $dest/vmware-installer $out/bin/vmware-installer
158       mkdir -p $out/etc/vmware-installer
159       cp ${./vmware-installer-bootstrap} $out/etc/vmware-installer/bootstrap
160       sed -i -e "s,@@INSTALLERDIR@@,$dest," $out/etc/vmware-installer/bootstrap
161       sed -i -e "s,@@IVERSION@@,$vmware_installer_version," $out/etc/vmware-installer/bootstrap
162       sed -i -e "s,@@BUILD@@,${build}," $out/etc/vmware-installer/bootstrap
164       # create database of vmware guest tools (avoids vmware fetching them later)
165       mkdir -p $out/etc/vmware-installer/components
166       database_filename=$out/etc/vmware-installer/database
167       touch $database_filename
168       sqlite3 "$database_filename" "CREATE TABLE settings(key VARCHAR PRIMARY KEY, value VARCHAR NOT NULL, component_name VARCHAR NOT NULL);"
169       sqlite3 "$database_filename" "INSERT INTO settings(key,value,component_name) VALUES('db.schemaVersion','2','vmware-installer');"
170       sqlite3 "$database_filename" "CREATE TABLE components(id INTEGER PRIMARY KEY, name VARCHAR NOT NULL, version VARCHAR NOT NULL, buildNumber INTEGER NOT NULL, component_core_id INTEGER NOT NULL, longName VARCHAR NOT NULL, description VARCHAR, type INTEGER NOT NULL);"
171       for folder in unpacked/**/.installer ; do
172         component="$(basename $(dirname $folder))"
173         component_version=$(cat unpacked/$component/manifest.xml | grep -oPm1 "(?<=<version>)[^<]+")
174         component_core_id=$([ "$component" == "vmware-installer" ] && echo "-1" || echo "1")
175         type=$([ "$component" == "vmware-workstation" ] && echo "0" || echo "1")
176         sqlite3 "$database_filename" "INSERT INTO components(name,version,buildNumber,component_core_id,longName,description,type) VALUES(\"$component\",\"$component_version\",\"${build}\",$component_core_id,\"$component\",\"$component\",$type);"
177         mkdir -p $out/etc/vmware-installer/components/$component
178         cp -r $folder/* $out/etc/vmware-installer/components/$component
179       done
180     ''}
182     ## VMware Bootstrap
183     echo "Installing VMware Bootstrap"
184     cp ${./vmware-bootstrap} $out/etc/vmware/bootstrap
185     sed -i -e "s,@@PREFIXDIR@@,$out," $out/etc/vmware/bootstrap
187     ## VMware Config
188     echo "Installing VMware Config"
189     cp ${./vmware-config} $out/etc/vmware/config
190     sed -i -e "s,@@VERSION@@,${version}," $out/etc/vmware/config
191     sed -i -e "s,@@BUILD@@,${build}," $out/etc/vmware/config
192     sed -i -e "s,@@PREFIXDIR@@,$out," $out/etc/vmware/config
194     ## VMware VMX
195     echo "Installing VMware VMX"
196     unpacked="unpacked/vmware-vmx"
197     cp -r $unpacked/bin/* $out/bin/
198     cp -r $unpacked/etc/modprobe.d $out/etc/
199     cp -r $unpacked/etc/init.d/* $out/etc/init.d/
200     cp -r $unpacked/roms $out/lib/vmware/
201     cp -r $unpacked/sbin/* $out/bin/
203     cp -r $unpacked/lib/libconf $out/lib/vmware/
204     rm $out/lib/vmware/libconf/etc/fonts/fonts.conf
206     cp -r $unpacked/lib/bin $out/lib/vmware/
207     cp -r $unpacked/lib/lib $out/lib/vmware/
208     cp -r $unpacked/lib/scripts $out/lib/vmware/
209     cp -r $unpacked/lib/icu $out/lib/vmware/
210     cp -r $unpacked/lib/share $out/lib/vmware/
211     cp -r $unpacked/lib/modules $out/lib/vmware/
212     cp -r $unpacked/lib/include $out/lib/vmware/
214     cp -r $unpacked/extra/checkvm $out/bin/
215     cp -r $unpacked/extra/modules.xml $out/lib/vmware/modules/
217     ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware-vmblock-fuse
218     ln -s $out/lib/vmware/icu $out/etc/vmware/icu
220     # Replace vmware-modconfig with simple error dialog
221     cp ${./vmware-modconfig} $out/bin/vmware-modconfig
222     sed -i -e "s,ETCDIR=/etc/vmware,ETCDIR=$out/etc/vmware," $out/bin/vmware-modconfig
224     # Patch dynamic libs in
225     for binary in "mksSandbox" "mksSandbox-debug" "mksSandbox-stats" "vmware-vmx" "vmware-vmx-debug" "vmware-vmx-stats"
226     do
227       patchelf \
228         --add-needed ${libaio}/lib/libaio.so.1 \
229         --add-needed ${vulkan-loader}/lib/libvulkan.so.1 \
230         --add-needed ${alsa-lib}/lib/libasound.so \
231         --add-needed ${libpulseaudio}/lib/libpulse.so.0 \
232         --add-needed ${libGL}/lib/libEGL.so.1 \
233         --add-needed ${numactl}/lib/libnuma.so.1 \
234         --add-needed ${libX11}/lib/libX11.so.6 \
235         --add-needed ${libXi}/lib/libXi.so.6 \
236         --add-needed ${libGL}/lib/libGL.so.1 \
237         $out/lib/vmware/bin/$binary
238     done
240     ## VMware USB Arbitrator
241     echo "Installing VMware USB Arbitrator"
242     unpacked="unpacked/vmware-usbarbitrator"
243     cp -r $unpacked/etc/init.d/* $out/etc/init.d/
244     cp -r $unpacked/bin/* $out/bin/
245     ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware-usbarbitrator
247     ## VMware Player Setup
248     echo "Installing VMware Player Setup"
249     unpacked="unpacked/vmware-player-setup"
250     mkdir -p $out/lib/vmware/setup
251     cp $unpacked/vmware-config $out/lib/vmware/setup/
253     ## VMware Network Editor
254     echo "Installing VMware Network Editor"
255     unpacked="unpacked/vmware-network-editor"
256     cp -r $unpacked/lib $out/lib/vmware/
258     ## VMware Tools
259     echo "Installing VMware Tools"
260     mkdir -p $out/lib/vmware/isoimages/
261     cp unpacked/vmware-tools-linux/linux.iso \
262        unpacked/vmware-tools-linuxPreGlibc25/linuxPreGlibc25.iso \
263        unpacked/vmware-tools-netware/netware.iso \
264        unpacked/vmware-tools-solaris/solaris.iso \
265        unpacked/vmware-tools-winPre2k/winPre2k.iso \
266        unpacked/vmware-tools-winPreVista/winPreVista.iso \
267        unpacked/vmware-tools-windows/windows.iso \
268        $out/lib/vmware/isoimages/
270     ${lib.optionalString enableMacOSGuests ''
271       echo "Installing VMWare Tools for MacOS"
272       cp -v \
273        "fusion/payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwin.iso" \
274        "fusion/payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwinPre15.iso" \
275        $out/lib/vmware/isoimages/
276     ''}
278     ## VMware Player Application
279     echo "Installing VMware Player Application"
280     unpacked="unpacked/vmware-player-app"
281     cp -r $unpacked/lib/* $out/lib/vmware/
282     cp -r $unpacked/share/* $out/share/
283     cp -r $unpacked/bin/* $out/bin/
284     cp -r $unpacked/doc/* $out/share/doc/ # Licences
286     for target in "vmplayer" "vmware-enter-serial" "vmware-setup-helper" "licenseTool" "vmware-mount" "vmware-fuseUI" "vmware-app-control" "vmware-zenity"
287     do
288       ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/$target
289     done
291     ln -s $out/lib/vmware/bin/vmware-mount $out/bin/vmware-mount
292     ln -s $out/lib/vmware/bin/vmware-fuseUI $out/bin/vmware-fuseUI
293     ln -s $out/lib/vmware/bin/vmrest $out/bin/vmrest
295     # Patch vmplayer
296     sed -i -e "s,ETCDIR=/etc/vmware,ETCDIR=$out/etc/vmware," $out/bin/vmplayer
297     sed -i -e "s,/sbin/modprobe,${kmod}/bin/modprobe," $out/bin/vmplayer
298     sed -i -e "s,@@BINARY@@,$out/bin/vmplayer," $out/share/applications/vmware-player.desktop
300     ## VMware OVF Tool compoment
301     echo "Installing VMware OVF Tool for Linux"
302     unpacked="unpacked/vmware-ovftool"
303     mkdir -p $out/lib/vmware-ovftool/
305     cp -r $unpacked/* $out/lib/vmware-ovftool/
306     chmod 755 $out/lib/vmware-ovftool/ovftool*
307     makeWrapper "$out/lib/vmware-ovftool/ovftool.bin" "$out/bin/ovftool"
309     ## VMware Network Editor User Interface
310     echo "Installing VMware Network Editor User Interface"
311     unpacked="unpacked/vmware-network-editor-ui"
312     cp -r $unpacked/share/* $out/share/
314     ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware-netcfg
315     ln -s $out/lib/vmware/bin/vmware-netcfg $out/bin/vmware-netcfg
317     # Patch network editor ui
319     sed -i -e "s,@@BINARY@@,$out/bin/vmware-netcfg," $out/share/applications/vmware-netcfg.desktop
321     ## VMware VIX Core Library
322     echo "Installing VMware VIX Core Library"
323     unpacked="unpacked/vmware-vix-core"
324     mkdir -p $out/lib/vmware-vix
325     cp -r $unpacked/lib/* $out/lib/vmware-vix/
326     cp -r $unpacked/bin/* $out/bin/
327     cp $unpacked/*.txt $out/lib/vmware-vix/
329     mkdir -p $out/share/doc/vmware-vix/
330     cp -r $unpacked/doc/* $out/share/doc/vmware-vix/
332     mkdir -p $out/include/
333     cp -r $unpacked/include/* $out/include/
335     ## VMware VIX Workstation-17.0.0 Library
336     echo "Installing VMware VIX Workstation-17.0.0 Library"
337     unpacked="unpacked/vmware-vix-lib-Workstation1700"
338     cp -r $unpacked/lib/* $out/lib/vmware-vix/
340     ## VMware VProbes component for Linux
341     echo "Installing VMware VProbes component for Linux"
342     unpacked="unpacked/vmware-vprobe"
343     cp -r $unpacked/bin/* $out/bin/
344     cp -r $unpacked/lib/* $out/lib/vmware/
346     ## VMware Workstation
347     echo "Installing VMware Workstation"
348     unpacked="unpacked/vmware-workstation"
349     cp -r $unpacked/bin/* $out/bin/
350     cp -r $unpacked/lib/* $out/lib/vmware/
351     cp -r $unpacked/share/* $out/share/
352     cp -r $unpacked/man $out/share/
353     cp -r $unpacked/doc $out/share/
355     ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware
356     ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware-tray
357     ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware-vprobe
359     # Patch vmware
360     sed -i -e "s,ETCDIR=/etc/vmware,ETCDIR=$out/etc/vmware,g" $out/bin/vmware
361     sed -i -e "s,/sbin/modprobe,${kmod}/bin/modprobe,g" $out/bin/vmware
362     sed -i -e "s,@@BINARY@@,$out/bin/vmware," $out/share/applications/vmware-workstation.desktop
364     chmod +x $out/bin/* $out/lib/vmware/bin/* $out/lib/vmware/setup/*
366     # Harcoded pkexec hack
367     for lib in "lib/vmware/lib/libvmware-mount.so/libvmware-mount.so" "lib/vmware/lib/libvmwareui.so/libvmwareui.so" "lib/vmware/lib/libvmware-fuseUI.so/libvmware-fuseUI.so"
368     do
369       sed -i -e "s,/usr/local/sbin,/run/vmware/bin," "$out/$lib"
370     done
372     ${lib.optionalString enableMacOSGuests ''
373       echo "Running VMWare Unlocker to enable macOS Guests"
374       python3 unlocker/unlocker.py
375     ''}
377     # SUID hack
378     wrapProgram $out/lib/vmware/bin/vmware-vmx
379     rm $out/lib/vmware/bin/vmware-vmx
380     ln -s /run/wrappers/bin/vmware-vmx $out/lib/vmware/bin/vmware-vmx
381   '';
383   meta = with lib; {
384     description = "Industry standard desktop hypervisor for x86-64 architecture";
385     homepage = "https://www.vmware.com/products/workstation-pro.html";
386     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
387     license = licenses.unfree;
388     platforms = [ "x86_64-linux" ];
389     maintainers = with maintainers; [ cawilliamson deinferno vifino ];
390   };