SkyVision logo — Tux with a smiling child's face SkyVisionby Longer Vision

Documentation / The SkyVision Book

The SkyVision Book

1.0 edition · frozen 2026-05-20 · matches the 1.0 “Firstborn” package set exactly. The web edition below carries the preface, the complete table of contents with chapter abstracts, and a fully rendered sample section. The complete ~340-page text ships as PDF, ePub, and the skyvision-book package (svpkg add skyvision-book/usr/share/doc/book/).

Preface

How to read this book

This book describes, command by command, how the SkyVision distribution is built from upstream source code — and therefore how you can build it yourself on any existing Linux host. It follows the discipline pioneered by Linux From Scratch: nothing is installed that we did not compile, and nothing is compiled that we do not explain.

You do not need to be a programmer. You need a working Linux host (any modern distro, or the SkyVision Base ISO itself), about 30 GB of disk, patience, and a willingness to read error messages. A full build takes roughly 55 SBU — about 5 hours on a modern 8-core machine, a weekend on an old laptop.

Conventions: commands you type are shown on lines beginning with $ (as user sv) or # (as root inside the chroot). Long commands are broken with \. Every configure flag that is not self-evident gets a paragraph of explanation — if you find one that doesn't, that is a bug in the Book.

SBU The Standard Build Unit

Build times vary wildly between machines, so the Book measures them in SBUs: one SBU is however long Binutils Pass 1 (section 5.2) takes on your hardware. Time it once, then every later package's estimate scales accordingly. GCC Pass 2 is the heavyweight at ~11 SBU; most packages are under 0.5.

Host requirements (chapter 2): bash ≥ 5.0, gcc ≥ 12, make ≥ 4.3, python ≥ 3.10, texinfo, and a kernel ≥ 5.10. A check script, sv-host-check.sh, ships in the source tree.

Contents

Table of contents

Click any chapter for its abstract and section list. Sections marked web are rendered in full in the web edition.

Part I · Preparation

1 Introduction & philosophy
Why build from source; how SkyVision relates to and diverges from LFS 12.x (see Appendix C for the literal diff); the package selection rationale; how errata and versioning work.
  1. 1.1 How this all started
  2. 1.2 SkyVision vs. LFS — same school, different homework
  3. 1.3 Versioning, errata, and security updates
  4. 1.4 Getting help (forum, IRC, lists)
2 Preparing the host system
Verifying host tools with sv-host-check.sh; creating and mounting the $SV partition (ext4, 30 GB recommended); directory skeleton.
  1. 2.1 Host tool requirements
  2. 2.2 Creating a new partition
  3. 2.3 Mounting at $SV
  4. 2.4 The $SV/tools and $SV/sources layout
3 Packages and patches
The complete manifest: 87 source tarballs and 14 SkyVision patches, with versions, checksums, and one-line descriptions of why each package earns its place. A wget-list and md5sums file are provided.
  1. 3.1 All packages (87)
  2. 3.2 All patches (14)
  3. 3.3 Fetching and verifying
4 Final preparations
Creating the unprivileged sv build user; environment hygiene (.bash_profile, .bashrc, umask, the $SV_TGT triplet x86_64-sv-linux-gnu); the SBU stopwatch; about test suites.
  1. 4.1 The sv user
  2. 4.2 The build environment
  3. 4.3 SBUs and test suites

Part II · The toolchain

5 Cross-compiling the toolchain
Building a cross-toolchain that runs on the host but targets SkyVision, so that nothing from the host's libraries can leak into the new system.
  1. 5.1 Toolchain technical notes — why a cross-compiler even on the same architecture
  2. 5.2 Binutils-2.43.1 — Pass 1  webrendered below
  3. 5.3 GCC-14.2.0 — Pass 1
  4. 5.4 Linux-6.12.30 API headers
  5. 5.5 Glibc-2.41
  6. 5.6 Libstdc++ from GCC
6 Cross-compiling temporary tools
The minimal userland (m4, ncurses, bash, coreutils, file, findutils, gawk, grep, gzip, make, patch, sed, tar, xz, binutils pass 2, gcc pass 2) compiled with the cross-toolchain into $SV.
  1. 6.1–6.17 one section per package, GCC Pass 2 (~11 SBU) closing the chapter
7 Entering the chroot
Changing ownership to root; mounting /dev, /proc, /sys, /run; entering the chroot; creating the FHS directory tree, essential files and links; temporary tools cleanup.
  1. 7.1 Ownership and virtual kernel file systems
  2. 7.2 chroot
  3. 7.3 Directories, users, groups
  4. 7.4 Additional temporary tools
  5. 7.5 Cleaning and backing up

Part III · The system

8 Building system software
The heart of the Book: the final, permanent build of all 87 packages inside the chroot, in dependency order, each with its test suite. This is where your system stops being temporary.
  1. 8.1–8.87 one section per package, glibc first, svpkg-1.0.2 last — the final package the system installs by hand is its own package manager
9 System configuration & boot scripts
Installing the SkyVision boot scripts; configuring sysvinit's /etc/inittab; rc.d run levels explained line by line; network configuration; console, locale, and clock; /etc/fstab.
  1. 9.1 The SkyVision boot script package
  2. 9.2 inittab and run levels
  3. 9.3 Device management with udev
  4. 9.4 Network setup
  5. 9.5 fstab
10 Kernel, GRUB, and first boot
Configuring and compiling Linux 6.12 LTS (the shipped .config annotated option by option); installing GRUB for UEFI and BIOS; the release file; rebooting into the system you built.
  1. 10.1 Configuring the kernel
  2. 10.2 GRUB on UEFI and BIOS
  3. 10.3 /etc/sv-release and os-release
  4. 10.4 The first boot

Part IV · Beyond the base

11 Networking & security hardening
OpenSSH server policy; nftables firewall starter ruleset; user lockdown; CVE tracking and how the security@ advisories map to svpkg updates.
  1. 11.1 OpenSSH
  2. 11.2 nftables
  3. 11.3 Keeping up with advisories
12 svpkg — packaging your system
Turning chapter 8's hand-built system into managed packages: recipe anatomy, building, signing, hosting your own repository — closing the loop between the Book and the binary distro. See also the standalone svpkg manual.
  1. 12.1 Recipe anatomy
  2. 12.2 svpkg build
  3. 12.3 Your own repository
A–C Appendices
  1. A. Rationale and contents of every package — what each installs and why it's here
  2. B. The dependency graph, as a generated SVG poster
  3. C. SkyVision 1.0 vs. LFS 12.x — an honest, literal diff of what we changed and why
Sample section · rendered in full

The SkyVision Book · Part II · Chapter 5 · 5.2 Binutils-2.43.1 — Pass 1

5.2 Binutils-2.43.1 — Pass 1

The Binutils package contains the linker, the assembler, and other tools for handling object files. We build it first because both GCC and Glibc perform tests on the linker and assembler at configure time to decide which of their own features to enable — the toolchain we are about to grow is shaped by this very first package.

Approximate build time: 1.2 SBU  ·  Required disk space: 677 MB
This is the package you time to define one SBU on your machine: time { ../configure ... && make && make install; }

5.2.1 Installation of cross-Binutils

The Binutils documentation recommends building in a dedicated directory:

$ mkdir -v build
$ cd build

Now prepare Binutils for compilation:

$ ../configure --prefix=$SV/tools \
             --with-sysroot=$SV        \
             --target=$SV_TGT          \
             --disable-nls              \
             --enable-gprofng=no        \
             --disable-werror           \
             --enable-new-dtags         \
             --enable-default-hash-style=gnu

The meaning of the configure options:

--prefix=$SV/tools — installs the cross tools into the throwaway tools directory; nothing built in this chapter survives into the final system, so we keep it strictly separated.

--with-sysroot=$SV — tells the build system to look in $SV for the target system libraries, keeping the host system's libraries strictly out of our new toolchain. Cross-contamination from the host is the single most common cause of a broken build, and this flag is our first line of defense.

--target=$SV_TGT — because $SV_TGT (x86_64-sv-linux-gnu) differs from the host triplet, this activates Binutils' cross-compilation mode: tools are built that run on the host but produce binaries for SkyVision.

--disable-nls — no translations in temporary tools; less to build, nothing of value lost at this stage.

--enable-default-hash-style=gnu — emits only GNU-style symbol hash tables, which are faster to look up than the classic ELF tables and the only style our Glibc will read.

Continue with compiling and installing the package:

$ make
$ make install
Details on this package — installed programs, libraries and short descriptions of ld, as, objdump and friends — are collected in Appendix A.2, “Contents of Binutils.”

← 5.1 Toolchain technical notes 5.3 GCC-14.2.0 — Pass 1 →

Remaining sections are in the PDF / ePub editions while the web port continues — progress is tracked on the forum ↗.