<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[FOG 1.5.10.2482 iPXE 2.0.0 - intermittent UEFI boot failures on Realtek NICs (1.21.1+ and snponly.efi unaffected)]]></title><description><![CDATA[<h2>Summary</h2>
<p dir="auto">After updating FOG from <code>1.5.10.1903</code> to <code>1.5.10.2482</code>, a subset of our UEFI clients with <strong>Realtek</strong> NICs began failing to boot, intermittently — about 6% of boots.<br />
Clients with <strong>Intel</strong> NICs on the identical boot path are unaffected (0 failures in 62 boots). Reverting only <code>/tftpboot/ipxe.efi</code> to the binary shipped with <code>1.5.10.1903</code>, while leaving FOG itself on 2482, stopped the failures.</p>
<p dir="auto">The two iPXE builds involved are <strong><code>g5de5d</code> (1.21.1+)</strong> and <strong><code>g12798</code> (2.0.0)`</strong>.</p>
<h2>Environment</h2>
<table class="table table-bordered table-striped">
<tbody>
<tr>
<td>FOG (new)</td>
<td><code>1.5.10.2482</code>, commit <code>ff6410d242252fee5cf1370213b2bf459e858315</code></td>
</tr>
<tr>
<td>FOG (previous)</td>
<td><code>1.5.10.1903</code></td>
</tr>
<tr>
<td>OS</td>
<td>Ubuntu 22.04.5 LTS, kernel 5.15.0-191-generic</td>
</tr>
<tr>
<td>PHP</td>
<td>8.1.2</td>
</tr>
<tr>
<td>Database</td>
<td>MariaDB, separate host</td>
</tr>
<tr>
<td>Fleet</td>
<td>~2,500 clients, ~450 PXE boots/day</td>
</tr>
<tr>
<td>DHCP</td>
<td>ISC DHCP, per-host <code>filename</code>; 1,879 hosts on <code>ipxe.efi</code></td>
</tr>
</tbody>
</table>
<p dir="auto">iPXE versions as reported by clients in the HTTP User-Agent:</p>
<ul>
<li>before: <code>iPXE/1.21.1+ (g5de5d)</code> — <code>ipxe.efi</code> 1,107,456 bytes</li>
<li>after: <code>iPXE/2.0.0 (g12798)</code> — <code>ipxe.efi</code> 1,144,832 bytes</li>
</ul>
<p dir="auto"><code>installfog.sh</code> replaced every binary under <code>/tftpboot</code> at the time of the update.</p>
<h2>Boot flow</h2>
<p dir="auto">DHCP (option 67) → <code>ipxe.efi</code> via TFTP → <code>boot.php</code> → exit type <code>refind_efi</code> → <code>imgfetch refind.conf</code> + <code>chain -ar refind_x64.efi</code> → rEFInd → local Windows Boot Manager.</p>
<p dir="auto">rEFInd is chainloaded over HTTP (not installed on the ESP). Its config uses <code>scanfor netboot,internal,external,optical,manual</code>, <code>timeout -1</code>, <code>use_nvram false</code>.</p>
<h2>Symptom</h2>
<p dir="auto">On a failing boot, <strong>every network operation succeeds</strong>:</p>
<pre><code>POST /fog/service/ipxe/boot.php        200    8658 b   iPXE/2.0.0 (g12798)
GET  /fog/service/ipxe/bgdark.png      200   16523 b   iPXE/2.0.0 (g12798)
GET  /fog/service/ipxe/refind.conf     200   36624 b   iPXE/2.0.0 (g12798)
GET  /fog/service/ipxe/refind_x64.efi  200  222155 b   iPXE/2.0.0 (g12798)
</code></pre>
<p dir="auto">…and then the client returns to PXE and repeats. Correct byte counts every time, no failed transfers, nothing in the Apache error log. Users report either a boot loop or the machine sitting on the rEFInd menu.</p>
<p dir="auto">The failure therefore occurs <strong>after all network I/O has completed</strong> — at or after <code>chain -ar</code> into rEFInd, not during a transfer.</p>
<p dir="auto">It is <strong>intermittent</strong>: the same host may succeed on one attempt and fail on the next (we observed 1 to 11 consecutive failures on one machine). Disconnecting the network cable, forcing local disk boot, always works — that is how our on-site staff were<br />
recovering machines.</p>
<h2>Evidence</h2>
<h3>1. Same host, same day, only the loader changed</h3>
<p dir="auto">Dell OptiPlex 3020, Realtek. From the <code>tftpd</code> log:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>time</th>
<th>request</th>
<th>result</th>
</tr>
</thead>
<tbody>
<tr>
<td>07:30:19</td>
<td><code>RRQ ... filename ipxe.efi</code> (2.0.0)</td>
<td>failed, never reached Windows</td>
</tr>
<tr>
<td>11:30:39</td>
<td><code>RRQ ... filename snponly.efi</code> (2.0.0)</td>
<td>booted, Windows in 38 s</td>
</tr>
</tbody>
</table>
<h3>2. Old binary via per-host DHCP override</h3>
<p dir="auto">A second OptiPlex 3020 (Realtek) served the <code>1.5.10.1903</code> <code>ipxe.efi</code>: 2/2 unattended boots in ~18–25 s, after previously requiring a cable pull on every attempt.</p>
<h3>3. Failure rates</h3>
<p dir="auto">Loader determined from the <code>tftpd</code> log — i.e. what each client actually fetched, not what the config says:</p>
<pre><code>PRE-revert — /tftpboot/ipxe.efi = iPXE 2.0.0 (g12798)
  loader           NIC       ok    failed   rate
  ipxe.efi         Realtek   131      9      6.4%
  ipxe.efi         Intel      62      0      0%
  undionly.kpxe    Realtek    96      0      0%
  undionly.kpxe    Intel       5      0      0%
  snponly.efi      any         2      0      0%

POST-revert — /tftpboot/ipxe.efi = iPXE 1.21.1+ (g5de5d), FOG still on 2482
  ipxe.efi         Realtek    14      0      0%
  ipxe.efi         Intel       9      1*     (*BitLocker recovery prompt, unrelated)
  undionly.kpxe    Realtek     8      0      0%
</code></pre>
<p dir="auto">The cleanest comparison is <strong>Intel vs Realtek on the same binary and the same UEFI path</strong>: 0/62 vs 9/140, p ≈ 0.02.</p>
<p dir="auto">The <code>undionly.kpxe</code> row (0/96 Realtek) points the same way but is <strong>confounded</strong> - those clients are BIOS-mode, so they differ in boot path as well as in which driver iPXE uses. We offer it as supporting, not primary, evidence. The <code>snponly.efi</code> sample is too small to stand on its own.</p>
<h2>What we ruled out</h2>
<p dir="auto">None of these discriminate between failing and working hosts:</p>
<ul>
<li><strong>Machine model</strong> — OptiPlex 3020: 26 booted fine, 7 failed. Same model, both outcomes.</li>
<li><strong>BIOS version</strong> — A02 and A19 appear among failures <em>and</em> among successes.</li>
<li><strong>Disk type</strong> — failures include NVMe, SATA SSD and spinning HDD.</li>
<li><strong>Optical drive presence</strong> — 70% of working hosts vs 57% of failing hosts.</li>
</ul>
<p dir="auto">We also confirmed the FOG side is unchanged: <code>$_exitTypes</code>, <code>$sanboot</code> and <code>$refind</code> in <code>bootmenu.class.php</code> are byte-identical between 1903 and 2482, and <code>refind.conf</code> / <code>refind_x64.efi</code> are served byte-identically before and after (verified by response size in the access log).</p>
<h2>Affected hardware</h2>
<p dir="auto">All report <code>Realtek PCIe GbE Family Controller</code> under Windows. We do not have PCI IDs to hand but can collect them.</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>vendor / board</th>
<th>BIOS</th>
<th>count</th>
</tr>
</thead>
<tbody>
<tr>
<td>Dell OptiPlex 3020</td>
<td>A19</td>
<td>4</td>
</tr>
<tr>
<td>Dell OptiPlex 3020</td>
<td>A02</td>
<td>3</td>
</tr>
<tr>
<td>Dell OptiPlex 3000</td>
<td>1.41.0</td>
<td>2</td>
</tr>
<tr>
<td>Gigabyte H110M-S2H</td>
<td>F22</td>
<td>1</td>
</tr>
<tr>
<td>Gigabyte H81M-S2V</td>
<td>F2</td>
<td>1</td>
</tr>
<tr>
<td>Fujitsu ESPRIMO D556/2</td>
<td>V5.0.0.12 R1.35.0</td>
<td>1</td>
</tr>
<tr>
<td>ASUS (System Product Name)</td>
<td>0803</td>
<td>1</td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Unaffected:</strong> Intel <code>I219-LM</code> (Dell Pro Slim QCS1250) — 0 failures in 62 boots.</p>
<h2>Current workaround</h2>
<p dir="auto">We reverted <strong>only</strong> <code>/tftpboot/ipxe.efi</code> to the <code>1.5.10.1903</code> binary, leaving FOG on 2482. Every path we have tested works with that combination:</p>
<ul>
<li>normal boot and rEFInd chainload</li>
<li>full <strong>image deploy</strong> — task script, 11 MB <code>bzImage</code> + 31 MB <code>init.xz</code> over HTTP, FOG client OS, NFS mount of <code>/images</code>, partclone, reboot into the deployed image, client check-in</li>
</ul>
<h2>Hypothesis and questions</h2>
<p dir="auto"><code>snponly.efi</code> — the same 2.0.0 build, but using the firmware’s UEFI SNP driver instead of iPXE’s own — works on hardware where <code>ipxe.efi</code> fails. That points at <strong>iPXE 2.0.0’s built-in Realtek driver</strong>. Since all network I/O completes before the failure, we suspect driver teardown/handover when chainloading another EFI application rather than anything in the transfers themselves. The intermittency suggests a race rather than a hard incompatibility.</p>
<p dir="auto">Questions:</p>
<ol>
<li>Are there known changes to the Realtek driver, or to EFI driver unbinding / <code>shutdown()</code> behaviour, between <code>g5de5d</code> and <code>g12798</code>?</li>
<li>Could the state iPXE leaves the NIC in affect a chainloaded EFI application - specifically rEFInd, which scans for netboot entries (<code>scanfor netboot,...</code>) and may re-enumerate SNP?</li>
<li>Is <code>snponly.efi</code> the recommended long-term choice for Realtek clients, or would you prefer a fix in the built-in driver?</li>
</ol>
<p dir="auto">We have ~1,200 Realtek clients and can reproduce readily. Happy to run test builds, capture verbose iPXE console output, or collect PCI IDs and chipset revisions.</p>
<p dir="auto"><em>AI-assisted-by: Claude Code (Opus 5)</em></p>
]]></description><link>http://forums.fogproject.org/topic/18249/fog-1-5-10-2482-ipxe-2-0-0-intermittent-uefi-boot-failures-on-realtek-nics-1-21-1-and-snponly-efi-unaffected</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 12:19:09 GMT</lastBuildDate><atom:link href="http://forums.fogproject.org/topic/18249.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Sep 2026 11:02:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to FOG 1.5.10.2482 iPXE 2.0.0 - intermittent UEFI boot failures on Realtek NICs (1.21.1+ and snponly.efi unaffected) on Fri, 18 Sep 2026 11:10:27 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/48379">@AUTH-IT-Center</a> I do believe snponly would be the recommended, rather than iPXE’s driver.</p>
<p dir="auto">The developers at iPXE wrote the driver on their own (of course using documentation and stuff, but for all intents/purposes it is still a handrolled driver) so anything is possible.</p>
<p dir="auto">We shipped the native iPXE 2.0.0 mainly because of the feature it allows with actual Secureboot capabilities and instead of embedding everyfile with a custom script, a more dynamic approach for when iPXE releases new version we can upgrade more easily.</p>
<p dir="auto">For what it’s worth, I would almost want more people to default to snponly.efi (or secureboot/snponly-shimx64.efi if using/wanting secureboot after enrolling your machines of course) because this is supposed to be using the generic driver for EFI boot protocols on the NIC rather then attempting to discover the NIC using a driver loaded.</p>
]]></description><link>http://forums.fogproject.org/post/158726</link><guid isPermaLink="true">http://forums.fogproject.org/post/158726</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Fri, 18 Sep 2026 11:10:27 GMT</pubDate></item></channel></rss>