add website and GitHub Pages deployment

This commit is contained in:
Astral
2026-09-01 11:23:34 +02:00
parent cb1da62339
commit da28f784a8
48 changed files with 3392 additions and 0 deletions
+78
View File
@@ -0,0 +1,78 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Build pipeline — Keru OS</title>
<meta name="description" content="How build-root.sh and mkfs-root.sh turn a make.conf into a bootable rootfs, driven by Kama.">
<link rel="stylesheet" href="assets/css/style.css">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>ける</text></svg>">
</head>
<body>
<nav class="top" data-nav></nav>
<header class="pagehead">
<p class="crumbs"><a href="index.html">home</a> / <a href="docs.html">docs</a> / build pipeline</p>
<h1>Build pipeline</h1>
<p>From make.conf to a bootable filesystem.</p>
</header>
<section>
<div class="wrap">
<div class="prose">
<p>The build pipeline is the machinery between your profile and a running system. It's intentionally thin — a few shell scripts that orchestrate Kama, not a build system monolith.</p>
<h3>The stages</h3>
<h4>Stage 0 — bootstrap the toolchain</h4>
<p><code>build-root.sh</code> boots a toolchain from nothing: <code>binutils</code>, <code>gcc</code>, your chosen <code>libc</code>, then the <code>toolchain</code> package. This is the "fully from scratch" step — the stage that separates a source distro from one that seeds binaries.</p>
<h4>Stage 1 — base system</h4>
<p>The <code>BASE_PACKAGES</code> set from your profile is built and installed into <code>$ROOT</code>. Every package compiles against the stage-0 toolchain.</p>
<h4>Stage 2 — the swappables</h4>
<p>Exactly what you chose: the kernel (<code>$KERNEL</code>), the init system (<code>$INIT</code>), your privilege-elevation tool (<code>$SUDO</code>), and your network tools (<code>$NET</code>). Nothing preselected — the picks in your make.conf are the picks that get built.</p>
<h4>Stage 3 — finalize the root</h4>
<p><code>mkfs-root.sh</code> formats and assembles the target as your chosen filesystem, producing the rootfs that will boot.</p>
<div class="terminal">
<div class="tbar"><span class="dot r"></span><span class="dot y"></span><span class="dot g"></span><span class="t">$ sh scripts/build-root.sh</span></div>
<pre><span class="c">[ keru ]</span> building Keru rootfs into /tmp/keru/root
<span class="c">[ keru ]</span> profile: init=runit libc=glibc fs=ext4 kernel=linux sudo=doas
<span class="c">[ keru ]</span> stage 0: bootstrap toolchain (gcc binutils glibc)
<span class="c">[ keru ]</span> stage 1: base system
<span class="c">[ keru ]</span> stage 2: kernel + init + sudo + net
<span class="c">[ keru ]</span> stage 3: finalize ext4 root
<span class="k">[ keru ] rootfs ready: /tmp/keru/root</span></pre>
</div>
<h3>The scripts</h3>
<table>
<tr><th>Script</th><th>Job</th></tr>
<tr><td><code>scripts/common.sh</code></td><td>Shared helpers; knows the sibling-repo layout (<code>KAMA_DIR</code>, <code>PKGS_DIR</code>).</td></tr>
<tr><td><code>scripts/build-root.sh</code></td><td>The orchestrator — runs the four stages above.</td></tr>
<tr><td><code>scripts/mkfs-root.sh</code></td><td>Formats the target root as the chosen filesystem.</td></tr>
</table>
<h3>Convenience entrypoints</h3>
<div class="code-block">make rootfs # sh scripts/build-root.sh
make install # sh installer/install.sh
make live-init # syntax-check live/init
make recipe-check # sh -n every recipe in kama-packages</div>
<div class="callout">The pipeline is the honest core of "from scratch": no binary base image, no opaque build tool — a shell script reading a profile and driving a shell package manager.</div>
<p><a href="mkfs-root.html">mkfs-root reference</a> · <a href="kama-repos.html">How the repos fit</a> · <a href="docs.html">← Docs</a></p>
</div>
</div>
</section>
<footer data-footer></footer>
<noscript><div style="text-align:center;padding:16px">See the <a href="sitemap.html">sitemap</a> for all pages.</div></noscript>
<script src="assets/js/include.js" data-base="."></script>
</body>
</html>