linux_dist
• Markdown

Part 01 Introduction and Prerequisites

Part 1: Introduction and Prerequisites

Overview

This guide covers building a complete Linux distribution from scratch. The project is divided into two main approaches:

  1. Simple Approach - "No Bloat Linux" using minimal packages (Phase 1 only)
  2. Complete Approach - Linux From Scratch (LFS) full system build

What You'll Build

Phase 1: Minimal Installation System

  • Bootable USB/ISO installer
  • Based on BusyBox utilities
  • Includes: Linux kernel, glibc, BusyBox, Bash, sysvinit
  • Purpose: Installation program only

Phase 2: Full Linux Distribution

  • Complete operating system
  • 102 packages from source
  • Customizable and bloat-free
  • Fully functional desktop capable

Two Build Approaches

Approach 1: No Bloat Linux (Minimal)

  • Quick setup (~1-2 days)
  • Minimal package set
  • 32-bit or 64-bit support
  • Good for learning basics

Approach 2: Linux From Scratch (Complete)

  • Comprehensive build (~1-2 weeks)
  • 102 packages
  • Full documentation
  • Production-ready system

Architecture Choice

32-bit (i386)

make i386_defconfig

64-bit (x86_64)

make x86_64_defconfig

Important: Compile all packages on matching architecture (32-bit system for 32-bit dist, 64-bit for 64-bit).

System Requirements

Hardware Requirements (Recommended)

  • CPU: 4+ cores (minimum 1 core)
  • RAM: 8 GB (minimum 4 GB)
  • Disk: 35 GB free space (minimum 10 GB for Phase 1)
  • Partition: Dedicated partition for build

Host System Requirements

Your existing Linux system must have these tools installed:

Software Minimum Version Notes
Bash 3.2 /bin/sh must link to bash
Binutils 2.13.1 Versions >2.45 untested
Bison 2.7 /usr/bin/yacc should link to bison
Coreutils 8.1 —
Diffutils 2.8.1 —
Findutils 4.2.31 —
Gawk 4.0.1 /usr/bin/awk must link to gawk
GCC 5.4 Includes g++; versions >15.2.0 untested
Grep 2.5.1a —
Gzip 1.3.12 —
Linux Kernel 5.4 Must support UNIX 98 PTY
M4 1.4.10 —
Make 4.0 —
Patch 2.5.4 —
Perl 5.8.8 —
Python 3.4 —
Sed 4.1.5 —
Tar 1.22 —
Texinfo 5.0 —
Xz 5.0.0 —

Version Check Script

Create and run this script to verify your system:

#!/bin/bash
# version-check.sh - Check host system requirements

# Save to version-check.sh and run: bash version-check.sh

export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
MYSH=$(readlink -f /bin/sh)
echo "/bin/sh -> $MYSH"
echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
unset MYSH

echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1

if [ -h /usr/bin/yacc ]; then
  echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
  echo yacc is `/usr/bin/yacc --version | head -n1`
else
  echo "yacc not found"
fi

echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1

if [ -h /usr/bin/awk ]; then
  echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; then
  echo awk is `/usr/bin/awk --version | head -n1`
else
  echo "awk not found"
fi

gcc --version | head -n1
g++ --version | head -n1
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
python3 --version
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1  # texinfo version
xz --version | head -n1

echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
  then echo "g++ compilation OK";
  else echo "g++ compilation failed"; fi
rm -f dummy.c dummy

Trusted Sources Only

All packages must come from trusted sources:

  • kernel.org - Linux kernel and utilities
  • gnu.org - GNU tools and libraries
  • Official project sites - Listed in package manifest

Never use:

  • Random patches from unknown domains
  • Unofficial mirrors
  • Modified sources from untrusted repositories

Build Time Estimates

No Bloat Linux (Phase 1)

  • 4-core system: 2-4 hours
  • 8-core system: 1-2 hours
  • Single core: 8-12 hours

Linux From Scratch (Full)

  • 4-core system: 1-2 days
  • 8-core system: 12-24 hours
  • Single core: 3-5 days

Note: Times vary based on CPU speed, disk I/O, and system load.

Understanding SBU (Standard Build Units)

LFS uses SBU to estimate build times:

  • 1 SBU = Time to build Binutils (first package)
  • Other packages measured in SBUs
  • Example: If Binutils takes 10 minutes, a 2 SBU package takes 20 minutes

Track your SBU:

time { ./configure && make && make install; }

First Binutils build time becomes your reference SBU.

Next Steps

After verifying your system meets requirements:

  1. Part 2: Prepare host system (partition, filesystem, environment)
  2. Part 3: Download all required packages
  3. Part 4: Build cross-compilation toolchain
  4. Part 5+: Continue with system build

Resources

Important Notes

  • Read all instructions before starting
  • Don't skip version checks
  • Keep notes of your build process
  • Test in virtual machine first (recommended)
  • Back up important data before partitioning