セキュアブートを維持しながら、Ubuntu 16.04にVirtualBoxをインストールしようとしています。 Synapticを介してインストールすると、SecureBootを削除するように求められました。No
と言いました。
buntu 16.04へのアップグレード後に「vboxdrv」をロードできませんでした(セキュアブートを維持したい) および https://stegard.net/2016/10/virtualbox -secure-boot-ubuntu-fail / どちらもほぼ同じです(2番目のリンクのように/ rootディレクトリにMOKファイルを残しました)。すべて正常に動作するようで、再起動し、パスワードを再入力して、再起動しました。すべて良い
しかし、その後、VirtualBoxを使用しようとしても機能しません。ターミナルから実行すると、次のようになります:
WARNING: The character device /dev/vboxdrv does not exist.
Please install the virtualbox-dkms package and the appropriate
headers, most likely linux-headers-generic.
You will not be able to start VMs until this problem is fixed.
ただし、これらの2つのパッケージは既にインストールされており、最新の状態です。
他の投稿の一番上の回答のコメントでは、これらの指示に従う前にvirtualbox-dkms
を再インストールするように言われています。試しましたが、同じ結果になりました。
私はここで答えを試しました: VirtualBoxのインストールの問題 セキュアブートを無効にするかどうかを尋ねるプロンプトが再び表示され、No
と言います。
modprobe
を実行すると、次のようになります:modprobe: ERROR: could not insert 'vboxdrv': Required key not available
SecureBootを有効にした状態でVirtualBoxを動作させる方法についてのアイデア(削除するように言わないでください...)
ありがとう
これらの手順のいずれも試していません。ただし、これは別の方法で行いますが、これはvery退屈な方法です。私が書いた大きなページを参照しているので、この説明はそれよりも簡単に見えるでしょう。私の手順は次のとおりです。
modprobe
を明示的に使用する必要があります(vboxdrv
、vboxnetflt
、vboxpci
、およびvboxnetadp
) 。便宜上、1つのコマンドで手順2と3を実行するスクリプトを作成しました。 sign-vbox
と呼びます。ここにあります:
#!/bin/bash
# sign-vbox script, copyright (c) 2017 by Rod Smith
# Distributed under the terms of the GPLv3
if [ "$#" -ne 1 ] && [ "$#" -ne 0 ]; then
echo "Usage: $0 [ {kernel-version} ]"
exit 1
fi
if [ "$#" == 0 ]; then
kernel_version=$(uname -r)
else
kernel_version="$1"
fi
sign_file=$(find /usr/src/ -name sign-file | tail -n 1)
if [ -z $sign_file ]; then
echo "Can't find the sign-file binary! Exiting!"
exit 1
else
path_to_modules="/lib/modules/$kernel_version/updates/dkms"
if [ ! -f $path_to_modules/vboxdrv.ko ]; then
echo "Could not find $path_to_modules/vboxdrv.ko!"
echo "Is the kernel version correct?"
exit 1
fi
echo "Signing modules for $kernel_version"
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxdrv.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxnetadp.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxnetflt.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxpci.ko
modprobe vboxdrv
modprobe vboxnetflt
modprobe vboxpci
modprobe vboxnetadp
echo "Loaded vbox modules:"
lsmod | grep vbox
fi
このスクリプトを使用するには、名前を入力するだけです。現在実行中のカーネルに関連付けられているVirtualBoxモジュールに署名します。カーネルバージョン番号を渡すと、そのカーネルバージョンに関連付けられているカーネルに署名する必要がありますが、カーネルバージョン番号の指定にエラーの余地はありません。 (カーネルが実行されている場合にuname -r
が返すのと同じ形式を想定しています。)
スクリプトは、refind_local.key
で秘密(refind_local.cer
)および公開(/etc/refind.d/keys/
)キーを見つけることを期待していることに注意してください。 rEFIndを使用してローカルキーを使用しない限り、システムの場所を変更する必要があります。秘密鍵ファイルは、0400(-r--------
)許可など、できる限り安全でなければなりません。ディレクトリ自体へのアクセスを制限することも役立ちます。さらに良いのは、このコマンドを実行するときにのみプラグインするUSBフラッシュドライブに置くことです。
また、私は自分の個人的な使用のためにこのスクリプトを書きました。特に予期しない方法で使用される場合は、おそらくバグがあります。確かに、必要なカーネルソースファイルがインストールされていないと、かなりひどく失敗します。
このスクリプトは、生成したキーファイル(MOKにロードしたパブリックファイル)を指定した場合、使用しようとしたMOKベースのメソッドで機能すると考えられます。ただし、これを約束することはできません。もちろん、あなたの問題は、不適切に署名されたカーネルモジュールまたはShim/MOK側の問題が原因である可能性があります。このスクリプトを使用すると、カーネルモジュールが適切に署名されていない場合にのみ役立ちます。