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