<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ohcnwiki.tellmey.fyi/index.php?action=history&amp;feed=atom&amp;title=TELEICU%2FOS_update_SOP</id>
	<title>TELEICU/OS update SOP - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://ohcnwiki.tellmey.fyi/index.php?action=history&amp;feed=atom&amp;title=TELEICU%2FOS_update_SOP"/>
	<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=TELEICU/OS_update_SOP&amp;action=history"/>
	<updated>2026-07-06T07:10:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.4</generator>
	<entry>
		<id>https://ohcnwiki.tellmey.fyi/index.php?title=TELEICU/OS_update_SOP&amp;diff=294&amp;oldid=prev</id>
		<title>Admin: Automated edit (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=TELEICU/OS_update_SOP&amp;diff=294&amp;oldid=prev"/>
		<updated>2026-07-06T03:10:26Z</updated>

		<summary type="html">&lt;p&gt;Automated edit (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:40, 6 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 53:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 53:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Ansible: push a hotfix playbook to a dedicated &amp;lt;code&amp;gt;emergency&amp;lt;/code&amp;gt; branch and trigger forced pulls via deploy-rs or a webhook&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Ansible: push a hotfix playbook to a dedicated &amp;lt;code&amp;gt;emergency&amp;lt;/code&amp;gt; branch and trigger forced pulls via deploy-rs or a webhook&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# NixOS: update flake and use deploy-rs to push the new generation immediately (bypass comin&#039;s poll cadence)&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# NixOS: update flake and use deploy-rs to push the new generation immediately (bypass comin&#039;s poll cadence)&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Navbox TELEICU}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Related}}&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Related}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:1.41:old-256:rev-294:wikidiff2=table:1.14.2:bc2a06be --&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ohcnwiki.tellmey.fyi/index.php?title=TELEICU/OS_update_SOP&amp;diff=256&amp;oldid=prev</id>
		<title>Admin: Create TELEICU OS update SOP (via create-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=TELEICU/OS_update_SOP&amp;diff=256&amp;oldid=prev"/>
		<updated>2026-07-06T02:54:43Z</updated>

		<summary type="html">&lt;p&gt;Create TELEICU OS update SOP (via create-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Doc header&lt;br /&gt;
|type=sop&lt;br /&gt;
|domain=teleicu&lt;br /&gt;
|title=OS update SOP&lt;br /&gt;
|order=17&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Scheduled procedure for keeping the fleet&amp;#039;s operating system up to date with security patches.&lt;br /&gt;
&lt;br /&gt;
== Cadence ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Security patches&amp;#039;&amp;#039;&amp;#039;: applied within 7 days of upstream release&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Non-security updates&amp;#039;&amp;#039;&amp;#039;: bundled into quarterly releases&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Kernel/hardware enablement&amp;#039;&amp;#039;&amp;#039;: as needed for new hardware deployments&lt;br /&gt;
&lt;br /&gt;
== Path A: Ansible ==&lt;br /&gt;
&lt;br /&gt;
Process:&lt;br /&gt;
&lt;br /&gt;
# Maintain an &amp;lt;code&amp;gt;unattended-upgrades&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;apt&amp;lt;/code&amp;gt; role in the ansible repo that pins specific package versions&lt;br /&gt;
# For security patches: update the pin list and push to repo — nodes apply on next ansible-pull cycle&lt;br /&gt;
# For quarterly updates: merge to &amp;lt;code&amp;gt;canary&amp;lt;/code&amp;gt; first, validate for 7 days, then regional rollout&lt;br /&gt;
# Monitor ansible-pull logs across the fleet for any nodes that failed to apply&lt;br /&gt;
&lt;br /&gt;
Key difference: no OS immutability. Nodes apply updates in-place. Ansible re-enforces state on each pull.&lt;br /&gt;
&lt;br /&gt;
== Path B: NixOS ==&lt;br /&gt;
&lt;br /&gt;
Process:&lt;br /&gt;
&lt;br /&gt;
# Update the nixpkgs input in the flake to the latest patched revision&lt;br /&gt;
# Rebuild in staging, validate&lt;br /&gt;
# Merge flake update to canary branch — comin nodes pick up the new generation&lt;br /&gt;
# After validation, merge to main — fleet-wide rollout&lt;br /&gt;
# Each node activates the new generation atomically (no partial update state)&lt;br /&gt;
# If a patch breaks something, generation-based rollback is instant&lt;br /&gt;
&lt;br /&gt;
Key difference: OS is immutably declared in the flake. Updates are atomic generations, not in-place package upgrades.&lt;br /&gt;
&lt;br /&gt;
== Verification ==&lt;br /&gt;
&lt;br /&gt;
After a patch cycle:&lt;br /&gt;
&lt;br /&gt;
* Sample every region — verify nodes are on the expected OS generation/package version&lt;br /&gt;
* Check VictoriaMetrics for any post-patch anomalies&lt;br /&gt;
* Review any nodes that failed to apply (network out of sync, disk full, etc.)&lt;br /&gt;
* Update [[Special:CargoTables/TeleicuSites|TeleicuSites]] if OS baseline has changed&lt;br /&gt;
&lt;br /&gt;
== Emergency patch ==&lt;br /&gt;
&lt;br /&gt;
For zero-day vulnerabilities:&lt;br /&gt;
&lt;br /&gt;
# Ansible: push a hotfix playbook to a dedicated &amp;lt;code&amp;gt;emergency&amp;lt;/code&amp;gt; branch and trigger forced pulls via deploy-rs or a webhook&lt;br /&gt;
# NixOS: update flake and use deploy-rs to push the new generation immediately (bypass comin&amp;#039;s poll cadence)&lt;br /&gt;
&lt;br /&gt;
{{Related}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>