Lo hice y lo entendí

El blog de Vicente Navarro
28 abr

Cómo solucionar incompatibilidades entre una versión de VMWare y un kernel más reciente

Tengo la costumbre de recompilarme un kernel a medida en todos los Linux que instalo para mí. En parte es costumbre de hace muchos años de cuando en cada nueva versión aparecían increíbles novedades y una gran cantidad dispositivos soportados nuevos. Ahora ya no es necesario, y con el kernel que traen por defecto casi todas las ditribuciones te puedes apañar muy bien.

Sin embargo, suele ser necesario tener el kernel recompilado para añadir drivers no oficiales, parches y todas esas aplicaciones que necesitan compilarse un módulo del kernel para trabajar, y estoy pensando, por ejemplo, en el parche del bootsplash, en el driver binario de NVidia, en el kqemu, en los módulos del VMWare, en el driver para mi WebCam o para mi tarjeta WiFi.

Pues bien, hace poco tuve que pasar del kernel 2.6.19 al 2.6.20.6 tras una amable sugerencia de mi querido NTFS-3G al que yo no osé contradecir:

Why do I get “WARNING: Deficient FUSE kernel module detected”?

The FUSE technology used by ntfs-3g consists of two major parts: a library and a Linux kernel driver. The message means that you either have the faulty FUSE 2.6.2 release, or the library (FUSE package) is safe but the kernel driver is not. When you install or upgrade the FUSE package then it installs only the library, not the kernel driver. In other words, ntfs-3g and FUSE is safe but not your kernel.

Solution: Please ask your distribution developers to fix the Linux kernel problem. The Linux kernel must be upgraded either to at least version 2.6.20, or the FUSE kernel driver must be upgraded to a safe version which is also included in the FUSE package for Linux kernel version 2.6.9 and later.

Tras recompilar el kernel, tuve que recompilar los módulos de todo lo que mencionaba antes para lo que no tuve ningún problema excepto en el caso del VMWare Server 1.0.2, que daba un error durante la compilación de los módulos:

Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config0/vmmon-only'
make -C /lib/modules/2.6.20.6-VIC/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/linux-2.6.20.6'
  CC [M]  /tmp/vmware-config0/vmmon-only/linux/driver.o
In file included from /tmp/vmware-config0/vmmon-only/linux/driver.c:80:
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: error: expected declaration specifiers or '...' before 'compat_exit'
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: error: expected declaration specifiers or '...' before 'exit_code'
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: warning: type defaults to 'int' in declaration of '_syscall1'
make[2]: *** [/tmp/vmware-config0/vmmon-only/linux/driver.o] Error 1
make[1]: *** [_module_/tmp/vmware-config0/vmmon-only] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.20.6'
make: *** [vmmon.ko] Error 2
make: Leaving directory `/tmp/vmware-config0/vmmon-only'
Unable to build the vmmon module.

La línea de código que crea el problema es la 21:

 16  * compat_exit() provides an access to the exit() function. It must
 17  * be named compat_exit(), as exit() (with different signature) is
 18  * provided by x86-64, arm and other (but not by i386).
 19  */
 20 #define __NR_compat_exit __NR_exit
 21 static inline _syscall1(int, compat_exit, int, exit_code);

Buscando estos errores y funciones en Google, encontramos cientos de entradas de gente intentando solucionar problemas de compatibilidad de VMWare con un determinado kernel…

Una solución que funciona bien es este caso en concreto es la de MrSiir, consistente en cambiar la línea 21 por esta:

int compat_exit(int exit_code);

Pero la solución que más me ha impresionado es la de un usuario de los foros de VMWare llamado Petr que tiene un parche que se supone que hace funcionar cualquier versión de VMWare con cualquier kernel. La versión actual del parche (vmware-any-any-update109.tar.gz) se puede encontrar en http://platan.vc.cvut.cz/ftp/pub/vmware o en ftp://ftp.cvut.cz/vmware. Descargarmos el parche, lo descomprimimos, ejecutamos el runme.pl ¡y ya está!

Por cierto, la versión de VMWare 1.0.3 tiene los mismos problemas que la 1.0.2 con el kernel 2.6.20, pero las mismas soluciones siguen funcionando.

Para concluir, comentar que el VMWare y el Qemu son soluciones excelentes para aquellos que usamos Linux para todo excepto para matar marcianitos. Ambos productos nos permiten tener un pequeño Windows sin salir de Linux para por ejemplo acceder a esas webs que se niegan a funcionar sin Internet Explorer o para abrir ese archivo que nos han mandado en Word y que no conseguimos abrir bien con OpenOffice.

Mientras que VMWare es un producto comercial (aunque la versión Server es gratuita), el Qemu/KQemu es GPL, y aunque sería muy deseable poder prescindir del primero, la estabilidad del segundo aún deja bastante que desear, aunque su rendimiento sea casi similar usando el KQemu, recientemente liberado como GPL, posiblemente por la pérdida de potenciales usuario tras la inclusión de KVM en el kernel 2.6.20.

Desafortunadamente, los que no tenemos un procesador con extensiones para virtualización, como Intel VT o AMD-V, no podemos usar ni KVM ni el también famoso Xen.

Entradas relacionadas

6 Comentarios a “Cómo solucionar incompatibilidades entre una versión de VMWare y un kernel más reciente”

  • Iván dice:

    Justo lo que estaba buscando!. Estoy configurando mi nueva Ubuntu Feisty Fawn y al instalar wmware me ha aparecido ese error. Me has ahorrado googlear un rato para encontrarlo. He descargado el parche y listo, ya está funcionando.
    El único problema es que tenía dos máquinas virtuales creadas con en wmware workstation de windows y ahora ninguna arranca y en los directorios se me crea un archivo core. Sabes algo de esto?.

    Saludos, Iván.

  • Iván Me alegro de que la solución te haya venido tan a tiempo :-)

    Desafortunadamente (porque no sé cómo ayudarte), a mí me va muy bien (en Debian). No sé si tendrá que ver con que las imágenes que tengo las creé con VMWare Server 1.0.1…

  • Muy bueno el parche de Petr, sí.
    Gracias por la referencia. :-)

  • Arsenio dice:

    Excelente artículo, pero los que usamos Windows, o los que nos vemos obligados a usar Windows para no pasar horas y horas de quebraderos de cabeza con asuntos del SO, lo hacemos porque la mayoría de los programas para Linux son una porquería (salvo, todo hay que decirlo, los basados en red o comunicaciones), así como su soporte para hardware, periféricos, y su usabilidad. Cuando Linux tenga la usabilidad y la orientación al usuario de Windows, tal vez los porcentajes de usuarios actuales de uno y otro SSOO se inviertan. De hecho, desde la época en que empezaron a aparecer los interfaces gráficos para Linux, no han hecho mas que tratar de igualar o superar a Windows, con mayor o menor fortuna. La mayoría de los usuarios necesitan un SO del que se tengan que ocupar lo menos posible, y en el que el periférico que compren les funcione facilmente y a ser posible a la primera. Windows, evidentemente, tendría mucho que aprender de Linux en cuanto a seguridad y potencia, pero no olvidar que hace funcionar practicamente todo el hardware disponible sin mayores problemas en las mas dispares combinaciones, algo que, por ejemplo, otros SSOO propietarios no son capaces de hacer, y no reciben tantas críticas como Windows (mac bien halagos). Y por no hablar ahora del inmenso repertorio de programas disponibles para uno u otro SO, y la compatibilidad (o incompatibilidad, llámense “dependencias”) entre ellos,
    No confundir, amo el software libre y me gusta Linux. Pero no estaría de mas que los incondicionales de este sopesaran los inconvenientes de los SSOO monolíticos, en comparación a los de micro-kernel o a los que dan soporte a sistemas de tiempo real. Es posible que Linux también esté equivocando su esencia, y no hay mas que ver el marasmo de versiones de programas en función de la respectiva del kernel, y de repositorios que hacen perder horas de tiempo.
    Además, de vez en cuando, también me apetece matar alienígenas o usar el joystick. Gran parte del desarrollo del hardware se basa en los usuarios que lo hacen. Porque para escribir cartas con el procesador de textos o navegar por internet, con un 386 sobraba…
    Todo es muy relativo. Pero no creo que haya que avergonzarse por arrancar el Windows de vez en cuando para utilizar los programas de p.m. que existen para él. Ahora, a los que les (nos) gusta cacharrear con el sistema, seguramente se aburran pronto. A los que no les gusta o no entienden, Linux, terreno vedado.
    Creo que todo aporta algo y tiene su hueco. Es nuestra función como técnicos hacer que el respectivo que nos ocupa sea cada vez mayor y mejor.
    Por cierto, despues de instalar el vmPlayer en CentOS 5.2 e intentar abrir máquinas virtuales creadas en Windows, obtengo el error, invariablemente, “iFailed to allocate page for guest RAM!. Probaré con el vmware-any-any de marras. Despues lo intentaré con el conversor de MV de vmware, desde Windows, claro…
    Por lo demás, saludos…

  • holacaracola dice:

    Xen se puede instalar en CPU sin extensiones para virtualización

Trackbacks y pingbacks:

Tema LHYLE09, creado por Vicente Navarro