コマンドラインから起動しようとすると以下のようなメッセージが表示される。
$ WARNING: The vboxdrv kernel module is not loaded. Either there is no module available for the current kernel (6.5.0-14-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.カーネルモジュールがロードできないようだ。
そういえば、先日カーネルの更新があった。それが関連しているのかな?
"sudo /sbin/vboxconfig"で、カーネルモジュールを再コンパイルしてインストールせよと書いてあるのでやってみたら、
$ sudo /sbin/vboxconfig [sudo] shin のパスワード: vboxdrv.sh: Stopping VirtualBox services. depmod: WARNING: could not open modules.order at /lib/modules/6.2.0-37-generic: No such file or directory depmod: WARNING: could not open modules.builtin at /lib/modules/6.2.0-37-generic: No such file or directory vboxdrv.sh: Starting VirtualBox services. vboxdrv.sh: Building VirtualBox kernel modules. vboxdrv.sh: failed: Look at /var/log/vbox-setup.log to find out what went wrong. There were problems setting up VirtualBox. To re-start the set-up process, run /sbin/vboxconfig as root. If your system is using EFI Secure Boot you may 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.失敗した。
何が間違っているかを見つけるために、"/var/log/vbox-setup.log"を参照せよとある。
見てみると、
$ cat /var/log/vbox-setup.log Building the main VirtualBox module. Error building the module: make V=1 CONFIG_MODULE_SIG= CONFIG_MODULE_SIG_ALL= -C /lib/modules/6.5.0-14-generic/build M=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j8 modules make[1]: 警告: 副次 make で -j8 を強制指定しました: jobserver モードをリセットします. warning: the compiler differs from the one used to build the kernel The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0 You are using: make -f ./scripts/Makefile.build obj=/tmp/vbox.0 need-builtin=1 need-modorder=1 # cmd_mod /tmp/vbox.0/vboxdrv.mod printf '%s ' linux/SUPDrv-linux.o SUPDrv.o SUPDrvGip.o SUPDrvSem.o SUPDrvTracer.o SUPLibAll.o common/string/strformatrt.o combined-agnostic1.o combined-agnostic2.o combined-os-specific.o | awk '!x[$0]++ { print("/tmp/vbox.0/"$0) }' > /tmp/vbox.0/vboxdrv.mod # CC [M] /tmp/vbox.0/linux/SUPDrv-linux.o gcc-12 -Wp,-MMD,/tmp/vbox.0/linux/.SUPDrv-linux.o.d -nostdinc -I./arch/x86/include -I./arch/x86/include/generated -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -I./ubuntu/include -include ./include/linux/compiler_types.h -D__KERNEL__ -std=gnu11 -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -Wall -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -m64 -mno-80387 -mtune=generic -mno-red-zone -mcmodel=kernel -Wno-sign-compare -fno-asynchronous-unwind-tables -mfunction-return=thunk-extern -fno-jump-tables -mharden-sls=all -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -Wframe-larger-than=1024 -fstack-protector-strong -Wno-main -fno-omit-frame-pointer -fno-optimize-sibling-calls -ftrivial-auto-var-init=zero -fzero-call-used-regs=used-gpr -pg -mrecord-mcount -falign-functions=16 -Wvla -Wno-pointer-sign -Wno-maybe-uninitialized -Wno-array-bounds -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -g -gdwarf-5 -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -fno-omit-frame-pointer -fno-pie -Wno-declaration-after-statement -I./include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -D__KERNEL__ -DMODULE -DRT_WITHOUT_PRAGMA_ONCE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DSUPDRV_WITH_RELEASE_LOGGER -DVBOX_WITHOUT_EFLAGS_AC_SET_IN_VBOXDRV -DIPRT_WITHOUT_EFLAGS_AC_PRESERVING -DVBOX_WITH_64_BITS_GUESTS -DCONFIG_VBOXDRV_AS_MISC -DRT_ARCH_AMD64 -fsanitize=bounds-strict -fsanitize=shift -fsanitize=bool -fsanitize=enum -DMODULE -DKBUILD_BASENAME='"SUPDrv_linux"' -DKBUILD_MODNAME='"vboxdrv"' -D__KBUILD_MODNAME=kmod_vboxdrv -c -o /tmp/vbox.0/linux/SUPDrv-linux.o /tmp/vbox.0/linux/SUPDrv-linux.c ; ./tools/objtool/objtool --hacks=jump_label --hacks=noinstr --hacks=skylake --retpoline --rethunk --sls --stackval --static-call --uaccess --prefix=16 --module /tmp/vbox.0/linux/SUPDrv-linux.o /bin/sh: 1: gcc-12: not found make[2]: *** [scripts/Makefile.build:251: /tmp/vbox.0/linux/SUPDrv-linux.o] エラー 127 make[2]: *** 未完了のジョブを待っています.... make[1]: *** [Makefile:2037: /tmp/vbox.0] エラー 2 make: *** [/tmp/vbox.0/Makefile-footer.gmk:133: vboxdrv] エラー 2ビルドのために、gcc-12を呼び出している。
かなり新しいgccだ。
自分のUbuntu環境には、gcc-11は入っているが、gcc-12は入っていなかった。
Retpolineなどはコンパイラで対応するので、新しいコンパイラが推薦されているのかもしれない。
gcc-12系も、gcc-12.3まで進んでおり、そろそろ安定しているだろう。
"apt-cache search gcc-12"で探すと、Ubuntu 22.04用パッケージもある。
無理にgcc-11でビルドするのではなく、gcc-12を使うことにした。
以下のようにしてインストールした。
$ sudo apt-get install --install-suggests gcc-12--install-suggestsは、「提案パッケージ」のインストールを要求するものだ。
不要かもしれないが、ロケールパッケージなども入るので指定しておいた。
これで、vboxconfigを実行すると、
$ sudo /sbin/vboxconfig vboxdrv.sh: Stopping VirtualBox services. vboxdrv.sh: Starting VirtualBox services. vboxdrv.sh: Building VirtualBox kernel modules. $再コンパイルとインストールに成功。
VirtualBox を起動できるようになった。
0 件のコメント:
コメントを投稿