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