sábado, 9 de julio de 2016

Instalar y desinstalar VMWare Workstation Pro 12.1.1 en Fedora 24

Imagen obtenidad: url

VMware Workstation

Es un software para virtualización de sistemas operativos de una manera más avanzada, o al menos eso es lo que describe en su página oficial, algo que no dudo. Es más o menos parecido a VirtualBox. Si me preguntaran cuál es mejor, diría que no puedo contestar, ya que cad auno tiene lo suyo, sin embargo, VMware, es más potente cuando de redes de SO virtuales se trata, y VirtualBox es más fácil de utilizar por usuarios no expertos.

Virtualización de PC avanzada

VMware Workstation transforma la forma en que los profesionales técnicos desarrollan, prueban e implementan el software o hacen demostraciones de las aplicaciones, porque permite ejecutar varios sistemas operativos basados en x86 al mismo tiempo en el mismo PC. VMware Workstation se sustenta en 15 años de excelencia en virtualización y ha ganado más de 50 premios del sector. Eleva la virtualización de escritorios al próximo nivel porque ofrece a los usuarios una compatibilidad sin parangón con gran diversidad de sistemas operativos, una experiencia de usuario plena y un rendimiento magnífico.

Virtualización de escritorio de última generación para Windows y Linux

Con VMware Workstation Pro, se aprovecha el hardware más reciente para replicar entornos de servidor, de escritorio y de tableta en una máquina virtual. Ejecute aplicaciones en varios sistemas operativos, incluidos Linux y Windows, entre otros, al mismo tiempo y en la misma PC sin tener que reiniciar su equipo. VMware Workstation Pro facilita muchísimo la tarea de evaluar nuevos sistemas operativos como Windows 10 y probar aplicaciones y parches de software, y arquitecturas de referencia en un entorno aislado y seguro. Ningún otro software de virtualización de escritorio brinda el rendimiento, la confiabilidad y las funciones de avanzada de Workstation Pro. 

Creación de máquinas virtuales potentes


Workstation Pro maximiza los recursos de su computadora mediante la capacidad de asignar múltiples núcleos de procesador o gigabytes de memoria principal o de memoria gráfica a cada máquina virtual para ejecutar las aplicaciones más exigentes en un entorno virtualizado. Con Workstation Pro, también se pueden ejecutar anfitriones virtuales ESXi y dispositivos de vSphere, lo que permite crear un centro de datos definido por el software completo en su escritorio.

Virtualización de escritorio de última generación para Windows y Linux

Con VMware Workstation Pro, se aprovecha el hardware más reciente para replicar entornos de servidor, de escritorio y de tableta en una máquina virtual. Ejecute aplicaciones en varios sistemas operativos, incluidos Linux y Windows, entre otros, al mismo tiempo y en la misma PC sin tener que reiniciar su equipo. VMware Workstation Pro facilita muchísimo la tarea de evaluar nuevos sistemas operativos como Windows 10 y probar aplicaciones y parches de software, y arquitecturas de referencia en un entorno aislado y seguro. Ningún otro software de virtualización de escritorio brinda el rendimiento, la confiabilidad y las funciones de avanzada de Workstation Pro.
- See more at: http://www.vmware.com/latam/products/workstation/#sthash.7saKw2Pc.dpuf

Virtualización de escritorio de última generación para Windows y Linux

Con VMware Workstation Pro, se aprovecha el hardware más reciente para replicar entornos de servidor, de escritorio y de tableta en una máquina virtual. Ejecute aplicaciones en varios sistemas operativos, incluidos Linux y Windows, entre otros, al mismo tiempo y en la misma PC sin tener que reiniciar su equipo. VMware Workstation Pro facilita muchísimo la tarea de evaluar nuevos sistemas operativos como Windows 10 y probar aplicaciones y parches de software, y arquitecturas de referencia en un entorno aislado y seguro. Ningún otro software de virtualización de escritorio brinda el rendimiento, la confiabilidad y las funciones de avanzada de Workstation Pro.
- See more at: http://www.vmware.com/latam/products/workstation/#sthash.7saKw2Pc.dpuf

Virtualización de escritorio de última generación para Windows y Linux

Con VMware Workstation Pro, se aprovecha el hardware más reciente para replicar entornos de servidor, de escritorio y de tableta en una máquina virtual. Ejecute aplicaciones en varios sistemas operativos, incluidos Linux y Windows, entre otros, al mismo tiempo y en la misma PC sin tener que reiniciar su equipo. VMware Workstation Pro facilita muchísimo la tarea de evaluar nuevos sistemas operativos como Windows 10 y probar aplicaciones y parches de software, y arquitecturas de referencia en un entorno aislado y seguro. Ningún otro software de virtualización de escritorio brinda el rendimiento, la confiabilidad y las funciones de avanzada de Workstation Pro.
- See more at: http://www.vmware.com/latam/products/workstation/#sthash.7saKw2Pc.dpuf

Instalación de VMware Workstation

1.- Descargar el instalador correspondiente:
http://www.vmware.com/go/tryworkstation-linux-64
2.- Instalar requisitos necesarios
Iniciar la terminal en modo root (es necesario):

NOTA: Debido a que algunas configuraciones requieren acceso a carpetas con permisos únicamente de root, es necesario inicar en ese modo la terminal.
 su -
dnf install kernel-headers kernel kernel-devel gcc make glibc-headers 
dnf groupinstall "Development tools"
dnf update
3.- Reiniciar el equipo en caso de haber actualizaciones, esto es necesario para que el equipo inicie con la última versión del KERNEL en caso de haberlo, sobre todo si es la primera vez que se instalan los headers y librerias de desarrolladores.
reboot
4.- Copiar módulos del kernel necesarios.
cp /usr/src/kernels/`uname -r`/include/generated/uapi/linux/version.h /lib/modules/`uname -r`/build/include/linux/
5.- Cambiar los permisos del ejecutable descargado para ser instalado:
chmod 755 VMware-Workstation-Full-12.1.1-3770994.x86_64.bundle
6.- Ejecutar el instalador, recordar que estamos en modo root:
 Descargar generador de Seriales de aquí:
./VMware-Workstation-Full-12.1.1-3770994.x86_64.bundle

Compilar el Kernel:

NOTA: Una vez terminada la instalación, proseguimos a la compilación de los módulos de VMWare. Iniciar la terminal en modo ROOT
 Para la compilación de las librerias hay dos métodos uno manual y otro semi-automático:
Antes de comenzar hacer lo siguiente:

su -
 dnf install kernel-headers kernel-devel gcc glibc-headers
vmware-modconfig --console --install-all 
En el comando anterior mostrará un mensaje parecido al siguiente:
[...]
Stopping vmware (via systemctl):                           [  OK  ]
make: Entering directory '/tmp/modconfig-ADhuOz/vmmon-only'
Using kernel build system.
/usr/bin/make -C /lib/modules/4.4.9-300.fc23.x86_64/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
  MODULEBUILDDIR= modules
make[1]: Entering directory '/usr/src/kernels/4.4.9-300.fc23.x86_64'
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/linux/hostif.o
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/linux/driver.o
/tmp/modconfig-ADhuOz/vmmon-only/linux/driver.c:1283:1: aviso: una función always_inline tal vez no se puede incluir en línea [-Wattributes]
 LinuxDriverSyncReadTSCs(uint64 *delta) // OUT: TSC max - TSC min
 ^
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/linux/driverLog.o
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/common/memtrack.o
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/common/apic.o
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/common/vmx86.o
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/common/cpuid.o
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/common/task.o
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/common/hashFunc.o
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/common/comport.o
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/common/phystrack.o
  CC [M]  /tmp/modconfig-ADhuOz/vmmon-only/vmcore/moduleloop.o
  LD [M]  /tmp/modconfig-ADhuOz/vmmon-only/vmmon.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /tmp/modconfig-ADhuOz/vmmon-only/vmmon.mod.o
  LD [M]  /tmp/modconfig-ADhuOz/vmmon-only/vmmon.ko
make[1]: Leaving directory '/usr/src/kernels/4.4.9-300.fc23.x86_64'
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
  MODULEBUILDDIR= postbuild
make[1]: Entering directory '/tmp/modconfig-ADhuOz/vmmon-only'
make[1]: 'postbuild' is up to date.
make[1]: Leaving directory '/tmp/modconfig-ADhuOz/vmmon-only'
cp -f vmmon.ko ./../vmmon.o
make: Leaving directory '/tmp/modconfig-ADhuOz/vmmon-only'
make: Entering directory '/tmp/modconfig-ADhuOz/vmnet-only'
Using kernel build system.
/usr/bin/make -C /lib/modules/4.4.9-300.fc23.x86_64/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
  MODULEBUILDDIR= modules
make[1]: Entering directory '/usr/src/kernels/4.4.9-300.fc23.x86_64'
  CC [M]  /tmp/modconfig-ADhuOz/vmnet-only/hub.o
  CC [M]  /tmp/modconfig-ADhuOz/vmnet-only/driver.o
  CC [M]  /tmp/modconfig-ADhuOz/vmnet-only/userif.o
  CC [M]  /tmp/modconfig-ADhuOz/vmnet-only/netif.o
In file included from include/linux/pci.h:35:0,
                 from /tmp/modconfig-ADhuOz/vmnet-only/compat_netdevice.h:27,
                 from /tmp/modconfig-ADhuOz/vmnet-only/netif.c:43:
include/linux/pci_ids.h:2252:0: aviso: se redefinió "PCI_VENDOR_ID_VMWARE"
 #define PCI_VENDOR_ID_VMWARE  0x15ad
 ^
In file included from /tmp/modconfig-ADhuOz/vmnet-only/net.h:38:0,
                 from /tmp/modconfig-ADhuOz/vmnet-only/vnetInt.h:26,
                 from /tmp/modconfig-ADhuOz/vmnet-only/netif.c:42:
/tmp/modconfig-ADhuOz/vmnet-only/vm_device_version.h:56:0: nota: esta es la ubicación de la definición previa
 #define PCI_VENDOR_ID_VMWARE                    0x15AD
 ^
  CC [M]  /tmp/modconfig-ADhuOz/vmnet-only/bridge.o
  CC [M]  /tmp/modconfig-ADhuOz/vmnet-only/procfs.o
In file included from /tmp/modconfig-ADhuOz/vmnet-only/net.h:38:0,
                 from /tmp/modconfig-ADhuOz/vmnet-only/vnetInt.h:26,
                 from /tmp/modconfig-ADhuOz/vmnet-only/bridge.c:52:
/tmp/modconfig-ADhuOz/vmnet-only/vm_device_version.h:56:0: aviso: se redefinió "PCI_VENDOR_ID_VMWARE"
 #define PCI_VENDOR_ID_VMWARE                    0x15AD
 ^
In file included from include/linux/pci.h:35:0,
                 from /tmp/modconfig-ADhuOz/vmnet-only/compat_netdevice.h:27,
                 from /tmp/modconfig-ADhuOz/vmnet-only/bridge.c:51:
include/linux/pci_ids.h:2252:0: nota: esta es la ubicación de la definición previa
 #define PCI_VENDOR_ID_VMWARE  0x15ad
 ^
  CC [M]  /tmp/modconfig-ADhuOz/vmnet-only/smac_compat.o
  CC [M]  /tmp/modconfig-ADhuOz/vmnet-only/smac.o
  CC [M]  /tmp/modconfig-ADhuOz/vmnet-only/vnetEvent.o
  CC [M]  /tmp/modconfig-ADhuOz/vmnet-only/vnetUserListener.o
  LD [M]  /tmp/modconfig-ADhuOz/vmnet-only/vmnet.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /tmp/modconfig-ADhuOz/vmnet-only/vmnet.mod.o
  LD [M]  /tmp/modconfig-ADhuOz/vmnet-only/vmnet.ko
make[1]: Leaving directory '/usr/src/kernels/4.4.9-300.fc23.x86_64'
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
  MODULEBUILDDIR= postbuild
make[1]: Entering directory '/tmp/modconfig-ADhuOz/vmnet-only'
make[1]: 'postbuild' is up to date.
make[1]: Leaving directory '/tmp/modconfig-ADhuOz/vmnet-only'
cp -f vmnet.ko ./../vmnet.o
make: Leaving directory '/tmp/modconfig-ADhuOz/vmnet-only'
Starting vmware (via systemctl):                           [  OK  ]
[...]

Método uno:

Copiar el siguiente script bash y guardarlo con el nombre de Update_VMW.sh, lo pueden hacer con gedit:
#!/bin/bash
FCX="fedoralib"
VTEMP_DIR=$(mktemp -p /tmp -d VMWFedora232425XXXXXXX)
MODS_SRC_DIR=/usr/lib/vmware/modules/source

# Check for root
if [ "x$(id -u)" != "x0" ]; then
 echo "(**) Run this tool as root!"; exit 1
fi

# Check distro
KVER=$(uname -r|grep fc2[34])
if [ "x${KVER}" = "x" ];then
 echo "(**) Fedora 23 not detected, Exit!"
 exit 1
fi

# Check presence of VMW
if [ -f /usr/lib/vmware/lib/libvmwareui.so/libvmwareui.so ]; then
 echo "(II) /usr/lib/vmware/lib/libvmwareui.so/libvmwareui.so present, continuing..."
else
 echo "(**) VMWare Workstation not detected, exit!"; exit 1
fi

# Force use of VMWare bundled libs
if [ -f /etc/vmware/bootstrap ]; then
 grep -q VMWARE_USE_SHIPPED_LIBS /etc/vmware/bootstrap
 if [ $? -eq 0 ]; then
  echo "(II) /etc/vmware/bootstrap already has VMWARE_USE_SHIPPED_LIBS, skipping.."
 else
  echo "(II) Patching /etc/vmware/bootstrap..."
  echo "export VMWARE_USE_SHIPPED_LIBS=force" >> /etc/vmware/bootstrap
 fi
fi

#

for mylib in $(rpm -ql glib2|grep '/usr/lib64/libg.*so\.0$')
do
 tgtlib="/usr/lib/vmware/lib/$(basename $mylib)/$(basename $mylib)"
 if [ ! -f "${tgtlib}.${FCX}" ]; then
  echo "(II) Backing up to ${tgtlib}.${FCX}..."
  /bin/cp -Lfv ${tgtlib} ${tgtlib}.${FCX}
 fi
 echo "(II) Replacing ${tgtlib} ..."
  /bin/cp -Lfv ${mylib} ${tgtlib}
done

# Look for GNU patch..
if [ ! -x /usr/bin/patch ]; then
 echo "(EE) Please install GNU patch (/usr/bin/patch) to patch the VMWare kernel modules.."
 exit 127
fi

# Get ready to patch the sources..
if [ "x${VTEMP_DIR}" != "x" ]; then
 cd ${VTEMP_DIR} || exit 127
fi

cat <<'EOF1' > modules.patch
diff -ur vmw_mods.orig/vmblock-only/linux/control.c vmw_mods/vmblock-only/linux/control.c
--- vmw_mods.orig/vmblock-only/linux/control.c 2016-04-14 19:31:30.000000000 -0400
+++ vmw_mods/vmblock-only/linux/control.c 2015-12-14 16:07:48.000000000 -0500
@@ -208,9 +208,11 @@
    VMBlockSetProcEntryOwner(controlProcMountpoint);
 
    /* Create /proc/fs/vmblock/dev */
-   controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
-                                        VMBLOCK_CONTROL_MODE,
-                                        controlProcDirEntry);
+   controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME, 
+      VMBLOCK_CONTROL_MODE,
+                                  controlProcDirEntry, 
+      &ControlFileOps);
+
    if (!controlProcEntry) {
       Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n");
       remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry);
@@ -218,7 +220,10 @@
       return -EINVAL;
    }
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
    controlProcEntry->proc_fops = &ControlFileOps;
+#endif
+
    return 0;
 }
 
@@ -282,18 +287,24 @@
    int i;
    int retval;
 
-   name = getname(buf);
+   name = __getname();
    if (IS_ERR(name)) {
       return PTR_ERR(name);
    }
 
+   i = strncpy_from_user(name, buf, PATH_MAX);
+   if (i < 0 || i == PATH_MAX) {
+      __putname(name);
+      return -EINVAL;
+   }
+
    for (i = strlen(name) - 1; i >= 0 && name[i] == '/'; i--) {
       name[i] = '\0';
    }
 
    retval = i < 0 ? -EINVAL : blockOp(name, blocker);
 
-   putname(name);
+   __putname(name);
 
    return retval;
 }
diff -ur vmw_mods.orig/vmblock-only/linux/dentry.c vmw_mods/vmblock-only/linux/dentry.c
--- vmw_mods.orig/vmblock-only/linux/dentry.c 2016-04-14 19:31:30.000000000 -0400
+++ vmw_mods/vmblock-only/linux/dentry.c 2015-12-14 16:07:48.000000000 -0500
@@ -63,7 +63,7 @@
                    struct nameidata *nd)   // IN: lookup flags & intent
 {
    VMBlockInodeInfo *iinfo;
-   struct nameidata actualNd;
+   struct path actualNd;
    struct dentry *actualDentry;
    int ret;
 
diff -ur vmw_mods.orig/vmblock-only/linux/file.c vmw_mods/vmblock-only/linux/file.c
--- vmw_mods.orig/vmblock-only/linux/file.c 2016-04-14 19:31:30.000000000 -0400
+++ vmw_mods/vmblock-only/linux/file.c 2015-12-14 16:07:48.000000000 -0500
@@ -132,7 +132,7 @@
     * and that would try to acquire the inode's semaphore; if the two inodes
     * are the same we'll deadlock.
     */
-   if (actualFile->f_dentry && inode == actualFile->f_dentry->d_inode) {
+   if (actualFile->f_path.dentry && inode == actualFile->f_path.dentry->d_inode) {
       Warning("FileOpOpen: identical inode encountered, open cannot succeed.\n");
       if (filp_close(actualFile, current->files) < 0) {
          Warning("FileOpOpen: unable to close opened file.\n");
@@ -166,11 +166,9 @@
 
 static int
 FileOpReaddir(struct file *file,  // IN
-              void *dirent,       // IN
-              filldir_t filldir)  // IN
+  struct dir_context *ctx)
 {
    int ret;
-   FilldirInfo info;
    struct file *actualFile;
 
    if (!file) {
@@ -184,11 +182,8 @@
       return -EINVAL;
    }
 
-   info.filldir = filldir;
-   info.dirent = dirent;
-
    actualFile->f_pos = file->f_pos;
-   ret = vfs_readdir(actualFile, Filldir, &info);
+   ret = iterate_dir(actualFile, ctx);
    file->f_pos = actualFile->f_pos;
 
    return ret;
@@ -237,7 +232,7 @@
 
 
 struct file_operations RootFileOps = {
-   .readdir = FileOpReaddir,
+   .iterate = FileOpReaddir,
    .open    = FileOpOpen,
    .release = FileOpRelease,
 };
diff -ur vmw_mods.orig/vmblock-only/linux/filesystem.c vmw_mods/vmblock-only/linux/filesystem.c
--- vmw_mods.orig/vmblock-only/linux/filesystem.c 2016-04-14 19:31:30.000000000 -0400
+++ vmw_mods/vmblock-only/linux/filesystem.c 2015-12-14 16:07:48.000000000 -0500
@@ -322,7 +322,7 @@
 {
    VMBlockInodeInfo *iinfo;
    struct inode *inode;
-   struct nameidata actualNd;
+   struct path actualNd;
 
    ASSERT(sb);
 
diff -ur vmw_mods.orig/vmblock-only/linux/inode.c vmw_mods/vmblock-only/linux/inode.c
--- vmw_mods.orig/vmblock-only/linux/inode.c 2016-04-14 19:31:30.000000000 -0400
+++ vmw_mods/vmblock-only/linux/inode.c 2015-12-14 16:07:48.000000000 -0500
@@ -35,10 +35,18 @@
 
 
 /* Inode operations */
-static struct dentry *InodeOpLookup(struct inode *dir,
-                                    struct dentry *dentry, struct nameidata *nd);
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
+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)
+#else
+static struct dentry *InodeOpLookup(struct inode *, struct dentry *, unsigned int);
+static int InodeOpReadlink(struct dentry *, char __user *, int);
+#endif
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
+static const char *InodeOpFollowlink(struct dentry *dentry, void **cookie);
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
 static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
 #else
 static int InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
@@ -49,12 +57,15 @@
    .lookup = InodeOpLookup,
 };
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
 static struct inode_operations LinkInodeOps = {
+#else
+struct inode_operations LinkInodeOps = {
+#endif
    .readlink    = InodeOpReadlink,
    .follow_link = InodeOpFollowlink,
 };
 
-
 /*
  *----------------------------------------------------------------------------
  *
@@ -75,7 +86,11 @@
 static struct dentry *
 InodeOpLookup(struct inode *dir,      // IN: parent directory's inode
               struct dentry *dentry,  // IN: dentry to lookup
-              struct nameidata *nd)   // IN: lookup intent and information
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
+       struct nameidata *nd)   // IN: lookup intent and information
+#else
+              unsigned int flags)
+#endif
 {
    char *filename;
    struct inode *inode;
@@ -135,7 +150,12 @@
    inode->i_size = INODE_TO_IINFO(inode)->nameLen;
    inode->i_version = 1;
    inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+#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);
@@ -177,7 +197,12 @@
       return -EINVAL;
    }
 
-   return vfs_readlink(dentry, buffer, buflen, iinfo->name);
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 14, 99)
+ return vfs_readlink(dentry, buffer, buflen, iinfo->name);
+#else
+       return readlink_copy(buffer, buflen, iinfo->name);
+#endif
+
 }
 
 
@@ -198,13 +223,20 @@
  *----------------------------------------------------------------------------
  */
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
+static const char *
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
 static void *
 #else
 static int
 #endif
 InodeOpFollowlink(struct dentry *dentry,  // IN : dentry of symlink
-                  struct nameidata *nd)   // OUT: stores result
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
+    void **cookie
+#else
+    struct nameidata *nd
+#endif
+    )   // OUT: stores result
 {
    int ret;
    VMBlockInodeInfo *iinfo;
@@ -221,7 +253,11 @@
       goto out;
    }
 
-   ret = vfs_follow_link(nd, iinfo->name);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
+   return *cookie = (char *)(iinfo->name);
+#else
+   nd_set_link(nd, iinfo->name);
+#endif
 
 out:
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
@@ -230,3 +266,4 @@
    return ret;
 #endif
 }
+
diff -ur vmw_mods.orig/vmblock-only/shared/compat_namei.h vmw_mods/vmblock-only/shared/compat_namei.h
--- vmw_mods.orig/vmblock-only/shared/compat_namei.h 2016-04-14 19:31:30.000000000 -0400
+++ vmw_mods/vmblock-only/shared/compat_namei.h 2016-05-25 12:30:06.602993677 -0400
@@ -26,21 +26,21 @@
  * struct. They were both replaced with a struct path.
  */
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25)
-#define compat_vmw_nd_to_dentry(nd) (nd).path.dentry
+#define compat_vmw_nd_to_dentry(nd) (nd).dentry
 #else
 #define compat_vmw_nd_to_dentry(nd) (nd).dentry
 #endif
 
 /* In 2.6.25-rc2, path_release(&nd) was replaced with path_put(&nd.path). */
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25)
-#define compat_path_release(nd) path_put(&(nd)->path)
+#define compat_path_release(nd) path_put(nd)
 #else
 #define compat_path_release(nd) path_release(nd)
 #endif
 
 /* path_lookup was removed in 2.6.39 merge window VFS merge */
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38)
-#define compat_path_lookup(name, flags, nd)     kern_path(name, flags, &((nd)->path))
+#define compat_path_lookup(name, flags, nd)     kern_path(name, flags, nd)
 #else
 #define compat_path_lookup(name, flags, nd)     path_lookup(name, flags, nd)
 #endif
diff -ur vmw_mods.orig/vmmon-only/linux/hostif.c vmw_mods/vmmon-only/linux/hostif.c
--- vmw_mods.orig/vmmon-only/linux/hostif.c 2016-04-14 19:48:44.000000000 -0400
+++ vmw_mods/vmmon-only/linux/hostif.c 2016-05-25 10:51:47.677306367 -0400
@@ -1162,8 +1162,13 @@
    int retval;
 
    down_read(&current->mm->mmap_sem);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+   retval = get_user_pages((unsigned long)uvAddr,
+   numPages, 0, 0, ppages, NULL);
+#else
    retval = get_user_pages(current, current->mm, (unsigned long)uvAddr,
-                           numPages, 0, 0, ppages, NULL);
+   numPages, 0, 0, ppages, NULL);
+#endif
    up_read(&current->mm->mmap_sem);
 
    return retval != numPages;
diff -ur vmw_mods.orig/vmnet-only/netif.c vmw_mods/vmnet-only/netif.c
--- vmw_mods.orig/vmnet-only/netif.c 2016-04-14 19:48:47.000000000 -0400
+++ vmw_mods/vmnet-only/netif.c 2016-05-25 12:07:14.959944026 -0400
@@ -39,8 +39,8 @@
 #include <linux/proc_fs.h>
 #include <linux/file.h>
 
-#include "vnetInt.h"
 #include "compat_netdevice.h"
+#include "vnetInt.h"
 #include "vmnetInt.h"
 
 
diff -ur vmw_mods.orig/vmnet-only/userif.c vmw_mods/vmnet-only/userif.c
--- vmw_mods.orig/vmnet-only/userif.c 2016-04-14 19:48:47.000000000 -0400
+++ vmw_mods/vmnet-only/userif.c 2016-05-25 10:50:57.215044260 -0400
@@ -113,8 +113,12 @@
    int retval;
 
    down_read(&current->mm->mmap_sem);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+   retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
+#else
    retval = get_user_pages(current, current->mm, addr,
-      1, 1, 0, &page, NULL);
+   1, 1, 0, &page, NULL);
+#endif
    up_read(&current->mm->mmap_sem);
 
    if (retval != 1) {
diff -ur vmw_mods.orig/vmnet-only/vm_device_version.h vmw_mods/vmnet-only/vm_device_version.h
--- vmw_mods.orig/vmnet-only/vm_device_version.h 2016-04-14 19:48:47.000000000 -0400
+++ vmw_mods/vmnet-only/vm_device_version.h 2016-05-25 11:59:27.676539573 -0400
@@ -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
EOF1

cat <<'EOF2' > util.patch
--- scripts/util.sh.orig 2015-12-09 16:07:06.000000000 -0500
+++ scripts/util.sh 2016-03-02 14:35:04.000000000 -0500
@@ -362,7 +362,7 @@
     echo no
   else
     if [ "$vmdb_VMBLOCK_CONFED" = 'yes' ]; then
-      echo yes
+      echo no
     else
       echo no
     fi
EOF2

if [ "x${VTEMP_DIR}" != "x" ]; then
 for mymod in vmmon vmnet vmblock
 do
  if [ -f ${MODS_SRC_DIR}/${mymod}.tar ]; then
   echo "(II) Extracting  ${MODS_SRC_DIR}/${mymod}.tar  into ${VTEMP_DIR}..."
   /usr/bin/tar xf ${MODS_SRC_DIR}/${mymod}.tar  || exit 127
  fi
 done
 echo "(II) Patching modules..."
 patch -p1 <  modules.patch

 for mymod in vmmon vmnet vmblock
 do
  if [ -f ${MODS_SRC_DIR}/${mymod}.tar.orig ]; then
   echo "(WW) Backup ${MODS_SRC_DIR}/${mymod}.tar.orig already exists! Not replacing original tar..."
  else
   echo "(II) Rebuilding ${MODS_SRC_DIR}/${mymod}.tar from ${VTEMP_DIR}/${mymod}-only ..."
   /bin/cp -Lfv ${MODS_SRC_DIR}/${mymod}.tar{,.orig}
   /usr/bin/tar cf ${MODS_SRC_DIR}/${mymod}.tar ${mymod}-only || exit 127
  fi
 done

 # on recent systems VMW uses vmware-fuse-block, no need for vmblock anymore..
 if [ -f /usr/lib/vmware/scripts/util.sh.orig ]; then
  echo "(WW) /usr/lib/vmware/scripts/util.sh.orig already exists! Not patching..."
 else
  echo "(II) Patching util.sh..."
  /bin/cp -Lfv /usr/lib/vmware/scripts/util.sh{,.orig}
  patch -p1 < util.patch /usr/lib/vmware/scripts/util.sh
 fi
fi

# End
echo "(II) Now run: vmware-modconfig --console --install-all"
Una vez guardado asignarle permiso de ejecución:
chmod 777 Update_VMW.sh
Ejecutarlo como:
./Update_VMW.sh
NOTA: Una vez ejecutado el scrip, saltarse al último paso:

Método DOS:

Primero buscar el subfijo de las librerías a utilizar:
En Fedora 24:

# ls -l /usr/lib64/libglib-2.0.so.0.*

El resultado es:
/usr/lib64/libglib-2.0.so.0.4800.1
Lo siguiente es ejecutar el siguiente comando con la versión de las librerías que arrojaron los comandos anteriores, es muy importante que coincidan, recordar que estamos en modo root:
# cd /usr/lib/vmware/lib

Ejecutar el comando con las modificaciones necesarias:

En mi caso tengo la versión  24 de fedora, por lo tanto lo modifico así:

for mylib in $(ls /usr/lib64/lib*4800*); do /bin/cp -afv $mylib $(basename $mylib .4800.1 )/$(basename $mylib .4800.1 ); done

 Paso final: 

NOTA: Cada vez que haya actualización del kernel, es necesario recompilar los módulos también, lo mismo ocure con el module kernel de virtualbox.
vmware-modconfig --console --install-all

Fuente: http://vcojot.blogspot.mx/2015/11/vmware-worksation-12-on-fedora-core-23.html

Ejecutar el software:

Ahora ya pueden ejecutar el software desde la terminal como usuario normal o desde el cajón de las aplicaciones:
vmware&
Iniciarlo en modo forzado:
$ VMWARE_USE_SHIPPED_LIBS=force vmware or: $ VMWARE_USE_SHIPPED_LIBS=force vmplayer

Fin del proceso de instalación.

Desinstalación:


Listar los productos instalados de VMWare
vmware-installer --list-products
Y mostrará algo parecido:

Product Name         Product Version     
==================== ====================
vmware-workstation   12.1.1.3770994 
Y ahora ejecutamos el comando con el producto seleccionado:
sudo vmware-installer  --uninstall-product vmware-workstation
 Seguir los pasos del  asistente de desintalador para finalizar.


Capturas:








Y eso es todo: Gracias por visitar, lamento el Tutorial tan largo, pero es necesario de ese modo:

5 comentarios:

  1. Genial amigo, lo malo es que el generador de llaves ya no esta disponible, lo pudieras poner de nueva cuenta.

    saludos.

    ResponderEliminar
  2. Segui la guia en fedora 25 y no funciona me arroja este error. Unable to start services.

    See log file /tmp/vmware-root/vmware-14422.log for details.

    Use el paso 2 manualmente , no use el script ya que es para fedora 24.

    Estoy accediendo desde xorg. Has probado en fedora 25?

    ResponderEliminar
  3. Hola... Sí, ya lo probé en FC25, la instalación sí la tuve que hacer en modo xorg. Usé el script que muestra el autor http://vcojot.blogspot.mx/2015/11/vmware-worksation-12-on-fedora-core-23.html y me funcionó correctamente.

    ResponderEliminar
    Respuestas
    1. Es una pena a mi no me funciono. cuando lo ejecuto me dice que no tengo un sistema fedora 23 o 24. Edite el script la parte donde reconoce el sistema y le agrege 25 para que corriera el script pero luego de ejecutarlo sigue igual :c

      Eliminar