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