What packages are Needed to build the Kernel

In my quest to automate the testing of the Linux Kernel, I need to automate the build of the Linux Kernel. To build the Kernel, you need the requisite packages. What are they? Let’s find out.

I am staring with a Baremetal Fedora Image. It has 344 packages installed already. I’m going to assume that this set is available when I do my automated build as well, or that the needed packages will get pulled in by dependencies. If not, I will find out when my automation fails to run and I will add them at that point.

Most Fedora and CentOS based documents on building the Kernel have you do a group install of the “Development Tools” yum package group. I don’t want to do this for two reasons. First, I want to use the beaker format which just lists the packages in the job description. Second, I want to minimize the non-required packages, and Development Tools is general purpose group for coding; not everyone needs everythingm, and I don’t want to put non-essential packages on the system.

In order to build the linux Kernel, I need to get the code on the server. While I could push it from a remote system, if I want to run this from a beaker job, I will have no machine that can push it. Thus, I will start by installing git.

sudo yum install git

That installs 66 Packages and takes Installed size: 58 MB of space.

Next I clone the Linux kernel tree. I am using https://gitlab.com/linux-kernel/linux, but you can do the same thing from the kernel.org Repo or one of the other public git mirrors. This is quite large and takes a while.

Receiving objects: 100% (8358688/8358688), 1.51 GiB | 20.57 MiB/s, done.

I’m going to use an existing config file to make the old configuration into my new one.

$ make olddefconfig
-bash: make: command not found

OK, first missing package. make pulls in libtool-ltdl and guile22

$ make olddefconfig
  HOSTCC  scripts/basic/fixdep
/bin/sh: line 1: gcc: command not found
make[1]: *** [scripts/Makefile.host:95: scripts/basic/fixdep] Error 127
make: *** [Makefile:552: scripts_basic] Error 2

gcc. No Suprise there. That pulls in 17 packages.

$ make olddefconfig
  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
/bin/sh: line 1: flex: command not found
make[1]: *** [scripts/Makefile.host:9: scripts/kconfig/lexer.lex.c] Error 127
make: *** [Makefile:616: olddefconfig] Error 2

flex also pulls in m4

$ make olddefconfig
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
/bin/sh: line 1: bison: command not found
make[1]: *** [scripts/Makefile.host:17: scripts/kconfig/parser.tab.h] Error 127
make: *** [Makefile:616: olddefconfig] Error 2

bison

That gets through the config build process. Lets checkout the main compile. To speed things up, I compile with 1 thread per CPU:

make  -j 32
scripts/sign-file.c:25:10: fatal error: openssl/opensslv.h: No such file or directory
   25 | #include <openssl/opensslv.h>
      |          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [scripts/Makefile.host:95: scripts/sign-file] Error 1
make: *** [Makefile:1203: scripts] Error 2

I’m sure there were flamewars about including cryptography in the Linux Kernel. openssl-devel

/bin/sh: line 1: bc: command not found
make[1]: *** [Kbuild:24: include/generated/timeconst.h] Error 127
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:1219: prepare0] Error 2

bc

main.c:55:10: fatal error: libelf.h: No such file or directory
   55 | #include <libelf.h>
      |          ^~~~~~~~~~

elfutils-libelf-devel. And with that, the make process completes successfully. Lets’ now make the modules.

That works, too.

So the minimal list for compile is

  • elfutils-libelf-devel
  • openssl-devel
  • bison
  • flex
  • gcc
  • make


2 thoughts on “What packages are Needed to build the Kernel

  1. If you have an RPM, yes. But what if you only have the raw Kernel sources? I’m doing a minimal build based on a git checkout of the Kernel tree.

    And…sometimes it is good to check your assumptions, as I am doing in this post.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.