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