.nornir/assets/skidbladnir-pipeline.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 320" font-family="-apple-system,Segoe UI,Roboto,sans-serif" font-size="13">
<defs>
<marker id="a" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto">
<path d="M0,0 L7,3 L0,6 Z" fill="#555"/>
</marker>
</defs>
<text x="24" y="28" font-weight="700" font-size="16">Skíðblaðnir — the airgap pipeline</text>
<text x="24" y="46" fill="#888" font-size="12" font-style="italic">pack → archive → fetch ║airgap║ → unfold → install → start(ordered)</text>
<!-- INTERNET SIDE -->
<rect x="24" y="70" width="360" height="180" rx="10" fill="none" stroke="#bbb" stroke-dasharray="4 3"/>
<text x="34" y="88" fill="#888" font-size="11">internet side (build host)</text>
<rect x="44" y="104" width="150" height="52" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
<text x="119" y="126" text-anchor="middle" font-weight="600">pack</text>
<text x="119" y="144" text-anchor="middle" fill="#555" font-size="11">staging tree · VERSION</text>
<rect x="214" y="104" width="150" height="52" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
<text x="289" y="126" text-anchor="middle" font-weight="600">archive</text>
<text x="289" y="144" text-anchor="middle" fill="#555" font-size="11">tar+zstd · manifest</text>
<rect x="129" y="182" width="150" height="52" rx="8" fill="#f6f6f6" stroke="#888" stroke-width="1.5"/>
<text x="204" y="204" text-anchor="middle" font-weight="600">bundle.tar.zst</text>
<text x="204" y="222" text-anchor="middle" fill="#555" font-size="11">+ .manifest.json</text>
<!-- THE GAP -->
<line x1="450" y1="70" x2="450" y2="250" stroke="#c26a2b" stroke-width="2.5" stroke-dasharray="7 5"/>
<text x="450" y="64" text-anchor="middle" fill="#c26a2b" font-weight="700" font-size="12">║ AIRGAP ║</text>
<text x="450" y="268" text-anchor="middle" fill="#c26a2b" font-size="11">disk · diode · courier</text>
<!-- SECURE SIDE -->
<rect x="516" y="70" width="360" height="180" rx="10" fill="none" stroke="#bbb" stroke-dasharray="4 3"/>
<text x="526" y="88" fill="#888" font-size="11">secure side (target) — zero network, zero shell</text>
<rect x="536" y="104" width="108" height="52" rx="8" fill="#eefaf0" stroke="#2f8f4e" stroke-width="1.5"/>
<text x="590" y="124" text-anchor="middle" font-weight="600">fetch</text>
<text x="590" y="142" text-anchor="middle" fill="#555" font-size="10">verify-on-receipt</text>
<rect x="656" y="104" width="96" height="52" rx="8" fill="#eefaf0" stroke="#2f8f4e" stroke-width="1.5"/>
<text x="704" y="124" text-anchor="middle" font-weight="600">unfold</text>
<text x="704" y="142" text-anchor="middle" fill="#555" font-size="10">Redfish·TF·KVM</text>
<rect x="764" y="104" width="96" height="52" rx="8" fill="#eefaf0" stroke="#2f8f4e" stroke-width="1.5"/>
<text x="812" y="124" text-anchor="middle" font-weight="600">install</text>
<text x="812" y="142" text-anchor="middle" fill="#555" font-size="10">PKI·layout·svc</text>
<rect x="606" y="182" width="180" height="52" rx="8" fill="#fdf2ec" stroke="#c26a2b" stroke-width="1.5"/>
<text x="696" y="204" text-anchor="middle" font-weight="600">start (dependency-ordered)</text>
<text x="696" y="222" text-anchor="middle" fill="#555" font-size="11">systemd over D-Bus · airgap_events</text>
<!-- arrows -->
<path d="M194,130 L214,130" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
<path d="M289,156 C289,170 240,172 220,182" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
<path d="M279,208 C360,208 380,160 448,140" fill="none" stroke="#c26a2b" stroke-width="1.5" marker-end="url(#a)"/>
<path d="M452,140 C490,150 505,140 536,132" fill="none" stroke="#2f8f4e" stroke-width="1.5" marker-end="url(#a)"/>
<path d="M644,130 L656,130" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
<path d="M752,130 L764,130" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
<path d="M812,156 C812,172 760,176 740,182" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
<text x="300" y="300" fill="#888" font-size="11">One sealed, content-addressed bundle folds the whole deployment — infra + software — and unfolds it on the far side, running.</text>
</svg>