pci-passthrough 확장을 사용하여 내 컴퓨터에서 virtualbox를 작동시키려고 합니다. 가상 머신을 실행하려고 하면 다음과 같은 오류 메시지가 나타납니다.
Kernel driver not installed (rc=-1908)
[message asking me to install the vboxdrv kernel driver
by executing /sbin/vboxconfig as root]
그래서 나는 그렇게 했고 이것을 얻었습니다:
vboxdrv.sh: Stopping VirtualBox services.
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를 보면 설치 시 새 항목이 추가되지 않았습니다.
로그 파일을 보면 마지막 모듈이 실패했습니다.
Building the main VirtualBox module.
Building the net filter module.
Building the net adaptor module.
Building the PCI pass-through module.
이는 /usr/lib/virtualbox/vboxdrv.sh
다음의 호출 에서 실패한 코드임을 의미합니다 /sbin/vboxconfig
.
log "Building the PCI pass-through module."
if ! myerr=`$BUILDINTMP \
--use-module-symvers /tmp/vboxdrv-Module.symvers \
--module-source "$MODULE_SRC/vboxpci" \
--no-print-directory install 2>&1`; then
log "Error building the module:"
module_build_log "$myerr"
failure "Look at $LOG to find out what went wrong"
fi
$BUILDINTMP
실행 파일을 가리키는/usr/share/virtualbox/src/vboxhost/build_in_tmp
이것이 내 문제 해결의 범위인데, 다음에 무엇을 해야 할지 모르겠습니다.
몇가지 정보:
- IOMMU/VT-D 활성화됨
- 커널 버전은
4.10.0-38-generic
- 운영 체제는 Linux Mint 18.3입니다.
- 내가 아는 한 커널 헤더가 설치되어 있다는 것은 경로가
/lib/modules/4.10.0-38-generic/build/include/linux
존재하고 .h 파일과 기타 하위 디렉터리로 가득 차 있음 을 의미합니다. - Virtualbox 버전은 5.2.20입니다.
- VBox에 PCI 패스스루 확장을 설치하면 설치에 성공했다는 메시지가 나타납니다.
답변1
질문 댓글을 보면 다음과 같습니다.
modprobe: ERROR: could not insert 'vboxdrv': Required key not available
이는 모듈이 빌드되었음을 표시하지만보안 부팅 요구 사항을 충족하도록 서명되지 않았습니다.
가장 간단한 해결책은 보안 부팅을 비활성화하는 것입니다. 이는 VirtualBox 5.2의 경우 특히 그렇습니다.
- DKMS 대신 자체 모듈 빌드 시스템을 사용하며,
- 내가 아는 한, 모듈 빌드 프로세스에 모듈 서명 명령을 추가하는 도구가 없습니다.
(저는 VirtualBox의 향후 버전이 DKMS를 사용하도록 전환하거나 적어도 사용자 정의 스크립트를 VirtualBox 모듈 설치 프로세스에 연결할 수 있는 후크를 제공하기를 바랍니다.)
이 문제를 해결하는 "올바른" 방법은 자체 보안 부팅 키를 생성하고 이를 사용하여 시스템 펌웨어에서 보안 부팅을 완전히 제어하거나 이를 시스템 소유자 키(부트로더 수준 확장) 보안 부팅으로 등록하는 것입니다. 불가능하거나 너무 어렵습니다.)
이러한 자동화는 보안 부팅 우회 장치로 간주되어 완전히 자동화될 수 없습니다.UEFI 해지 목록UEFI 포럼에서 제공. 이 목록은 새로운 UEFI 펌웨어 버전에 포함되어 있습니다. 다행히 등록은 일회성 프로세스입니다.
보안 부팅에 키를 등록한 후 해당 키를 사용하여 모듈이 시스템에서 승인되도록 서명할 수 있습니다. 커널이나 VirtualBox를 업데이트할 때마다 모듈 서명을 반복해야 합니다.
우분투 문서에 따르면,sudo update-secureboot-policy --new-key
적절한 키를 생성 한 다음 이를 MOK(머신 소유자 키)로 등록하고 재부팅할 수 있어야 합니다 sudo update-secureboot-policy --enroll-key
. 재부팅 시 shim.efi
MokManager 프로그램은 자동으로 시작되어야 하며, 시작 시에만 입력이 다른 곳이 아닌 사용자로부터 온 것인지 확인할 수 있기 때문에 시스템 소유자 키 등록을 확인하라는 메시지가 표시됩니다. 이는 보안 부팅 키의 사용자 정의가 시스템 소유자/관리자의 명시적인 제어 하에 수행되도록 하기 위해 수행됩니다.
운영 체제를 다시 설치해도 UEFI 펌웨어 변수에서 MOK가 제거되지는 않지만 UEFI 펌웨어를 업그레이드하거나 모든 UEFI 펌웨어 설정을 기본값으로 재설정하면 제거될 수 있습니다. 이 경우에는 재등록이 필요합니다.
MOK가 성공적으로 등록되면 키는 펌웨어에 의해 자동으로 커널에 전달되어야 하며 모듈 서명에 사용될 수 있습니다. VirtualBox 5.2는 모듈을 /lib/modules/<kernel version number>/misc/
디렉터리에 설치합니다. 거기에서 모듈에 서명하려면 다음을 사용할 수 있습니다.kmodsign 명령. 예를 들어, vboxdrv.ko
모듈에 서명하려면 다음을 수행하십시오 .
cd /lib/modules/$(uname -r)/misc
kmodsign sha512 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der vboxdrv.ko
이 디렉터리에 있는 각 모듈에 대해 이 작업을 반복합니다. vboxdrv.ko
, vboxnetadp.ko
, vboxnetflt.ko
및 4개 이상이 있어야 합니다 vboxpci.ko
.