제목을 어떻게 지어야 할지 애매한 상황인데, 어쨋든 내가 Ubuntu 16.04에서 Virtualbox를 설치하고 나서 겪은 문제를 해결한 비교적 짧은 삽질기이다.

 

일단 환경 자체는 일반 데스크탑 PC에 iptime wirelss NIC(무선랜카드) 드라이버를 설치하면서 커스텀 MOK.priv / MOK.der라는 걸 만들어서 커널 모듈들을 해당 키로 서명을 했었는데 그 상황 때문에 생긴 문제이다.

 

https://eine.tistory.com/entry/Ubuntu-1804%EC%97%90%EC%84%9C-iptime-A2000UA-Wireless-LAN-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84-%EC%9E%A1%EA%B8%B0%EC%82%BD%EC%A7%88%EA%B8%B0

 

Ubuntu 18.04에서 iptime A2000UA Wireless-LAN 드라이버 잡기(삽질기)

본 방법은 제가 수행한 방법으로, 환경마다 조금씩 방식은 다를 수 있습니다. 수행 환경과 버전 Desktop Ubuntu 18.04 4.15.0-52-generic iptime A2000UA Wirelss Lan 카드 USB 버전 일단 그냥 USB를 꼽았을 때는..

eine.tistory.com

위 글에서 한 것 과 비슷하게 iptime A2000UA를 설치를 해 놓은 상태이다. 위 글은 Ubuntu 18.04 기준이긴 한데 이번에는 Ubuntu 16.04 환경이다.

 

Virtualbox 공식 홈페이지에서 Linux distribution에서 알맞은 데비안 패키지 파일을 받아서 sudo dpkg -i virtualbox.deb 명령어로 설치를 했었다.

이제 Win키를 누른 뒤 virtualbox를 실행하면 그냥 잘 될 줄 알았으나 그렇진 않았다.

일단 걍 실행하고 Vbox 이미지를 import한 뒤 실행을 하려니 아래와 같은 메시지가 나왔다.

 

Effective UID is not root (euid=1000 egid=1000 uid=1000 gid=1000) (rc=-10)
Please try reinstalling VirtualBox.
where: SUPR3HardenedMain what: 2 VERR_PERMISSION_DENIED(-10) - Permission denied.

 

 

뭐 대충 이런 메시지가 나오길래, root로 재설치를 하라는데, sudo로 설치했으니 root로 설치된게 맞다.

뭔 소리지 싶어서, 터미널에서 sudo virtualbox로 다시 실행해 보았다.

 

root로 돌린 virtualbox에서 똑같이 이미지 import를 다시 하고 실행을 시키려니, 이번엔 좀 다른 메시지가 나왔다.

Kernel driver not installed (rc=-1908)
The VirtualBox Linux kernel driver is either not loaded or not set up correctly. Please try setting it up again by executing

'/sbin/vboxconfig'

as root.

If your system has EFI Securie Boot enabled you may also need to sign the kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load them. Please see your Linux system's documentation for more information.

where: sublibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED(-1908) - The support driver is not installed. On linux, open returned ENOENT.

뭐 커널드라이버가 설치가 안됬니 뭐니 하면서 vboxconfig를 실행하라는데 찾아보니 나한테는 없는 프로그램이었다.

대충 구글링 해보니 스택오버플로에 아래와 같은 명령어로 설치를 하란다.

 

$ sudo apt install --reinstall -y virtualbox-dkms

 

치니까 apt가 apt-get -f install을 치라고 하더라. 그래서 그냥 쳤다.

 

$ sudo apt-get -f install

 

이제 vboxconfig라는 바이너리가 위에서 말하는 경로에 생겼다. sbin에 있는 바이너리니 당연 sudo 넣어서 실행을 해야겠다 싶었다.

 

$ sudo vboxconfig

 

근데 뭐 좀 되는 것 같더니만 fail을 내뿜는다. dmesg로 확인을 해보란다.

그래서 dmesg로 확인해보니, modprobe에서 에러가 났으며 해당 드라이버 서명이 제대로 안됬다고 한다.

modprobe는 커널 드라이버 로드하는 명령어이다.

 

맨 위에서 말한것 처럼 무선랜카드 드라이버 빌드해서 적제할려고 MOK.der라는 키들을 새로 만들었는데, 아마 이 키로 서명된게 아니라서 그런 것 같다.

 

대충 컨텍스트를 보니 vboxconfig를 실행하면 내 리눅스 시스템에 맞는 vbox용 드라이버를 빌드해서 사이닝 한 뒤 load까지 해주는데 내가 이 커널에서 신뢰하는 키를 새로 만들어버려서 등록을 했으니 signing이 제대로 안되는 것이다.

 

그래서 vboxconfig 로그메시지를 대충 보니, vboxdrv.sh라는 파일에서 빌드하고 서명하고 그런 동작들을 하는 것 같더라.

 

경로를 찾아보니 /usr/lib/virtualbox/vboxdrv.sh 이었다.

 

파일을 열어보자.

kmodsign sha512 /var/lib/shim-signed/mok/MOK.priv \
/var/lib/shim-signed/mok/MOK.der \
/lib/modules/"$KERN_VER"/misc/"$i".ko

그냥 쉘 스크립트 파일이고, setup()이라는 함수 쪽을 보니, 506~508라인이 kmodsign이라는 명령어로 빌드된 모듈들을 서명해주는 것 같았다.

저기서 MOK.priv와 MOK.der파일의 경로만 내 키의 경로로 바꾸어주고 다시 실행해보았다.

vscode로 실행해서 저장을 해 주었다. vscode가 기특한게 저장할때 permission denied가 뜨니까 sudo로 할 건지 아래에 창이 따로 떠서 누르면 password 인증으로 sudo save가 되게 되어있다.

 

그리고 다시 vboxconfig를 실행해보았다.

옳지! 잘된다. Fin!

 

나랑 비슷한 상황에 겪는 사람은 별로 없겠지만, 그래도 혹시모르는 누군가에게 내 글이 도움이 되기를 하고자 하는 마음에 포스팅을 작성한다.

+ Recent posts