1.. _changes:
2
3Minimal requirements to compile the Kernel
4++++++++++++++++++++++++++++++++++++++++++
5
6Intro
7=====
8
9This document is designed to provide a list of the minimum levels of
10software necessary to run the current kernel version.
11
12This document is originally based on my "Changes" file for 2.0.x kernels
13and therefore owes credit to the same people as that file (Jared Mauch,
14Axel Boldt, Alessandro Sigala, and countless other users all over the
15'net).
16
17Current Minimal Requirements
18****************************
19
20Upgrade to at **least** these software revisions before thinking you've
21encountered a bug!  If you're unsure what version you're currently
22running, the suggested command should tell you.
23
24Again, keep in mind that this list assumes you are already functionally
25running a Linux kernel.  Also, not all tools are necessary on all
26systems; obviously, if you don't have any PC Card hardware, for example,
27you probably needn't concern yourself with pcmciautils.
28
29====================== ===============  ========================================
30        Program        Minimal version       Command to check the version
31====================== ===============  ========================================
32GNU C                  5.1              gcc --version
33Clang/LLVM (optional)  11.0.0           clang --version
34GNU make               3.81             make --version
35bash                   4.2              bash --version
36binutils               2.23             ld -v
37flex                   2.5.35           flex --version
38bison                  2.0              bison --version
39pahole                 1.16             pahole --version
40util-linux             2.10o            fdformat --version
41kmod                   13               depmod -V
42e2fsprogs              1.41.4           e2fsck -V
43jfsutils               1.1.3            fsck.jfs -V
44reiserfsprogs          3.6.3            reiserfsck -V
45xfsprogs               2.6.0            xfs_db -V
46squashfs-tools         4.0              mksquashfs -version
47btrfs-progs            0.18             btrfsck
48pcmciautils            004              pccardctl -V
49quota-tools            3.09             quota -V
50PPP                    2.4.0            pppd --version
51nfs-utils              1.0.5            showmount --version
52procps                 3.2.0            ps --version
53udev                   081              udevd --version
54grub                   0.93             grub --version || grub-install --version
55mcelog                 0.6              mcelog --version
56iptables               1.4.2            iptables -V
57openssl & libcrypto    1.0.0            openssl version
58bc                     1.06.95          bc --version
59Sphinx\ [#f1]_         1.7              sphinx-build --version
60cpio                   any              cpio --version
61====================== ===============  ========================================
62
63.. [#f1] Sphinx is needed only to build the Kernel documentation
64
65Kernel compilation
66******************
67
68GCC
69---
70
71The gcc version requirements may vary depending on the type of CPU in your
72computer.
73
74Clang/LLVM (optional)
75---------------------
76
77The latest formal release of clang and LLVM utils (according to
78`releases.llvm.org <https://releases.llvm.org>`_) are supported for building
79kernels. Older releases aren't guaranteed to work, and we may drop workarounds
80from the kernel that were used to support older versions. Please see additional
81docs on :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
82
83Make
84----
85
86You will need GNU make 3.81 or later to build the kernel.
87
88Bash
89----
90
91Some bash scripts are used for the kernel build.
92Bash 4.2 or newer is needed.
93
94Binutils
95--------
96
97Binutils 2.23 or newer is needed to build the kernel.
98
99pkg-config
100----------
101
102The build system, as of 4.18, requires pkg-config to check for installed
103kconfig tools and to determine flags settings for use in
104'make {g,x}config'.  Previously pkg-config was being used but not
105verified or documented.
106
107Flex
108----
109
110Since Linux 4.16, the build system generates lexical analyzers
111during build.  This requires flex 2.5.35 or later.
112
113
114Bison
115-----
116
117Since Linux 4.16, the build system generates parsers
118during build.  This requires bison 2.0 or later.
119
120pahole:
121-------
122
123Since Linux 5.2, if CONFIG_DEBUG_INFO_BTF is selected, the build system
124generates BTF (BPF Type Format) from DWARF in vmlinux, a bit later from kernel
125modules as well.  This requires pahole v1.16 or later.
126
127It is found in the 'dwarves' or 'pahole' distro packages or from
128https://fedorapeople.org/~acme/dwarves/.
129
130Perl
131----
132
133You will need perl 5 and the following modules: ``Getopt::Long``,
134``Getopt::Std``, ``File::Basename``, and ``File::Find`` to build the kernel.
135
136BC
137--
138
139You will need bc to build kernels 3.10 and higher
140
141
142OpenSSL
143-------
144
145Module signing and external certificate handling use the OpenSSL program and
146crypto library to do key creation and signature generation.
147
148You will need openssl to build kernels 3.7 and higher if module signing is
149enabled.  You will also need openssl development packages to build kernels 4.3
150and higher.
151
152
153System utilities
154****************
155
156Architectural changes
157---------------------
158
159DevFS has been obsoleted in favour of udev
160(https://www.kernel.org/pub/linux/utils/kernel/hotplug/)
161
16232-bit UID support is now in place.  Have fun!
163
164Linux documentation for functions is transitioning to inline
165documentation via specially-formatted comments near their
166definitions in the source.  These comments can be combined with ReST
167files the Documentation/ directory to make enriched documentation, which can
168then be converted to PostScript, HTML, LaTex, ePUB and PDF files.
169In order to convert from ReST format to a format of your choice, you'll need
170Sphinx.
171
172Util-linux
173----------
174
175New versions of util-linux provide ``fdisk`` support for larger disks,
176support new options to mount, recognize more supported partition
177types, have a fdformat which works with 2.4 kernels, and similar goodies.
178You'll probably want to upgrade.
179
180Ksymoops
181--------
182
183If the unthinkable happens and your kernel oopses, you may need the
184ksymoops tool to decode it, but in most cases you don't.
185It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so
186that it produces readable dumps that can be used as-is (this also
187produces better output than ksymoops).  If for some reason your kernel
188is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and
189reproduce the Oops with that option, then you can still decode that Oops
190with ksymoops.
191
192Mkinitrd
193--------
194
195These changes to the ``/lib/modules`` file tree layout also require that
196mkinitrd be upgraded.
197
198E2fsprogs
199---------
200
201The latest version of ``e2fsprogs`` fixes several bugs in fsck and
202debugfs.  Obviously, it's a good idea to upgrade.
203
204JFSutils
205--------
206
207The ``jfsutils`` package contains the utilities for the file system.
208The following utilities are available:
209
210- ``fsck.jfs`` - initiate replay of the transaction log, and check
211  and repair a JFS formatted partition.
212
213- ``mkfs.jfs`` - create a JFS formatted partition.
214
215- other file system utilities are also available in this package.
216
217Reiserfsprogs
218-------------
219
220The reiserfsprogs package should be used for reiserfs-3.6.x
221(Linux kernels 2.4.x). It is a combined package and contains working
222versions of ``mkreiserfs``, ``resize_reiserfs``, ``debugreiserfs`` and
223``reiserfsck``. These utils work on both i386 and alpha platforms.
224
225Xfsprogs
226--------
227
228The latest version of ``xfsprogs`` contains ``mkfs.xfs``, ``xfs_db``, and the
229``xfs_repair`` utilities, among others, for the XFS filesystem.  It is
230architecture independent and any version from 2.0.0 onward should
231work correctly with this version of the XFS kernel code (2.6.0 or
232later is recommended, due to some significant improvements).
233
234PCMCIAutils
235-----------
236
237PCMCIAutils replaces ``pcmcia-cs``. It properly sets up
238PCMCIA sockets at system startup and loads the appropriate modules
239for 16-bit PCMCIA devices if the kernel is modularized and the hotplug
240subsystem is used.
241
242Quota-tools
243-----------
244
245Support for 32 bit uid's and gid's is required if you want to use
246the newer version 2 quota format.  Quota-tools version 3.07 and
247newer has this support.  Use the recommended version or newer
248from the table above.
249
250Intel IA32 microcode
251--------------------
252
253A driver has been added to allow updating of Intel IA32 microcode,
254accessible as a normal (misc) character device.  If you are not using
255udev you may need to::
256
257  mkdir /dev/cpu
258  mknod /dev/cpu/microcode c 10 184
259  chmod 0644 /dev/cpu/microcode
260
261as root before you can use this.  You'll probably also want to
262get the user-space microcode_ctl utility to use with this.
263
264udev
265----
266
267``udev`` is a userspace application for populating ``/dev`` dynamically with
268only entries for devices actually present. ``udev`` replaces the basic
269functionality of devfs, while allowing persistent device naming for
270devices.
271
272FUSE
273----
274
275Needs libfuse 2.4.0 or later.  Absolute minimum is 2.3.0 but mount
276options ``direct_io`` and ``kernel_cache`` won't work.
277
278Networking
279**********
280
281General changes
282---------------
283
284If you have advanced network configuration needs, you should probably
285consider using the network tools from ip-route2.
286
287Packet Filter / NAT
288-------------------
289The packet filtering and NAT code uses the same tools like the previous 2.4.x
290kernel series (iptables).  It still includes backwards-compatibility modules
291for 2.2.x-style ipchains and 2.0.x-style ipfwadm.
292
293PPP
294---
295
296The PPP driver has been restructured to support multilink and to
297enable it to operate over diverse media layers.  If you use PPP,
298upgrade pppd to at least 2.4.0.
299
300If you are not using udev, you must have the device file /dev/ppp
301which can be made by::
302
303  mknod /dev/ppp c 108 0
304
305as root.
306
307NFS-utils
308---------
309
310In ancient (2.4 and earlier) kernels, the nfs server needed to know
311about any client that expected to be able to access files via NFS.  This
312information would be given to the kernel by ``mountd`` when the client
313mounted the filesystem, or by ``exportfs`` at system startup.  exportfs
314would take information about active clients from ``/var/lib/nfs/rmtab``.
315
316This approach is quite fragile as it depends on rmtab being correct
317which is not always easy, particularly when trying to implement
318fail-over.  Even when the system is working well, ``rmtab`` suffers from
319getting lots of old entries that never get removed.
320
321With modern kernels we have the option of having the kernel tell mountd
322when it gets a request from an unknown host, and mountd can give
323appropriate export information to the kernel.  This removes the
324dependency on ``rmtab`` and means that the kernel only needs to know about
325currently active clients.
326
327To enable this new functionality, you need to::
328
329  mount -t nfsd nfsd /proc/fs/nfsd
330
331before running exportfs or mountd.  It is recommended that all NFS
332services be protected from the internet-at-large by a firewall where
333that is possible.
334
335mcelog
336------
337
338On x86 kernels the mcelog utility is needed to process and log machine check
339events when ``CONFIG_X86_MCE`` is enabled. Machine check events are errors
340reported by the CPU. Processing them is strongly encouraged.
341
342Kernel documentation
343********************
344
345Sphinx
346------
347
348Please see :ref:`sphinx_install` in :ref:`Documentation/doc-guide/sphinx.rst <sphinxdoc>`
349for details about Sphinx requirements.
350
351Getting updated software
352========================
353
354Kernel compilation
355******************
356
357gcc
358---
359
360- <ftp://ftp.gnu.org/gnu/gcc/>
361
362Clang/LLVM
363----------
364
365- :ref:`Getting LLVM <getting_llvm>`.
366
367Make
368----
369
370- <ftp://ftp.gnu.org/gnu/make/>
371
372Bash
373----
374
375- <ftp://ftp.gnu.org/gnu/bash/>
376
377Binutils
378--------
379
380- <https://www.kernel.org/pub/linux/devel/binutils/>
381
382Flex
383----
384
385- <https://github.com/westes/flex/releases>
386
387Bison
388-----
389
390- <ftp://ftp.gnu.org/gnu/bison/>
391
392OpenSSL
393-------
394
395- <https://www.openssl.org/>
396
397System utilities
398****************
399
400Util-linux
401----------
402
403- <https://www.kernel.org/pub/linux/utils/util-linux/>
404
405Kmod
406----
407
408- <https://www.kernel.org/pub/linux/utils/kernel/kmod/>
409- <https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git>
410
411Ksymoops
412--------
413
414- <https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/>
415
416Mkinitrd
417--------
418
419- <https://code.launchpad.net/initrd-tools/main>
420
421E2fsprogs
422---------
423
424- <https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/>
425- <https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/>
426
427JFSutils
428--------
429
430- <http://jfs.sourceforge.net/>
431
432Reiserfsprogs
433-------------
434
435- <https://git.kernel.org/pub/scm/linux/kernel/git/jeffm/reiserfsprogs.git/>
436
437Xfsprogs
438--------
439
440- <https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git>
441- <https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/>
442
443Pcmciautils
444-----------
445
446- <https://www.kernel.org/pub/linux/utils/kernel/pcmcia/>
447
448Quota-tools
449-----------
450
451- <http://sourceforge.net/projects/linuxquota/>
452
453
454Intel P6 microcode
455------------------
456
457- <https://downloadcenter.intel.com/>
458
459udev
460----
461
462- <https://www.freedesktop.org/software/systemd/man/udev.html>
463
464FUSE
465----
466
467- <https://github.com/libfuse/libfuse/releases>
468
469mcelog
470------
471
472- <http://www.mcelog.org/>
473
474cpio
475----
476
477- <https://www.gnu.org/software/cpio/>
478
479Networking
480**********
481
482PPP
483---
484
485- <https://download.samba.org/pub/ppp/>
486- <https://git.ozlabs.org/?p=ppp.git>
487- <https://github.com/paulusmack/ppp/>
488
489NFS-utils
490---------
491
492- <http://sourceforge.net/project/showfiles.php?group_id=14>
493
494Iptables
495--------
496
497- <https://netfilter.org/projects/iptables/index.html>
498
499Ip-route2
500---------
501
502- <https://www.kernel.org/pub/linux/utils/net/iproute2/>
503
504OProfile
505--------
506
507- <http://oprofile.sf.net/download/>
508
509NFS-Utils
510---------
511
512- <http://nfs.sourceforge.net/>
513
514Kernel documentation
515********************
516
517Sphinx
518------
519
520- <https://www.sphinx-doc.org/>
521