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