Bug 1758710
Summary: | make scripts fails citing classmap.h does not exist. | ||||||
---|---|---|---|---|---|---|---|
Product: | [Fedora] Fedora | Reporter: | bob <redzilla.coralnut> | ||||
Component: | kernel-headers | Assignee: | Justin M. Forbes <jforbes> | ||||
Status: | CLOSED ERRATA | QA Contact: | Fedora Extras Quality Assurance <extras-qa> | ||||
Severity: | unspecified | Docs Contact: | |||||
Priority: | unspecified | ||||||
Version: | 30 | CC: | jcall, jeremy, jforbes, jfreyensee, labbott, martin, me, pauloedgarcastro, pbrobinson, rmderbes, smercurio, wcohen | ||||
Target Milestone: | --- | ||||||
Target Release: | --- | ||||||
Hardware: | x86_64 | ||||||
OS: | Linux | ||||||
Whiteboard: | |||||||
Fixed In Version: | kernel-headers-5.3.11-300.fc31 | Doc Type: | If docs needed, set a value | ||||
Doc Text: | Story Points: | --- | |||||
Clone Of: | Environment: | ||||||
Last Closed: | 2019-11-13 06:36:29 UTC | Type: | Bug | ||||
Regression: | --- | Mount Type: | --- | ||||
Documentation: | --- | CRM: | |||||
Verified Versions: | Category: | --- | |||||
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
Cloudforms Team: | --- | Target Upstream Version: | |||||
Embargoed: | |||||||
Attachments: |
|
Description
bob
2019-10-04 23:12:56 UTC
At the risk of stating the obvious, this problem occurs when trying to rebuild kernel headers, and it appears to be due to a missing header file, and isn't an Nvidia-related problem. I only discovered the apparent header problem when investigating a problem building the NV driver. thanks. To clarify, this isn't with kernel-headers which refers to the uapi headers that get installed in include but this is with the kernel-devel package. You shouldn't technically need to explicitly do any of those commands because the genheaders binary is already present. What was the last kernel version that worked and where are you getting those instructions to run those commands? Thanks for your help. Everything was working fine on an F28 box. Things broke when I tried to do the distro upgrades to F29 and F30. The oldest kernel on this list is the last one that worked in F28. the two later kernels represent the default kernels installed when I attempted upgrades to F29 and F30. The F28 kernel worked fine. Both the F29 and F30 kernels failed. # vdir /usr/src/kernels total 12K drwxr-xr-x. 23 root root 4.0K Jun 24 13:51 5.0.16-100.fc28.x86_64 drwxr-xr-x. 22 root root 4.0K Oct 4 01:58 5.2.17-100.fc29.x86_64 drwxr-xr-x. 23 root root 4.0K Oct 4 18:15 5.2.17-200.fc30.x86_64 The problem came along when trying to upgrade an F28 box to F29 and F30. the box uses an Nvidia Quadro 400 graphics card that requires the Nvidia "340" series drivers that are installed using the "NVIDIA-Linux-x86_64-340.107.run" installer. The specific instructions to issue the associated kernel commands are provided by the nvidia installer log when the nvidia driver build fails. The log mentions the missing classmap.h file and gives the specific instructions to compile the scripts. It appears that everytnig fails because the nvidia driver doesn't care if the binaries are present, it's compiling from source and looking for the classmap.h file and that file looks like it's missing. I don't have a copy of the nvidia installer log at the moment, as it appears to have been autopurged by falling back to nouveau. I'll see if I can generate another one. Created attachment 1623684 [details]
nvidia driver install log
/var/log/nvidia-installer.log file created by nvidia driver build script.
Here is an excerpt from the nvidia-installer.log file (attachment): <snip> -> Building NVIDIA kernel module: executing: 'cd ./kernel; /usr/bin/make module SYSSRC=/lib/modules/5.2.17-200.fc30.x86_64/source SYSOUT=/lib/modules/5.2.17-200.fc30.x86_64/build NV_BUILD_MODULE_INSTANCES='... NVIDIA: calling KBUILD... make[1]: Entering directory '/usr/src/kernels/5.2.17-200.fc30.x86_64' Makefile:213: ================= WARNING ================ Makefile:214: 'SUBDIRS' will be removed after Linux 5.3 Makefile:215: Please use 'M=' or 'KBUILD_EXTMOD' instead Makefile:216: ========================================== test -e include/generated/autoconf.h -a -e include/config/auto.conf || ( \ echo >&2; \ echo >&2 " ERROR: Kernel configuration is invalid."; \ echo >&2 " include/generated/autoconf.h or include/config/auto.conf are missing.";\ echo >&2 " Run 'make oldconfig && make prepare' on kernel src to fix it."; \ echo >&2 ; \ /bin/false) </snip> The nvidia installer script apparently checks for the presence of autoconf.h and fails with the aforementioned error if that file is missing. When executing the recommended "make oldconfig && make prepare" on the kernel source, "make oldconfig" succeeds but "make prepare" fails. The "make prepare" fails on the script build, which appears to fail at the "make scripts" call. That's why I reported "make scripts" failing in the bug report. I probably should have said "make prepare" fails, but I think it's actually the same thing. From here it looks like the binaries are present but at least one of the header files necessary to generate them from source were omitted. Unfortunately, it looks like autoconf.h is necessary to build the nvidia driver. /lib/modules is never going to contain the autoconf.h file so that path is incorrect. based on what I can see from, https://github.com/NVIDIA/nvidia-installer, SYSSRC shouldn't be /lib/modules since that's the precompiled modules. If you point that to the /usr/src tree it should have the autoconf.h file. I think SYSOUT should also be to the /usr/src directory as well. I can't guarantee this will fix anything but to the point I suspect that this is an issue with how the nvidia driver is being built and not the kernel-devel package. Thanks. It's interesting that the NV build warning in Comment 5 claims that autoconf.h is the problem, but when I tried following the directions to manually recompile that was not the error that was triggered. I have to be suspicious that their logger may contain some notification errors, as you have noted. In that context the NV build log's warning comment night be a bit of a red herring. In Comment 1 I noted that the actual error that was preventing me from building the necessary kernel components was that /scripts/selinux/genheaders could not find classmap.h. Here it is again: # make scripts HOSTCC scripts/selinux/genheaders/genheaders scripts/selinux/genheaders/genheaders.c:18:10: fatal error: classmap.h: No such file or directory 18 | #include "classmap.h" Looking at the file /usr/src/kernels/5.2.9-200.fc30.x86_64/scripts/selinux/genheaders/genheaders.c, line 18 makes the call to "#include classmap.h" but classmap.h is not found anywhere on disk: # find / -type f -name "classmap.h" <no matching file is found> I think this is a bigger problem than a housekeeping error that points to the wrong directory tree. I can change the target directories, but the problem will remain that the find command couldn't find classmap.h anywhere on the system disk. I'm thinking that if the output of the find command is accurate, then changing the directory targets won't be helpful until I can locate a copy of classmap.h. I appreciate your time working on this, and I agree it's a pain to deal with how the guys at NV build their drivers. There seem to be some path oversights on their part and there definitely seem to be some maintenance issues on their part. But looking at the error being generated, my brand new F30 system is missing a file that is supposed to be present. Can you tell me where to find classmap.h? It's not beind distributed in a fresh F30 build. I suspect that the problem hasn't cropped up yet since everybody relies on the binaries and nobody has tried to make scripts. I might be the first person to notice that there's an RPM that isn't delivering classmap.h. FEDORA-2019-68d7f68507 has been submitted as an update to Fedora 31. https://bodhi.fedoraproject.org/updates/FEDORA-2019-68d7f68507 kernel-5.3.11-300.fc31, kernel-headers-5.3.11-300.fc31, kernel-tools-5.3.11-300.fc31, microcode_ctl-2.1-33.fc31 has been pushed to the Fedora 31 stable repository. If problems still persist, please make note of it in this bug report. Can this please be backported to the FC30 5.3.9-200 kernel. I have all the latest patches but can not update to FC31 yet. Ditto on backporting to FC30. # dnf update ... Running scriptlet: kernel-core-5.4.19-100.fc30.x86_64 17/17 VirtualBox Guest Additions: Building the modules for kernel 5.4.17-100.fc30.x86_64. VirtualBox Guest Additions: Look at /var/log/vboxadd-setup.log to find out what went wrong # grep fatal /var/log/vboxadd-setup.log scripts/selinux/genheaders/genheaders.c:18:10: fatal error: classmap.h: No such file or directory orc.h:9:10: fatal error: asm/orc_types.h: No such file or directory I am seeing the exact same error on Fedora 31 when trying to compile a driver against the kernel, /usr/src/kernels/5.5.5-200.fc31.x86_64 [xxxxx@linux 5.5.5-200.fc31.x86_64]$ sudo make HOSTCC scripts/selinux/genheaders/genheaders scripts/selinux/genheaders/genheaders.c:18:10: fatal error: classmap.h: No such file or directory 18 | #include "classmap.h" | ^~~~~~~~~~~~ compilation terminated. make[3]: *** [scripts/Makefile.host:107: scripts/selinux/genheaders/genheaders] Error 1 make[2]: *** [scripts/Makefile.build:503: scripts/selinux/genheaders] Error 2 make[1]: *** [scripts/Makefile.build:503: scripts/selinux] Error 2 make: *** [Makefile:1098: scripts] Error 2 Versions: kernel-5.5.5-200 kernel-devel-5.5.5-200 kernel-headers-5.5.5-200 kernel-tools-5.5.5-1 microcode-ctl-2.1-34 I tried removing and reinstalling kernel-devel, kernel-headers, and kernel-tools Is there anything else I should try to fix this, or is this the same bug? I did a "uninstall.sh" in /opt/VirtualBox* and now I don't get the error anymore. I guess was mixing VirtualBox'es from two different sources. I'm the original reporter. I've never installed VirtualBox and I don't see how it is relevant. As noted previously, the missing files occur on a fresh F30 install because there are missing files in the installation RPM. classmap.h is missing when I try to compile the Intel firmware updater on Fedora 31 https://downloadcenter.intel.com/download/29137/Intel-Ethernet-Connections-Boot-Utility-Preboot-Images-and-EFI-Drivers?product=82186 [root@admin DRIVER]# uname -a Linux admin.cluster.net 5.5.13-200.fc31.x86_64 #1 SMP Wed Mar 25 21:55:30 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux [root@admin DRIVER]# dnf list kernel kernel-headers kernel-tools microcode_ctl Last metadata expiration check: 1:33:46 ago on Thu 02 Apr 2020 08:59:17 PM EDT. Installed Packages kernel.x86_64 5.4.18-200.fc31 @updates kernel.x86_64 5.5.8-200.fc31 @updates kernel.x86_64 5.5.13-200.fc31 @updates kernel-headers.x86_64 5.5.9-200.fc31 @updates kernel-tools.x86_64 5.5.9-200.fc31 @updates microcode_ctl.x86_64 2:2.1-34.fc31 @updates [root@admin DRIVER]# dnf whatprovides "*/classmap.h" Last metadata expiration check: 1:33:53 ago on Thu 02 Apr 2020 08:59:17 PM EDT. Error: No Matches found [root@admin ~]# cd /root/intel_nic_fw/APPS/BootUtil/Linux_x64/DRIVER/ [root@admin DRIVER]# ll total 128 -rwxr-xr-x. 1 500 544 2139 Nov 22 09:42 install drwxr-xr-x. 4 root root 66 Aug 6 2019 iqvlinux -rw-r--r--. 1 500 544 50596 Nov 22 09:42 iqvlinux-1.2.0.13-0.noarch.rpm -rw-r--r--. 1 500 544 50808 Nov 22 09:42 iqvlinux.tar.gz -rw-r--r--. 1 500 544 18954 Jun 1 2019 license_gpl.txt [root@admin DRIVER]# ./install Extracting archive..OK! Compiling the driver...Error: make: Entering directory '/root/intel_nic_fw/APPS/BootUtil/Linux_x64/DRIVER/iqvlinux/src/linux/driver' make -C /lib/modules/5.5.13-200.fc31.x86_64/build SUBDIRS=/root/intel_nic_fw/APPS/BootUtil/Linux_x64/DRIVER/iqvlinux/src/linux/driver modules make[1]: Entering directory '/usr/src/kernels/5.5.13-200.fc31.x86_64' HOSTCC scripts/selinux/genheaders/genheaders scripts/selinux/genheaders/genheaders.c:18:10: fatal error: classmap.h: No such file or directory 18 | #include "classmap.h" | ^~~~~~~~~~~~ compilation terminated. make[4]: *** [scripts/Makefile.host:107: scripts/selinux/genheaders/genheaders] Error 1 make[3]: *** [scripts/Makefile.build:503: scripts/selinux/genheaders] Error 2 make[2]: *** [scripts/Makefile.build:503: scripts/selinux] Error 2 make[1]: *** [Makefile:1098: scripts] Error 2 make[1]: Leaving directory '/usr/src/kernels/5.5.13-200.fc31.x86_64' make: *** [Makefile:257: default] Error 2 make: Leaving directory '/root/intel_nic_fw/APPS/BootUtil/Linux_x64/DRIVER/iqvlinux/src/linux/driver' Error: unable to find driver file (iqvlinux.ko) in /root/intel_nic_fw/APPS/BootUtil/Linux_x64/DRIVER/iqvlinux/src/linux/driver [root@admin DRIVER]# Same here ... In the end, I found the missing files in the kernel-* RPMs that originally shipped with Fedora 31 (5.3.7-301) # dnf --enablerepo=fedora-debuginfo install \ kernel-5.3.7-301.fc31.x86_64 \ kernel-core-5.3.7-301.fc31.x86_64 \ kernel-devel-5.3.7-301.fc31.x86_64 \ kernel-modules-5.3.7-301.fc31.x86_64 \ kernel-headers-5.3.6-300.fc31.x86_64 \ kernel-debuginfo-common-x86_64-5.3.7-301.fc31.x86_64 This is still a problem with Fedora's 5.5.10-100.fc30.x86_64 kernel, not sure why this bug is closed. All I want to do is build the source with the .config supplied in /usr/src/kernels/5.5.10-100.fc30.x86_64 and it fails immediately: root@fedora-virtualfedora 5.5.10-100.fc30.x86_64]# make -j2 HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/confdata.o HOSTCC scripts/kconfig/expr.o LEX scripts/kconfig/lexer.lex.c YACC scripts/kconfig/parser.tab.[ch] HOSTCC scripts/kconfig/preprocess.o HOSTCC scripts/kconfig/symbol.o HOSTCC scripts/kconfig/util.o HOSTCC scripts/kconfig/lexer.lex.o HOSTCC scripts/kconfig/parser.tab.o HOSTLD scripts/kconfig/conf scripts/kconfig/conf --syncconfig Kconfig HOSTCC arch/x86/tools/relocs_32.o HOSTCC arch/x86/tools/relocs_64.o HOSTCC scripts/selinux/genheaders/genheaders scripts/selinux/genheaders/genheaders.c:18:10: fatal error: classmap.h: No such file or directory 18 | #include "classmap.h" | ^~~~~~~~~~~~ compilation terminated. make[3]: *** [scripts/Makefile.host:107: scripts/selinux/genheaders/genheaders] Error 1 make[2]: *** [scripts/Makefile.build:503: scripts/selinux/genheaders] Error 2 make[1]: *** [scripts/Makefile.build:503: scripts/selinux] Error 2 Can you suggest a work-around since this is obviously not fixed. Note I have all the files John Call suggested installed on my system Oh and this has nothing to do with NVIDIA drivers, rather a generic, plain kernel build. It should 'just work' when I type 'make' Please, follow https://bugzilla.redhat.com/show_bug.cgi?id=1821946 , i do not know why this thread has been closed, it remains unresolved on F31 with 5.5.15-200.fc31 kernel version. Not only modules, even kernel can not be built. Regards I see this is marked as NEDDINFO now, so I will try to provide. Background: I'm trying to be able to use my VirtualBox machines. They stopped working after an update of the Fedora kernel (akmods fails building stuff for VirtualBox). It seems it is not possible to even build the kernel from source in Fedora now. My system is up to date as of today: # rpm -qa|grep $(uname -r) kernel-5.8.9-200.fc32.x86_64 kernel-core-5.8.9-200.fc32.x86_64 kernel-devel-5.8.9-200.fc32.x86_64 kernel-modules-extra-5.8.9-200.fc32.x86_64 kernel-modules-5.8.9-200.fc32.x86_64 host:/usr/src/kernels/5.8.9-200.fc32.x86_64:# make oldconfig && make prepare scripts/kconfig/conf --oldconfig Kconfig # # No change to .config # scripts/kconfig/conf --syncconfig Kconfig HYPERCALLS arch/x86/include/generated/asm/xen-hypercalls.h HOSTCC arch/x86/tools/relocs_32.o HOSTCC arch/x86/tools/relocs_64.o HOSTCC arch/x86/tools/relocs_common.o HOSTLD arch/x86/tools/relocs HOSTCC scripts/selinux/genheaders/genheaders scripts/selinux/genheaders/genheaders.c:18:10: fatal error: classmap.h: No such file or directory 18 | #include "classmap.h" | ^~~~~~~~~~~~ compilation terminated. make[3]: *** [scripts/Makefile.host:103: scripts/selinux/genheaders/genheaders] Error 1 make[2]: *** [scripts/Makefile.build:497: scripts/selinux/genheaders] Error 2 make[1]: *** [scripts/Makefile.build:497: scripts/selinux] Error 2 make: *** [Makefile:1159: scripts] Error 2 I tried to find classmap.h as suggested in a previous comment and use that: (dnf --enablerepo=fedora-debuginfo provides */classmap.h) And installed this: dnf --enablerepo=fedora-debuginfo install kernel-debuginfo-common-x86_64-5.6.6-300.fc32.x86_64 Did a crude copy: host:/usr/src/kernels/5.8.9-200.fc32.x86_64:# cp -r /usr/src/debug/kernel-5.6.fc32/linux-5.6.6-300.fc32.x86_64/security/selinux/include security/selinux/ But there are changes between 5.6.6 and 5.8.9, so it breaks: linea:/usr/src/kernels/5.8.9-200.fc32.x86_64:# make oldconfig && make prepare scripts/kconfig/conf --oldconfig Kconfig # # No change to .config # HOSTCC scripts/selinux/genheaders/genheaders In file included from scripts/selinux/genheaders/genheaders.c:18: ./security/selinux/include/classmap.h:33:2: error: #error New capability defined, please update COMMON_CAP2_PERMS. 33 | #error New capability defined, please update COMMON_CAP2_PERMS. | ^~~~~ make[3]: *** [scripts/Makefile.host:103: scripts/selinux/genheaders/genheaders] Error 1 make[2]: *** [scripts/Makefile.build:497: scripts/selinux/genheaders] Error 2 make[1]: *** [scripts/Makefile.build:497: scripts/selinux] Error 2 make: *** [Makefile:1159: scripts] Error 2 Oh, wait, I noticed now that my kernel headers are not up to date!: # dnf install kernel-headers Last metadata expiration check: 0:42:02 ago on Fri Sep 18 07:20:29 2020. Package kernel-headers-5.8.8-200.fc32.x86_64 is already installed. linea:~:# dnf install kernel-headers-$(uname -r) Last metadata expiration check: 0:43:09 ago on Fri Sep 18 07:20:29 2020. No match for argument: kernel-headers-5.8.9-200.fc32.x86_64 Error: Unable to find a match: kernel-headers-5.8.9-200.fc32.x86_64 So, the latest kernel version in doesn't provide the headers package? The needinfo request[s] on this closed bug have been removed as they have been unresolved for 1000 days |