From 655df0cc151d10bb1d8ea682badcfb4b225fd9ac Mon Sep 17 00:00:00 2001 From: Sergey Morozov Date: Sun, 8 Apr 2018 12:08:26 +0300 Subject: [PATCH] Add app-emulation/vmware-modules-14 from stefantalpalaru overlay --- app-emulation/vmware-modules/Manifest | 10 + ...uick-workaround-for-objtool-warnings.patch | 45 ++ ...rd-definition-of-PCI_VENDOR_ID_VMWAR.patch | 40 + ...rd-definition-of-PCI_VENDOR_ID_VMWAR.patch | 32 + ...rd-definition-of-MSR_MISC_FEATURES_E.patch | 54 ++ ...rd-definition-of-CR3_PCID_MASK-if-av.patch | 39 + ...4.14-00-vsock-gcc-plugins-randstruct.patch | 84 +++ .../vmware-modules/files/329-vmblock.patch | 461 ++++++++++++ .../vmware-modules/files/329-vmci.patch | 294 ++++++++ .../vmware-modules/files/329-vsock.patch | 266 +++++++ .../vmware-modules-329.1.1-r1.ebuild | 145 ++++ app-emulation/vmware-workstation/Manifest | 9 + .../files/configure-hostd.sh | 20 + .../vmware-workstation/files/vmware-14.1.rc | 102 +++ .../files/vmware-server-14.1.rc | 52 ++ .../vmware-workstation-14.1.1.7528167.ebuild | 700 ++++++++++++++++++ 16 files changed, 2353 insertions(+) create mode 100644 app-emulation/vmware-modules/Manifest create mode 100644 app-emulation/vmware-modules/files/329-00-vmmon-quick-workaround-for-objtool-warnings.patch create mode 100644 app-emulation/vmware-modules/files/329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch create mode 100644 app-emulation/vmware-modules/files/329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch create mode 100644 app-emulation/vmware-modules/files/329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch create mode 100644 app-emulation/vmware-modules/files/329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch create mode 100644 app-emulation/vmware-modules/files/329-4.14-00-vsock-gcc-plugins-randstruct.patch create mode 100644 app-emulation/vmware-modules/files/329-vmblock.patch create mode 100644 app-emulation/vmware-modules/files/329-vmci.patch create mode 100644 app-emulation/vmware-modules/files/329-vsock.patch create mode 100644 app-emulation/vmware-modules/vmware-modules-329.1.1-r1.ebuild create mode 100644 app-emulation/vmware-workstation/Manifest create mode 100644 app-emulation/vmware-workstation/files/configure-hostd.sh create mode 100644 app-emulation/vmware-workstation/files/vmware-14.1.rc create mode 100644 app-emulation/vmware-workstation/files/vmware-server-14.1.rc create mode 100644 app-emulation/vmware-workstation/vmware-workstation-14.1.1.7528167.ebuild diff --git a/app-emulation/vmware-modules/Manifest b/app-emulation/vmware-modules/Manifest new file mode 100644 index 0000000..9fb5a08 --- /dev/null +++ b/app-emulation/vmware-modules/Manifest @@ -0,0 +1,10 @@ +AUX 329-00-vmmon-quick-workaround-for-objtool-warnings.patch 1555 BLAKE2B dd4a58e78634aed9d5fb64bcb02b999d55be6b87e496c8daf640f7027aba3942f4e415125ba8fb847fa832336560d4bdbb0f539fefea3b4d2c175f2cbb33a9d7 SHA512 892bde81c721c18264e154cdfadd6b560af37260c9a457ec321fdf6bdf78b1704df57532b0919ed7dbc5c1036230b95f0cbacb7acbfd15da2145e3445da795f7 +AUX 329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch 1169 BLAKE2B 4e5a74961ff512748375bd1d90a6670fc519c2c4c0be94f89d14fdf39e4922b057ae2baa38d07d34aca9ec897b012c4b9326dfd51a44235418919708b789895e SHA512 727fb97a63399d7c19238ae864a38cf2297adccb466fc2deba2a72f0592eb655f653d3c8e45dac06bbd0e09fc71a59a8bfea491b7580b37d41d0729f6adc023d +AUX 329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch 1131 BLAKE2B 1e07b4a15ff1180349348d84efb606c223f5cfa4accdcc0e1a41c8a0de52fb186bddd3c6cd3f5f48041c52ad2c29110726197f1d9352bd87caf4e646c4c4c001 SHA512 192d6a9a14757706f1c9345ff45592a559729619627a32c9f0a1d7203e60881312a4d0fc92ff750c8ff5b5350cf1a2b55238c16973e9c7eb4c2cfe2966abe7d1 +AUX 329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch 1603 BLAKE2B 4eea61a743cb443e4a4c22a02a03410adbae66339ac7ed1c1aafe54e447135c1ed976ce3c97f22db9984926de9b9a09b1820e253978f457c0c2b9d22f8e4c59b SHA512 4413cd5e791dd19c4b47ba2178e386160912882b0e1a549151eafcceae484b5e48f527ee45b14584c98e06c11e28ee5bfef34b318e46b45704fbcf93a7b52b56 +AUX 329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch 1167 BLAKE2B b5c1c4d98d2aed5bb473270ea9b5737da05bab45748aa84b0a83c26abf8d826960ff3251132ae2770bf87168bfb9c01ab7c81ec99036af576ca3fa0eb08b36e2 SHA512 1cf13f9c745bcfcf24ac1e8f762d057f1afde46ec1de4e651a07e63e08d9073eca9bdbaa53c5a1ced556ec83da3bfd80d3c65c979fb91566cf3c7ddae38eaeac +AUX 329-4.14-00-vsock-gcc-plugins-randstruct.patch 3477 BLAKE2B 9d454174bd3cf888d92a5644a2f8078f9368e5db0ee1c1f0ca7f43a897efa69d9d28c3cd89af3e38a790a23c442898364bc9d189f7920cf0dea54ca20af6ece4 SHA512 a3b68de2664807715dff9648744bd345cdf007a7c1d173fc5c1f410baa65e3a8ef3063543fd369e969a60d2f2ec9cda6127b22b09c5e17aefe288de104d58871 +AUX 329-vmblock.patch 15016 BLAKE2B 887159b5c526eea4fcc7d49664a4c7233ab9c73440bef9e8f4ceb2b9694a72cd9c4dcff131f9a74dabe5a0ec3a4e0437db405f6c74f9cfd49ef590b19a658ab8 SHA512 6cb922537009fe39e2e58e19ba9c8fda6a5ea484f3d28a94793de0fbd63d8d564822f2c83447d135f1c5e7f5da6734af218f86e31c20d322cbf00b675297c712 +AUX 329-vmci.patch 9474 BLAKE2B 9e833fcafc39c4279a9d86c96c0d4b012d6f653d42a76ba7d7d65355876da469c0dcb746a6eab4be795c5c29f1d11ace5cbf705e066d12fff20df758b8ade901 SHA512 b8b46a3df7ee2f906dd474add6c0ec3d76566f1c643278e3a7faeb68c829c78926351359bd78e12ad744bb946a31324ee347bb67413c4d670e7a091379160e2e +AUX 329-vsock.patch 10068 BLAKE2B d84f22a1623e2303c6aa2ea3624857fb2cf2dbb31b4747582285fc506ae208c1fb4b2a5925b02e6473b43ba178d871276584800d06cd2cdfb06273743814cc24 SHA512 73df6466b1df7be6ae40751596834d967b46d48218267afe5244abcdcacf5e263a78ed3bd3c4e6f2a5d81dd9c0c9e9042fc52fa9f1d4d000098ad20f19509001 +EBUILD vmware-modules-329.1.1-r1.ebuild 4307 BLAKE2B 9a36a42397b75bdcb24aae04ef98e3a37769382ccf064bcfbaef0d4ede848898428f36f6b01c46c72bc0ffb67133d0e6366d1e3986a6cf8cb5a7cf562fd63dda SHA512 82ea9316ef9315bcc80a1ed1b86b279f4af9e30b62cdfbeb79c152eb16f49c9c10c737871ff3b970fb2d5063d6ccc64a6e2a725cc0ca23279112430e19e8e82c diff --git a/app-emulation/vmware-modules/files/329-00-vmmon-quick-workaround-for-objtool-warnings.patch b/app-emulation/vmware-modules/files/329-00-vmmon-quick-workaround-for-objtool-warnings.patch new file mode 100644 index 0000000..8259c8b --- /dev/null +++ b/app-emulation/vmware-modules/files/329-00-vmmon-quick-workaround-for-objtool-warnings.patch @@ -0,0 +1,45 @@ +From 182ac915372c798e400c9718499cae2cb1822ef1 Mon Sep 17 00:00:00 2001 +From: Michal Kubecek +Date: Sat, 30 Sep 2017 21:41:51 +0200 +Subject: [PATCH 6/6] vmmon: quick workaround for objtool warnings + +As discussed in + + https://bugzilla.suse.com/show_bug.cgi?id=1059674 + +the reason for multiple objtool warnings is the fact that vmmon module +defines its own Panic() function which never returns. While it is marked as +such which is used by the compiler for optimization, there is no way to +find this from object file. + +While this seems innocuous, it might result in problems with unwinder +later. The quickest way around is to replace vmmon's own Panic() with +standard kernel panic() until a cleaner solution is found. +--- + vmmon-only/include/vm_assert.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/vmmon-only/include/vm_assert.h b/vmmon-only/include/vm_assert.h +index 8cdbc93..b869def 100644 +--- a/vmmon-only/include/vm_assert.h ++++ b/vmmon-only/include/vm_assert.h +@@ -67,6 +67,7 @@ extern "C" { + #if defined (VMKPANIC) + #include "vmk_assert.h" + #else /* !VMKPANIC */ ++#include + #define _ASSERT_PANIC(name) \ + Panic(_##name##Fmt "\n", __FILE__, __LINE__) + #define _ASSERT_PANIC_BUG(bug, name) \ +@@ -107,7 +108,7 @@ NORETURN void Panic_NoSave(const char *fmt, ...) PRINTF_DECL(1, 2); + } while(0) + + #else +-NORETURN void Panic(const char *fmt, ...) PRINTF_DECL(1, 2); ++#define Panic panic + #endif + + void LogThrottled(uint32 *count, const char *fmt, ...) PRINTF_DECL(2, 3); +-- +2.14.3 + diff --git a/app-emulation/vmware-modules/files/329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch b/app-emulation/vmware-modules/files/329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch new file mode 100644 index 0000000..d41c160 --- /dev/null +++ b/app-emulation/vmware-modules/files/329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch @@ -0,0 +1,40 @@ +From 4d80590924550d0ee3fe470e027deea0ee43e6b6 Mon Sep 17 00:00:00 2001 +From: Michal Kubecek +Date: Tue, 18 Apr 2017 12:52:08 +0200 +Subject: [PATCH 1/6] vmnet: use standard definition of PCI_VENDOR_ID_VMWARE if + available + +The PCI_VENDOR_ID_VMWARE macro is defined in mainline pci_ids.h since +commit 94e57fea6202 ("PCI: Move PCI_VENDOR_ID_VMWARE to pci_ids.h") +in v3.18-rc1. +--- + vmnet-only/vm_device_version.h | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/vmnet-only/vm_device_version.h b/vmnet-only/vm_device_version.h +index ab396bc..cafddd0 100644 +--- a/vmnet-only/vm_device_version.h ++++ b/vmnet-only/vm_device_version.h +@@ -35,6 +35,8 @@ + #endif + #endif + ++#include ++ + /* LSILogic 53C1030 Parallel SCSI controller + * LSILogic SAS1068 SAS controller + */ +@@ -53,7 +55,10 @@ + * VMware HD Audio codec + * VMware HD Audio controller + */ ++#ifndef PCI_VENDOR_ID_VMWARE + #define PCI_VENDOR_ID_VMWARE 0x15AD ++#endif ++ + #define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405 + #define PCI_DEVICE_ID_VMWARE_SVGA 0x0710 + #define PCI_DEVICE_ID_VMWARE_VGA 0x0711 +-- +2.14.3 + diff --git a/app-emulation/vmware-modules/files/329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch b/app-emulation/vmware-modules/files/329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch new file mode 100644 index 0000000..a97b987 --- /dev/null +++ b/app-emulation/vmware-modules/files/329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch @@ -0,0 +1,32 @@ +From 7cb0c3beb4abde406d5334376106d68997f6fb51 Mon Sep 17 00:00:00 2001 +From: Michal Kubecek +Date: Tue, 18 Apr 2017 13:01:56 +0200 +Subject: [PATCH 2/6] vmnet: use standard definition of + PCI_VENDOR_ID_VMWARE_VMXNET3 if available + +The PCI_DEVICE_ID_VMWARE_VMXNET3 macro is defined in mainline pci_ids.h +since commit b1226c7db1d9 ("vmxnet3: Move PCI Id to pci_ids.h") in +v4.10-rc1. +--- + vmnet-only/vm_device_version.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/vmnet-only/vm_device_version.h b/vmnet-only/vm_device_version.h +index cafddd0..9305ddb 100644 +--- a/vmnet-only/vm_device_version.h ++++ b/vmnet-only/vm_device_version.h +@@ -75,7 +75,11 @@ + #define PCI_DEVICE_ID_VMWARE_1394 0x0780 + #define PCI_DEVICE_ID_VMWARE_BRIDGE 0x0790 + #define PCI_DEVICE_ID_VMWARE_ROOTPORT 0x07A0 ++ ++#ifndef PCI_DEVICE_ID_VMWARE_VMXNET3 + #define PCI_DEVICE_ID_VMWARE_VMXNET3 0x07B0 ++#endif ++ + #define PCI_DEVICE_ID_VMWARE_PVSCSI 0x07C0 + #define PCI_DEVICE_ID_VMWARE_82574 0x07D0 + #define PCI_DEVICE_ID_VMWARE_AHCI 0x07E0 +-- +2.14.3 + diff --git a/app-emulation/vmware-modules/files/329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch b/app-emulation/vmware-modules/files/329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch new file mode 100644 index 0000000..646190b --- /dev/null +++ b/app-emulation/vmware-modules/files/329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch @@ -0,0 +1,54 @@ +From 53d6ccbeed4c519dc105f98552067ced2ecbd432 Mon Sep 17 00:00:00 2001 +From: Michal Kubecek +Date: Fri, 23 Jun 2017 09:29:24 +0200 +Subject: [PATCH 3/6] vmmon: use standard definition of + MSR_MISC_FEATURES_ENABLES if available + +The MSR_MISC_FEATURES_ENABLES macro is defined in mainline since commit +ab6d9468631a ("x86/msr: Rename MISC_FEATURE_ENABLES to +MISC_FEATURES_ENABLES") in v4.12-rc1. + +The MSR_MISC_FEATURES_ENABLES_CPUID_FAULT macro is defined in mainline +since commit e9ea1e7f53b8 ("x86/arch_prctl: Add ARCH_[GET|SET]_CPUID") in +v4.12-rc1. +--- + vmmon-only/include/x86msr.h | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/vmmon-only/include/x86msr.h b/vmmon-only/include/x86msr.h +index 3a6bfe8..904d9e9 100644 +--- a/vmmon-only/include/x86msr.h ++++ b/vmmon-only/include/x86msr.h +@@ -24,6 +24,7 @@ + + #ifndef _X86MSR_H_ + #define _X86MSR_H_ ++#include + #define INCLUDE_ALLOW_USERLEVEL + #define INCLUDE_ALLOW_VMX + +@@ -112,7 +113,9 @@ MSRQuery; + #define MSR_TSC_AUX 0xc0000103 + #define MSR_BD_TSC_RATIO 0xc0000104 + ++#ifndef MSR_MISC_FEATURES_ENABLES + #define MSR_MISC_FEATURES_ENABLES 0x140 ++#endif + + /* Intel Core Architecture and later: use only architected counters. */ + #define IA32_MSR_PERF_CAPABILITIES 0x345 +@@ -612,7 +615,11 @@ typedef enum { + /* + * MISC_FEATURES_ENABLES bits + */ ++#ifdef MSR_MISC_FEATURES_ENABLES_CPUID_FAULT ++#define MSR_MISC_FEATURES_ENABLES_CPUID_FAULTING MSR_MISC_FEATURES_ENABLES_CPUID_FAULT ++#else + #define MSR_MISC_FEATURES_ENABLES_CPUID_FAULTING 1 ++#endif + + + +-- +2.14.3 + diff --git a/app-emulation/vmware-modules/files/329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch b/app-emulation/vmware-modules/files/329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch new file mode 100644 index 0000000..b52f0a9 --- /dev/null +++ b/app-emulation/vmware-modules/files/329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch @@ -0,0 +1,39 @@ +From 704be6e3f2143df35e99025caa3393b9c309fbc1 Mon Sep 17 00:00:00 2001 +From: Michal Kubecek +Date: Mon, 24 Jul 2017 10:08:55 +0200 +Subject: [PATCH 4/6] vmmon: use standard definition of CR3_PCID_MASK if + available + +The CR3_PCID_MASK is defined in mainline asm/processor-flags.h since +commit 6c690ee1039b ("x86/mm: Split read_cr3() into read_cr3_pa() and +__read_cr3()") in v4.13-rc1. +--- + vmmon-only/include/x86_basic_defs.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/vmmon-only/include/x86_basic_defs.h b/vmmon-only/include/x86_basic_defs.h +index abfb0b8..8c7566f 100644 +--- a/vmmon-only/include/x86_basic_defs.h ++++ b/vmmon-only/include/x86_basic_defs.h +@@ -35,6 +35,8 @@ + #define INCLUDE_ALLOW_VMCORE + #include "includeCheck.h" + ++#include ++ + #define X86_MAX_INSTR_LEN 15 /* Max byte length of an x86 instruction. */ + + #define NUM_IDT_VECTORS 256 +@@ -75,7 +77,9 @@ + #define CR3_PDB_MASK 0xfffff000 + #define CR3_IGNORE 0xFFF + #define PAE_CR3_IGNORE 0x1F ++#ifndef CR3_PCID_MASK + #define CR3_PCID_MASK 0xFFF ++#endif + #define CR3_NO_FLUSH (1ULL << 63) + + #define CR4_VME 0x00000001 +-- +2.14.3 + diff --git a/app-emulation/vmware-modules/files/329-4.14-00-vsock-gcc-plugins-randstruct.patch b/app-emulation/vmware-modules/files/329-4.14-00-vsock-gcc-plugins-randstruct.patch new file mode 100644 index 0000000..66ef8b9 --- /dev/null +++ b/app-emulation/vmware-modules/files/329-4.14-00-vsock-gcc-plugins-randstruct.patch @@ -0,0 +1,84 @@ +--- a/vsock-only/linux/notify.c 2017-10-03 06:52:10.953893050 +0300 ++++ b/vsock-only/linux/notify.c 2017-10-03 05:42:48.642701836 +0300 +@@ -1193,20 +1193,20 @@ VSockVmciNotifyPktProcessNegotiate(struc + + + /* Socket control packet based operations. */ +-VSockVmciNotifyOps vSockVmciNotifyPktOps = { +- VSockVmciNotifyPktSocketInit, +- VSockVmciNotifyPktSocketDestruct, +- VSockVmciNotifyPktPollIn, +- VSockVmciNotifyPktPollOut, +- VSockVmciNotifyPktHandlePkt, +- VSockVmciNotifyPktRecvInit, +- VSockVmciNotifyPktRecvPreBlock, +- VSockVmciNotifyPktRecvPreDequeue, +- VSockVmciNotifyPktRecvPostDequeue, +- VSockVmciNotifyPktSendInit, +- VSockVmciNotifyPktSendPreBlock, +- VSockVmciNotifyPktSendPreEnqueue, +- VSockVmciNotifyPktSendPostEnqueue, +- VSockVmciNotifyPktProcessRequest, +- VSockVmciNotifyPktProcessNegotiate, ++VSockVmciNotifyOps vSockVmciNotifyPktOps __refdata = { ++ .socketInit = VSockVmciNotifyPktSocketInit, ++ .socketDestruct = VSockVmciNotifyPktSocketDestruct, ++ .pollIn = VSockVmciNotifyPktPollIn, ++ .pollOut = VSockVmciNotifyPktPollOut, ++ .handleNotifyPkt = VSockVmciNotifyPktHandlePkt, ++ .recvInit = VSockVmciNotifyPktRecvInit, ++ .recvPreBlock = VSockVmciNotifyPktRecvPreBlock, ++ .recvPreDequeue = VSockVmciNotifyPktRecvPreDequeue, ++ .recvPostDequeue = VSockVmciNotifyPktRecvPostDequeue, ++ .sendInit = VSockVmciNotifyPktSendInit, ++ .sendPreBlock = VSockVmciNotifyPktSendPreBlock, ++ .sendPreEnqueue = VSockVmciNotifyPktSendPreEnqueue, ++ .sendPostEnqueue = VSockVmciNotifyPktSendPostEnqueue, ++ .processRequest = VSockVmciNotifyPktProcessRequest, ++ .processNegotiate = VSockVmciNotifyPktProcessNegotiate, + }; +diff -urp a/vsock-only/linux/notifyQState.c b/vsock-only/linux/notifyQState.c +--- a/vsock-only/linux/notifyQState.c 2017-10-03 06:52:10.952893329 +0300 ++++ b/vsock-only/linux/notifyQState.c 2017-10-03 05:43:02.950697125 +0300 +@@ -771,21 +770,24 @@ VSockVmciNotifyPktProcessNegotiate(struc + } + + +-/* Socket always on control packet based operations. */ +-VSockVmciNotifyOps vSockVmciNotifyPktQStateOps = { +- VSockVmciNotifyPktSocketInit, +- VSockVmciNotifyPktSocketDestruct, +- VSockVmciNotifyPktPollIn, +- VSockVmciNotifyPktPollOut, +- VSockVmciNotifyPktHandlePkt, +- VSockVmciNotifyPktRecvInit, +- VSockVmciNotifyPktRecvPreBlock, +- NULL, /* recvPreDequeue */ +- VSockVmciNotifyPktRecvPostDequeue, +- VSockVmciNotifyPktSendInit, +- NULL, /* sendPreBlock */ +- NULL, /* sendPreEnqueue */ +- VSockVmciNotifyPktSendPostEnqueue, +- VSockVmciNotifyPktProcessRequest, +- VSockVmciNotifyPktProcessNegotiate, ++ ++ ++// Socket always on control packet based operations. ++VSockVmciNotifyOps vSockVmciNotifyPktQStateOps __refdata = { ++ .socketInit = VSockVmciNotifyPktSocketInit, ++ .socketDestruct = VSockVmciNotifyPktSocketDestruct, ++ .pollIn = VSockVmciNotifyPktPollIn, ++ .pollOut = VSockVmciNotifyPktPollOut, ++ .handleNotifyPkt = VSockVmciNotifyPktHandlePkt, ++ .recvInit = VSockVmciNotifyPktRecvInit, ++ .recvPreBlock = VSockVmciNotifyPktRecvPreBlock, ++ .recvPreDequeue = NULL, ++ .recvPostDequeue = VSockVmciNotifyPktRecvPostDequeue, ++ .sendInit = VSockVmciNotifyPktSendInit, ++ .sendPreBlock = NULL, ++ .sendPreEnqueue = NULL, ++ .sendPostEnqueue = VSockVmciNotifyPktSendPostEnqueue, ++ .processRequest = VSockVmciNotifyPktProcessRequest, ++ .processNegotiate = VSockVmciNotifyPktProcessNegotiate, ++ + }; diff --git a/app-emulation/vmware-modules/files/329-vmblock.patch b/app-emulation/vmware-modules/files/329-vmblock.patch new file mode 100644 index 0000000..bddb978 --- /dev/null +++ b/app-emulation/vmware-modules/files/329-vmblock.patch @@ -0,0 +1,461 @@ +diff --git a/vmblock-only/Makefile b/vmblock-only/Makefile +index bbfe225..8ec1a86 100644 +--- a/vmblock-only/Makefile ++++ b/vmblock-only/Makefile +@@ -43,7 +43,11 @@ INCLUDE += -I$(SRCROOT)/shared + endif + + ++ifdef KVERSION ++VM_UNAME = $(KVERSION) ++else + VM_UNAME = $(shell uname -r) ++endif + + # Header directory for the running kernel + ifdef LINUXINCLUDE +diff --git a/vmblock-only/Makefile.kernel b/vmblock-only/Makefile.kernel +index ab7a727..e3ec9d2 100644 +--- a/vmblock-only/Makefile.kernel ++++ b/vmblock-only/Makefile.kernel +@@ -19,7 +19,7 @@ + + INCLUDE += -I$(SRCROOT)/include + +-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) ++EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE) + + EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/cachecreate.c, -DVMW_KMEMCR_HAS_DTOR, ) + EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/cachector.c, -DVMW_KMEMCR_CTOR_HAS_3_ARGS, ) +diff --git a/vmblock-only/linux/control.c b/vmblock-only/linux/control.c +index 79716bd..5b6acb2 100644 +--- a/vmblock-only/linux/control.c ++++ b/vmblock-only/linux/control.c +@@ -29,7 +29,7 @@ + #include + #include + +-#include ++#include + + #include "vmblockInt.h" + #include "block.h" +@@ -208,9 +208,17 @@ SetupProcDevice(void) + VMBlockSetProcEntryOwner(controlProcMountpoint); + + /* Create /proc/fs/vmblock/dev */ ++ // create_proc_entry deprecated in 3.10 ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) ++ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME, ++ VMBLOCK_CONTROL_MODE, ++ controlProcDirEntry, ++ &ControlFileOps); ++#else + controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME, + VMBLOCK_CONTROL_MODE, + controlProcDirEntry); ++#endif + if (!controlProcEntry) { + Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n"); + remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry); +@@ -218,7 +226,9 @@ SetupProcDevice(void) + return -EINVAL; + } + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) //Maybe 3.14? 3.13? + controlProcEntry->proc_fops = &ControlFileOps; ++#endif + return 0; + } + +@@ -272,17 +282,50 @@ CleanupProcDevice(void) + *---------------------------------------------------------------------------- + */ + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0) ++/* copy-paste from Lustre FS by pavlinux */ ++static inline char *ll_getname(const char __user *filename) ++{ ++ int ret = 0, len; ++ char *tmp = __getname(); ++ ++ if (!tmp) ++ return ERR_PTR(-ENOMEM); ++ ++ len = strncpy_from_user(tmp, filename, PATH_MAX); ++ if (len == 0) ++ ret = -ENOENT; ++ else if (len > PATH_MAX) ++ ret = -ENAMETOOLONG; ++ ++ if (ret) { ++ __putname(tmp); ++ tmp = ERR_PTR(ret); ++ } ++ return tmp; ++}; ++#endif ++ + static int + ExecuteBlockOp(const char __user *buf, // IN: buffer with name + const os_blocker_id_t blocker, // IN: blocker ID (file) + int (*blockOp)(const char *filename, // IN: block operation + const os_blocker_id_t blocker)) + { +- char *name; ++ struct filename *fn = NULL; ++ char *name = (char *)fn->name; + int i; + int retval; + +- name = getname(buf); ++ // Not sure what changed in 3.13 to neccessitate this. ++ // Gentoo uses __getname(), though. ++ // https://github.com/gentoo/vmware/blob/master/app-emulation/vmware-modules/files/308-3.10-02-control.patch#L36 ++ // ~MK ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) ++ name = (char *)getname(buf); ++#else ++ name = (char *)ll_getname(buf); ++#endif + if (IS_ERR(name)) { + return PTR_ERR(name); + } +@@ -293,7 +336,13 @@ ExecuteBlockOp(const char __user *buf, // IN: buffer with name + + retval = i < 0 ? -EINVAL : blockOp(name, blocker); + +- putname(name); ++ // I'm not sure what this does, but you seem to know what you're doing ~MK ++ if (fn->name != fn->iname) { /* add by pavlinux */ ++ __putname(fn->name); ++ kvfree(fn); ++ } else { ++ __putname(fn); ++ } + + return retval; + } +diff --git a/vmblock-only/linux/dentry.c b/vmblock-only/linux/dentry.c +index 05ea95a..1245358 100644 +--- a/vmblock-only/linux/dentry.c ++++ b/vmblock-only/linux/dentry.c +@@ -32,7 +32,13 @@ + #include "block.h" + + +-static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd); ++// From what I can tell, this should've always been an unsigned int? ++static int DentryOpRevalidate(struct dentry *dentry, ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) // Maybe 3.14 or 3.13? ++ struct nameidata *nd); ++#else ++ unsigned int flags); ++#endif + + struct dentry_operations LinkDentryOps = { + .d_revalidate = DentryOpRevalidate, +@@ -60,7 +66,11 @@ struct dentry_operations LinkDentryOps = { + + static int + DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) + struct nameidata *nd) // IN: lookup flags & intent ++#else ++ unsigned int flags) // IN: lookup flags & intent ++#endif + { + VMBlockInodeInfo *iinfo; + struct nameidata actualNd; +@@ -101,7 +111,11 @@ DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating + if (actualDentry && + actualDentry->d_op && + actualDentry->d_op->d_revalidate) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0) ++ return actualDentry->d_op->d_revalidate(actualDentry, flags); ++#else + return actualDentry->d_op->d_revalidate(actualDentry, nd); ++#endif + } + + if (compat_path_lookup(iinfo->name, 0, &actualNd)) { +diff --git a/vmblock-only/linux/file.c b/vmblock-only/linux/file.c +index d7ac1f6..c5e6604 100644 +--- a/vmblock-only/linux/file.c ++++ b/vmblock-only/linux/file.c +@@ -39,6 +39,7 @@ typedef ino_t inode_num_t; + #endif + + /* Specifically for our filldir_t callback */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0) + typedef struct FilldirInfo { + filldir_t filldir; + void *dirent; +@@ -76,6 +77,7 @@ Filldir(void *buf, // IN: Dirent buffer passed from FileOpReaddir + /* Specify DT_LNK regardless */ + return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK); + } ++#endif + + + /* File operations */ +@@ -132,7 +134,12 @@ FileOpOpen(struct inode *inode, // IN + * and that would try to acquire the inode's semaphore; if the two inodes + * are the same we'll deadlock. + */ ++ // f_dentry is defined as f_path.dentry until 3.19 ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0) + if (actualFile->f_dentry && inode == actualFile->f_dentry->d_inode) { ++#else ++ if (actualFile->f_path.dentry && inode == actualFile->f_path.dentry->d_inode) { ++#endif + Warning("FileOpOpen: identical inode encountered, open cannot succeed.\n"); + if (filp_close(actualFile, current->files) < 0) { + Warning("FileOpOpen: unable to close opened file.\n"); +@@ -164,13 +171,20 @@ FileOpOpen(struct inode *inode, // IN + *---------------------------------------------------------------------------- + */ + ++// pavlinux's patch completely removes this bit for kernels older than 3.13 + static int + FileOpReaddir(struct file *file, // IN ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0) + void *dirent, // IN + filldir_t filldir) // IN ++#else ++ struct dir_context* ctx) //IN ++#endif + { + int ret; ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0) + FilldirInfo info; ++#endif + struct file *actualFile; + + if (!file) { +@@ -184,12 +198,20 @@ FileOpReaddir(struct file *file, // IN + return -EINVAL; + } + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0) + info.filldir = filldir; + info.dirent = dirent; + + actualFile->f_pos = file->f_pos; + ret = vfs_readdir(actualFile, Filldir, &info); + file->f_pos = actualFile->f_pos; ++#else ++ /* Ricky Wong Yung Fei: ++ * Manipulation of pos is now handled internally by iterate_dir(). ++ */ ++ ret = iterate_dir(actualFile, ctx); ++ file->f_pos = actualFile->f_pos; ++#endif + + return ret; + } +@@ -236,8 +258,15 @@ FileOpRelease(struct inode *inode, // IN + } + + ++// pavlinux's patch drops FileOpReaddr for < 3.13 ++// pavlinux's patch sets .owner = THIS_MODULE and .llseek = no_llseek + struct file_operations RootFileOps = { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0) + .readdir = FileOpReaddir, ++#else ++ .iterate = FileOpReaddir, ++#endif ++ .owner = THIS_MODULE, + .open = FileOpOpen, + .release = FileOpRelease, + }; +diff --git a/vmblock-only/linux/inode.c b/vmblock-only/linux/inode.c +index 098c94c..7aed6e7 100644 +--- a/vmblock-only/linux/inode.c ++++ b/vmblock-only/linux/inode.c +@@ -28,20 +28,32 @@ + #include + #include + #include ++#include + + #include "vmblockInt.h" + #include "filesystem.h" + #include "block.h" + + + /* Inode operations */ ++// Again, it looks like last arg should've always been unsigned int ~MK + static struct dentry *InodeOpLookup(struct inode *dir, +- struct dentry *dentry, struct nameidata *nd); +-static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen); +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) +-static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd); ++ struct dentry *dentry, ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) // Maybe 3.12 or 3.13? ++ struct nameidata *nd); + #else ++ unsigned int flags); ++#endif ++static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 13) + static int InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd); ++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99) ++static const char *InodeOpGetLink(struct dentry *dentry, struct inode *inode, ++ struct delayed_call *done); ++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99) ++static const char *InodeOpFollowlink(struct dentry *dentry, void **cookie); ++#else ++static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd); + #endif + + +@@ -49,9 +60,13 @@ struct inode_operations RootInodeOps = { + .lookup = InodeOpLookup, + }; + +-static struct inode_operations LinkInodeOps = { ++struct inode_operations LinkInodeOps = { + .readlink = InodeOpReadlink, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99) ++ .get_link = InodeOpGetLink, ++#else + .follow_link = InodeOpFollowlink, ++#endif + }; + + +@@ -75,7 +90,11 @@ static struct inode_operations LinkInodeOps = { + static struct dentry * + InodeOpLookup(struct inode *dir, // IN: parent directory's inode + struct dentry *dentry, // IN: dentry to lookup ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) + struct nameidata *nd) // IN: lookup intent and information ++#else ++ unsigned int flags) // IN: lookup intent and information ++#endif + { + char *filename; + struct inode *inode; +@@ -135,7 +154,16 @@ InodeOpLookup(struct inode *dir, // IN: parent directory's inode + inode->i_size = INODE_TO_IINFO(inode)->nameLen; + inode->i_version = 1; ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) + inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; ++#else ++ inode->i_atime = inode->i_mtime = inode->i_ctime = current_kernel_time(); ++#endif ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) + inode->i_uid = inode->i_gid = 0; ++#else ++ inode->i_gid = make_kgid(current_user_ns(), 0); ++ inode->i_uid = make_kuid(current_user_ns(), 0); ++#endif + inode->i_op = &LinkInodeOps; + + d_add(dentry, inode); +@@ -176,8 +200,15 @@ InodeOpReadlink(struct dentry *dentry, // IN : dentry of symlink + if (!iinfo) { + return -EINVAL; + } +- ++#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 14, 99) + return vfs_readlink(dentry, buffer, buflen, iinfo->name); ++#elif LINUX_VERSION_CODE <= KERNEL_VERSION(4, 6, 99) ++ return readlink_copy(buffer, buflen, iinfo->name); ++#elif LINUX_VERSION_CODE <= KERNEL_VERSION(4, 9, 99) ++ return generic_readlink(dentry, buffer, buflen); ++#else ++ return vfs_readlink(dentry, buffer, buflen); ++#endif + } + + +@@ -198,30 +229,58 @@ InodeOpReadlink(struct dentry *dentry, // IN : dentry of symlink + *---------------------------------------------------------------------------- + */ + +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) +-static void * ++static ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 13) ++int ++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99) ++const char * + #else +-static int ++void * + #endif ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99) ++InodeOpGetLink(struct dentry *dentry, struct inode *inode, ++ struct delayed_call *done) ++#else + InodeOpFollowlink(struct dentry *dentry, // IN : dentry of symlink ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99) ++ void **cookie) ++#else + struct nameidata *nd) // OUT: stores result ++#endif ++#endif + { + int ret; + VMBlockInodeInfo *iinfo; + + if (!dentry) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99) ++ ret = -ECHILD; ++#else + Warning("InodeOpReadlink: invalid args from kernel\n"); + ret = -EINVAL; ++#endif + goto out; + } + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99) ++ iinfo = INODE_TO_IINFO(inode); ++#else + iinfo = INODE_TO_IINFO(dentry->d_inode); ++#endif + if (!iinfo) { + ret = -EINVAL; + goto out; + } + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0) + ret = vfs_follow_link(nd, iinfo->name); ++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99) ++ return (char *)(iinfo->name); ++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99) ++ return *cookie = (char *)(iinfo->name); ++#else ++ nd_set_link(nd, iinfo->name); ++#endif + + out: + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) +diff --git a/vmblock-only/shared/compat_namei.h b/vmblock-only/shared/compat_namei.h +index f82dd49..426d40b 100644 +--- a/vmblock-only/shared/compat_namei.h ++++ b/vmblock-only/shared/compat_namei.h +@@ -45,4 +45,20 @@ + #define compat_path_lookup(name, flags, nd) path_lookup(name, flags, nd) + #endif + ++/* nameidata struct for 4.2+ */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0) ++struct nameidata { ++ struct path path; ++ struct qstr last; ++ struct path root; ++ struct inode *inode; /* path.dentry.d_inode */ ++ unsigned int flags; ++ unsigned seq, m_seq; ++ int last_type; ++ unsigned depth; ++ struct file *base; ++ char *saved_names[MAX_NESTED_LINKS + 1]; ++}; ++#endif ++ + #endif /* __COMPAT_NAMEI_H__ */ diff --git a/app-emulation/vmware-modules/files/329-vmci.patch b/app-emulation/vmware-modules/files/329-vmci.patch new file mode 100644 index 0000000..764f858 --- /dev/null +++ b/app-emulation/vmware-modules/files/329-vmci.patch @@ -0,0 +1,294 @@ +diff --git a/vmci-only/Makefile b/vmci-only/Makefile +index c630705..18357e5 100644 +--- a/vmci-only/Makefile ++++ b/vmci-only/Makefile +@@ -43,7 +43,11 @@ INCLUDE += -I$(SRCROOT)/shared + endif + + ++ifdef KVERSION ++VM_UNAME = $(KVERSION) ++else + VM_UNAME = $(shell uname -r) ++endif + + # Header directory for the running kernel + ifdef LINUXINCLUDE +diff --git a/vmci-only/Makefile.kernel b/vmci-only/Makefile.kernel +index 8e6e7d0..28eb503 100644 +--- a/vmci-only/Makefile.kernel ++++ b/vmci-only/Makefile.kernel +@@ -21,7 +21,7 @@ CC_OPTS += -DVMCI + + INCLUDE += -I$(SRCROOT)/shared -I$(SRCROOT)/common -I$(SRCROOT)/linux + +-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) ++EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE) + + obj-m += $(DRIVER).o + +diff --git a/vmci-only/linux/driver.c b/vmci-only/linux/driver.c +index f676166..9e42f3f 100644 +--- a/vmci-only/linux/driver.c ++++ b/vmci-only/linux/driver.c +@@ -26,6 +26,7 @@ + + #include + #include ++#include + #include + #if defined(__x86_64__) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12) + # include +@@ -1466,12 +1467,19 @@ VMCIUserVALockPage(VA addr) // IN: + int retval; + + down_read(¤t->mm->mmap_sem); +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) +- retval = get_user_pages(addr, 1, 1, 0, &page, NULL); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99) ++ retval = get_user_pages(addr, + #else + retval = get_user_pages(current, current->mm, addr, +- 1, 1, 0, &page, NULL); + #endif ++ 1, ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0) ++ 1, 0, ++#else ++ FOLL_WRITE, ++#endif ++ &page, NULL); ++ + up_read(¤t->mm->mmap_sem); + + if (retval != 1) { +@@ -1686,7 +1694,11 @@ vmci_guest_init(void) + /* This should be last to make sure we are done initializing. */ + retval = pci_register_driver(&vmci_driver); + if (retval < 0) { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0) + vfree(data_buffer); ++#else ++ kvfree(data_buffer); ++#endif + data_buffer = NULL; + return retval; + } +@@ -1722,12 +1734,25 @@ + vmci_dev.msix_entries[i].vector = i; + } + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) + result = pci_enable_msix(pdev, vmci_dev.msix_entries, VMCI_MAX_INTRS); + if (!result) { + vmci_dev.exclusive_vectors = TRUE; + } else if (result > 0) { + result = pci_enable_msix(pdev, vmci_dev.msix_entries, 1); + } ++#else ++ result = pci_enable_msix_range(pdev, vmci_dev.msix_entries, VMCI_MAX_INTRS, ++ VMCI_MAX_INTRS); ++ if (result > 0) { ++ vmci_dev.exclusive_vectors = TRUE; ++ } else if (result == -ENOSPC) { ++ result = pci_enable_msix_range(pdev, vmci_dev.msix_entries, 1, 1); ++ } ++ ++ if (result > 0) ++ result = 0; ++#endif + return result; + } + +@@ -2480,7 +2505,11 @@ vmci_exit(void) + + if (guestDeviceInit) { + pci_unregister_driver(&vmci_driver); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0) + vfree(data_buffer); ++#else ++ kvfree(data_buffer); ++#endif + data_buffer = NULL; + guestDeviceInit = FALSE; + } +@@ -2490,7 +2519,7 @@ vmci_exit(void) + + VMCI_HostCleanup(); + +- retval = misc_deregister(&linuxState.misc); ++ retval = compat_misc_deregister(&linuxState.misc); + if (retval) { + Warning(LGPFX "Module %s: error unregistering\n", VMCI_MODULE_NAME); + } else { +diff --git a/vmci-only/linux/vmciKernelIf.c b/vmci-only/linux/vmciKernelIf.c +index 3fba8b6..1836442 100644 +--- a/vmci-only/linux/vmciKernelIf.c ++++ b/vmci-only/linux/vmciKernelIf.c +@@ -40,6 +40,10 @@ + #include /* For memcpy_{to,from}iovec(). */ + #include + #include ++#include ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 99) ++#include ++#endif + + #include "compat_highmem.h" + #include "compat_interrupt.h" +@@ -1198,16 +1199,29 @@ __VMCIMemcpyToQueue(VMCIQueue *queue, // OUT: + } + + if (isIovec) { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + struct iovec *iov = (struct iovec *)src; ++#else ++ struct msghdr *msg = (struct msghdr *)src; ++#endif + int err; + + /* The iovec will track bytesCopied internally. */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + err = memcpy_fromiovec((uint8 *)va + pageOffset, iov, toCopy); ++#else ++ err = memcpy_from_msg((uint8 *)va + pageOffset, msg, toCopy); ++#endif + if (err != 0) { + if (kernelIf->host) { + kunmap(kernelIf->u.h.page[pageIndex]); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + } + return VMCI_ERROR_INVALID_ARGS; ++#else ++ return VMCI_ERROR_INVALID_ARGS; ++ } ++#endif + } + } else { + memcpy((uint8 *)va + pageOffset, (uint8 *)src + bytesCopied, toCopy); +@@ -1273,11 +1287,19 @@ __VMCIMemcpyFromQueue(void *dest, // OUT: + } + + if (isIovec) { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + struct iovec *iov = (struct iovec *)dest; ++#else ++ struct msghdr *msg = (struct msghdr *)dest; ++#endif + int err; + + /* The iovec will track bytesCopied internally. */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + err = memcpy_toiovec(iov, (uint8 *)va + pageOffset, toCopy); ++#else ++ err = memcpy_to_msg(msg, (uint8 *)va + pageOffset, toCopy); ++#endif + if (err != 0) { + if (kernelIf->host) { + kunmap(kernelIf->u.h.page[pageIndex]); +@@ -1834,7 +1856,11 @@ VMCIReleasePages(struct page **pages, // IN + if (dirty) { + set_page_dirty(pages[i]); + } ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99) ++ put_page(pages[i]); ++#else + page_cache_release(pages[i]); ++#endif + pages[i] = NULL; + } + } +@@ -2048,21 +2074,22 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN + int err = VMCI_SUCCESS; + + down_write(¤t->mm->mmap_sem); +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99) + retval = get_user_pages((VA)produceUVA, +- produceQ->kernelIf->numPages, +- 1, 0, +- produceQ->kernelIf->u.h.headerPage, +- NULL); + #else + retval = get_user_pages(current, + current->mm, + (VA)produceUVA, ++#endif + produceQ->kernelIf->numPages, ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0) + 1, 0, ++#else ++ FOLL_WRITE, ++#endif + produceQ->kernelIf->u.h.headerPage, + NULL); +-#endif ++ + if (retval < produceQ->kernelIf->numPages) { + Log("get_user_pages(produce) failed (retval=%d)\n", retval); + VMCIReleasePages(produceQ->kernelIf->u.h.headerPage, retval, FALSE); +@@ -2070,11 +2097,19 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN + goto out; + } + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99) ++ retval = get_user_pages((VA)consumeUVA, ++#else + retval = get_user_pages(current, + current->mm, + (VA)consumeUVA, ++#endif + consumeQ->kernelIf->numPages, ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0) + 1, 0, ++#else ++ FOLL_WRITE, ++#endif + consumeQ->kernelIf->u.h.headerPage, + NULL); + if (retval < consumeQ->kernelIf->numPages) { +diff --git a/vmci-only/shared/compat_module.h b/vmci-only/shared/compat_module.h +index 2af7372..729aedc 100644 +--- a/vmci-only/shared/compat_module.h ++++ b/vmci-only/shared/compat_module.h +@@ -80,4 +80,13 @@ static const char __module_cat(tag, __LINE__)[] \ + typedef int compat_mod_param_bool; + #endif + ++/* ++ * Linux kernel >= 4.2.99 does not return anything from misc_deregister ++ */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 99) ++#define compat_misc_deregister(misc) misc_deregister(misc) ++#else ++#define compat_misc_deregister(misc) ({misc_deregister(misc);0;}) ++#endif ++ + #endif /* __COMPAT_MODULE_H__ */ +diff --git a/vmci-only/shared/vm_device_version.h b/vmci-only/shared/vm_device_version.h +index e2cb477..3dd7097 100644 +--- a/vmci-only/shared/vm_device_version.h ++++ b/vmci-only/shared/vm_device_version.h +@@ -53,7 +53,9 @@ + * VMware HD Audio codec + * VMware HD Audio controller + */ ++#ifndef PCI_VENDOR_ID_VMWARE + #define PCI_VENDOR_ID_VMWARE 0x15AD ++#endif + #define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405 + #define PCI_DEVICE_ID_VMWARE_SVGA 0x0710 + #define PCI_DEVICE_ID_VMWARE_VGA 0x0711 +diff --git a/vmci-only/shared/vmci_kernel_if.h b/vmci-only/shared/vmci_kernel_if.h +index 9def671..082fe59 100644 +--- a/vmci-only/shared/vmci_kernel_if.h ++++ b/vmci-only/shared/vmci_kernel_if.h +@@ -100,7 +100,7 @@ + typedef Semaphore VMCIEvent; + typedef Semaphore VMCIMutex; + typedef World_ID VMCIHostVmID; +- typedef uint32 VMCIHostUser; ++ typedef uint32_t VMCIHostUser; + typedef PPN *VMCIQPGuestMem; + #elif defined(__linux__) + typedef spinlock_t VMCILock; diff --git a/app-emulation/vmware-modules/files/329-vsock.patch b/app-emulation/vmware-modules/files/329-vsock.patch new file mode 100644 index 0000000..d77402a --- /dev/null +++ b/app-emulation/vmware-modules/files/329-vsock.patch @@ -0,0 +1,266 @@ +diff --git a/vsock-only/Makefile b/vsock-only/Makefile +index 5d92e9b..7d315e8 100644 +--- a/vsock-only/Makefile ++++ b/vsock-only/Makefile +@@ -42,8 +42,11 @@ AUTOCONF_DIR := $(SRCROOT)/shared/autoconf + INCLUDE += -I$(SRCROOT)/shared + endif + +- ++ifdef KVERSION ++VM_UNAME = $(KVERSION) ++else + VM_UNAME = $(shell uname -r) ++endif + + # Header directory for the running kernel + ifdef LINUXINCLUDE +diff --git a/vsock-only/Makefile.kernel b/vsock-only/Makefile.kernel +index 5218df2..374cc1f 100644 +--- a/vsock-only/Makefile.kernel ++++ b/vsock-only/Makefile.kernel +@@ -25,7 +25,7 @@ INCLUDE += -I$(SRCROOT)/include + INCLUDE += -I$(SRCROOT)/linux + INCLUDE += -I$(SRCROOT)/common + +-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) ++EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE) + EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/netcreate_num_params.c, -DVMW_NETCREATE_KERNARG, ) + + +diff --git a/vsock-only/linux/af_vsock.c b/vsock-only/linux/af_vsock.c +index bde1497..9f8f843 100644 +--- a/vsock-only/linux/af_vsock.c ++++ b/vsock-only/linux/af_vsock.c +@@ -113,6 +113,9 @@ + asmlinkage __attribute__((weak)) long + sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg); + #endif ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 99) ++#include ++#endif + + #include "compat_cred.h" + #include "compat_module.h" +@@ -213,7 +216,11 @@ + struct sockaddr *addr, int addrLen, int flags); + static int VSockVmciStreamConnect(struct socket *sock, + struct sockaddr *addr, int addrLen, int flags); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0) + static int VSockVmciAccept(struct socket *sock, struct socket *newsock, int flags); ++#else ++static int VSockVmciAccept(struct socket *sock, struct socket *newsock, int flags, bool kern); ++#endif + static int VSockVmciGetname(struct socket *sock, + struct sockaddr *addr, int *addrLen, int peer); + static unsigned int VSockVmciPoll(struct file *file, +@@ -233,13 +240,29 @@ static int VSockVmciStreamSetsockopt(struct socket *sock, int level, int optname + static int VSockVmciStreamGetsockopt(struct socket *sock, int level, int optname, + char __user *optval, int __user * optlen); + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99) + static int VSockVmciDgramSendmsg(struct kiocb *kiocb, ++#else ++static int VSockVmciDgramSendmsg( ++#endif + struct socket *sock, struct msghdr *msg, size_t len); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99) + static int VSockVmciDgramRecvmsg(struct kiocb *kiocb, struct socket *sock, ++#else ++static int VSockVmciDgramRecvmsg(struct socket *sock, ++#endif + struct msghdr *msg, size_t len, int flags); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99) + static int VSockVmciStreamSendmsg(struct kiocb *kiocb, ++#else ++static int VSockVmciStreamSendmsg( ++#endif + struct socket *sock, struct msghdr *msg, size_t len); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99) + static int VSockVmciStreamRecvmsg(struct kiocb *kiocb, struct socket *sock, ++#else ++static int VSockVmciStreamRecvmsg(struct socket *sock, ++#endif + struct msghdr *msg, size_t len, int flags); + + static int VSockVmciCreate( +@@ -2872,11 +2895,18 @@ __VSockVmciCreate(struct net *net, // IN: Network namespace + * From 2.6.9 to until 2.6.12 sk_alloc() used a cache in + * the protocol structure, but you still had to specify the size and cache + * yourself. +- * Most recently (in 2.6.24), sk_alloc() was changed to expect the ++ * In 2.6.24, sk_alloc() was changed to expect the + * network namespace, and the option to zero the sock was dropped. + * ++ * In 4.2, another parameter was added to sk_alloc() allowing you to specify ++ * whether or not the socket is to be a kernel socket. Previously, we passed ++ * 1 to this new parameter, but following Gentoo's lead ++ * ( https://github.com/gentoo/vmware/blob/master/app-emulation/vmware-modules/files/308-4.02-01-sk_alloc.patch#L19 ) ++ * we have switched to passing 0. + */ +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99) ++ sk = sk_alloc(net, vsockVmciFamilyOps.family, priority, &vsockVmciProto, 0); ++#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12) + sk = sk_alloc(vsockVmciFamilyOps.family, priority, + vsockVmciProto.slab_obj_size, vsockVmciProto.slab); + #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24) +@@ -3825,7 +3855,12 @@ + static int + VSockVmciAccept(struct socket *sock, // IN + struct socket *newsock, // IN/OUT ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0) + int flags) // IN ++#else ++ int flags, // IN ++ bool kern) ++#endif + { + struct sock *listener; + int err; +@@ -4260,7 +4295,11 @@ VSockVmciShutdown(struct socket *sock, // IN + */ + + static int ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99) + VSockVmciDgramSendmsg(struct kiocb *kiocb, // UNUSED ++#else ++VSockVmciDgramSendmsg( ++#endif + struct socket *sock, // IN: socket to send on + struct msghdr *msg, // IN: message to send + size_t len) // IN: length of message +@@ -4352,7 +4391,11 @@ VSockVmciDgramSendmsg(struct kiocb *kiocb, // UNUSED + goto out; + } + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + memcpy_fromiovec(VMCI_DG_PAYLOAD(dg), msg->msg_iov, len); ++#else ++ memcpy_from_msg(VMCI_DG_PAYLOAD(dg), msg, len); ++#endif + + dg->dst = VMCI_MAKE_HANDLE(remoteAddr->svm_cid, remoteAddr->svm_port); + dg->src = VMCI_MAKE_HANDLE(vsk->localAddr.svm_cid, vsk->localAddr.svm_port); +@@ -4590,7 +4633,11 @@ VSockVmciStreamGetsockopt(struct socket *sock, // IN + */ + + static int ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99) + VSockVmciStreamSendmsg(struct kiocb *kiocb, // UNUSED ++#else ++VSockVmciStreamSendmsg( ++#endif + struct socket *sock, // IN: socket to send on + struct msghdr *msg, // IN: message to send + size_t len) // IN: length of message +@@ -4712,7 +4759,11 @@ VSockVmciStreamSendmsg(struct kiocb *kiocb, // UNUSED + * able to send. + */ + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + written = vmci_qpair_enquev(vsk->qpair, msg->msg_iov, ++#else ++ written = vmci_qpair_enquev(vsk->qpair, &msg->msg_iter.iov, ++#endif + len - totalWritten, 0); + if (written < 0) { + err = -ENOMEM; +@@ -4759,7 +4810,11 @@ out: + */ + + static int ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99) + VSockVmciDgramRecvmsg(struct kiocb *kiocb, // UNUSED ++#else ++VSockVmciDgramRecvmsg( ++#endif + struct socket *sock, // IN: socket to receive from + struct msghdr *msg, // IN/OUT: message to receive into + size_t len, // IN: length of receive buffer +@@ -4809,7 +4864,11 @@ VSockVmciDgramRecvmsg(struct kiocb *kiocb, // UNUSED + } + + /* Place the datagram payload in the user's iovec. */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + err = skb_copy_datagram_iovec(skb, sizeof *dg, msg->msg_iov, payloadLen); ++#else ++ err = skb_copy_datagram_iter(skb, sizeof *dg, &msg->msg_iter, payloadLen); ++#endif + if (err) { + goto out; + } +@@ -4850,7 +4909,11 @@ out: + */ + + static int ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99) + VSockVmciStreamRecvmsg(struct kiocb *kiocb, // UNUSED ++#else ++VSockVmciStreamRecvmsg( ++#endif + struct socket *sock, // IN: socket to receive from + struct msghdr *msg, // IN/OUT: message to receive into + size_t len, // IN: length of receive buffer +@@ -4955,9 +5018,17 @@ VSockVmciStreamRecvmsg(struct kiocb *kiocb, // UNUSED + } + + if (flags & MSG_PEEK) { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + read = vmci_qpair_peekv(vsk->qpair, msg->msg_iov, len - copied, 0); ++#else ++ read = vmci_qpair_peekv(vsk->qpair, &msg->msg_iter.iov, len - copied, 0); ++#endif + } else { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + read = vmci_qpair_dequev(vsk->qpair, msg->msg_iov, len - copied, 0); ++#else ++ read = vmci_qpair_dequev(vsk->qpair, &msg->msg_iter.iov, len - copied, 0); ++#endif + } + + if (read < 0) { +diff --git a/vsock-only/linux/notify.c b/vsock-only/linux/notify.c +index 5b1e134..82d8738 100644 +--- a/vsock-only/linux/notify.c ++++ b/vsock-only/linux/notify.c +@@ -516,7 +516,11 @@ VSockVmciHandleWrote(struct sock *sk, // IN + PKT_FIELD(vsk, sentWaitingRead) = FALSE; + #endif + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0) + sk->sk_data_ready(sk, 0); ++#else ++ sk->sk_data_ready(sk); ++#endif + } + + +diff --git a/vsock-only/linux/notifyQState.c b/vsock-only/linux/notifyQState.c +index 464454b..7933be7 100644 +--- a/vsock-only/linux/notifyQState.c ++++ b/vsock-only/linux/notifyQState.c +@@ -164,7 +164,11 @@ VSockVmciHandleWrote(struct sock *sk, // IN + struct sockaddr_vm *dst, // IN: unused + struct sockaddr_vm *src) // IN: unused + { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0) + sk->sk_data_ready(sk, 0); ++#else ++ sk->sk_data_ready(sk); ++#endif + } + + +@@ -566,7 +570,11 @@ VSockVmciNotifyPktRecvPostDequeue(struct sock *sk, // IN + } + + /* See the comment in VSockVmciNotifyPktSendPostEnqueue */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0) + sk->sk_data_ready(sk, 0); ++#else ++ sk->sk_data_ready(sk); ++#endif + } + + return err; diff --git a/app-emulation/vmware-modules/vmware-modules-329.1.1-r1.ebuild b/app-emulation/vmware-modules/vmware-modules-329.1.1-r1.ebuild new file mode 100644 index 0000000..fee1a34 --- /dev/null +++ b/app-emulation/vmware-modules/vmware-modules-329.1.1-r1.ebuild @@ -0,0 +1,145 @@ +# Copyright 1999-2018 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit eutils flag-o-matic linux-info linux-mod user versionator udev + +PV_MAJOR=$(get_major_version) +PV_MINOR=$(get_version_component_range 2-3) + +DESCRIPTION="VMware kernel modules" +HOMEPAGE="http://www.vmware.com/" + +SRC_URI="" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64" +IUSE="vmblock vmci vsock" +REQUIRED_USE="!vsock? ( !vmci )" + +RDEPEND="" +DEPEND=" + =app-emulation/vmware-workstation-14.${PV_MINOR}* +" + +S=${WORKDIR} + +pkg_setup() { + CONFIG_CHECK="~HIGH_RES_TIMERS" + if kernel_is ge 2 6 37 && kernel_is lt 2 6 39; then + CONFIG_CHECK="${CONFIG_CHECK} BKL" + fi + if use vmci ; then + CONFIG_CHECK="${CONFIG_CHECK} !VMWARE_VMCI" + else + CONFIG_CHECK="${CONFIG_CHECK} VMWARE_VMCI" + fi + if use vsock ; then + CONFIG_CHECK="${CONFIG_CHECK} !VMWARE_VMCI_VSOCKETS" + else + CONFIG_CHECK="${CONFIG_CHECK} VMWARE_VMCI_VSOCKETS" + fi + + linux-info_pkg_setup + + linux-mod_pkg_setup + + VMWARE_GROUP=${VMWARE_GROUP:-vmware} + + VMWARE_MODULE_LIST_ALL="vmblock vmmon vmnet vmci vsock" + VMWARE_MODULE_LIST="vmmon vmnet" + use vmci && VMWARE_MODULE_LIST="${VMWARE_MODULE_LIST} vmci" + use vsock && VMWARE_MODULE_LIST="${VMWARE_MODULE_LIST} vsock" + use vmblock && VMWARE_MODULE_LIST="${VMWARE_MODULE_LIST} vmblock" + + VMWARE_MOD_DIR="${PN}-${PVR}" + + BUILD_TARGETS="auto-build KERNEL_DIR=${KERNEL_DIR} KBUILD_OUTPUT=${KV_OUT_DIR}" + + enewgroup "${VMWARE_GROUP}" + + filter-flags -mfpmath=sse -mavx -mpclmul -maes + append-cflags -mno-sse # Found a problem similar to bug #492964 + + for mod in ${VMWARE_MODULE_LIST}; do + MODULE_NAMES="${MODULE_NAMES} ${mod}(misc:${S}/${mod}-only)" + done +} + +src_unpack() { + cd "${S}" + for mod in ${VMWARE_MODULE_LIST_ALL}; do + tar -xf /opt/vmware/lib/vmware/modules/source/${mod}.tar + done +} + +src_prepare() { + # from Arch Linux: https://aur.archlinux.org/packages/vmware-workstation/ + if use vmblock; then + epatch "${FILESDIR}/${PV_MAJOR}-vmblock.patch" + fi + if use vmci; then + epatch "${FILESDIR}/${PV_MAJOR}-vmci.patch" + fi + if use vsock; then + epatch "${FILESDIR}/${PV_MAJOR}-vsock.patch" + epatch "${FILESDIR}/${PV_MAJOR}-4.14-00-vsock-gcc-plugins-randstruct.patch" + fi + # from https://github.com/mkubecek/vmware-host-modules/tree/workstation-14.0.0 + epatch "${FILESDIR}/${PV_MAJOR}-00-vmmon-quick-workaround-for-objtool-warnings.patch" + kernel_is ge 4 9 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch" + kernel_is ge 4 10 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch" + kernel_is ge 4 12 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch" + kernel_is ge 4 13 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch" + + # decouple the kernel include dir from the running kernel version: https://github.com/stefantalpalaru/gentoo-overlay/issues/17 + sed -i -e "s%HEADER_DIR = /lib/modules/\$(VM_UNAME)/build/include%HEADER_DIR = ${KERNEL_DIR}/include%" */Makefile || die "sed failed" + + # Allow user patches so they can support RC kernels and whatever else + default +} + +src_install() { + linux-mod_src_install + local udevrules="${T}/60-vmware.rules" + cat > "${udevrules}" <<-EOF + KERNEL=="vmci", GROUP="vmware", MODE="660" + KERNEL=="vmw_vmci", GROUP="vmware", MODE="660" + KERNEL=="vmmon", GROUP="vmware", MODE="660" + KERNEL=="vsock", GROUP="vmware", MODE="660" + EOF + udev_dorules "${udevrules}" + + if ! use vmci ; then + dodir /etc/modprobe.d/ + + cat > "${D}"/etc/modprobe.d/vmware.conf <<-EOF + # Support for vmware vmci in kernel module + alias vmci vmw_vmci + EOF + + export installed_modprobe_conf=1 + fi + if ! use vsock ; then + dodir /etc/modprobe.d/ + cat >> "${D}"/etc/modprobe.d/vmware.conf <<-EOF + # Support for vmware vsock in kernel module + alias vsock vmw_vsock_vmci_transport + EOF + + export installed_modprobe_conf=1 + fi +} + +pkg_postinst() { + linux-mod_pkg_postinst + if [ "${installed_modprobe_conf}"x == "x" ] ; then + if [ -f "${ROOT}/etc/modprobe.d/vmware.conf" ] ; then + ewarn "Please check the /etc/modprobe.d/vmware.conf file and" + ewarn "possible conflicts when using vmci and/or vsock modules built" + ewarn "out of kernel" + fi + fi +} diff --git a/app-emulation/vmware-workstation/Manifest b/app-emulation/vmware-workstation/Manifest new file mode 100644 index 0000000..eaf825b --- /dev/null +++ b/app-emulation/vmware-workstation/Manifest @@ -0,0 +1,9 @@ +AUX configure-hostd.sh 372 BLAKE2B 0ed2d479a46d69ff8498bfac180f0440fb57fb173fc1a427115872a40a47559725623399652e9663fa8a4ca0d7e020d5445bafb6c37f45449dea341fc9f6cce6 SHA512 87c84f5e51e8b4585a9a55f13771cd8b84f2e4e0bb33679e3a1b23eb84a5be5d523a57b6c770095c1d21712a98e9317bbd215ab027843b0586b35ecf9fb85b49 +AUX vmware-14.1.rc 2476 BLAKE2B dff25b43c5fa57186be2a5f0ca4606d26cd1c3f3dbeb91d855fc07a9fd576f446983c852c8e0b112c5616bb95dfddc7e2c738b4d0ca341c781d7addcb45068cd SHA512 9bae224387128b2cd221d509e2933042e3925fb041670907d8a47c70a488214206912fe25ab24c0bdeb31591149e62aba374d3fa63fdd08644e09667e195967f +AUX vmware-server-14.1.rc 1506 BLAKE2B 886ed1de7a99320611a28a43b48cf17715fcab8bf533a73c28a1aa2f8d150ee2b84e1e510e864b18347f3bd7e43faec3cfc90f09d5ac9c0afe821f67654a68c4 SHA512 548ff69f87bee2b6c82bd931d22dd560370c4a00641ae47d05af05bbc72cedc8fd25054abc405a590b72227b10c5997d79f16ded67f3e0cfac142eb248b47d44 +DIST VMware-Workstation-Full-14.1.1-7528167.x86_64.bundle 460769685 BLAKE2B c9807a94588989e7a1dd0d7964c5d9385f57f19aaf2cdb43be9b29a0b61edcd7cb93865ca8dc84394a306467fb80816334239fc3508d360f2c5e4aeecd5c93d1 SHA512 86f06796fc3657a895fd5766c5b83e4ff88c73e34f789c287f1e9b5b613d138067f151f1c0c92749bb0104490bd0e0ca223c55b71a3a98611b1e9dc5cec6c304 +DIST com.vmware.fusion.tools.darwin.zip.tar 2836480 BLAKE2B e434280c4cf1f9f38823546e7c15c8425d33db3253d203d56d39b012a17d4862c9aece3b4aad08629d303881ea7b4bdba1ded11686bc3bc8ebc804dea3ad07de SHA512 3a08e3670475ea84ddde8646e7a5b9b1efcaffd801aa3d64a5b0984c84aebff320114b0a8b9f9188a7cdd0640ec0bfae8c237625132fdac448501b4451c78488 +DIST com.vmware.fusion.tools.darwinPre15.zip.tar 2478080 BLAKE2B 27b0ea99545b33e079994da8f26c8c6c3ecce7dbc108062cedc787c9a20e53b591e119826875895d10d120a81efbe14d47563b24f6889cf9338367488e2a5e44 SHA512 dbac244995a16a3247c3eb81ec5a68979f454e6b9e28d2fe47678502441140bbe1c171da69945ea8f0581dcc9191002e02758ce9aafbd70b442263a5b8818f3c +DIST unlocker-2.1.1_p1.zip 16201234 BLAKE2B 486597ba7ef12d2ec5b021ff9f5b56a9d1a58251e26f7bd9df4e84d34df9602ada3eaf69967ea645082e3919187f14801e7f506fa08b457d5763bdba9ec75493 SHA512 4ccea825339ae9303e8676dc773ca54cc929ab4970d8a2ac225f05bf18bad0e0945b7df3dd2b65c5596fd164642296da0f64774b27d7c066597f4d1d4db82bee +DIST vmware-systemd-gentoo-02.tgz 14064 BLAKE2B 24ac2c2f295130f4aadad867ec88d652bd292cc60e6b471bb2e01069fe01d84dac3d8b0ca7690ebf218d663adfe0c1dc889d3f4f53cf3178b68291461260748b SHA512 3a382bfd5f1eb2b218d8012588ea55c1f22786dba35a1fc0fdfdb4e40b05e0e735ed09c6961684f6442e863c3ed72024ce01f19113bbd9ca47c32e3f43c55f42 +EBUILD vmware-workstation-14.1.1.7528167.ebuild 20620 BLAKE2B 302500222d7aa2ca368e26b703215d9122db2745d393b46f8ed55ba2302d2853becdfc384e9f8375d6e19b906fae0271f6cb116353b9d5003a448d02fa24de5d SHA512 5c67a627c23feb300307d22c31a4ad68f4674a8d0b831cf8c35bd842a68232995f9cdf4a6cb0ac88335f17b95b2a9586cffc00485ebc456e170ccf960fc4ca42 diff --git a/app-emulation/vmware-workstation/files/configure-hostd.sh b/app-emulation/vmware-workstation/files/configure-hostd.sh new file mode 100644 index 0000000..480e903 --- /dev/null +++ b/app-emulation/vmware-workstation/files/configure-hostd.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +action="$1" + +case $action in + add) + rc-update -q add vmware-workstation-server default + rc-service vmware-workstation-server start + ;; + remove) + rc-update -q del vmware-workstation-server default + rc-service vmware-workstation-server stop + ;; + status) + rc-service -q vmware-workstation-server status + ;; + *) + exit 1 + ;; +esac diff --git a/app-emulation/vmware-workstation/files/vmware-14.1.rc b/app-emulation/vmware-workstation/files/vmware-14.1.rc new file mode 100644 index 0000000..b627869 --- /dev/null +++ b/app-emulation/vmware-workstation/files/vmware-14.1.rc @@ -0,0 +1,102 @@ +#!/sbin/openrc-run +# Copyright 1999-2018 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() { + need localmount + use net +} + +start() { + ebegin Starting VMware USB Arbitrator + @@BINDIR@@/vmware-usbarbitrator + eend $? + ebegin Starting VMware services + + # vmci might be: + # 1) built as external kernel module + # 2) built as internal kernel module (with name vmw_vmci) + # 3) embedded in the kernel + for mod in /lib/modules/$(uname -r)/misc/vmci.ko \ + /lib/modules/$(uname -r)/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko ; + do + if [[ -f "${mod}" ]] ; then + modprobe -v $(basename "${mod}" .ko) + eend $? + break + fi + done + + # vsock might be: + # 1) built as external kernel module + # 2) built as internal kernel module (with name vmw_vsock_vmci_transport) + # 3) embedded in the kernel + for mod in /lib/modules/$(uname -r)/misc/vsock.ko \ + /lib/modules/$(uname -r)/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko ; + do + if [[ -f "${mod}" ]] ; then + modprobe -v $(basename "${mod}" .ko) + eend $? + break + fi + done + + # vmblock + if [[ -f /lib/modules/$(uname -r)/misc/vmblock.ko ]]; then + modprobe -v vmblock + eend $? + fi + + # vmci or vsock were already loaded by the previous modprobe, + # no need to do it here + # quiet for vmci because it may not be there + modprobe -av vmmon vmnet + eend $? + @@BINDIR@@/vmware-networks --start + eend $? +} + +stop() { + ebegin Stopping VMware USB Arbitrator + killall --wait vmware-usbarbitrator + eend $? + @@BINDIR@@/vmware-networks --stop + eend $? + ebegin Stopping VMware services + modprobe -rv vmmon vmnet + eend $? + + # vsock might be: + # 1) built as external kernel module + # 2) built as internal kernel module (with name vmw_vsock_vmci_transport) + # 3) embedded in the kernel + for mod in /lib/modules/$(uname -r)/misc/vsock.ko \ + /lib/modules/$(uname -r)/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko ; + do + if [[ -f "${mod}" ]] ; then + modprobe -rv $(basename "${mod}" .ko) + eend $? + break + fi + done + + # vmci might be: + # 1) built as external kernel module + # 2) built as internal kernel module (with name vmw_vmci) + # 3) embedded in the kernel + for mod in /lib/modules/$(uname -r)/misc/vmci.ko \ + /lib/modules/$(uname -r)/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko ; + do + if [[ -f "${mod}" ]] ; then + modprobe -rv $(basename "${mod}" .ko) + eend $? + break + fi + done + + # vmblock + if [[ -f /lib/modules/$(uname -r)/misc/vmblock.ko ]]; then + modprobe -rv vmblock + eend $? + fi +} diff --git a/app-emulation/vmware-workstation/files/vmware-server-14.1.rc b/app-emulation/vmware-workstation/files/vmware-server-14.1.rc new file mode 100644 index 0000000..8f9b7dd --- /dev/null +++ b/app-emulation/vmware-workstation/files/vmware-server-14.1.rc @@ -0,0 +1,52 @@ +#!/sbin/openrc-run +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() { + need localmount vmware + use net +} + +checkconfig() { + checkpath -d /var/run/vmware + + # Check if certificates exist. If not, we need to generate them, ala sshd. + if [ ! -e @@ETCDIR@@/ssl/rui.key -o ! -e @@ETCDIR@@/ssl/rui.crt ]; then + checkpath -d -m 0600 @@ETCDIR@@/ssl + openssl req -x509 -days 365 -newkey rsa:2048 -keyout @@ETCDIR@@/ssl/rui.key -out @@ETCDIR@@/ssl/rui.crt -config @@ETCDIR@@/ssl/hostd.ssl.config + checkpath -f -m 0600 @@ETCDIR@@/ssl/rui.key @@ETCDIR@@/ssl/rui.crt + fi +} + +start() { + checkconfig + + ebegin Starting VMware Authentication Daemon + start-stop-daemon --start \ + --exec @@PREFIX@@/sbin/vmware-authdlauncher + eend $? + ebegin Starting VMware Workstation Server + start-stop-daemon --start \ + --pidfile /var/run/vmware/vmware-hostd.PID \ + --exec @@BINDIR@@/vmware-hostd \ + -- -a -d @@ETCDIR@@/hostd/config.xml + eend $? +} + +stop() { + ebegin "Shutdown VMs in the AutoStart Sequence" + local HOHO_ADMIN="$(@@BINDIR@@/vmware-wssc-adminTool "@@ETCDIR@@/hostd/authorization.xml" 2>/dev/null)" + + if [ "x" != "x${HOHO_ADMIN}" ]; then + @@BINDIR@@/vmware-vim-cmd -U "${HOHO_ADMIN}" hostsvc/autostartmanager/autostop + fi + eend $? + + ebegin Stopping VMware Workstation Server + start-stop-daemon --stop \ + --pidfile /var/run/vmware/vmware-hostd.PID + eend $? + ebegin Stopping VMware Authentication Daemon + killall --wait vmware-authdlauncher + eend $? +} diff --git a/app-emulation/vmware-workstation/vmware-workstation-14.1.1.7528167.ebuild b/app-emulation/vmware-workstation/vmware-workstation-14.1.1.7528167.ebuild new file mode 100644 index 0000000..4dc2c60 --- /dev/null +++ b/app-emulation/vmware-workstation/vmware-workstation-14.1.1.7528167.ebuild @@ -0,0 +1,700 @@ +# Copyright 1999-2018 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit eutils versionator readme.gentoo-r1 gnome2-utils pam systemd xdg-utils + +MY_PN="VMware-Workstation-Full" +MY_PV=$(get_version_component_range 1-3) +PV_MODULES="329.$(get_version_component_range 2-3)" +PV_BUILD=$(get_version_component_range 4) +MY_P="${MY_PN}-${MY_PV}-${PV_BUILD}" +VMWARE_FUSION_VER="10.1.1_7520154" +SYSTEMD_UNITS_TAG="gentoo-02" + +DESCRIPTION="Emulate a complete PC without the performance overhead of most emulators" +HOMEPAGE="http://www.vmware.com/products/workstation/" +SRC_URI=" + https://download3.vmware.com/software/wkst/file/${MY_P}.x86_64.bundle + macos-guests? ( + https://github.com/DrDonk/unlocker/archive/b036c40ab1922d9abf4f7d68e34f1eca3b4dc2ad.zip -> unlocker-2.1.1_p1.zip + vmware-tools-darwinPre15? ( https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${VMWARE_FUSION_VER/_//}/packages/com.vmware.fusion.tools.darwinPre15.zip.tar ) + vmware-tools-darwin? ( https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${VMWARE_FUSION_VER/_//}/packages/com.vmware.fusion.tools.darwin.zip.tar ) + ) + systemd? ( https://github.com/akhuettel/systemd-vmware/archive/${SYSTEMD_UNITS_TAG}.tar.gz -> vmware-systemd-${SYSTEMD_UNITS_TAG}.tgz ) + " + +LICENSE="GPL-2 GPL-3 MIT-with-advertising vmware" +SLOT="0" +KEYWORDS="~amd64" +IUSE="bundled-libs cups doc macos-guests +modules ovftool server systemd vix" +DARWIN_GUESTS="darwin darwinPre15" +IUSE_VMWARE_GUESTS="${DARWIN_GUESTS} freebsd linux linuxPreGlibc25 netware solaris windows winPre2k winPreVista" +for guest in ${IUSE_VMWARE_GUESTS}; do + IUSE+=" vmware-tools-${guest}" +done +REQUIRED_USE=" + server? ( modules ) + vmware-tools-darwin? ( macos-guests ) + vmware-tools-darwinPre15? ( macos-guests ) +" +RESTRICT="mirror strip" + +BUNDLED_LIBS_DIR=/opt/vmware/lib/vmware/lib + +BUNDLED_LIBS=" + libX11.so.6 + libXau.so.6 + libxcb.so.1 + libXcomposite.so.1 + libXcursor.so.1 + libXdamage.so.1 + libXdmcp.so.6 + libXext.so.6 + libXfixes.so.3 + libXft.so.2 + libXinerama.so.1 + libXi.so.6 + libXrandr.so.2 + libXrender.so.1 + libXtst.so.6 + libaio.so.1 + libatk-1.0.so.0 + libatk-bridge-2.0.so.0 + libatspi.so.0 + libcairo.so.2 + libcairo-gobject.so.2 + libcroco-0.6.so.3 + libcrypto.so.1.0.2 + libcurl.so.4 + libdbus-1.so.3 + libepoxy.so.0 + libexpat.so.1 + libffi.so.6 + libfontconfig.so.1 + libfreetype.so.6 + libfuse.so.2 + libgailutil-3.so.0 + libgcc_s.so.1 + libgck-1.so.0 + libgcr-base-3.so.1 + libgcr-ui-3.so.1 + libgcrypt.so.20 + libgdk-3.so.0 + libgdk_pixbuf-2.0.so.0 + libgio-2.0.so.0 + libglib-2.0.so.0 + libgmodule-2.0.so.0 + libgobject-2.0.so.0 + libgpg-error.so.0 + libgthread-2.0.so.0 + libgtk-3.so.0 + libharfbuzz.so.0 + libICE.so.6 + libjpeg.so.62 + libp11-kit.so.0 + libpango-1.0.so.0 + libpangocairo-1.0.so.0 + libpangoft2-1.0.so.0 + libpcre.so.1 + libpcsclite.so.1 + libpixman-1.so.0 + libpng12.so.0 + librsvg-2.so.2 + libsigc-2.0.so.0 + libSM.so.6 + libssl.so.1.0.2 + libstdc++.so.6 + libtasn1.so.6 + libtiff.so.5 + libxml2.so.2 + libz.so.1 +" + +BUNDLED_LIB_DEPENDS=" + app-accessibility/at-spi2-atk + app-accessibility/at-spi2-core + app-crypt/gcr[gtk] + app-crypt/p11-kit + dev-libs/atk + dev-libs/expat + dev-libs/glib:2 + dev-libs/libaio + dev-libs/libcroco + dev-libs/libffi + dev-libs/libgcrypt:0/20 + dev-libs/libgpg-error + dev-libs/libpcre + dev-libs/libsigc++:2 + dev-libs/libtasn1:0/6 + dev-libs/libxml2 + dev-libs/openssl:0 + gnome-base/librsvg:2 + media-libs/fontconfig + media-libs/freetype + media-libs/harfbuzz:0/0.9.18 + media-libs/libepoxy + media-libs/libpng:1.2 + media-libs/tiff:0 + net-misc/curl + sys-apps/dbus + sys-apps/pcsc-lite + sys-fs/fuse + sys-libs/zlib + virtual/jpeg:62 + x11-libs/cairo[glib] + x11-libs/gdk-pixbuf:2 + x11-libs/gtk+:3 + x11-libs/libICE + x11-libs/libSM + x11-libs/libX11 + x11-libs/libXau + x11-libs/libxcb + x11-libs/libXcomposite + x11-libs/libXcursor + x11-libs/libXdamage + x11-libs/libXdmcp + x11-libs/libXext + x11-libs/libXfixes + x11-libs/libXft + x11-libs/libXi + x11-libs/libXinerama + x11-libs/libXrandr + x11-libs/libXrender + x11-libs/libXtst + x11-libs/pango + x11-libs/pixman +" + +# vmware should not use virtual/libc as this is a +# precompiled binary package thats linked to glibc. +RDEPEND=" + app-arch/bzip2 + app-arch/unzip + app-shells/bash + dev-db/sqlite:3 + dev-libs/dbus-glib + dev-libs/gmp:0 + dev-libs/icu + dev-libs/json-c + dev-libs/nettle:0/6.1 + gnome-base/gconf + gnome-base/libgnome-keyring + media-gfx/graphite2 + media-libs/alsa-lib + media-libs/libart_lgpl + media-libs/libvorbis + media-libs/mesa + net-dns/libidn + net-libs/gnutls + cups? ( net-print/cups ) + sys-apps/tcp-wrappers + sys-apps/util-linux + x11-libs/gksu + x11-libs/libXxf86vm + x11-libs/libdrm + x11-libs/libxshmfence + x11-libs/startup-notification + x11-libs/xcb-util + x11-themes/hicolor-icon-theme + !bundled-libs? ( ${BUNDLED_LIB_DEPENDS} ) + !app-emulation/vmware-player + !app-emulation/vmware-tools +" +PDEPEND=" + modules? ( ~app-emulation/vmware-modules-${PV_MODULES} ) +" +DEPEND=" + dev-lang/python:2.7 + >=dev-util/patchelf-0.9 + macos-guests? ( dev-python/six ) + ovftool? ( app-admin/chrpath ) + sys-libs/ncurses:5 + sys-libs/readline:0 +" + +S=${WORKDIR}/extracted +VM_INSTALL_DIR="/opt/vmware" +VM_DATA_STORE_DIR="/var/lib/vmware/Shared VMs" +VM_HOSTD_USER="root" + +QA_PREBUILT="/opt/*" + +QA_WX_LOAD="opt/vmware/lib/vmware/tools-upgraders/vmware-tools-upgrader-32 opt/vmware/lib/vmware/bin/vmware-vmx-stats opt/vmware/lib/vmware/bin/vmware-vmx-debug opt/vmware/lib/vmware/bin/vmware-vmx" +# adding "opt/vmware/lib/vmware/lib/libvmware-gksu.so/libvmware-gksu.so" to QA_WX_LOAD doesn't work + +src_unpack() { + for a in ${A}; do + if [ ${a##*.} == 'bundle' ]; then + cp "${DISTDIR}/${a}" "${WORKDIR}" + else + unpack ${a} + fi + done + + local bundle=${MY_P}.x86_64.bundle + chmod 755 ${bundle} + ./${bundle} --console --extract extracted || die "unable to extract bundle" + + if ! use ovftool; then + rm -r extracted/vmware-ovftool || die "unable to remove dir" + fi + + if ! use server; then + rm -r extracted/vmware-workstation-server || die "unable to remove dir" + fi + + if ! use vix; then + rm -r extracted/vmware-vix-core extracted/vmware-vix-lib-Workstation* || die "unable to remove dir" + fi + + for guest in ${DARWIN_GUESTS}; do + if use vmware-tools-${guest}; then + mkdir extracted/vmware-tools-${guest} + unzip -q com.vmware.fusion.tools.${guest}.zip payload/\* + mv payload/* extracted/vmware-tools-${guest}/ + rm -r payload com.vmware.fusion.tools.${guest}.zip + fi + done +} + +clean_bundled_libs() { + einfo "Removing bundled libraries" + for libname in ${BUNDLED_LIBS} ; do + rm -rf "${S}"/*/lib/lib/${libname} + done + + rm -rf "${S}"/*/lib/libconf + + # Among the bundled libs there are libcrypto.so.1.0.2 and libssl.so.1.0.2 + # (needed by libcds.so) which seem to be compiled from openssl-1.0.1l. + # Upstream real sonames are *so.1.0.0 so it's necessary to fix DT_NEEDED link + # in libcds.so to be able to use system libs. + pushd >/dev/null . + einfo "Patching libcds.so" + for d in "${S}"/*/lib/lib/libcds.so; do + cd "${d}" || die + patchelf --replace-needed libssl.so.1.0.{2,0} \ + --replace-needed libcrypto.so.1.0.{2,0} \ + libcds.so || die + cd - >/dev/null + done +} + +src_prepare() { + default + + rm -f */bin/vmware-modconfig + rm -rf */lib/modules/binary + # Bug 459566 + mkdir vmware-network-editor/lib/lib + mv vmware-network-editor/lib/libvmware-netcfg.so vmware-network-editor/lib/lib/ + + if use server; then + rm -f vmware-workstation-server/bin/{openssl,configure-hostd.sh} + fi + + if ! use bundled-libs ; then + clean_bundled_libs + fi + + if use ovftool; then + chrpath -d vmware-ovftool/libcurl.so.4 + fi + + if use macos-guests; then + sed -i -e "s#vmx_path = '/usr#vmx_path = '${D}${VM_INSTALL_DIR//\//\\/}#" \ + -e "s#os\.path\.isfile('/usr#os.path.isfile('${D}${VM_INSTALL_DIR//\//\\/}#" \ + -e "s#vmwarebase = '/usr#vmwarebase = '${D}${VM_INSTALL_DIR//\//\\/}#" \ + "${WORKDIR}"/unlocker-*/unlocker.py + fi + + DOC_CONTENTS=" +/etc/env.d is updated during ${PN} installation. Please run:\n +'env-update && source /etc/profile'\n +Before you can use ${PN}, you must configure a default network setup. +You can do this by running 'emerge --config ${PN}'.\n +To be able to run ${PN} your user must be in the vmware group.\n +" +} + +src_install() { + local major_minor=$(get_version_component_range 1-2 "${PV}") + local vmware_installer_version=$(cat "${S}/vmware-installer/manifest.xml" | grep -oPm1 "(?<=)[^<]+") + + # revdep-rebuild entry + insinto /etc/revdep-rebuild + echo "SEARCH_DIRS_MASK=\"${VM_INSTALL_DIR}\"" >> ${T}/10${PN} + doins "${T}"/10${PN} + + # install the binaries + into "${VM_INSTALL_DIR}" + dobin */bin/* + dosbin */sbin/* + + # install the libraries + insinto "${VM_INSTALL_DIR}"/lib/vmware + doins -r */lib/* vmware-vmx/roms + rm -rf "${D}${VM_INSTALL_DIR}"/lib/vmware/*.so + + # install the installer + insinto "${VM_INSTALL_DIR}"/lib/vmware-installer/$vmware_installer_version + doins vmware-installer/{vmis,vmis-launcher,vmware-installer,vmware-installer.py} + insinto /etc/vmware-installer + doins vmware-installer/bootstrap + + # workaround for hardcoded search paths needed during shared objects loading + if ! use bundled-libs ; then + dosym /usr/$(get_libdir)/libglib-2.0.so.0 \ + "${VM_INSTALL_DIR}"/lib/vmware/lib/libglib-2.0.so.0/libglib-2.0.so.0 + # Bug 432918 + dosym /usr/$(get_libdir)/libcrypto.so.1.0.0 \ + "${VM_INSTALL_DIR}"/lib/vmware/lib/libcrypto.so.1.0.2/libcrypto.so.1.0.2 + dosym /usr/$(get_libdir)/libssl.so.1.0.0 \ + "${VM_INSTALL_DIR}"/lib/vmware/lib/libssl.so.1.0.2/libssl.so.1.0.2 + fi + + # install the ancillaries + insinto /usr + doins -r */share + + if use cups; then + exeinto $(cups-config --serverbin)/filter + doexe */extras/thnucups + + insinto /etc/cups + doins -r */etc/cups/* + fi + + if use doc; then + dodoc -r */doc/* + fi + + exeinto "${VM_INSTALL_DIR}"/lib/vmware/setup + doexe */vmware-config + + # pam + pamd_mimic_system vmware-authd auth account + + # fuse + insinto /etc/modprobe.d + newins vmware-vmx/etc/modprobe.d/modprobe-vmware-fuse.conf vmware-fuse.conf + + # install vmware workstation server + if use server; then + cd "${S}"/vmware-workstation-server + + # install binaries + into "${VM_INSTALL_DIR}"/lib/vmware + dobin "${FILESDIR}"/configure-hostd.sh + + # install the libraries + insinto "${VM_INSTALL_DIR}"/lib/vmware/lib + doins -r lib/* + + into "${VM_INSTALL_DIR}" + for tool in vmware-hostd wssc-adminTool ; do + cat > "${T}/${tool}" <<-EOF + #!/usr/bin/env bash + set -e + + . /etc/vmware/bootstrap + + exec "${VM_INSTALL_DIR}/lib/vmware/bin/${tool}" \\ + "\$@" + EOF + dobin "${T}/${tool}" + done + + insinto "${VM_INSTALL_DIR}"/lib/vmware + doins -r hostd + + # create the configuration + insinto /etc/vmware + doins -r config/etc/vmware/* + doins -r etc/vmware/* + + # create directory for shared virtual machines. + keepdir "${VM_DATA_STORE_DIR}" + keepdir /var/log/vmware + + cd - >/dev/null + fi + + # install vmware-vix + if use vix; then + # install the binary + into "${VM_INSTALL_DIR}" + dobin "$S"/vmware-vix-*/bin/* + + # install the libraries + insinto "${VM_INSTALL_DIR}"/lib/vmware-vix + doins -r "$S"/vmware-vix-*/lib/* + + dosym vmware-vix/libvixAllProducts.so "${VM_INSTALL_DIR}"/lib/libbvixAllProducts.so + + # install headers + insinto /usr/include/vmware-vix + doins "$S"/vmware-vix-*/include/* + + if use doc; then + dodoc -r "$S"/vmware-vix-*/doc/* + fi + fi + + # install ovftool + if use ovftool; then + cd "${S}"/vmware-ovftool + + insinto "${VM_INSTALL_DIR}"/lib/vmware-ovftool + doins -r * + + chmod 0755 "${D}${VM_INSTALL_DIR}"/lib/vmware-ovftool/{ovftool,ovftool.bin} + dosym "${D}${VM_INSTALL_DIR}"/lib/vmware-ovftool/ovftool "${VM_INSTALL_DIR}"/bin/ovftool + + cd - >/dev/null + fi + + # create symlinks for the various tools + local tool ; for tool in thnuclnt vmware vmplayer{,-daemon} licenseTool vmamqpd \ + vmware-{app-control,enter-serial,gksu,fuseUI,hostd,modconfig{,-console},netcfg,tray,unity-helper,vim-cmd,vmblock-fuse,vprobe,wssc-adminTool,zenity} ; do + dosym appLoader "${VM_INSTALL_DIR}"/lib/vmware/bin/"${tool}" + done + dosym "${VM_INSTALL_DIR}"/lib/vmware/bin/vmplayer "${VM_INSTALL_DIR}"/bin/vmplayer + dosym "${VM_INSTALL_DIR}"/lib/vmware/bin/vmware "${VM_INSTALL_DIR}"/bin/vmware + dosym "${VM_INSTALL_DIR}"/lib/vmware/icu /etc/vmware/icu + + # fix permissions + fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware/bin/{appLoader,fusermount,mkisofs,vmware-remotemks} + fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware/setup/vmware-config + fperms 4711 "${VM_INSTALL_DIR}"/lib/vmware/bin/vmware-vmx{,-debug,-stats} + fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware/lib/libvmware-gksu.so/gksu-run-helper + fperms 4711 "${VM_INSTALL_DIR}"/sbin/vmware-authd + if use server; then + fperms 0755 "${VM_INSTALL_DIR}"/bin/{vmware-hostd,wssc-adminTool} + fperms 1777 "${VM_DATA_STORE_DIR}" + fi + if use vix; then + fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware-vix/setup/vmware-config + fi + + # create the environment + local envd="${T}/90vmware" + cat > "${envd}" <<-EOF + PATH='${VM_INSTALL_DIR}/bin' + ROOTPATH='${VM_INSTALL_DIR}/bin' + CONFIG_PROTECT_MASK='/etc/vmware-installer' + EOF + use bundled-libs && echo 'VMWARE_USE_SHIPPED_LIBS=1' >> "${envd}" + + doenvd "${envd}" + + # create the configuration + dodir /etc/vmware + + cat > "${D}"/etc/vmware/bootstrap <<-EOF + BINDIR='${VM_INSTALL_DIR}/bin' + LIBDIR='${VM_INSTALL_DIR}/lib' + EOF + + cat > "${D}"/etc/vmware/config <<-EOF + bindir = "${VM_INSTALL_DIR}/bin" + libdir = "${VM_INSTALL_DIR}/lib/vmware" + initscriptdir = "/etc/init.d" + authd.fullpath = "${VM_INSTALL_DIR}/sbin/vmware-authd" + gksu.rootMethod = "su" + VMCI_CONFED = "yes" + VMBLOCK_CONFED = "yes" + VSOCK_CONFED = "yes" + NETWORKING = "yes" + player.product.version = "${MY_PV}" + product.buildNumber = "${PV_BUILD}" + product.version = "${MY_PV}" + product.name = "VMware Workstation" + workstation.product.version = "${MY_PV}" + EOF + + if use vix; then + cat >> "${D}"/etc/vmware/config <<-EOF + vmware.fullpath = "${VM_INSTALL_DIR}/bin/vmware" + vix.libdir = "${VM_INSTALL_DIR}/lib/vmware-vix" + vix.config.version = "1" + EOF + fi + + if use server; then + cat >> "${D}"/etc/vmware/config <<-EOF + authd.client.port = "902" + authd.proxy.nfc = "vmware-hostd:ha-nfc" + authd.soapserver = "TRUE" + EOF + fi + + if use modules; then + # install the init.d script + local initscript="${T}/vmware.rc" + sed -e "s:@@BINDIR@@:${VM_INSTALL_DIR}/bin:g" \ + "${FILESDIR}/vmware-${major_minor}.rc" > "${initscript}" || die + newinitd "${initscript}" vmware + fi + + if use server; then + # install the init.d script + local initscript="${T}/vmware-workstation-server.rc" + sed -e "s:@@ETCDIR@@:/etc/vmware:g" \ + -e "s:@@PREFIX@@:${VM_INSTALL_DIR}:g" \ + -e "s:@@BINDIR@@:${VM_INSTALL_DIR}/bin:g" \ + -e "s:@@LIBDIR@@:${VM_INSTALL_DIR}/lib/vmware:g" \ + "${FILESDIR}/vmware-server-${major_minor}.rc" > ${initscript} || die + newinitd "${initscript}" vmware-workstation-server + fi + + # fill in variable placeholders + if use bundled-libs ; then + sed -e "s:@@LIBCONF_DIR@@:${VM_INSTALL_DIR}/lib/vmware/libconf:g" \ + -i "${D}${VM_INSTALL_DIR}"/lib/vmware/libconf/etc/gtk-3.0/gdk-pixbuf.loaders || die + fi + sed -e "s:@@BINARY@@:${VM_INSTALL_DIR}/bin/vmplayer:g" \ + -e "/^Encoding/d" \ + -i "${D}/usr/share/applications/vmware-player.desktop" || die + sed -e "s:@@BINARY@@:${VM_INSTALL_DIR}/bin/vmware:g" \ + -e "/^Encoding/d" \ + -i "${D}/usr/share/applications/vmware-workstation.desktop" || die + sed -e "s:@@BINARY@@:${VM_INSTALL_DIR}/bin/vmware-netcfg:g" \ + -e "/^Encoding/d" \ + -i "${D}/usr/share/applications/vmware-netcfg.desktop" || die + + if use server; then + # Configuration for vmware-workstation-server + local hostdUser="${VM_HOSTD_USER:-root}" + sed -e "/ACEDataUser/s:root:${hostdUser}:g" \ + -i "${D}/etc/vmware/hostd/authorization.xml" || die + + # Shared VMs Path: [standard]. + sed -e "s:##{DS_NAME}##:standard:g" \ + -e "s:##{DS_PATH}##:${VM_DATA_STORE_DIR}:g" \ + -i "${D}/etc/vmware/hostd/datastores.xml" || die + + sed -e "s:##{HTTP_PORT}##:-1:g" \ + -e "s:##{HTTPS_PORT}##:443:g" \ + -e "s:##{PIPE_PREFIX}##:/var/run/vmware/:g" \ + -i "${D}/etc/vmware/hostd/proxy.xml" || die + + # See vmware-workstation-server.py for more details. + sed -e "s:##{BUILD_CFGDIR}##:/etc/vmware/hostd/:g" \ + -e "s:##{CFGALTDIR}##:/etc/vmware/hostd/:g" \ + -e "s:##{CFGDIR}##:/etc/vmware/:g" \ + -e "s:##{ENABLE_AUTH}##:true:g" \ + -e "s:##{HOSTDMODE}##:ws:g" \ + -e "s:##{HOSTD_CFGDIR}##:/etc/vmware/hostd/:g" \ + -e "s:##{HOSTD_MOCKUP}##:false:g" \ + -e "s:##{LIBDIR}##:${VM_INSTALL_DIR}/lib/vmware:g" \ + -e "s:##{LIBDIR_INSTALLED}##:${VM_INSTALL_DIR}/lib/vmware/:g" \ + -e "s:##{LOGDIR}##:/var/log/vmware/:g" \ + -e "s:##{LOGLEVEL}##:verbose:g" \ + -e "s:##{MOCKUP}##:mockup-host-config.xml:g" \ + -e "s:##{PLUGINDIR}##:./:g" \ + -e "s:##{SHLIB_PREFIX}##:lib:g" \ + -e "s:##{SHLIB_SUFFIX}##:.so:g" \ + -e "s:##{USE_BLKLISTSVC}##:false:g" \ + -e "s:##{USE_CBRCSVC}##:false:g" \ + -e "s:##{USE_CIMSVC}##:false:g" \ + -e "s:##{USE_DIRECTORYSVC}##:false:g" \ + -e "s:##{USE_DIRECTORYSVC_MOCKUP}##:false:g" \ + -e "s:##{USE_DYNAMIC_PLUGIN_LOADING}##:false:g" \ + -e "s:##{USE_DYNAMO}##:false:g" \ + -e "s:##{USE_DYNSVC}##:false:g" \ + -e "s:##{USE_GUESTSVC}##:false:g" \ + -e "s:##{USE_HBRSVC}##:false:g" \ + -e "s:##{USE_HBRSVC_MOCKUP}##:false:g" \ + -e "s:##{USE_HOSTSPECSVC}##:false:g" \ + -e "s:##{USE_HOSTSVC_MOCKUP}##:false:g" \ + -e "s:##{USE_HTTPNFCSVC}##:false:g" \ + -e "s:##{USE_HTTPNFCSVC_MOCKUP}##:false:g" \ + -e "s:##{USE_LICENSESVC_MOCKUP}##:false:g" \ + -e "s:##{USE_NFCSVC}##:true:g" \ + -e "s:##{USE_NFCSVC_MOCKUP}##:false:g" \ + -e "s:##{USE_OVFMGRSVC}##:true:g" \ + -e "s:##{USE_PARTITIONSVC}##:false:g" \ + -e "s:##{USE_SECURESOAP}##:false:g" \ + -e "s:##{USE_SNMPSVC}##:false:g" \ + -e "s:##{USE_SOLO_MOCKUP}##:false:g" \ + -e "s:##{USE_STATSSVC}##:false:g" \ + -e "s:##{USE_STATSSVC_MOCKUP}##:false:g" \ + -e "s:##{USE_VCSVC_MOCKUP}##:false:g" \ + -e "s:##{USE_VSLMSVC}##:false:g" \ + -e "s:##{USE_VSLMSVC_MOCKUP}##:false:g" \ + -e "s:##{USE_VDISKSVC}##:false:g" \ + -e "s:##{USE_VDISKSVC_MOCKUP}##:false:g" \ + -e "s:##{USE_VMSVC_MOCKUP}##:false:g" \ + -e "s:##{VM_INVENTORY}##:vmInventory.xml:g" \ + -e "s:##{VM_RESOURCES}##:vmResources.xml:g" \ + -e "s:##{WEBSERVER_PORT_ENTRY}##::g" \ + -e "s:##{WORKINGDIR}##:./:g" \ + -i "${D}/etc/vmware/hostd/config.xml" || die + + sed -e "s:##{ENV_LOCATION}##:/etc/vmware/hostd/env/:g" \ + -i "${D}/etc/vmware/hostd/environments.xml" || die + + # @@VICLIENT_URL@@=XXX + sed -e "s:@@AUTHD_PORT@@:902:g" \ + -i "${D}${VM_INSTALL_DIR}/lib/vmware/hostd/docroot/client/clients.xml" || die + fi + + # install systemd unit files + if use systemd; then + systemd_dounit "${WORKDIR}/systemd-vmware-${SYSTEMD_UNITS_TAG}/"*.{service,target} + fi + + # enable macOS guests support + if use macos-guests; then + python2 "${WORKDIR}"/unlocker-*/unlocker.py >/dev/null || die "unlocker.py failed" + fi + + # VMware tools + for guest in ${IUSE_VMWARE_GUESTS}; do + if use vmware-tools-${guest}; then + local dbfile="${D}/etc/vmware-installer/database" + if ! [ -e "${dbfile}" ]; then + > "${dbfile}" + sqlite3 "${dbfile}" "CREATE TABLE settings(key VARCHAR PRIMARY KEY, value VARCHAR NOT NULL, component_name VARCHAR NOT NULL);" + sqlite3 "${dbfile}" "INSERT INTO settings(key,value,component_name) VALUES('db.schemaVersion','2','vmware-installer');" + sqlite3 "${dbfile}" "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);" + fi + local manifest="vmware-tools-${guest}/manifest.xml" + if [ -e "${manifest}" ]; then + local version="$(grep -oPm1 '(?<=)[^<]+' ${manifest})" + sqlite3 "${dbfile}" "INSERT INTO components(name,version,buildNumber,component_core_id,longName,description,type) VALUES(\"vmware-tools-$guest\",\"$version\",\"${PV_BUILD}\",1,\"$guest\",\"$guest\",1);" + else + sqlite3 "${dbfile}" "INSERT INTO components(name,version,buildNumber,component_core_id,longName,description,type) VALUES(\"vmware-tools-$guest\",\"${VMWARE_FUSION_VER%_*}\",\"${VMWARE_FUSION_VER#*_}\",1,\"$guest\",\"$guest\",1);" + fi + insinto "${VM_INSTALL_DIR}/lib/vmware/isoimages" + doins vmware-tools-${guest}/${guest}.iso + doins vmware-tools-${guest}/${guest}.iso.sig + fi + done + + readme.gentoo_create_doc +} + +pkg_config() { + "${VM_INSTALL_DIR}"/bin/vmware-networks --postinstall ${PN},old,new +} + +pkg_preinst() { + gnome2_icon_savelist +} + +pkg_postinst() { + xdg_desktop_database_update + xdg_mimeinfo_database_update + gnome2_icon_cache_update + readme.gentoo_print_elog +} + +pkg_postrm() { + xdg_desktop_database_update + xdg_mimeinfo_database_update + gnome2_icon_cache_update +}