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