<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Builder Node on Deevnet IoTaaS</title><link>https://deevnet.github.io/deevnet-docs/docs/platforms/management-plane/builder-node/</link><description>Recent content in Builder Node on Deevnet IoTaaS</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://deevnet.github.io/deevnet-docs/docs/platforms/management-plane/builder-node/index.xml" rel="self" type="application/rss+xml"/><item><title>Workstation Role</title><link>https://deevnet.github.io/deevnet-docs/docs/platforms/management-plane/builder-node/workstation-role/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/platforms/management-plane/builder-node/workstation-role/</guid><description>&lt;h1 id="workstation-role">
 Workstation Role
 &lt;a class="anchor" href="#workstation-role">#&lt;/a>
&lt;/h1>
&lt;h2 id="purpose">
 Purpose
 &lt;a class="anchor" href="#purpose">#&lt;/a>
&lt;/h2>
&lt;p>The &lt;code>workstation&lt;/code> role configures a host as a &lt;strong>developer/admin workstation&lt;/strong> with users, development tools, and infrastructure automation tooling.&lt;/p>
&lt;hr>
&lt;h2 id="capabilities">
 Capabilities
 &lt;a class="anchor" href="#capabilities">#&lt;/a>
&lt;/h2>
&lt;h3 id="user-management">
 User Management
 &lt;a class="anchor" href="#user-management">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>Creates dev users with configurable primary/extra groups&lt;/li>
&lt;li>Fetches SSH public keys from GitHub&lt;/li>
&lt;li>Sets up home directories and shell preferences&lt;/li>
&lt;/ul>
&lt;h3 id="development-tools">
 Development Tools
 &lt;a class="anchor" href="#development-tools">#&lt;/a>
&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Category&lt;/th>
 &lt;th>Packages&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Core&lt;/strong>&lt;/td>
 &lt;td>git, vim, tmux, golang&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>ISO/Image&lt;/strong>&lt;/td>
 &lt;td>Tools for working with disk images&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>X11&lt;/strong>&lt;/td>
 &lt;td>Display support for GUI tools&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="hashicorp-tools">
 HashiCorp Tools
 &lt;a class="anchor" href="#hashicorp-tools">#&lt;/a>
&lt;/h3>
&lt;p>Configures the HashiCorp RPM repository and installs:&lt;/p></description></item><item><title>Artifacts Role</title><link>https://deevnet.github.io/deevnet-docs/docs/platforms/management-plane/builder-node/artifacts-role/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/platforms/management-plane/builder-node/artifacts-role/</guid><description>&lt;h1 id="artifacts-role">
 Artifacts Role
 &lt;a class="anchor" href="#artifacts-role">#&lt;/a>
&lt;/h1>
&lt;p>Serves the builder&amp;rsquo;s artifacts: everything a substrate host installs from. What is in scope for the
air gap, and why, is in 
 &lt;a href="https://deevnet.github.io/deevnet-docs/deevnet-docs/docs/architecture/builder/#air-gap-scope">Builder → Air-Gap Scope&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="current-capabilities">
 Current Capabilities
 &lt;a class="anchor" href="#current-capabilities">#&lt;/a>
&lt;/h2>
&lt;p>The artifacts server provides:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Artifact Type&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Kickstart files&lt;/strong>&lt;/td>
 &lt;td>OS installation automation scripts&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>PXE boot artifacts&lt;/strong>&lt;/td>
 &lt;td>Kernel, initrd, boot configuration&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Custom scripts&lt;/strong>&lt;/td>
 &lt;td>Post-install automation payloads&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>OS images&lt;/strong>&lt;/td>
 &lt;td>ISO images or extracted install trees&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Container images&lt;/strong>&lt;/td>
 &lt;td>Service image tarballs, loaded by the roles that run them&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Artifacts are served via HTTP at &lt;code>artifacts.&amp;lt;site&amp;gt;.deevnet.net&lt;/code>.&lt;/p></description></item><item><title>Bootstrap Role</title><link>https://deevnet.github.io/deevnet-docs/docs/platforms/management-plane/builder-node/bootstrap-role/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/platforms/management-plane/builder-node/bootstrap-role/</guid><description>&lt;h1 id="bootstrap-role">
 Bootstrap Role
 &lt;a class="anchor" href="#bootstrap-role">#&lt;/a>
&lt;/h1>
&lt;p>The &lt;code>bootstrap&lt;/code> role in &lt;code>deevnet.builder&lt;/code> makes the Builder the thing new hosts boot from. It works in
two modes (
 &lt;a href="https://deevnet.github.io/deevnet-docs/deevnet-docs/docs/architecture/builder/#authority-transition">Builder → Authority Transition&lt;/a>):&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Mode&lt;/th>
 &lt;th>The Builder provides&lt;/th>
 &lt;th>Switched by&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Core-authoritative&lt;/strong> (normal)&lt;/td>
 &lt;td>PXE boot files over TFTP (&lt;code>in.tftpd&lt;/code>); the core router answers DNS and DHCP&lt;/td>
 &lt;td>&lt;code>make core-auth&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Bootstrap-authoritative&lt;/strong>&lt;/td>
 &lt;td>DNS, DHCP and TFTP from dnsmasq, and the site&amp;rsquo;s gateway, with records and reservations from inventory&lt;/td>
 &lt;td>&lt;code>make bootstrap-auth&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>The rest of this page is the PXE side, which is the same in both modes. How to switch is

 &lt;a href="https://deevnet.github.io/deevnet-docs/deevnet-docs/docs/runbook/substrate/building-recovery/authority-transition/">Authority Transition&lt;/a>.&lt;/p></description></item><item><title>Network Controller Role</title><link>https://deevnet.github.io/deevnet-docs/docs/platforms/management-plane/builder-node/network-controller-role/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/platforms/management-plane/builder-node/network-controller-role/</guid><description>&lt;h1 id="network-controller-role">
 Network Controller Role
 &lt;a class="anchor" href="#network-controller-role">#&lt;/a>
&lt;/h1>
&lt;h2 id="purpose">
 Purpose
 &lt;a class="anchor" href="#purpose">#&lt;/a>
&lt;/h2>
&lt;p>The network controller role deploys &lt;strong>centralized management software&lt;/strong> for switches and access points as Podman containers managed by systemd.&lt;/p>
&lt;hr>
&lt;h2 id="controllers">
 Controllers
 &lt;a class="anchor" href="#controllers">#&lt;/a>
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Controller&lt;/th>
 &lt;th>Managed Devices&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>TP-Link Omada SDN&lt;/td>
 &lt;td>EAP650-Outdoor AP (adopted); the SG2218 switch is standalone until 
 &lt;a href="https://deevnet.github.io/deevnet-docs/deevnet-docs/docs/changes/2026/0009-access-switch-adoption/">CHG-0009&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Since 
 &lt;a href="https://deevnet.github.io/deevnet-docs/deevnet-docs/docs/changes/2026/0008-domain-vms-build-out/">CHG-0008&lt;/a> the controller runs on
&lt;code>dv02nms001v01&lt;/code>, and the Builder keeps a stopped cold spare for when that VM is down. The
pre-VLAN substrate is built without it
(
 &lt;a href="https://deevnet.github.io/deevnet-docs/deevnet-docs/docs/architecture/substrate/management-plane/#network-management">Management Plane → Network management&lt;/a>).&lt;/p></description></item></channel></rss>