カーネル3.19の「vmnetの構築に失敗しました」


9

ので、この答えはカーネルだけ3.13のためにあるので、私は問題の解決策を共有したいのですがFailed to build vmnet、カーネル3.19およびそれ以前のバージョンのために。したがって、これは私の実際の問題ではなく、将来の読者を助けることのみを目的としています。

質問

VMware WorkstationまたはVMware Playerを初めて実行する場合、いくつかのパッケージをカーネルレベルでデプロイする必要がありますが、このエラー行で失敗します。

vmnetの構築に失敗しました。ビルドコマンドの実行に失敗しました。

この問題を解決するにはどうすればよいですか?


これはもはやそうではないことに注意してください。今日の新規インストールの時点で、Linuxシステムでは、このビルドの問題を再現できませんでした。
トーマスウォード

回答:


8

解決

  1. ディレクトリをvmwareモジュールのソースディレクトリに変更します。 [1]

    cd /usr/lib/vmware/modules/source
    
  2. vmnetモジュールをuntarします。 [1]

    sudo tar -xvf vmnet.tar
    
  3. vmnet-only/driver.cお気に入りのテキストエディタで開きます。

    sudo gedit vmnet-only/driver.c
    
  4. 267行目あたりで、以下を変更 [2]

    if (filp && filp->f_op && filp->f_op->ioctl == VNetFileOpIoctl) {
        ret = VNetFileOpIoctl(filp->f_dentry->d_inode, filp, iocmd, ioarg);
    }
    return ret;        
    

    #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
    
  5. 1194行目あたりで、次のように変更します。 [2]

    if (filp && filp->f_dentry) {
        inode = filp->f_dentry->d_inode;
    }
    err = VNetFileOpIoctl(inode, filp, iocmd, ioarg);
    return 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
    
  6. このファイルを保存してからファイルを開く vmnet-only/userif.c

    sudo gedit vmnet-only/userif.c
    
  7. 526行目あたりで、以下を変更 [2]

    return skb_copy_datagram_iovec(skb, 0, &iov, 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
    
  8. このファイルを保存して、モジュールを風袋引きします。 [1]

    sudo tar -uvf vmnet.tar vmnet-only
    
  9. 以前の作業ディレクトリを削除します。 [1]

    sudo rm -r vmnet-only
    
  10. GUI(ワークステーションまたはプレーヤー)を再度実行して、モジュールをビルドします。

参考文献

[1]寝ていない人からの回答。:書き込みアップロバートGadsdonから。
[2]


2
よく書かれた投稿をありがとう。これで問題は解決しました。
ChosSimbaOne 2015

4

Workstation 10のパッチを投稿してくださったbudiapに感謝します。そのコードを使用してパッチファイルに適用する必要があることを理解するのに少し時間がかかりました。これは私がvmwareワークステーションフォーラムに投稿したものです。

はい!わかった。Ubuntu15.04、またはwhatever-buntu上のWorkstation 10。Xubuntu 15.04 Kernel 3.19.0-18-genericでこれをテストしました

Workstation 10のパッチ用に新しいパスティー(10215458)を作成しました。

特にWorkstation 10.06の新規インストール後-> VMware-Workstation-Full-10.0.6-2700073.x86_64.bundle

ルートでなければなりませんが、基本的にはコピー/貼り付けできます。

curl http://pastie.org/pastes/10215458/download -o /tmp/vmnet-3.19.patch_ws10

cd /usr/lib/vmware/modules/source
tar -xf vmnet.tar
patch -p0 -i /tmp/vmnet-3.19.patch_ws10
mv vmnet.tar vmnet.tar.SAVED
tar -cf vmnet.tar vmnet-only
rm -r vmnet-only
vmware-modconfig --console --install-all

私がこれに賛成する最初の人だとは信じられません!これは素晴らしい、素晴らしい答えです。(私の提案された編集を気にしないでください。)
Mark E. Haase

1
Ubuntu 15.10のカーネル4.2でこれを試したところ、うまくいきませんでした。WS10を15.10で動作させるためのパッチが見つからなかったため、カーネル3.19を使用する14 LTSに戻す必要がありました。
ティモシーC.クイン

@JavaScriptDudeと同じです。4.4カーネルのパッチ方法は?
Ligemer 2016年

@Ligemer-古いバージョンのvmwareワークステーションをLinuxで動作させることを諦め、virtual boxに切り替えましたが、この決定がうまくいきました。Linuxとvmwareの場合、唯一の実用的な解決策は、最新のWorkstationバージョンのライセンスを購入することです。または、無料のvmwareプレーヤーを使用して、ZFSやBTRFSなどの外部スナップショットメカニズムを考案します。
ティモシーC.クイン

@JavaScriptDudeに感謝-同意。私もバーチャルボックスに行きました。私は幸せなキャンピングカーです:-)うまくいけば、コメントは他のLinuxユーザーを助けることができます。ハッピーコーディング。
Ligemer

2

VMware Workstation 10を実行している場合は、このパッチを適用してカーネル3.19で動作するようにします。

diff -rupN vmnet-only/driver.c vmnet-only-modified/driver.c
--- vmnet-only/driver.c 2015-01-17 09:25:58.000000000 +0800
+++ vmnet-only-modified/driver.c    2015-05-07 14:53:18.272218785 +0800
@@ -265,10 +265,17 @@ LinuxDriver_Ioctl32_Handler(unsigned int
 {
    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 @@ VNetFileOpUnlockedIoctl(struct file    *
    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 -rupN vmnet-only/netif.c vmnet-only-modified/netif.c
--- vmnet-only/netif.c  2015-01-17 09:25:58.000000000 +0800
+++ vmnet-only-modified/netif.c 2015-05-07 14:51:43.326885576 +0800
@@ -149,7 +149,7 @@ VNetNetIf_Create(char *devName,  // IN:
    memcpy(deviceName, devName, sizeof deviceName);
    NULL_TERMINATE_STRING(deviceName);

-   dev = alloc_netdev(sizeof *netIf, deviceName, VNetNetIfSetup);
+   dev = alloc_netdev(sizeof *netIf, deviceName, NET_NAME_UNKNOWN, VNetNetIfSetup);
    if (!dev) {
       retval = -ENOMEM;
       goto out;
diff -rupN vmnet-only/userif.c vmnet-only-modified/userif.c
--- vmnet-only/userif.c 2015-01-17 09:25:58.000000000 +0800
+++ vmnet-only-modified/userif.c    2015-05-07 14:52:32.095595913 +0800
@@ -523,7 +523,13 @@ VNetCopyDatagram(const struct sk_buff *s
       .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
 }

1
こんにちはbudiap。このパッチを適用する方法についての馬鹿ガイドの可能性はありますか?ありがとう。
Simmo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.