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