Mostrando las entradas con la etiqueta kernel. Mostrar todas las entradas
Mostrando las entradas con la etiqueta kernel. Mostrar todas las entradas

lunes, 27 de febrero de 2017

Recompilar kernel de VirtualBox 5.1.14 en kernel 4.9.11-200 en Fedora 25


Intenté iniciar VirtualBox 5.1.14 hoy, y me lanzó ese error, como es costumbre, solo es necesario recompilar el Kernel, sin embargo en esta ocasión, hubo un poco más de configuraciones adicionales.

A continuación les explico los pasos que realicé para recompilarlo para el kernel 4.9.11-200 en Fedora 25.

Lo usual es ejecutar el siguiente comando para la versión 5.1 en adelante, pero por alguna razón ahora, no funciona, ya que es necesario agregar otros comandos a selinux.

Se ejecuta en modo super usuario:


/usr/lib/virtualbox/vboxdrv.sh setup
Y el problema siguiente desaparecía:


Ahora, es necesario los permisos, los cuales se añaden, de manera personalizada para cada usuario.

Al ejecutar el comando, en fedora lanzará una alerta de SELinux, con instrucciones que se ejecutarán en la terminal para que funcione. Esto dependerá de la versión de VB y el kernel.

En mi caso saltó esta ventana:


Entonces lo que prosigue es copiar el código que hay delante del símbolo # y ejecutarlo en la terminal, uno por uno, el primer comando, lanzará otro comando, el cual se debe ejecutar en seguida.

ausearch -c 'modprobe' --raw | audit2allow -M my-modprobe.p

semodule -X 300 -i my-modprobe.p

Luego de ejecutar el primero, continuamos con el que sigue, al finalizar eso, ahora ejecutamos el comando inicial, y con eso se soluciona el problema.

/usr/lib/virtualbox/vboxdrv.sh setup

Espero que les funcione, cualquier duda, espero poderlos ayudar.

miércoles, 7 de septiembre de 2016

Recompilar KERNEL para VMware 12 en Fedora 24


Para los que usamos software de virtualización, sabemos que en cada actualización del Kernel del linux que usemos, es necesario recompilar el kernel para que funciona con VMware.

Cuando el kernel es actualizado y no se compila el kernel para VMware, nos lanzará este error:



Afortunadamente el autor Vincent Cojot que sube a su blog http://vcojot.blogspot.mx/2015/11/vmware-worksation-12-on-fedora-core-23.html, normalmente archivos .sh que recompilan el kernel de acuerdo a la versión que se tenga.
El último archivo subido por él, que funciona para el kernel 4.7.2-201.fc24.x86_64 en Fedora se puede descargar desde aquí:



O bien, desde aquí:



Este archivo, lo único que se requiere, es darle permisos de ejecución con el siguiente comando:

$ chmod 777 Update_VMW_4.7.2-201.sh
A continuación es necesario ejecutarlo con:

$ sudo ./Update_VMW_4.7.2-201.sh

Y comenzará el proceso de recompilación, una vez finalizada la ejecución del archivo anterior, se ejecuta la siguiente línea:
$ sudo vmware-modconfig --console --install-all
Y finalmente con eso ya deberá funcionar de nuevo nuestro VMware.

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: