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