web-dev-qa-db-ja.com

vboxdrv.sh:失敗:modprobe vboxdrvが失敗しました。 「dmesg」を使用して理由を確認してください

UbuntuラップトップでVirtualBoxを実行すると問題が発生します。私のラップトップはデュアルブートで、実行中(Windows 10-私は長年使用していなかったと思います)、およびUbuntu 16.0.4 LTSです。

ラップトップのBIOS設定でセキュアブートが有効になっています。

ここには同様の質問、特に次の2つの質問が投稿されていることを認識しています。

これらの2つの質問の回答セクションに記載されているすべての指示に従いましたが、問題は未解決のままです。

Virtualboxを実行しようとしたときのコンソール出力は次のとおりです。

me@YOURBOX:~$ virtualbox
WARNING: The vboxdrv kernel module is not loaded. Either there is no module
         available for the current kernel (4.4.0-47-generic) or it failed to
         load. Please recompile the kernel module and install it by

           Sudo /sbin/vboxconfig

         You will not be able to start VMs until this problem is fixed.

提案されたようにrun/sbin/vboxconfigしたときのコンソール出力は次のとおりです。

me@YOURBOX:~$ Sudo /sbin/vboxconfig  
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.

dmesgの出力の末尾は次のとおりです。

[   44.319682] audit: type=1400 audit(1491313982.374:11): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince-previewer" pid=705 comm="apparmor_parser"
[   45.041433] cgroup: new mount options do not match the existing superblock, will be ignored
[   59.682936] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   59.697820] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   59.702008] IPv6: ADDRCONF(NETDEV_UP): enp2s0f0: link is not ready
[   60.267000] IPv6: ADDRCONF(NETDEV_UP): enp2s0f0: link is not ready
[   62.473044] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   70.681706] audit_printk_skb: 60 callbacks suppressed
[   70.681709] audit: type=1400 audit(1491314008.734:32): apparmor="STATUS" operation="profile_load" profile="unconfined" name="docker-default" pid=2009 comm="apparmor_parser"
[   70.850936] aufs 4.x-rcN-20160111
[   75.407218] bridge: automatic filtering via arp/ip/ip6tables has been deprecated. Update your scripts to load br_netfilter if you need this.
[   75.408555] Bridge firewalling registered
[   75.427172] nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
[   75.848416] ip_tables: (C) 2000-2006 Netfilter Core Team
[   76.703232] Initializing XFRM netlink socket
[   77.060003] IPv6: ADDRCONF(NETDEV_UP): docker0: link is not ready
[   80.101042] aufs au_opts_verify:1597:dockerd[1402]: dirperm1 breaks the protection by the permission bits on the lower branch
[  113.895236] wlp3s0: authenticate with 84:16:f9:77:e1:54
[  113.910483] wlp3s0: send auth to 84:16:f9:77:e1:54 (try 1/3)
[  113.912712] wlp3s0: authenticated
[  113.915101] wlp3s0: associate with 84:16:f9:77:e1:54 (try 1/3)
[  113.919397] wlp3s0: RX AssocResp from 84:16:f9:77:e1:54 (capab=0x1411 status=0 aid=1)
[  113.919516] wlp3s0: associated
[  113.919559] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready

今、私はうそをつくつもりはない-私は全く知らないdmesgがちょうど吐き出したもの-そして、私が知る限り、ないログ出力のエラーメッセージ-状況をさらに苛立たせます。

Ubuntu 16.0.4 LTSを実行しているラップトップにVirtualBox 5.xをインストールしたことがありますが、BIOSでセキュアブートが有効になっています? -はいの場合、解決策は何ですか。 ???!

多くの人がこの問題を抱えています-数年前まで遡ります。誰にも解決策がないように見えるのは非常に奇妙です-???

51

VirtualBox +セキュアブート+ Ubuntu =失敗

問題は、すべてのカーネルモジュールにUEFIシステムが信頼するキーで署名する必要があることです。そうしないと、ロードが失敗します。 Ubuntuはサードパーティのvbox *カーネルモジュールに署名せず、virtualboxパッケージのインストール時にセキュアブートを無効にするオプションをユーザーに提供します。それはできましたが、マシンが起動するたびに迷惑な「Booting in insecure mode」というメッセージが表示され、デュアルブートWindows 10インストールも機能しませんでした。

BIOS A18を搭載したDell Latitude E7440でのUbuntu 16.04、およびWindows 10のデュアルブートインストール

この問題を解決するために私が使用した主な情報源は、Fedora/Redhatに特に当てはまります。 http://gorka.eguileor.com/vbox-vmware-in-secureboot-linux-2016-update /

関連するUbuntuの質問: buntu 16.04へのアップグレード後に「vboxdrv」をロードできませんでした(安全なブートを維持したい)

Ubuntu/Debian専用に動作させる手順

  1. Virtualboxパッケージをインストールします。インストールがセキュアブートが有効になっていることを検出した場合、手元に問題が表示され、セキュアブートを無効にするオプションが提供されます。 「いいえ」を選択します。

  2. カーネルモジュールに署名するために使用される個人用のパブリック/プライベートRSAキーペアを作成します。ルートアカウントとディレクトリ/ root/module-signing /を使用して、カーネルモジュールの署名に関連するすべてのものを保存することにしました。

    $ Sudo -i
    # mkdir /root/module-signing
    # cd /root/module-signing
    # openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=YOUR_NAME/"
    [...]
    # chmod 600 MOK.priv
    
  3. MOK(「マシン所有者キー」)ユーティリティを使用して公開キーをインポートし、システムが信頼できるようにします。これは2段階のプロセスで、最初にキーがインポートされ、次にマシンを次回起動するときに登録する必要があります。単純なパスワードで十分です。一時的に使用するためだけです。

    # mokutil --import /root/module-signing/MOK.der
    input password:
    input password again:
    
  4. マシンを再起動します。ブートローダーが起動すると、MOKマネージャーEFIユーティリティが自動的に起動します。手順3で指定されたパスワードの一部を要求します。「Enroll MOK」を選択すると、手順3でインポートされたキーが表示されます。登録手順を完了し、ブートを続行します。 Linuxカーネルは、ロードされたキーを記録します。コマンドdmesg|grep 'EFI: Loaded cert'を使用すると、独自のキーを表示できます。

  5. カーネルビルドファイルに同梱されている署名ユーティリティを使用して、手順2で生成したプライベートMOKキーを使用してすべてのVirtualBoxモジュールに署名します。これを小さなスクリプト/root/module-signing/sign-vbox-modulesに入れて、新しいカーネルがインストールされたときに簡単に実行できるようにします定期的な更新の一部として:

    #!/bin/bash
    
    for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
      echo "Signing $modfile"
      /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \
                                    /root/module-signing/MOK.priv \
                                    /root/module-signing/MOK.der "$modfile"
    done
    

    その後:

    # chmod 700 /root/module-signing/sign-vbox-modules
    
  6. 手順5のスクリプトをルートとして実行します。新しいカーネルアップデートがインストールされるたびに、署名スクリプトを実行する必要があります。これにより、サードパーティのVirtualBoxモジュールが再構築されるためです。新しいカーネルは、modinfo -nuname -rに依存して、どのカーネルバージョンに署名するかを判断するため、新しいカーネルが起動した後にのみスクリプトを使用してください。

  7. VboxdrvモジュールをロードしてVirtualBoxを起動します。

    # modprobe vboxdrv
    

この手順は、必要に応じて、nvidiaグラフィックドライバーなどの他のサードパーティカーネルモジュールに署名するためにも使用できます。 (私はそれを自分でテストしていません。)

注:上記の答えは、ØyvindStegardのブログ投稿、 VirtualBox + Secure Boot + Ubuntu = fail から完全に引用されました。

58
Android Dev

上記の答えはおそらくうまくいきますが、より簡単な時間を望むなら:

私はそれを解決することができました

bIOSから起動し、[詳細](f7)> [起動]> [セキュアブート]まで下にスクロール> [Windows EUFIモード]を[他のOS]に変更

私のvirtualboxは今完璧に動作します。

12