Linux From Scratch
|This article relies on references to primary sources. (October 2013)|
|Company / developer||Gerard Beekmans et al.|
|Source model||Open source / Free Software|
|Initial release||December 1999|
|Latest stable release||7.4 / September 9, 2013|
|Package manager||None (source-based)|
|Supported platforms||IA-32, x86-64|
|Default user interface||Bash|
|License||Creative Commons licenses and MIT License|
Linux From Scratch (LFS) is a type of a Linux installation and the name of a book written by Gerard Beekmans among others. The book gives readers instructions on how to build a Linux system from source. The book is available freely from the Linux From Scratch website and is currently in version 7.4.
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 website, 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 networking, X, sound, printer and scanner support. Since Release 5.0, the BLFS book version matches the LFS book version.
In addition to the LFS and BLFS books, Cross Linux from Scratch (CLFS) describes cross compiling and Hardened Linux From Scratch (HLFS) focuses on security enhancements like the use of stack-smashing protection, PaX and address space layout randomization using grsecurity. Cross Linux from Scratch provides the necessary instructions to build a base, command-line only Linux distribution. While LFS is limited to the x86 architecture, CLFS supports a broader range of processors. CLFS 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 x86-64, Itanium, SPARC, MIPS, and Alpha. Hardened Linux From Scratch focuses on creating a more secure version of the original Linux From Scratch as its main purpose, including embedded systems.
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.
Formerly the project 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 current version (7) of LFS. 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 LFS 6.7 software
|Autoconf||Tool for producing configure scripts for C, C++, Fortran, Fortran 77, Erlang, Objective-C software on Unix-like computer systems.||GNU GPL||2.67|
|Automake||A programming tool that produces portable makefiles for use by the make program, used in compiling software.||GNU GPL||1.11.1|
|Bash||A free software Unix shell written for the GNU Project||GNU GPL||4.1|
|Binutils||A collection of programming tools for the manipulation of object code in various object file formats.||GNU GPL||2.20.1|
|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.||GNU GPL||2.4.3|
|Bzip2||A free and open source lossless data compression algorithm and program developed by Julian Seward.||GNU GPL||1.0.5|
|Coreutils||A package of GNU software containing many of the basic tools, such as cat, ls, and rm, needed for Unix-like operating systems.||GNU GPL||8.5|
|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.||GNU GPL||1.4.4|
|Diffutils||A file comparison utility that outputs the differences between two files.||GNU GPL||3.0|
|E2fsprogs||e2fsprogs (sometimes called the e2fs programs) is a set of utilities for maintaining the ext2, ext3 and ext4 file systems.||GNU GPL||1.41.12|
|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||18.104.22.168|
|Flex||flex (fast lexical analyzer generator) is a free software alternative to lex.||BSD license||2.5.35|
|Gawk||Gawk is a programming language that is designed for processing text-based data, either in files or data streams||GNU GPL||3.1.8|
|GCC||The GNU Compiler Collection (usually shortened to GCC) is a compiler system produced by the GNU Project supporting various programming languages||GNU GPL||4.5.2|
|GDBM||GDBM simple database engines||GNU GPL||1.8.3|
|Gettext||Gettext is the GNU internationalization and localization (i18n) library.||GNU GPL||0.18.1.1|
|Glibc||The GNU C Library, commonly known as glibc, is the C standard library released by the GNU Project.||GNU GPL||2.12.1|
|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.||GNU GPL||5.0.1|
|Grep||grep is a command line text search utility originally written for Unix.||GNU GPL||2.6.3|
|Groff||Groff is the GNU replacement for the troff and nroff text formatters.||GNU GPL||1.20.1|
|GRUB||GNU GRUB (short for GNU GRand Unified Bootloader) is a boot loader package from the GNU Project.||GNU GPL||1.98|
|Gzip||Gzip is a software application used for file compression. gzip is short for GNU zip||GNU GPL||1.4|
||Dual: either GPL or BSD-like License||436|
|Libtool||GNU Libtool is a GNU programming tool from the GNU build system used for creating portable compiled libraries.||GNU GPL||2.2.10|
|Linux kernel||The Linux kernel is an operating system kernel used by the Linux family of Unix-like operating systems.||GNU GPL||22.214.171.124|
|GNU m4||GNU m4 is the GNU version of the m4 macro preprocessor.||GNU GPL||1.4.14|
|Make||Make is a utility for automatically building executable programs and libraries from source code.||GNU GPL||3.82|
|MPC (C library)||0.8.2|
|ncurses||a programming library for writing text user interfaces in a terminal-independent manner||5.7|
|Readline||GNU readline is a software library created and maintained by the GNU Project.||GNU GPL||6.1|
|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.||GNU GPL||4.2.1|
|Udev Configuration Tarball||6.6 (20100128)|
|Vim language files (optional)||7.3|
|Zlib||Zlib is a software library used for data compression.||zlib license||1.2.5|
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.
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 a 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 6.3, the first package built by the user is GNU binutils. When building it, users are encouraged to time that build process using shell constructs and dub that time that 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 9.5 SBUs). The unit is not a concrete description, and must be interpreted as an approximation; many various and unrelated factors influence the wall-clock time that a package requires to build.
- "LFS Project Homepage". Linux From Scratch. Gerard Beekmans. 17 March 2008. Retrieved 17 March 2008.
- Linux From Scratch
- DistroWatch.com: Linux From Scratch
- Interview with Gerard Beekmans
- Another interview with Gerard Beekmans