======================================================================
= Linux_From_Scratch =
======================================================================
Introduction
======================================================================
'Linux From Scratch' (LFS) is a type of Linux installation, and the
name of a book written by Gerard Beekmans, and as of May 2021, mainly
maintained by Bruce Dubbs. The book gives readers instructions on how
to build a Linux system from source. The book is available freely from
the Linux From Scratch site.
Projects under LFS
======================================================================
'Linux From Scratch' is a way to install a working Linux system by
building all components of it manually. This is, naturally, a longer
process than installing a pre-compiled Linux distribution. According
to the 'Linux From Scratch' site, the advantages to this method are a
compact, flexible and secure system and a greater understanding of the
internal workings of the Linux-based operating systems.
To keep LFS small and focused, the book 'Beyond Linux From Scratch'
(BLFS) was created, which presents instructions on how to further
develop the basic Linux system that was created in LFS. It introduces
and guides the reader through additions to the system including the X
Window System, desktop environments (KDE, GNOME, Xfce, LXDE),
productivity software, web browsers, programming languages and tools,
multimedia software, and network management and system administration
tools. Since Release 7.4, the BLFS book version matches the LFS book
version.
The book 'Cross Linux From Scratch' (CLFS) focuses on cross compiling,
including compiling for headless or embedded systems that can 'run'
Linux, but lack the resources needed to 'compile' Linux. CLFS supports
a broad range of processors and addresses advanced techniques not
included in the LFS book such as cross-build toolchains, multilibrary
support (32 & 64-bit libraries side-by-side), and alternative
instruction set architectures such as Itanium, SPARC, MIPS, and Alpha.
The project is archived and was last updated in August 2017.
The Linux from Scratch project, like BitBake, also supports
cross-compiling Linux for ARM embedded systems such as the Raspberry
Pi and BeagleBone.
The book 'Hardened Linux From Scratch' (HLFS) focuses on security
enhancements such as hardened kernel patches, mandatory access control
policies, stack-smashing protection, and address space layout
randomization. Besides its main purpose of creating a security-focused
operating system, HLFS had the secondary goal of being a security
teaching tool. It has not been updated since 2011. As of 17 February
2025, the HLFS book has disappeared from the LFS web site.
'Automated Linux From Scratch' (ALFS) is a project designed to
automate the process of creating an LFS system. It is aimed at users
who have gone through the LFS and BLFS books several times and wish to
reduce the amount of work involved. A secondary goal is to act as a
test of the LFS and BLFS books by directly extracting and running
instructions from the XML sources of the LFS and BLFS books.
Other subprojects:
Name Description
|MLFS |Multilib-LFS is a variant of LFS that builds a system which is
able to execute 32-bit binaries.
|GLFS |Gaming Linux From Scratch is based on BLFS and helps user
install gaming support software like Steam or Wine on a new LFS or
MLFS system.
|Hints |Collection of documents that explain how to enhance LFS
system in ways that are not included in the LFS or BLFS books.
|Patches |Central repository for all patches useful to an LFS user.
|LFS Editor's Guide |A document that describes the LFS development
process.
|Museum |Copies of ancient LFS and BLFS versions.
Requirements and procedure
======================================================================
A clean partition and a working Linux system with a compiler and some
essential software libraries are required to build LFS. Instead of
installing from an existing Linux system, one can also use a Live CD
to build an LFS system.
The project formerly maintained the Linux From Scratch Live CD. LFS
Live CD contains all the source packages (in the full version of the
Live CD only), the LFS book, automated building tools and (except for
the minimal Live CD version) an Xfce GUI environment to work in. The
official LFS Live CD is no longer maintained, and cannot be used to
build the LFS version 7 or later. There are, however, two unofficial
builds that can be used to build a 32-bit or 64-bit kernel and
userspace respectively for LFS 7.x.
First, a toolchain must be compiled consisting of the tools used to
compile LFS, like GCC, glibc, binutils, and other necessary utilities.
Then, the root directory must be changed, (using chroot), to the
toolchain's partition to start building the final system. One of the
first packages to compile is glibc; after that, the toolchain's linker
must be adjusted to link against the newly built glibc, so that all
other packages that will make up the finished system can be linked
against it as well. During the chroot phase, bash's hashing feature is
turned off and the temporary toolchain's bin directory moved to the
end of PATH. This way the newly compiled programs come first in PATH
and the new system builds on its own new components.
List of packages in LFS
======================================================================
Component Description License
Acl An access control list (ACL), with respect to a computer file
system, is a list of permissions attached to an object. rowspan="8" |
GNU GPL
Attr Commands for Manipulating Filesystem Extended Attributes.
Autoconf Tool for producing configure scripts for C, C++, Fortran,
Fortran 77, Erlang, Objective-C software on Unix-like computer
systems.
Automake A programming tool that produces portable makefiles for use
by the make program, used in compiling software.
Bash A free software Unix shell written for the GNU Project
bc bc is a basic calculator (often referred to as bench calculator),
is "an arbitrary precision calculator language" with syntax similar to
the C programming language.
Binutils A collection of programming tools for the manipulation of
object code in various object file formats.
Bison A parser generator that is part of the GNU Project. Bison
converts a grammar description for a context-free grammar into source
code for a C, C++ or Java parser.
Bzip2 A free and open source lossless data compression algorithm and
program developed by Julian Seward. BSD-like License
Check A unit testing framework for C. rowspan="5" | GNU GPL
Coreutils A package of GNU software containing many of the basic
tools, such as cat, ls, and rm, needed for Unix-like operating
systems.
DejaGnu A framework for testing other programs. It has a main script
called runtest that goes through a directory looking at configuration
files and then runs some tests with given criteria.
Diffutils A data comparison utility that outputs the differences
between two files.
|E2fsprogs e2fsprogs (sometimes called the e2fs programs) is a set of
utilities for maintaining the ext2, ext3 and ext4 file systems.
Elfutils A collection of utilities and libraries to read, create and
modify ELF binary files. GNU GPL and GNU LGPL
|Eudev A fork of udev to avoid dependency on the systemd
architecture. The resulting fork is called eudev and it makes udev
functionality available without systemd. GNU GPL
Expat A stream-oriented XML 1.0 parser library, written in C. MIT
License
Expect Expect is a Unix automation and testing tool as an extension
to the Tcl scripting language, for interactive applications such as
telnet, ftp, passwd, fsck, rlogin, tip, ssh, and others. Public domain
File file command is a standard Unix program for recognizing the type
of data contained in a computer file. BSD-like License
Findutils The GNU Find Utilities are the basic directory searching
utilities of the GNU operating system. GNU GPL
Flex flex (fast lexical analyzer generator) is a free software
alternative to lex. BSD license
Gawk Gawk is a programming language that is designed for processing
text-based data, either in files or data streams rowspan="11" | GNU
GPL
GCC The GNU Compiler Collection (usually shortened to GCC) is a
compiler system produced by the GNU Project supporting various
programming languages
GDBM GDBM simple database engines
Gettext Gettext is the GNU internationalization and localization
(i18n) library.
Glibc The GNU C Library, commonly known as glibc, is the C standard
library released by the GNU Project.
GMP The GNU Multiple-Precision Library, also known as GMP, is a free
library for arbitrary-precision arithmetic, operating on signed
integers, rational numbers, and floating point numbers.
Gperf A perfect hash function generator. For a given list of strings,
it produces a hash function and hash table, in form of C or C++ code,
for looking up a value depending on the input string. The hash
function is perfect, which means that the hash table has no
collisions, and the hash table lookup needs a single string comparison
only.
Grep grep is a command line text search utility originally written
for Unix.
Groff Groff is the GNU replacement for the troff and nroff text
formatters.
GRUB GNU GRUB (short for GNU GRand Unified Bootloader) is a boot
loader package from the GNU Project.
Gzip Gzip is a software application used for file compression. gzip
is short for GNU zip
iana-etc. iana-etc. installs services and protocols using data from
the Internet Assigned Numbers Authority. Included are snapshots of the
data from the IANA, scripts to transform that data into the needed
formats, and scripts to fetch the latest data. Open Software License
Inetutils A collection of network tools, including: telnet, ftp, and
rsh. rowspan="5" | GNU GPL
Intltool A set of tools to centralize translation of many different
file formats using GNU gettext-compatible PO files.
iproute2 |A collection of userspace utilities for controlling and
monitoring various aspects of networking in the Linux kernel,
including routing, network interfaces, tunnels, traffic control, and
network-related device drivers.
Kbd A package contains tools for managing the Linux console (Linux
console, virtual terminals on it, keyboard, etc.). Mainly, what they
do is loading console fonts and keyboard maps. Also this package
contains a set of various fonts and keyboard maps.
Kmod A multi-call binary which implements the programs used to
control Linux Kernel modules.
less less is a terminal pager program on Unix, Windows and Unix-like
systems used to view (but not change) the contents of a text file one
screen at a time. Dual: either GPL or BSD-like License
LFS-Bootscripts The LFS-Bootscripts package contains a set of scripts
to start/stop the LFS system at bootup/shutdown. The configuration
files and procedures needed to customize the boot process are
described in the following sections. Creative Commons licenses and MIT
License
Libcap An alternative to the superuser model of privilege under
Linux. BSD-3-Clause or GPL-2.0-only
Libelf The elfutils project provides libraries and tools for ELF
files and DWARF data. Most utilities in this package are available in
other packages, but the library is needed to build the Linux kernel
using the default (and most efficient) configuration. dual
GPLv2+/LGPLv3+
Libffi A Portable Foreign Function Interface Library. MIT License
Libpipeline Libpipeline is a C library for manipulating pipelines of
subprocesses in a flexible and convenient way. rowspan="2" | GNU GPL
Libtool GNU Libtool is a GNU programming tool from the GNU build
system used for creating portable compiled libraries.
Libxcrypt Package that provides the libcrypt library needed by
various packages (notably, Shadow) for hashing passwords. It replaces
the obsolete libcrypt implementation in Glibc. GNU LGPLv2.1
Linux kernel The Linux kernel is an operating system kernel used by
the Linux family of Unix-like operating systems. rowspan="4" | GNU GPL
GNU m4 GNU m4 is the GNU version of the m4 macro preprocessor.
make Make is a utility for automatically building executable programs
and libraries from source code.
Man-DB Man-DB is an implementation of the standard Unix documentation
system accessed using the man command. It uses a Berkeley DB database
in place of the traditional flat-text whatis databases.
Man-pages A man page (short for manual page) is a form of online
software documentation usually found on a Unix or Unix-like operating
system. Multiple Licenses.
Meson an open source build system meant to be both extremely fast,
and, even more importantly, as user friendly as possible. Apache
License
MPC A C library for the arithmetic of complex numbers with
arbitrarily high precision GNU LGPL
MPFR GNU C library for multiple-precision floating-point computations
with correct rounding. GNU LGPL and GNU GPL for special exception part
of the source code
ncurses A programming library for writing text user interfaces in a
terminal-independent manner X11 License
Ninja A small build system with a focus on speed. Apache License
OpenSSL A software library for applications that provide secure
communications over computer networks against eavesdropping, and
identify the party at the other end. It is widely used by Internet
servers, including the majority of HTTPS websites. Apache License 1.0
and four-clause BSD License
Patch A computer tool for Unix programs that updates text files
according to instructions contained in a separate file, called a
'patch file'. GNU GPL
Perl |A dynamic interpreted programming language Artistic License 1.0
or GNU GPL
Pkgconf A computer program that provides a unified interface for
querying installed libraries for the purpose of compiling software
from its source code. GNU GPL
Procps-NG A set of command line and full-screen utilities that
provide information out of the pseudo-filesystem most commonly located
at /proc. This filesystem provides a simple interface to the kernel
data structures. The programs of procps generally concentrate on the
structures that describe the processes running on the system. GNU GPL
and GNU LGPL
Psmisc A set of some small useful utilities that use the proc
filesystem. GNU GPL
Python An open source interpreted high-level programming language for
general-purpose programming rowspan="2" | Python Software Foundation
License
Python Documentation Package contains the Python development
environment.
Readline GNU readline is a software library created and maintained by
the GNU Project. rowspan="2" | GNU GPL
sed sed ('stream editor') is a Unix utility that (a) parses text
files and (b) implements a programming language which can apply
textual transformations to such files.
Shadow A tool on most Unix and Unix-like operating systems used to
change a user's password. The password entered by the user is run
through a key derivation function to create a hashed version of the
new password, which is saved. Only the hashed version is stored; the
entered password is not saved for security reasons. Artistic License
or BSD-like License
Sysklogd A Kernel and system logging daemons that provides two system
utilities which provide support for system logging and kernel message
trapping. Support of both internet and unix domain sockets enables
this utility package to support both local and remote logging.
rowspan="3" | GNU GPL
Sysvinit
tar tar is a program that provides the ability to create tar
archives, as well as various other kinds of manipulation.
Tcl 'Tool Command Language' is a dynamic scripting language. BSD-like
License
Texinfo A typesetting syntax used for generating documentation in
both on-line also printed form and the official documentation format
of the GNU project. GNU GPL
tzdata The public-domain time zone database contains code and data
that represent the history of local time for many representative
locations around the globe. Public domain and BSD
Udev Configuration Tarball The Udev package contains programs for
dynamic creation of device nodes. The development of udev has been
merged with systemd, but most of systemd is incompatible with LFS.
Here we build and install just the needed udev files. Creative Commons
licenses and MIT License
util-linux The Util-linux package contains miscellaneous utility
programs. Among them are utilities for handling file systems,
consoles, partitions, and messages. GNU GPL
Vim A text editor built to create and change any kind of text. Free
software (Vim License), charityware
Wheel |This library is the reference implementation of the Python
wheel packaging standard, as defined in PEP 427. |MIT
XML::Parser Perl module that interfaces with Expat Artistic License
2.0
XZ Utils A general-purpose data compression software with a high
compression ratio. XZ Utils were written for POSIX-like systems, but
also work on some not-so-POSIX systems. XZ Utils are the successor to
LZMA Utils. GNU GPL and GNU LGPL
Zlib Zlib is a software library used for data compression. zlib
license
zstd zstd a fast lossless compression algorithm and data compression
tool. Compress or decompress .zst files. BSD + GPLv2 dual license.
This is a list of the packages included in CLFS version 1.1.0. Unless
otherwise noted, this list is applicable to all supported
architectures.
*Acl 2.3.2
*attr 2.5.2
*Autoconf 2.72
*Automake 1.18.1
*Bash 5.2
*Bash Documentation 3.2
*bc 7.0.3
*Bin86 (x86_64 non-multilib only)
*Binutils 2.45
*Bison 3.8.2
*Bzip2 1.0.8
*CLFS-Bootscripts 1.0pre10
*Coreutils 9.7
*D-Bus 1.16.2
*DejaGnu 1.6.3
*Diffutils 3.12
*E2fsprogs 1.47.3
*Elftoaout 2.3 (Sparc and Sparc64 only)
*Elfutils 0.193
*Expat 2.7.1
*Expect 5.45.4
*File 5.46
*Findutils 4.10.0
*Flex 2.6.4
*flit-core 3.12.0
*Gawk 5.3.2
*GCC 15.2.0
*Gdbm 1.26
*Gettext 0.26
*Glibc 2.42
*gmp 6.3.0
*gperf 3.3
*Grep 3.12
*Groff 1.23.0
*GRUB 2.12
*Gzip 1.14
*Hfsutils 3.2.6 (PowerPC and PowerPC64 only)
*iana-Etc 20250807
*inetutils 2.6
*intltool 0.51.0
*iproute2 2.6
*Jinja2 3.1.6
*kbd 2.8.0
*kmod 34.2
*Less 679
*lfs-bootscripts 20250827
*libcap 2.76
*libffi 3.5.2
*libpipeline 1.5.8
*LILO 22.8 (x86_64 non-multilib only)
*Libtool 2.5.4
*libxcrypt 4.4.38
*Linux 6.16.1
*lz4 1.10.0
*GNU m4 1.4.20
*Make 4.4.1
*man 1.6e
*man-db 2.13.1
*Man pages 6.15
*MarkupSafe 3.0.2
*Meson 1.8.3
*mktemp 1.5
*Module-Init-Tools 3.4
*mpc 1.3.1
*GNU MPFR 4.2.2
*ncurses 6.5.20250809
*Ninja 1.13.1
*OpenSSL 3.5.2
*packaging 25.0
*Parted 1.8.8 (PowerPC and PowerPC64 only)
*patch 2.8
*Perl 5.42.0
*Pkg-config 2.5.1
*PowerPC Utils 1.1.3 (PowerPC and PowerPC64 only)
*procps-ng 4.0.5
*psmisc 23.7
*Python 3.13.7
*Readline 8.3
*Sed 4.9
*setuptools 80.9.0
*Shadow 4.18.0
*silo 1.4.13 (Sparc and Sparc64 only)
*Sysklogd 2.7.2
*systemd 257.8
*systemd-man-pages 257.8
*Sysvinit 3.14
*tar 1.35
*Tcl 8.6.16
*Texinfo 7.2
*tree 1.5.1.1
*Tzdata 2025b
*udev-lfs 20230818
*Udev 124
*Util-linux 2.41.1
*Vim 9.1.1629
*Yaboot 1.3.13 (PowerPC and PowerPC64 only)
*wheel 0.46
*XML-Parser 2.47
*xz 5.8.1
*Zlib 1.3.1
*zstd 1.5.7
Standard build unit
======================================================================
A "standard build unit" ("SBU") is a term used during initial
bootstrapping of the system, and represents the amount of time
required to build the first package in LFS on a given computer. Its
creation was prompted by the long time required to build an LFS
system, and the desire of many users to know how long a source tarball
will take to build ahead of time.
As of Linux From Scratch version 10.1, the first package built by the
user is GNU binutils. When building it, users are encouraged to
measure the build process using shell constructs and dub that time the
system's "standard build unit". Once this number is known, an estimate
of the time required to build later packages is expressed relative to
the known SBU.
Several packages built during compilation take much longer to build
than binutils, including the GNU C Library (rated at 4.2 SBUs) and the
GNU Compiler Collection (rated at 11 SBUs). The unit must be
interpreted as an approximation; various factors influence the actual
time required to build a package.
Reception
======================================================================
LWN.net reviewed LFS in 2004:
Tux Machines wrote a review about Linux From Scratch 6.1 in 2005:
Tux Machines also has a second and a third part of the review.
See also
======================================================================
Other source-based Linux distributions:
* Gentoo Linux
* Source Mage
* GoboLinux
* CRUX
License
=========
All content on Gopherpedia comes from Wikipedia, and is licensed under CC-BY-SA
License URL:
http://creativecommons.org/licenses/by-sa/3.0/
Original Article:
http://en.wikipedia.org/wiki/Linux_From_Scratch