NixOS / nixpkgs

Nix Packages collection & NixOS
MIT License
17.44k stars 13.65k forks source link

VirtualBox kernel driver fail to build #74916

Closed lambdafu closed 4 years ago

lambdafu commented 4 years ago

Issue description

I can't install virtualbox, because the kernel drivers fail to build (see below). Googeling around, I found something mildly relevant (the cause seems to be a fix for a dual build error by the OpenSUSE maintainer, see here).

Steps to reproduce

Set virtualisation.virtualbox.host.enable = true.

Technical details

$ nix run nixpkgs.nix-info -c nix-info -m
 - system: `"x86_64-linux"`
 - host os: `Linux 5.4.1, NixOS, 19.09.1476.72a2ced2523 (Loris)`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.3`
 - channels(root): `"nixos-19.09.1476.72a2ced2523"`
 - channels(marcus): `""`
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos`

Log

building '/nix/store/qv6axsva9a3yqvh9cpbvwlfm0s67l4j5-virtualbox-modules-6.0.12-5.4.1.drv'...
unpacking sources
unpacking source archive /nix/store/a6k306ffjpmh7n06zfywsigja45dxlfz-virtualbox-6.0.12-modsrc
source root is virtualbox-6.0.12-modsrc
patching sources
configuring
no configure script, doing nothing
building
build flags: -j8 -l8 SHELL=/nix/store/506nnycf7nk22x7n07mjjjl2g8nifpda-bash-4.4-p23/bin/bash INSTALL_MOD_PATH=\$\(out\)
=== Building 'vboxdrv' module ===
make[1]: Entering directory '/build/virtualbox-6.0.12-modsrc/vboxdrv'
make V= CONFIG_MODULE_SIG= -C /nix/store/wjclfa70y2dcavx9pwg3ndqs2vk36iya-linux-5.4.1-dev/lib/modules/5.4.1/build M=/build/virtualbox-6.0.12-modsrc/vboxdrv SRCROOT=/build/virtualbox-6.0.12-modsrc/vboxdrv -j8 modules
make[2]: Entering directory '/build/virtualbox-6.0.12-modsrc/vboxdrv'
make[2]: warning: -jN forced in submake: disabling jobserver mode.
  CC [M]  /build/virtualbox-6.0.12-modsrc/vboxdrv/linux/SUPDrv-linux.o
  CC [M]  /build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrv.o
  CC [M]  /build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.o
  CC [M]  /build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvSem.o
  CC [M]  /build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvTracer.o
  CC [M]  /build/virtualbox-6.0.12-modsrc/vboxdrv/SUPLibAll.o
  CC [M]  /build/virtualbox-6.0.12-modsrc/vboxdrv/r0drv/alloc-r0drv.o
  CC [M]  /build/virtualbox-6.0.12-modsrc/vboxdrv/r0drv/initterm-r0drv.o
In file included from /nix/store/wjclfa70y2dcavx9pwg3ndqs2vk36iya-linux-5.4.1-dev/lib/modules/5.4.1/source/include/linux/compiler_types.h:59,
                 from <command-line>:
/build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.c: In function 'supdrvTscDeltaThread':
/nix/store/wjclfa70y2dcavx9pwg3ndqs2vk36iya-linux-5.4.1-dev/lib/modules/5.4.1/source/include/linux/compiler_attributes.h:200:41: error: expected ')' before '__attribute__'
 # define fallthrough                    __attribute__((__fallthrough__))
                                         ^~~~~~~~~~~~~
/build/virtualbox-6.0.12-modsrc/vboxdrv/include/iprt/cdefs.h:1169:48: note: in expansion of macro 'fallthrough'
 # define RT_FALL_THROUGH()      __attribute__((fallthrough))
                                                ^~~~~~~~~~~
/build/virtualbox-6.0.12-modsrc/vboxdrv/include/iprt/cdefs.h:1176:33: note: in expansion of macro 'RT_FALL_THROUGH'
 #define RT_FALL_THRU()          RT_FALL_THROUGH()
                                 ^~~~~~~~~~~~~~~
/build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.c:4192:17: note: in expansion of macro 'RT_FALL_THRU'
                 RT_FALL_THRU();
                 ^~~~~~~~~~~~
In file included from /build/virtualbox-6.0.12-modsrc/vboxdrv/include/VBox/cdefs.h:32,
                 from /build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvInternal.h:37,
                 from /build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.c:33:
/build/virtualbox-6.0.12-modsrc/vboxdrv/include/iprt/cdefs.h:1169:60: error: expected identifier or '(' before ')' token
 # define RT_FALL_THROUGH()      __attribute__((fallthrough))
                                                            ^
/build/virtualbox-6.0.12-modsrc/vboxdrv/include/iprt/cdefs.h:1176:33: note: in expansion of macro 'RT_FALL_THROUGH'
 #define RT_FALL_THRU()          RT_FALL_THROUGH()
                                 ^~~~~~~~~~~~~~~
/build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.c:4192:17: note: in expansion of macro 'RT_FALL_THRU'
                 RT_FALL_THRU();
                 ^~~~~~~~~~~~
In file included from /nix/store/wjclfa70y2dcavx9pwg3ndqs2vk36iya-linux-5.4.1-dev/lib/modules/5.4.1/source/include/linux/compiler_types.h:59,
                 from <command-line>:
/nix/store/wjclfa70y2dcavx9pwg3ndqs2vk36iya-linux-5.4.1-dev/lib/modules/5.4.1/source/include/linux/compiler_attributes.h:200:41: error: expected ')' before '__attribute__'
 # define fallthrough                    __attribute__((__fallthrough__))
                                         ^~~~~~~~~~~~~
/build/virtualbox-6.0.12-modsrc/vboxdrv/include/iprt/cdefs.h:1169:48: note: in expansion of macro 'fallthrough'
 # define RT_FALL_THROUGH()      __attribute__((fallthrough))
                                                ^~~~~~~~~~~
/build/virtualbox-6.0.12-modsrc/vboxdrv/include/iprt/cdefs.h:1176:33: note: in expansion of macro 'RT_FALL_THROUGH'
 #define RT_FALL_THRU()          RT_FALL_THROUGH()
                                 ^~~~~~~~~~~~~~~
/build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.c:4221:17: note: in expansion of macro 'RT_FALL_THRU'
                 RT_FALL_THRU();
                 ^~~~~~~~~~~~
In file included from /build/virtualbox-6.0.12-modsrc/vboxdrv/include/VBox/cdefs.h:32,
                 from /build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvInternal.h:37,
                 from /build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.c:33:
/build/virtualbox-6.0.12-modsrc/vboxdrv/include/iprt/cdefs.h:1169:60: error: expected identifier or '(' before ')' token
 # define RT_FALL_THROUGH()      __attribute__((fallthrough))
                                                            ^
/build/virtualbox-6.0.12-modsrc/vboxdrv/include/iprt/cdefs.h:1176:33: note: in expansion of macro 'RT_FALL_THROUGH'
 #define RT_FALL_THRU()          RT_FALL_THROUGH()
                                 ^~~~~~~~~~~~~~~
/build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.c:4221:17: note: in expansion of macro 'RT_FALL_THRU'
                 RT_FALL_THRU();
                 ^~~~~~~~~~~~
/build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.c:4190:20: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 if (RT_FAILURE(rc))
                    ^
/build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.c:4195:13: note: here
             case kTscDeltaThreadState_Listening:
             ^~~~
In file included from <command-line>:
/build/virtualbox-6.0.12-modsrc/vboxdrv/include/VBox/SUPDrvMangling.h:35:30: warning: this statement may fall through [-Wimplicit-fallthrough=]
 #define RT_MANGLER(symbol)   VBoxHost_##symbol
/build/virtualbox-6.0.12-modsrc/vboxdrv/include/iprt/mangling.h:2330:57: note: in expansion of macro 'RT_MANGLER'
 # define RTThreadSleep                                  RT_MANGLER(RTThreadSleep)
                                                         ^~~~~~~~~~
/build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.c:4220:17: note: in expansion of macro 'RTThreadSleep'
                 RTThreadSleep(1);
                 ^~~~~~~~~~~~~
/build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.c:4224:13: note: here
             case kTscDeltaThreadState_Measuring:
             ^~~~
make[4]: *** [/nix/store/wjclfa70y2dcavx9pwg3ndqs2vk36iya-linux-5.4.1-dev/lib/modules/5.4.1/source/scripts/Makefile.build:266: /build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvGip.o] Error 1
make[4]: *** Waiting for unfinished jobs....
/build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvTracer.o: warning: objtool: .text+0x7: indirect jump found in RETPOLINE build
/build/virtualbox-6.0.12-modsrc/vboxdrv/SUPDrvTracer.o: warning: objtool: supdrvTracerProbeFireStub() is missing an ELF size annotation
/build/virtualbox-6.0.12-modsrc/vboxdrv/linux/SUPDrv-linux.o: warning: objtool: VBoxDrvLinuxIOCtl_6_0_12()+0x98: call to VBoxHost_RTR0MemUserCopyFrom() with UACCESS enabled
make[3]: *** [/nix/store/wjclfa70y2dcavx9pwg3ndqs2vk36iya-linux-5.4.1-dev/lib/modules/5.4.1/source/Makefile:1652: /build/virtualbox-6.0.12-modsrc/vboxdrv] Error 2
make[2]: *** [/nix/store/wjclfa70y2dcavx9pwg3ndqs2vk36iya-linux-5.4.1-dev/lib/modules/5.4.1/source/Makefile:179: sub-make] Error 2
make[2]: Leaving directory '/nix/store/wjclfa70y2dcavx9pwg3ndqs2vk36iya-linux-5.4.1-dev/lib/modules/5.4.1/build'
make[1]: *** [/build/virtualbox-6.0.12-modsrc/vboxdrv/Makefile-footer.gmk:111: vboxdrv] Error 2
make[1]: Leaving directory '/build/virtualbox-6.0.12-modsrc/vboxdrv'
make: *** [Makefile:58: vboxdrv] Error 2
builder for '/nix/store/qv6axsva9a3yqvh9cpbvwlfm0s67l4j5-virtualbox-modules-6.0.12-5.4.1.drv' failed with exit code 2
cannot build derivation '/nix/store/ksc9brfghh5y1qv8yhfmm98wfyvdi6b0-kernel-modules.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/h2ihziylmr4s6dhjg1mihym3pb8g3n1w-linux-5.4.1-modules.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/w9asa2hv4saaccmc0ckv3vm9xynr28lv-nixos-system-church-19.09.1476.72a2ced2523.drv': 1 dependencies couldn't be built
error: build of '/nix/store/w9asa2hv4saaccmc0ckv3vm9xynr28lv-nixos-system-church-19.09.1476.72a2ced2523.drv' failed
mudrii commented 4 years ago

I think this one is similar to https://github.com/NixOS/nixpkgs/issues/74890 and is related to kernel update from 5.3.13 to 5.4.1

rafaeldff commented 4 years ago

Seems like this LKML thread is related to this problem: https://lkml.org/lkml/2019/10/15/909

chrissound commented 4 years ago

Is there a work around for this?

I've tried using an pinned older commit but getting an error of:

 sudo nixos-rebuild switch
building Nix...
building the system configuration...
error: assertion failed at /nix/store/0272yl38a4mc20i2a5078m85bldipbjm-source/pkgs/os-specific/linux/prl-tools/default.nix:9:1
(use '--show-trace' to show detailed location information)
lambdafu commented 4 years ago

My workaround is not to use the latest kernel packages:

- boot.kernelPackages = pkgs.linuxPackages_latest;
+ #boot.kernelPackages = pkgs.linuxPackages_latest;
rycee commented 4 years ago

Resolved in master thanks to #74260. I'll cherry-pick the changes to release-19.09 tomorrow unless any opposition arises.

rycee commented 4 years ago

Finally in the 19.09 channel now so I'll close. Re-open if the issue remains after updating.