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