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