Невозможно запустить VMware - не удалось собрать vmnet

Согласно wikipedia, Ubuntu по большей части является лицензированным GPL: Единственными исключениями являются некоторые проприетарные аппаратные драйверы. [24] Основной лицензией является GNU General Public License (GNU GPL), которая вместе с GNU Lesser General Public License (GNU LGPL) прямо заявляет, что пользователи могут свободно запускать, копировать, распространять, изучать, изменять, разрабатывать и совершенствовать программного обеспечения. С другой стороны, есть также проприетарное программное обеспечение, которое может работать на Ubuntu.

Источник: http://en.wikipedia.org/wiki/Ubuntu_(operating_system)#Features

Существуют определенные пакеты, которые не включены (например, ограниченные драйверы), которые предоставляют

На официальном http://en.wikipedia.org/wiki/Ubuntu_ (operating_system) #Features вы также можете найти более подробную информацию по этой теме.

Он также явно указывает, что существует 4 типа лицензий, предлагаемых в пакетах ubuntu:

Единственными исключениями являются некоторые проприетарные аппаратные драйверы. [24] Основной лицензией является GNU General Public License (GNU GPL), которая вместе с GNU Lesser General Public License (GNU LGPL) прямо заявляет, что пользователи могут свободно запускать, копировать, распространять, изучать, изменять, разрабатывать и совершенствовать программного обеспечения. С другой стороны, есть также запатентованное программное обеспечение, которое может работать на Ubuntu.

25
задан 3 February 2014 в 13:25

10 ответов

Я смог решить проблему с ядром 3.13, используя это решение .

Автор рекомендует исправлять источники vmnet:

Создать файл vmnet313.patch в вашем домашнем каталоге со следующим содержимым:

205a206
> #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
206a208,210
> #else
> VNetFilterHookFn(const struct nf_hook_ops *ops,        // IN:
> #endif
255c259,263
<    transmit = (hooknum == VMW_NF_INET_POST_ROUTING);
---
>    #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
>       transmit = (hooknum == VMW_NF_INET_POST_ROUTING);
>    #else
>       transmit = (ops->hooknum == VMW_NF_INET_POST_ROUTING);
>    #endif

В качестве альтернативы можно загрузить этот патч для Ваш домашний каталог и переименуйте его в vmnet313.patch. Например:

wget "http://pastebin.com/raw.php?i=p3bkbAMu" -O vmnet313.patch

Далее выполните следующие команды:

#Change directory into the vmware module source directory
cd /usr/lib/vmware/modules/source
# untar the vmnet modules
tar -xvf vmnet.tar
#run a the patch you should have just saved earlier
patch vmnet-only/filter.c < ~/vmnet313.patch
# re-tar the modules
tar -uvf vmnet.tar vmnet-only
#delete the previous working directory
rm -r vmnet-only
# run the vmware module build program. (alternatively just run the GUI app)
/usr/lib/vmware/bin/vmware-modconfig --console --install-all

Последняя команда (или vmplayer) теперь должна успешно выполняться.

0
ответ дан 3 February 2014 в 13:25

Использование этого vmnet313.patch, включающего несколько исправлений опечаток (см. Ответ @ nonsleepr), решило мою проблему с обновлением с 9.0.2 до 9.02.4 в Ubuntu 14.04.4 LTS 64-bit Desktop.

Этот фрагмент является содержимым pastebin.com/raw.php?i=p3bkbAMu ; но с двумя исправленными опечатками в самом конце.

--- vmnet-only/filter.c 2013-10-18 23:11:55.000000000 +0400
+++ vmnet-only/filter.c 2013-12-03 04:16:31.751352170 +0400
@@ -27,6 +27,7 @@
 #include "compat_module.h"
 #include <linux/mutex.h>
 #include <linux/netdevice.h>
+#include <linux/version.h>
 #if COMPAT_LINUX_VERSION_CHECK_LT(3, 2, 0)
 #   include <linux/module.h>
 #else
@@ -203,7 +204,11 @@
 #endif

 static unsigned int
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
 VNetFilterHookFn(unsigned int hooknum,                 // IN:
+#else
+VNetFilterHookFn(const struct nf_hook_ops *ops,        // IN:
+#endif
 #ifdef VMW_NFHOOK_USES_SKB
                  struct sk_buff *skb,                  // IN:
 #else
@@ -252,7 +257,14 @@

    /* When the host transmits, hooknum is VMW_NF_INET_POST_ROUTING. */
    /* When the host receives, hooknum is VMW_NF_INET_LOCAL_IN. */
-   transmit = (hooknum == VMW_NF_INET_POST_ROUTING);
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
+    transmit = (hooknum == VMW_NF_INET_POST_ROUTING);
+#else
+    transmit = (ops->hooknum == VMW_NF_INET_POST_ROUTING);
+#endif
+    packetHeader = compat_skb_network_header(skb);
+    ip = (struct iphdr*)packetHeader;
0
ответ дан 3 February 2014 в 13:25

Я столкнулся с точно такой же проблемой (Linux Mint 17, ядро ​​3.17 )

Найденное решение:

# - as root user
$ cd /usr/lib/vmware/modules/source
$ tar -xvf vmnet.tar
# - edit the file vmnet-only/netif.c and replace the line that looks like
    dev = alloc_netdev(sizeof *netIf, deviceName, VNetNetIfSetup);
to
    dev = alloc_netdev(sizeof *netIf, deviceName, NET_NAME_UNKNOWN, VNetNetIfSetup);
$ tar -cvf vmnet.tar vmnet-only/
$ rm -rf vmnet-only/

Затем снова запустите vmplayer.

Источник

0
ответ дан 3 February 2014 в 13:25

VMware необходимо собрать некоторые модули, потому что установщик не всегда имеет правильную версию для вашей системы.

Установите build-essential.

sudo apt-get install build-essential

Это установит компилятор и все остальные потребности. Перезагрузитесь и попробуйте снова запустить vmware, это должно решить эту проблему.

0
ответ дан 3 February 2014 в 13:25

Если вы обновите 12.04 Hardware Enablement Stack до версии 14.04 без полного обновления всей системы, модуль vmnet может не скомпилироваться для vmplayer 6.0.1. Мое решение состояло в том, чтобы обновить до последней версии 6.0.3 vmplayer. После этого не было проблем.

0
ответ дан 3 February 2014 в 13:25

Другое решение - заменить /usr/lib/vmware/modules/source/vmnet.tar рабочим, взятым из VMware-Player-7.1.bundle. Вам даже не нужно ждать завершения установки, просто скопируйте файл в другое место и прервите работу. Затем запустите VMware-Workstation10.bundle (в моем случае) замените vmnet.tar и запустите вашу рабочую рабочую станцию ​​

.
0
ответ дан 3 February 2014 в 13:25

Я обновил образ ядра до «linux-image-3.13.0-43-generic» для версии 3.13.0 на 64-битном x86 SMP во время работы Ubuntu Precise 12.04 с «linux-image-3.8.0-44-generic» (... но не обновлял Ubuntu!)

После чего при запуске VMPlayer 6.0 одно из сообщений об ошибках, зарегистрированных VMPLayer, отображало «Не удалось собрать vmnet. Не удалось выполнить команду сборки»., и VMPlayer не удалось запустить.

Я откатил образ ядра, удалив обновленный.

apt-get remove 3.13.0-43-generic

Также удалены обновленные заголовки linux.

sudo apt-get autoremove

Теперь образ ядра вернулся к предыдущему:

cat / proc / version: версия Linux 3.8.0-44-generic (buildd @ tipua) (версия gcc 4.6.3 (Ubuntu / Linaro 4.6.3-1ubuntu5)) # 66 ~ Precision1-Ubuntu SMP Вт 15 июля 04:01:04 UTC 2014

После чего VMPlayer 6.0 возвращается в нормальное состояние, и теперь работает правильно.

0
ответ дан 3 February 2014 в 13:25

Моя версия vmware не включала filter.c; Я обнаружил, что мне нужно исправить vmnet с помощью патча, указанного здесь:

https://communities.vmware.com/message/2531821

diff -ur vmnet-only.a/driver.c vmnet-only/driver.c
--- vmnet-only.a/driver.c    2014-11-20 20:13:56.000000000 -0500
+++ vmnet-only/driver.c    2015-02-09 15:40:10.916640592 -0500
@@ -265,10 +265,17 @@
 {
    int ret = -ENOTTY;

+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
    if (filp && filp->f_op && filp->f_op->ioctl == VNetFileOpIoctl) {
       ret = VNetFileOpIoctl(filp->f_dentry->d_inode, filp, iocmd, ioarg);
    }
    return ret;
+#else
+   if (filp && filp->f_op && filp->f_op->ioctl == VNetFileOpIoctl) {
+      ret = VNetFileOpIoctl(filp->f_path.dentry->d_inode, filp, iocmd, ioarg);
+   }
+   return ret;
+#endif
 }


@@ -1191,11 +1198,19 @@
    struct inode *inode = NULL;
    long err;

+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
    if (filp && filp->f_dentry) {
       inode = filp->f_dentry->d_inode;
    }
    err = VNetFileOpIoctl(inode, filp, iocmd, ioarg);
    return err;
+#else
+   if (filp && filp->f_path.dentry) {
+      inode = filp->f_path.dentry->d_inode;
+   }
+   err = VNetFileOpIoctl(inode, filp, iocmd, ioarg);
+   return err;
+#endif
 }
 #endif

diff -ur vmnet-only.a/userif.c vmnet-only/userif.c
--- vmnet-only.a/userif.c    2014-11-20 20:13:56.000000000 -0500
+++ vmnet-only/userif.c    2015-02-09 15:41:02.150847338 -0500
@@ -523,7 +523,13 @@
       .iov_base = buf,
       .iov_len  = len,
    };
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
    return skb_copy_datagram_iovec(skb, 0, &iov, len);
+#else
+   struct iov_iter to;
+   iov_iter_init(&to, READ, &iov, 1, len);
+   return skb_copy_datagram_iter(skb, 0, &to, len);
+#endif
 }
0
ответ дан 3 February 2014 в 13:25

Для меня эти решения не сработали. Я использую Ubuntu 14, поэтому я пошел на квест и нашел решение здесь .

Команды следующие:

sudo apt-get install build-essential linux-headers-`uname -r`

В 32-разрядной системе вы можете установить VMware Player с помощью следующих команд:

mkdir ~/VMware && cd ~/VMware 
wget -c http://goo.gl/kkfRJg -O VMware-Player-i386.bundle.tar 
tar -xvf VMware-Player-i386.bundle.tar 
chmod +x VMware-Player-6.0.1-1379776.i386.bundle  
sudo sh VMware-Player-6.0.1-1379776.i386.bundle
mkdir ~/VMware && cd ~/VMware 
wget -c http://goo.gl/Uxia2s -O VMware-Player-x86_64.bundle.tar 
tar -xvf VMware-Player-x86_64.bundle.tar 
chmod +x VMware-Player-6.0.1-1379776.x86_64.bundle 
sudo sh VMware-Player-6.0.1-1379776.x86_64.bundle

После установки все работало ну и мне удалось смонтировать виртуальную машину Windows XP с минимальными проблемами. Мне пришлось обновить еще несколько драйверов, но без проблем. VMWare Player 6, похоже, лучше всего работает с моей версией Ubuntu.

0
ответ дан 3 February 2014 в 13:25

Это сработало для меня на lubuntu 18.04 LTS. Я использую vmware-player-14.0.0-6661328.x86_64.bundle. После загрузки и установки vmplayer, когда я запускаюсь, он пытается собрать модули, но не получается. Чтобы исправить это, вы должны загрузить патчи с этого бранча: https://github.com/mkubecek/vmware-host-modules/tree/player-14.1.1 . не загружайте мастер, потому что:

Ветвь «мастер» не может использоваться для сборки модулей, она содержит только общие файлы, так что изменения в них могут быть легко объединены со всеми другими ветвями. Чтобы получить реальные источники, извлеките «настоящую» ветку

после загрузки, распакуйте и cd в извлеченный каталог и выполните

make
sudo make install

Теперь запустите vmplayer, и он должен работать

0
ответ дан 3 February 2014 в 13:25

Другие вопросы по тегам:

Похожие вопросы: