mirror of
https://github.com/kernelkit/infix.git
synced 2026-08-04 14:43:01 +02:00
Deployed 42256cf4 to dev with MkDocs 1.6.1 and mike 2.1.3
This commit is contained in:
+152
-46
@@ -269,28 +269,6 @@
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
About
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../introduction/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Introduction
|
||||
|
||||
@@ -335,10 +313,10 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
|
||||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
@@ -351,8 +329,8 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_3">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_2">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
CLI
|
||||
</label>
|
||||
@@ -576,10 +554,10 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
||||
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
@@ -592,8 +570,8 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_4">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_3">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Networking
|
||||
</label>
|
||||
@@ -744,10 +722,10 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
|
||||
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
@@ -760,8 +738,8 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_5">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_4">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Services
|
||||
</label>
|
||||
@@ -874,10 +852,10 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked>
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" checked>
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
|
||||
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
@@ -890,8 +868,8 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_6">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_5">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
System
|
||||
</label>
|
||||
@@ -993,6 +971,30 @@
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#system-boot" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
System Boot
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="System Boot">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#failure-modes" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
Failure Modes
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
@@ -1262,10 +1264,10 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
|
||||
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
@@ -1278,8 +1280,8 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_7">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_6">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Scripting
|
||||
</label>
|
||||
@@ -1417,10 +1419,10 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
|
||||
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
@@ -1433,8 +1435,8 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_8">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_7">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Developer's Corner
|
||||
</label>
|
||||
@@ -1719,6 +1721,30 @@
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#system-boot" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
System Boot
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="System Boot">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#failure-modes" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
Failure Modes
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
@@ -1975,6 +2001,69 @@ virtualized instances.</p>
|
||||
partition can be selected interactively at boot using the arrow keys. It
|
||||
is also possible to permanently configure the default partition from
|
||||
Infix using the <a href="#configuration">Bootloader Configuration</a>.</p>
|
||||
<h2 id="system-boot">System Boot<a class="headerlink" href="#system-boot" title="Permanent link">¶</a></h2>
|
||||
<p>After the system firmware (BIOS or and <a href="./">boot loader</a> start
|
||||
Linux the following happens. The various failure modes, e.g., missing
|
||||
password in VPD, are detailed later in this section.</p>
|
||||
<p><img alt="System boot flowchart" src="../img/fail-secure.svg" /></p>
|
||||
<ol>
|
||||
<li>Before mounting <code>/cfg</code> and <code>/var</code> partitions, hosting read-writable
|
||||
data like <code>startup-config</code> and container images, the system first
|
||||
checks if a factory reset has been requested by the user, if so it
|
||||
wipes the contents of these partitions</li>
|
||||
<li>Linux boots with a device tree which is used for detecting generic
|
||||
make and model of the device, e.g., number of interfaces. It may
|
||||
also reference an EEPROM with <a href="../vpd/">Vital Product Data</a>. That is
|
||||
where the base MAC address and per-device password hash is stored.
|
||||
(Generic builds use the same MAC address and password)</li>
|
||||
<li>On every boot the system's <code>factory-config</code> and <code>failure-config</code> are
|
||||
generated from the YANG<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> models of the current firmware version.
|
||||
This ensures that a factory reset device can always boot, and that
|
||||
there is a working fail safe, or rather <em>fail secure</em>, mode</li>
|
||||
<li>On first power-on, and after a factory reset, the system does not
|
||||
have a <code>startup-config</code>, in which case <code>factory-config</code> is copied
|
||||
to <code>startup-config</code> -- if a per-product specific version exists it
|
||||
is preferred over the generated one</li>
|
||||
<li>Provided the integrity of the <code>startup-config</code> is OK, a system
|
||||
service loads and activates the configuration</li>
|
||||
</ol>
|
||||
<h3 id="failure-modes">Failure Modes<a class="headerlink" href="#failure-modes" title="Permanent link">¶</a></h3>
|
||||
<p>So, what happens if any of the steps above fail?</p>
|
||||
<p><strong>VPD Fail</strong></p>
|
||||
<p>The per-device password cannot be read, or is corrupt, so the system
|
||||
<code>factory-config</code> and <code>failure-config</code> are not generated:</p>
|
||||
<ol>
|
||||
<li>First boot, or after factory reset: <code>startup-config</code> cannot be
|
||||
created or loaded, and <code>failure-config</code> cannot be loaded. The
|
||||
system ends up in an unrecoverable state, i.e., <strong>RMA<sup id="fnref:3"><a class="footnote-ref" href="#fn:3">3</a></sup> Mode</strong></li>
|
||||
<li>The system has booted (at least) once with correct VPD and password
|
||||
and already has a <code>startup-config</code>. Provided the <code>startup-config</code>
|
||||
is OK (see below), it is loaded and system boots successfully</li>
|
||||
</ol>
|
||||
<p>In both cases, external factory reset modes/button will not help, and
|
||||
in the second case will cause the device to fail on the next boot.</p>
|
||||
<blockquote>
|
||||
<p>The second case does not yet have any warning or event that can be
|
||||
detected from the outside. This is planned for a later release.</p>
|
||||
</blockquote>
|
||||
<p><strong>Broken startup-config</strong></p>
|
||||
<p>If loading <code>startup-config</code> fails for some reason, e.g., invalid JSON
|
||||
syntax, failed validation against the system's YANG model, or a bug in
|
||||
the system's <code>confd</code> service, the <em>Fail Secure Mode</em> is triggered and
|
||||
<code>failure-config</code> is loaded (unless VPD Failure, see above).</p>
|
||||
<div class="admonition tip">
|
||||
<p class="admonition-title">Tip</p>
|
||||
<p>Please see the <a href="../branding/">Branding & Releases</a> document for how to
|
||||
provide per-product <code>failure-config</code>, or <code>factory-config</code> to suit your
|
||||
product's preferences.</p>
|
||||
</div>
|
||||
<p><em>Fail Secure Mode</em> is a fail-safe mode provided for debugging the
|
||||
system. The default<sup id="fnref:4"><a class="footnote-ref" href="#fn:4">4</a></sup> creates a setup of isolated interfaces with
|
||||
communication only to the management CPU, SSH and console login using
|
||||
the device's factory reset password, IP connectivity only using IPv6
|
||||
link-local, and device discovery protocols: LLDP, mDNS-SD. The login
|
||||
and shell prompt are set to <code>failure-c0-ff-ee</code>, the last three octets of
|
||||
the device's base MAC address.</p>
|
||||
<h2 id="system-upgrade">System Upgrade<a class="headerlink" href="#system-upgrade" title="Permanent link">¶</a></h2>
|
||||
<p>Much of the minutiae of software upgrades is delegated to <a href="https://rauc.io">RAUC</a>,
|
||||
which offers lots of benefits out-of-the-box:</p>
|
||||
@@ -2237,6 +2326,23 @@ can funtion reasonably well without a persistent <code>/var</code>, loosing
|
||||
<li id="fn:1">
|
||||
<p>See <a href="../upgrade/">Upgrade & Boot Order</a> for more information. <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
|
||||
</li>
|
||||
<li id="fn:2">
|
||||
<p>YANG is a modeling language from IETF, replacing that used for
|
||||
SNMP (MIB), used to describe the subsystems and properties of
|
||||
the system. <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
|
||||
</li>
|
||||
<li id="fn:3">
|
||||
<p>Return Merchandise Authorization (RMA), i.e., broken beyond repair
|
||||
by end-user and eligible for return to manufacturer. <a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text">↩</a></p>
|
||||
</li>
|
||||
<li id="fn:4">
|
||||
<p>Customer specific builds can define their own <code>failure-config</code>.
|
||||
It may be the same as <code>factory-config</code>, with the hostname set to
|
||||
<code>failure</code>, or a dedicated configuration that isolates interfaces, or
|
||||
even disables ports, to ensure that the device does not cause any
|
||||
security problems on the network. E.g., start forwarding traffic
|
||||
between previously isolated VLANs. <a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 4 in the text">↩</a></p>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user