VirtualBox VM Start Fail After Update to Ubuntu 22.04

Arif H.
4 min readFeb 7, 2024

--

VM Start fail in VirtualBox

Recently I was doing a software update activity on my linux desktop pc which is based on ubuntu 22.04. Software update is fine, however virtualbox is failing to load kernel module and unable to start any VM machine as show in the above picture. It's asking to run command `/sbin/vboxconfig` which is also failed.

root@lindesk1:~# uname -a
Linux lindesk1 6.5.0-15-generic #15~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Jan 12 18:54:30 UTC 2 x86_64 x86_64 x86_64 GNU/Linux


root@lindesk1:~# /sbin/vboxconfig
vboxdrv.sh: Stopping VirtualBox services.
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.

Found below error message in the log file which is indicating that it is using gcc-12 which is not present in the current operating system.

root@lindesk1:/usr/bin# tail -200 /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-15-generic/build M=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j12 modules
make[1]: warning: -j12 forced in submake: resetting jobserver mode.
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] Error 127
make[1]: *** [Makefile:2037: /tmp/vbox.0] Error 2
make: *** [/tmp/vbox.0/Makefile-footer.gmk:133: vboxdrv] Error 2
root@lindesk1:/usr/bin#
root@lindesk1:~# cd /usr/bin/
root@lindesk1:/usr/bin# ll gcc*
lrwxrwxrwx 1 root root 6 Aug 5 2021 gcc -> gcc-11*
lrwxrwxrwx 1 root root 23 May 13 2023 gcc-11 -> x86_64-linux-gnu-gcc-11*
lrwxrwxrwx 1 root root 22 Mar 26 2020 gcc-7 -> x86_64-linux-gnu-gcc-7*
lrwxrwxrwx 1 root root 22 Jul 19 2022 gcc-9 -> x86_64-linux-gnu-gcc-9*
lrwxrwxrwx 1 root root 9 Aug 5 2021 gcc-ar -> gcc-ar-11*
lrwxrwxrwx 1 root root 26 May 13 2023 gcc-ar-11 -> x86_64-linux-gnu-gcc-ar-11*
lrwxrwxrwx 1 root root 25 Mar 26 2020 gcc-ar-7 -> x86_64-linux-gnu-gcc-ar-7*
lrwxrwxrwx 1 root root 25 Jul 19 2022 gcc-ar-9 -> x86_64-linux-gnu-gcc-ar-9*
lrwxrwxrwx 1 root root 9 Aug 5 2021 gcc-nm -> gcc-nm-11*
lrwxrwxrwx 1 root root 26 May 13 2023 gcc-nm-11 -> x86_64-linux-gnu-gcc-nm-11*
lrwxrwxrwx 1 root root 25 Mar 26 2020 gcc-nm-7 -> x86_64-linux-gnu-gcc-nm-7*
lrwxrwxrwx 1 root root 25 Jul 19 2022 gcc-nm-9 -> x86_64-linux-gnu-gcc-nm-9*
lrwxrwxrwx 1 root root 13 Aug 5 2021 gcc-ranlib -> gcc-ranlib-11*
lrwxrwxrwx 1 root root 30 May 13 2023 gcc-ranlib-11 -> x86_64-linux-gnu-gcc-ranlib-11*
lrwxrwxrwx 1 root root 29 Mar 26 2020 gcc-ranlib-7 -> x86_64-linux-gnu-gcc-ranlib-7*
lrwxrwxrwx 1 root root 29 Jul 19 2022 gcc-ranlib-9 -> x86_64-linux-gnu-gcc-ranlib-9*
root@lindesk1:/usr/bin#

Followed below procedure to install the gcc-12 in ubuntu 22.04.

# Install gcc-12
sudo apt install gcc-12 -y

# Recreate softlink to point gcc-12
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-12 /usr/bin/gcc


# check gcc version
root@lindesk1:/usr/bin# gcc --version
gcc (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Now rebuild the vboxconfig.

root@lindesk1:/usr/bin# sudo /sbin/vboxconfig 
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
root@lindesk1:/usr/bin#

However, If you are trying this procedure with VirtualBox 6, it may not work and require you to install additional packages.

sudo apt install --reinstall virtualbox-dkms && sudo apt install libelf-dev

Now VirtualBox is able to start VM as before.

--

--

Responses (1)