# Package Rationale

CLFS includes many packages, a number of which might not necessarily be required for a "minimal" system, but still considered very useful. The purpose of this page is to list the reasoning for each package's inclusion in the book.

- Autoconf

  The Autoconf package contains programs for producing shell scripts that can automatically configure source code. This is useful for software developers, as well as anyone who wants to install packages that don't come with a configure script, such as some of the packages in CBLFS.

- Automake

  The Automake package contains programs for generating Makefiles for use with Autoconf. This can be useful to software developers.

- Bash

  This package contains the Bourne-Again SHell. A shell is an important component of a Linux system, as there must be some way of allowing the users to enter commands.

- Bc

  This package contains a precision calculator. The Linux kernel uses Bc to render the timeconst header.

- Binutils

  This package contains programs for handling object files. The programs in this package are needed for compiling most of the packages in CLFS.

- Bison

  This package contains programs that are required by several packages in CLFS.

- Bzip2

  The programs in this package are useful for compressing files to reduce size. They are also needed to uncompress tarballs for many CLFS packages.

- CLFS-Bootscripts

  This package contains a number of scripts that run at boottime, performing essential tasks such as mounting/checking filesystems and starting the network interface.

- Check

  This package contains a test harness for other programs.

- CLooG-ISL

  This package is used by GCC.

- Coreutils

  This package contains many basic command-line file-management tools, required for installation of every package in CLFS.

- DejaGNU

  This package is needed for the testsuites of several packages, especially GCC and Binutils.

- DHCPCD

  This package allows for automatic configuration of network interfaces from a DHCP server. It (or some other package providing a DHCP client is needed to connect to a DHCP server.

- Diffutils

  This package contains programs to compare files, and can also be used to create patches. It is required by the installation procedures of many CLFS packages.

- EGLIBC

  Any dynamically-linked C program (which is nearly everything in CLFS) needs a C library to compile and run.

- Expect

  This package is needed for the testsuites for several packages.

- E2fsprogs

  The programs in this package are used for the creation and maintenance of ext2/3/4 filesystems.

- File

  This package contains a program that determines the type of a given file. It is needed by some CLFS packages.

- Findutils

  This package contains programs for finding files based on certain criteria, and optionally performing commands on them. Used by the installation procedures of many CLFS packages.

- Flex

  This package contains a tool for generating text scanners. It is used by multiple packages in CLFS

- Gawk

  This package contains programs for manipulating text files, using the AWK language. It is used by the installation procedures of many packages in CLFS.

- Gcc

  This package contains a C compiler, which is required to compile most of the packages in CLFS.

- Gettext

  A tool that allows programmers to easily implement i18n (internationalization) in their programs. It is a required dependency for a number of packages

- GMP

  This package is required by GCC.

- Grep

  This package contains programs for searching for text in files. These programs are required by many packages in CLFS.

- Groff

  This package is required by Man.

- Gzip

  Useful for compressing files to reduce size. It is also needed to uncompress tarballs for many CLFS packages

- Iana-Etc

  This package provides the `/etc/services` and `/etc/protocols` files. These files map port names to port numbers as well as protocol names to their corresponding numbers. These files are essential for many network based programs to work properly.

- IProute2

  This package contains programs for administering network interfaces.

- IPutils

  This package contains several basic network-management tools.

- ISL

  This package is required by CLooG.

- Kbd

  Contains keytable files and keyboard utilities compatible with the Linux kernel.

- Kmod

  This package contains programs that assist in loading an unloading kernel modules.

- Less

  A program that lets you view text files one page at a time. Used by Man for displaying manpages.

- Libee

  This package contains an event expression library. It is needed by Rsyslog.

- Libestr

  This package contains a library for string essentials. It is needed by Rsyslog.

- Libtool

  The Libtool package contains the GNU generic library support script. It is used by some CLFS packages.

- Linux-Headers

  This package consists of santized headers from the Linux Kernel. These headers are required for Glibc to compile.

- Linux Kernel

  The Linux operating system.

- M4

  This package contains a macro processor. It is required by several CLFS packages, including Bison.

- Make

  Required for installation of most CLFS packages

- Man

  Used for viewing manpages

- Man-Pages

  A number of useful manpages, not supplied by other packages

- MPC

  This package is required by GCC.

- MPFR

  This package is required by GCC.

- Ncurses

  Needed by several packages in CLFS, such as Vim, Bash, and Less

- Patch

  Used for applying patches in several CLFS packages

- Perl

  The Perl package contains the Practical Extraction and Report Language. It is required by several CLFS packages.

- Pkg-config-lite

  Needed by E2fsprogs

- Procps

  Provides a number of small, useful utilities that give information about the `/proc` filesystem.

- Psmisc

  Provides more utilties that give information about the `/proc` filesystem.

- Readline

  The Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in. This is essential for input in programs like `bash` to work properly.

- Rsyslog

  Rsyslog is an enhanced multi-threaded syslogd that supports multiple backends with very little dependencies. It provides a program that logs various system events into files in `/var/log`.

- Sed

  This package contains a stream editor. It is used in the installation procedures of most CLFS packages.

- Shadow

  This package contains programs that assist in the administration of users and groups, and passwords.

- Sysvinit

  Sysvinit is the init daemon that the clfs-bootscripts were written to work with.

- Tar

  Required to unpack the tar archives in which all CLFS packages are distributed

- Tcl

  Needed for the testsuites of several packages

- Texinfo

  This package contains programs for viewing, installing and converting info pages. It is used in the installation procedures of many CLFS packages.

- Eudev

  The Eudev package contains programs for dynamic creation of device nodes.

- Util-linux

  The Util-linux package contains miscellaneous utility programs. Among them are utilities for handling file systems, consoles, partitions, and messages. It also includes libraries that are required by E2fsprogs.

- Vim

  The Vim package contains a text editor. Users may substitute Nano, Joe, Emacs, or whatever other editor they prefer.

- XZ-Utils

  Useful for compressing files to reduce size. Also needed to uncompress tarballs for many CLFS packages

- Zlib

  The Zlib package contains compression and decompression routines used by some programs.