<?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 Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot]]></title><description><![CDATA[<p dir="auto">Hello, the goal of using FOG Project at the company where I work is to capture an image of a Raspberry Pi 4 that is already configured (with SSH, Wi-Fi, locale, and keyboard settings enabled).</p>
<p dir="auto">I haven’t been able to find a topic to help me set this up; for now, I am relying on Gemini and Claude for assistance.</p>
<p dir="auto">Project Overview:<br />
I am trying to capture an image from a Raspberry Pi 4 (2 GB RAM) to a FOG Project server (v1.5.10). The Pi 4 uses an external 512 GB JMicron SSD/USB drive connected to an USB 3.0 port (/dev/sda).</p>
<p dir="auto">What has been done and validated so far:</p>
<p dir="auto">PXE / TFTP Chainloading: The Raspberry Pi 4 successfully boots via native PXE, loads U-Boot, and downloads via TFTP the boot.scr script, the bzImageARM64 kernel, the uInitrd ramdisk, and the bcm2711-rpi-4-b.dtb DTB file</p>
<p dir="auto">Network Driver Issue Resolved: The default FOG bzImageARM64 kernel lacked support for the Pi 4’s onboard Broadcom NIC. I replaced it with the official Raspberry Pi ARM64 kernel (kernel8.img / 6.18.46-v8+).</p>
<p dir="auto">Hardware Detection:</p>
<p dir="auto">The native Broadcom Ethernet controller (bcmgenet) initializes properly (eth0: Link is Up - 1Gbps/Full).</p>
<p dir="auto">An IP address is assigned via DHCP (udhcpc: lease of 192.168.203.73 obtained).</p>
<p dir="auto">The external storage drive is properly detected at /dev/sda (JMicron drive with sda1 and sda2 partitions).</p>
<p dir="auto">Current boot.cmd Configuration (U-Boot):</p>
<p dir="auto">setenv kernel_addr_r 0x00080000<br />
setenv kernel_comp_addr_r 0x0a000000<br />
setenv kernel_comp_size 0x02000000<br />
setenv fdt_addr_r 0x02600000<br />
setenv ramdisk_addr_r 0x03000000</p>
<p dir="auto">setenv bootargs console=tty1 root=/dev/ram0 rw ramdisk_size=275000 web=192.168.203.113/fog/ loglevel=7 mode=debug type=up mac=dc:a6:32:c8:b4:33 osid=50 img=ImagePi4 storage=192.168.203.113:/images/ storageip=192.168.203.113 imgType=mps imgPartitionType=all storagedev=/dev/sda</p>
<p dir="auto">tftp ${kernel_addr_r} 7efcf632/bzImageARM64<br />
tftp ${ramdisk_addr_r} 7efcf632/uInitrd<br />
tftp ${fdt_addr_r} 7efcf632/bcm2711-rpi-4-b.dtb</p>
<p dir="auto">booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}</p>
<p dir="auto">Current Issue:<br />
During the FOS Linux kernel boot, the process hangs right after displaying the network link line (bcmgenet fd580000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx) and does not automatically proceed to the FOG init scripts / check-in process (/bin/fog.checkin).</p>
<p dir="auto">Has anyone successfully automated a full FOS capture workflow on ARM64 / Raspberry Pi 4 architecture?</p>
]]></description><link>http://forums.fogproject.org/topic/18229/fog-project-image-capture-on-raspberry-pi-4-arm64-via-u-boot</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 11:20:24 GMT</lastBuildDate><atom:link href="http://forums.fogproject.org/topic/18229.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 25 Aug 2026 12:40:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Fri, 04 Sep 2026 12:43:51 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> If you can put a dumb switch between the Pi and the cable you currently connect into:</p>
<p dir="auto">Connect the cable you normally plugin to the Pi into the 5 port switch then your pi to that switch and this should test the connectivity STP problem I believe is occurring.</p>
]]></description><link>http://forums.fogproject.org/post/158635</link><guid isPermaLink="true">http://forums.fogproject.org/post/158635</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Fri, 04 Sep 2026 12:43:51 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Fri, 04 Sep 2026 12:43:27 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> Haven’t done this on a Pi specifically, so take this as pointers rather than a known fix, but a few things jump out.</p>
<p dir="auto">First, if udhcpc is already getting a lease, then the FOS init is running, so it’s not really a kernel hang, it’s stopping somewhere in the init scripts after network up. Which makes me look straight at mode=debug in your bootargs. Debug mode in FOS is interactive, it waits for you to hit a key or type at a shell before it does anything. If the console you’re watching isn’t the one it’s prompting on, that looks exactly like a hang. I’d drop mode=debug for a run and see if it moves on, and separately get a serial console on the Pi (enable_uart in config.txt, add console=serial0,115200 alongside your tty1) so you can actually see where it stops instead of guessing from HDMI.</p>
<p dir="auto">Second, you swapped the kernel but kept the stock FOS initrd. That’s fine in principle, but the FOG init was built against FOG’s own kernel config. Worth checking that the Pi kernel has everything the init expects when it mounts root from /dev/ram0 with that ramdisk_size, and that nothing later in the init is relying on a module or kernel feature the Pi build doesn’t ship. A serial log with loglevel=7 will tell you quickly.</p>
<p dir="auto">Third, unrelated to the hang but it’ll bite you right after: for a capture (type=up) FOG normally points storage at the dev share, storage=IP:/images/dev/, not /images/. The image gets moved into /images/ by the server once the upload finishes. If you hand rolled the bootargs from a deploy example, that one’s easy to miss.</p>
<p dir="auto">Also, since the target is a single USB SSD, you might get more mileage checking whether the FOS init even handles /dev/sda as a capture target the way you’d expect on ARM, but that’s step two. Get it past checkin first. Would be good to hear if Tom or Sebastian have opinions on running FOS with a non FOG kernel, I don’t think that’s a path many have gone down.</p>
]]></description><link>http://forums.fogproject.org/post/158634</link><guid isPermaLink="true">http://forums.fogproject.org/post/158634</guid><dc:creator><![CDATA[SimonGuenther]]></dc:creator><pubDate>Fri, 04 Sep 2026 12:43:27 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Fri, 04 Sep 2026 12:33:34 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/7217">@Tom-Elliott</a></p>
<p dir="auto">Regarding OPNsense, there isn’t anyone on the infrastructure team available to look into it right now; I can probably check on that Monday morning.</p>
<p dir="auto">To be transparent with you, I’ve been retraining for a new career since February 2026 and only just obtained my IT diploma in July. What helps is that I’m persistent with projects and usually manage to get the job done. I’ll get back to you once I have the information regarding OPNsense.</p>
<p dir="auto"><img src="/assets/uploads/files/1788524961978-c7c21587-422e-4b8f-9e41-a83d1b13068a-image.png" alt="c7c21587-422e-4b8f-9e41-a83d1b13068a-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="/assets/uploads/files/1788525030086-bb057c4c-aaeb-418a-8680-53868b66c841-image.png" alt="bb057c4c-aaeb-418a-8680-53868b66c841-image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>http://forums.fogproject.org/post/158633</link><guid isPermaLink="true">http://forums.fogproject.org/post/158633</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Fri, 04 Sep 2026 12:33:34 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Fri, 04 Sep 2026 12:21:24 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> That screen is the STP pattern, and I’m now fairly confident that’s your DHCP problem. Look at the timing: <code>bootflow scan</code> starts DHCP the instant the link comes up, retries for two cycles (about 20 seconds total), then gives up. Yesterday’s “1 ms” success was typed at the prompt <em>after</em> the board had been sitting there a while. A switch port running classic spanning tree drops everything for roughly 30 seconds after link-up. First 20 seconds: nothing gets through; a minute later: instant lease. That matches every screenshot you’ve posted.</p>
<p dir="auto">U-Boot can’t be made to wait longer without a saved environment, and without an SD card you can’t save one. So this is fixed on the switch, not on the Pi: ask whoever runs it to enable <strong>PortFast</strong> (Cisco) / <strong>edge port</strong> (most others) on the ports the Pis plug into, or move to RSTP. That is a normal setting for any PXE client, not a Pi special case. If you want proof before asking, plug the Pi into a dumb unmanaged switch for one boot; if <code>bootflow scan</code> gets a lease first time, you have your answer.</p>
<p dir="auto">Two more things from that screen:</p>
<ul>
<li><code>0 Storage Device(s) found</code>. Last time it found 1 (the USB SSD). If the SSD isn’t attached, there’s nothing to deploy to, so make sure it’s plugged in and powered for the deploy test.</li>
<li>I still need the three things from my last post, and I can’t go further without them: whether <code>FOG_TFTP_ROOT_DIR</code> exists in FOG Settings → TFTP Server; the contents of <code>/tftpboot/pxelinux.cfg/01-88-a2-9e-53-34-c0</code> <em>after</em> you queue a Deploy task; and <code>ls -l /tftpboot/arm_Image /tftpboot/arm_init.cpio.gz</code>. Those tell me whether the FOG side is doing its job on your rebuilt server. Everything else in this thread is now on the network side.</li>
</ul>
]]></description><link>http://forums.fogproject.org/post/158632</link><guid isPermaLink="true">http://forums.fogproject.org/post/158632</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Fri, 04 Sep 2026 12:21:24 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Fri, 04 Sep 2026 12:11:25 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/7217">@Tom-Elliott</a></p>
<p dir="auto">I created a new snapshot to avoid losing data again and having to start everything from scratch; right now, I’m stuck on this page on the Raspberry Pi.</p>
<p dir="auto"><img src="/assets/uploads/files/1788523883182-f92b6fed-893f-4b84-8055-223df6e0998b-image.png" alt="f92b6fed-893f-4b84-8055-223df6e0998b-image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>http://forums.fogproject.org/post/158631</link><guid isPermaLink="true">http://forums.fogproject.org/post/158631</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Fri, 04 Sep 2026 12:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Fri, 04 Sep 2026 11:27:21 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> Sorry about the VM. Take the snapshot, and also export the host and image from the web UI (Hosts → Export Host, Images → Export Image), so the next rebuild is an import rather than a retype.</p>
<p dir="auto">Your screenshot is actually the best news so far, and it answers your “fine-tune” question with “there is nothing to type”:</p>
<p dir="auto"><strong>U-Boot’s DHCP works now.</strong> <code>DHCP client bound to address 192.168.203.77 (1 ms)</code> — twice, once inside <code>bootflow scan</code> and once by hand. Whatever was blocking it on the old setup is gone. (The <code>C0A8CB4D.img</code> “File not found” right after is harmless: with no bootfile from DHCP, U-Boot guesses a name from its IP and fails to fetch it. <code>setenv autoload no</code> silences it, but you can’t save that without a card, and it costs nothing.)</p>
<p dir="auto"><strong><code>bootflow scan</code> is already doing the FOG boot path for you.</strong> Look at the top of your screen: after DHCP it asked the TFTP server for <code>pxelinux.cfg/default-arm-bcm283x</code>, then <code>default-arm</code>, then <code>default</code> (and, above what’s visible, <code>01-88-a2-9e-53-34-c0</code> first). That <em>is</em> <code>pxe get</code> — U-Boot runs it by itself as part of standard boot, no <code>bootcmd</code>, no environment, no <code>boot.scr</code>. Every one came back “File not found” because FOG only writes the <code>01-&lt;mac&gt;</code> file while that host has a task queued, and nothing was queued. So the whole automation is: queue the task in the web UI, power the Pi on, done. No typing.</p>
<p dir="auto"><strong>Drop <code>boot.scr</code> entirely.</strong> <code>Wrong image format for "source" command</code> is because your <code>boot.scr</code> is plain text; <code>source</code> only runs <code>mkimage</code>-wrapped scripts. You don’t need to fix that, you need to stop using it — the <code>pxe</code> path replaces it.</p>
<p dir="auto">So, on the rebuilt server, please confirm two things and then do one test:</p>
<ul>
<li>FOG Settings → TFTP Server has a <code>FOG_TFTP_ROOT_DIR</code> entry reading <code>/tftpboot</code>. If it doesn’t, the install is older than the fix; run the updater on the beta channel.</li>
<li>Queue a <strong>Deploy</strong> task for <code>Raspberry-test</code>, then on the server <code>cat /tftpboot/pxelinux.cfg/01-88-a2-9e-53-34-c0</code> — it should start <code># Generated by FOG Project</code> and contain <code>kernel arm_Image</code> — and <code>ls -l /tftpboot/arm_Image /tftpboot/arm_init.cpio.gz</code>. Paste both here.</li>
<li>Then just power-cycle the Pi and let <code>bootflow scan</code> run. It should now find the <code>01-</code> file, pull <code>arm_Image</code>, and boot into FOS.</li>
</ul>
<p dir="auto">On “can’t get an IP via DHCP” during deployment: I need to know <em>which</em> DHCP. U-Boot’s is fine per your screenshot. If you mean FOS itself (after the kernel boots, the FOG banner, <code>Attempting to check in</code> never coming), that’s a different network stack — tell me which kernel booted (FOG’s <code>arm_Image</code> via the <code>01-</code> file, or <code>kernel8.img</code> from your old script) and paste the lines around <code>udhcpc</code> / <code>eth0</code>. Text rather than a photo if at all possible; a serial adapter on the Pi’s UART pins makes that easy and is worth the few euros for a 200-unit project.</p>
]]></description><link>http://forums.fogproject.org/post/158630</link><guid isPermaLink="true">http://forums.fogproject.org/post/158630</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Fri, 04 Sep 2026 11:27:21 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Fri, 04 Sep 2026 10:31:21 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a></p>
<p dir="auto">I finally managed to configure the Raspberry Pi image capture; now I just need to fine-tune it to avoid having to enter these commands in the U-Boot terminal:</p>
<p dir="auto">dhcp<br />
tftp ${scriptaddr} boot.scr<br />
source ${scriptaddr}</p>
<p dir="auto">Now I’m back to working on the deployment, but I can’t seem to get an IP address via DHCP—I don’t understand why.</p>
]]></description><link>http://forums.fogproject.org/post/158629</link><guid isPermaLink="true">http://forums.fogproject.org/post/158629</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Fri, 04 Sep 2026 10:31:21 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Fri, 04 Sep 2026 07:14:16 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/7217">@Tom-Elliott</a></p>
<p dir="auto">Hi, I ran into a problem: my VM completely crashed, so I have to start over from scratch. I’m still stuck at the capture stage; Gemini can’t review the entire conversation history we had to get to this point, though I had already reached U-Boot.</p>
<p dir="auto"><img src="/assets/uploads/files/1788506022233-33e72c8c-f0c9-44a9-963c-5698f82a9638-image.png" alt="33e72c8c-f0c9-44a9-963c-5698f82a9638-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">When I’ve completed this step, I’ll take a snapshot of the VM this time.</p>
]]></description><link>http://forums.fogproject.org/post/158628</link><guid isPermaLink="true">http://forums.fogproject.org/post/158628</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Fri, 04 Sep 2026 07:14:16 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Thu, 03 Sep 2026 10:54:53 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> Thanks, the file contents are the most useful thing you’ve posted, because they show the <code>01-…</code> file on your server is not FOG’s. I owe you a correction on that too: yesterday I took “the file is there” as proof the fix landed. It wasn’t — that file is yours.</p>
<p dir="auto"><strong>1. Everything in <code>/tftpboot/pxelinux.cfg/</code> is hand-written, and it’s the wrong format for <code>pxe boot</code>.</strong> <code>01-88-a2-9e-53-34-c0</code>, <code>boot.scr</code>, <code>default</code> and <code>default-arm</code> all contain a U-Boot script (<code>setenv …</code>, <code>tftp …</code>, <code>booti …</code>). <code>pxe boot</code> doesn’t run scripts; it parses a PXELINUX-style config (<code>label</code>, <code>kernel</code>, <code>initrd</code>, <code>append</code>), finds no labels in yours, and does nothing. That’s your “downloads pxelinux, but then stops”, and it was never going to work regardless of the FOG bugs I fixed. Please don’t hand-write anything under <code>pxelinux.cfg/</code>: FOG owns the <code>01-&lt;mac&gt;</code> names there, and its periodic reconcile deletes any <code>01-</code> file whose host has no active task, so your file would vanish anyway. (<code>boot.scr</code>, if you ever wanted one, has to be a <code>mkimage</code>-wrapped binary in the TFTP root, not text under <code>pxelinux.cfg/</code>. You don’t need it; the <code>pxe</code> path is the whole thing.)</p>
<p dir="auto">To get FOG’s file: run the updater once more (PR #1679 is merged), then in the web UI queue a <strong>Capture</strong> task for <code>Raspberry-test</code>. Within a moment <code>/tftpboot/pxelinux.cfg/01-88-a2-9e-53-34-c0</code> will be replaced by a file starting <code># Generated by FOG Project</code> with <code>kernel arm_Image</code> and <code>initrd arm_init.cpio.gz</code>, and <code>/tftpboot/arm_Image</code> and <code>/tftpboot/arm_init.cpio.gz</code> will appear beside it. Paste that file back here. Your host settings are fine: arm64, image set, primary disk <code>/dev/sda</code>. (<code>acpi=off</code> in the kernel arguments does nothing on a Pi; harmless.)</p>
<p dir="auto"><strong>2. <code>saveenv</code> failed because there is no SD card</strong>, so nothing you <code>setenv</code> survives a reboot. That’s actually fine for the end goal: the default <code>bootcmd=bootflow scan</code> already does DHCP and then <code>pxe get</code> / <code>pxe boot</code> on its own, no environment needed. So for a cardless fleet you don’t need <code>bootcmd</code> at all. What you do need is DHCP to work inside U-Boot, which brings us to:</p>
<p dir="auto"><strong>3. DHCP.</strong> <code>netretry yes</code> was doing its job (“Retry time exceeded; starting again” is it retrying, not failing). With STP confirmed on the switch, the port is most likely blocking for the first ~30 seconds after U-Boot resets the NIC. One test settles it: run <code>setenv netretry yes</code> then <code>dhcp</code>, and <strong>wait a full 60 seconds</strong> before judging. If it gets a lease on the second or third cycle, that’s STP, and the fix is PortFast / edge-port on the Pi ports (the default <code>bootflow scan</code> won’t retry long enough on its own, and without an SD card you can’t persist <code>netretry</code>). If it still has nothing after 60 seconds, then it isn’t timing: check OPNsense’s DHCP log (Services → DHCPv4 → Log) for <code>88:a2:9e:53:34:c0</code> during the attempt and tell me whether a DISCOVER arrives and whether an OFFER goes out.</p>
<p dir="auto">Once DHCP works and FOG’s file is in place, <code>bootflow scan</code> (or <code>dhcp; pxe get; pxe boot</code> by hand) should pull <code>arm_Image</code> and boot FOS. If it stops anywhere after that, the last lines on screen are what I need — pasted text, not a photo, if there’s any way to capture it.</p>
]]></description><link>http://forums.fogproject.org/post/158623</link><guid isPermaLink="true">http://forums.fogproject.org/post/158623</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Thu, 03 Sep 2026 10:54:53 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Thu, 03 Sep 2026 08:00:51 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/7217">@Tom-Elliott</a></p>
<p dir="auto">I’m also showing you screenshots of my host and image to see if I made a mistake.</p>
<p dir="auto"><img src="/assets/uploads/files/1788422348373-568e80e1-055d-438d-990b-ae92d6e4a7dc-image.png" alt="568e80e1-055d-438d-990b-ae92d6e4a7dc-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="/assets/uploads/files/1788422368982-871e1672-d4a6-4c85-a747-8e7ebdfd2adb-image.png" alt="871e1672-d4a6-4c85-a747-8e7ebdfd2adb-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="/assets/uploads/files/1788422411224-8fd2cc24-2232-4c4f-beea-76e596e64173-image.png" alt="8fd2cc24-2232-4c4f-beea-76e596e64173-image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>http://forums.fogproject.org/post/158622</link><guid isPermaLink="true">http://forums.fogproject.org/post/158622</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Thu, 03 Sep 2026 08:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Thu, 03 Sep 2026 07:43:20 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/7217">@Tom-Elliott</a></p>
<p dir="auto">Hey, I’m sending you the screenshot of the test.<br />
I’m also sending you the configs to see if I made a mistake.<br />
My colleague told me that STP would be enabled on the switch but not in OPNsense.</p>
<p dir="auto"><img src="/assets/uploads/files/1788420670657-7cfda195-79d3-4734-a441-a44c011ad099-image.png" alt="7cfda195-79d3-4734-a441-a44c011ad099-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Config u-boot</p>
<p dir="auto"><img src="/assets/uploads/files/1788420908790-6e35c749-1df0-47d2-a82d-7ba3c8202418-image.png" alt="6e35c749-1df0-47d2-a82d-7ba3c8202418-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">cat /tftpboot/pxelinux.cfg/01-88-a2-9e-53-34-c0</p>
<p dir="auto"><img src="/assets/uploads/files/1788421080119-6c7e53ed-8342-43a4-971a-979bc261e4cb-image.png" alt="6c7e53ed-8342-43a4-971a-979bc261e4cb-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">cat /tftpboot/pxelinux.cfg/boot.scr</p>
<p dir="auto"><img src="/assets/uploads/files/1788421193130-7096f656-d2a7-479a-a454-d058979ead11-image.png" alt="7096f656-d2a7-479a-a454-d058979ead11-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">cat /tftpboot/pxelinux.cfg/default</p>
<p dir="auto"><img src="/assets/uploads/files/1788421229429-6b2ef780-6739-498e-abc6-d4c0028f3723-image.png" alt="6b2ef780-6739-498e-abc6-d4c0028f3723-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">cat /tftpboot/pxelinux.cfg/default-arm</p>
<p dir="auto"><img src="/assets/uploads/files/1788421277721-b004592a-d9d1-471d-b6cb-542cd67db917-image.png" alt="b004592a-d9d1-471d-b6cb-542cd67db917-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">cat /tftpboot/pxelinux.cfg/default.bak</p>
<p dir="auto"><img src="/assets/uploads/files/1788421322239-4ac85d4f-675f-421f-a19f-5a85449e6809-image.png" alt="4ac85d4f-675f-421f-a19f-5a85449e6809-image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>http://forums.fogproject.org/post/158621</link><guid isPermaLink="true">http://forums.fogproject.org/post/158621</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Thu, 03 Sep 2026 07:43:20 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Wed, 02 Sep 2026 14:48:32 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> Good — the file being there confirms the <code>/tftpboot</code> fix landed. Two separate things in your report, and one of them was mine again.</p>
<p dir="auto"><strong>“Downloads pxelinux, but then stops” — partly expected, partly another FOG bug, now fixed.</strong></p>
<ul>
<li>If there was <em>no task queued</em> for the Pi at that moment, the file FOG writes says <code>localboot 0</code>, which tells U-Boot “nothing to do, carry on to local disk”. That’s by design: no task, no imaging. So “stops” after a successful <code>pxe get</code> is correct behavior unless you’d queued a capture first.</li>
<li>If there <em>was</em> a task queued, it would still have stopped, and that one is on me: the file named the kernel and init as <code>http://…</code> URLs, which is what boards with <code>wget</code> use. Your U-Boot’s <code>pxe</code> code can’t follow a URL — I checked U-Boot’s source (<code>boot/pxe_utils.c</code><img src="http://forums.fogproject.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=p5dn7rglfv4" class="not-responsive emoji emoji-android emoji--disappointed" style="height:23px;width:auto;vertical-align:middle" title="):" alt="😞" /> every <code>kernel</code> and <code>initrd</code> line is fetched over TFTP, relative to wherever the config came from, so <code>kernel http://…</code> became a TFTP request for a file literally called that. Fixed in <code>working-1.6</code> (PR #1679): the file now says <code>kernel arm_Image</code> / <code>initrd arm_init.cpio.gz</code>, and FOG copies those two files into <code>/tftpboot</code> itself the first time a task is queued for an ARM host, and again whenever the kernel is updated. Run the updater once more, queue a capture for the Pi, then on the server check that <code>/tftpboot/pxelinux.cfg/01-88-a2-9e-53-34-c0</code> contains <code>kernel arm_Image</code> and that <code>/tftpboot/arm_Image</code> and <code>/tftpboot/arm_init.cpio.gz</code> exist.</li>
</ul>
<p dir="auto"><strong>The intermittent DHCP is a network-timing problem, not a FOG one, and Tom’s STP question is the right first suspect.</strong> On a switch port running classic spanning tree, the port doesn’t forward traffic for roughly 30 seconds after link-up (listening, then learning). U-Boot brings the link up and sends its DHCP discover immediately, retries for a few seconds, and gives up — that’s the “8 seconds searching”. The times it works are the times the port happened to already be forwarding. The Pi’s EEPROM boot succeeds because it retries for much longer. Two fixes, and I’d do both:</p>
<ul>
<li>On the switch: enable PortFast / edge-port (or RSTP) on the ports the Pis plug into. That’s the real fix and it helps every PXE client, not just the Pis.</li>
<li>In U-Boot, so a slow port doesn’t kill the boot anyway:</li>
</ul>
<pre><code>setenv autoload no
setenv netretry yes
setenv bootcmd 'dhcp; pxe get; pxe boot'
saveenv
</code></pre>
<p dir="auto"><code>autoload no</code> stops <code>dhcp</code> from also trying to TFTP a bootfile it was never given (that’s an extra timeout and a spurious failure in your sequence). <code>netretry yes</code> makes U-Boot keep retrying DHCP instead of giving up after a few seconds — the right call for a headless board that has nothing else to do, but be aware it means a Pi with no DHCP server on the wire will sit there retrying rather than dropping to the prompt.</p>
<p dir="auto">If DHCP still fails after that, the next read is OPNsense’s DHCP log for that MAC: whether the discover even arrives, and what it offers. And as before, pasted text beats a screenshot — the exact lines around <code>pxe boot</code> are the ones I need next.</p>
]]></description><link>http://forums.fogproject.org/post/158619</link><guid isPermaLink="true">http://forums.fogproject.org/post/158619</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Wed, 02 Sep 2026 14:48:32 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Wed, 02 Sep 2026 14:17:51 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> Do you happen to have STP on your network?</p>
]]></description><link>http://forums.fogproject.org/post/158618</link><guid isPermaLink="true">http://forums.fogproject.org/post/158618</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Wed, 02 Sep 2026 14:17:51 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Wed, 02 Sep 2026 14:16:17 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/7217">@Tom-Elliott</a></p>
<p dir="auto">I do have the filename you requested.</p>
<p dir="auto"><img src="/assets/uploads/files/1788358353474-c010fbb3-ed26-49e5-9a10-a3dc2a65bbd6-image.png" alt="c010fbb3-ed26-49e5-9a10-a3dc2a65bbd6-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">When U-Boot starts, DHCP doesn’t work; it spends 8 seconds searching. Sometimes, when rebooting the Raspberry Pi, it manages to obtain an IP address, successfully detects the server’s IP, and downloads pxelinux, but then stops.</p>
<p dir="auto"><img src="/assets/uploads/files/1788358506669-b2f58c32-efc6-4017-9104-eafdf783d940-image.png" alt="b2f58c32-efc6-4017-9104-eafdf783d940-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">What I don’t understand is why U-Boot sometimes manages to get an IP address and sometimes doesn’t.</p>
]]></description><link>http://forums.fogproject.org/post/158617</link><guid isPermaLink="true">http://forums.fogproject.org/post/158617</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Wed, 02 Sep 2026 14:16:17 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Wed, 02 Sep 2026 10:25:26 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> Thanks for the screenshots — they changed my read of this quite a bit, and I owe you a correction first.</p>
<p dir="auto"><strong>Correction:</strong> earlier I said <code>pxe get</code> “finding” <code>pxelinux.cfg/01-88-a2-9e-53-34-c0</code> proved the file-generation side worked. It didn’t. U-Boot prints <code>Retrieving file: ...</code> <em>before</em> it sends the request, and the <code>Loading: T T T T</code> that follows means the server never answered at all. A file that really is missing gives you <code>TFTP error: 'File not found'</code>, not timeouts. So the file-side was never proven, and it turns out it was broken on my side of the fence.</p>
<p dir="auto"><strong>The FOG bug, now fixed:</strong> FOG was writing the <code>01-&lt;mac&gt;</code> file under the directory it keeps the HTTP-served kernels in (<code>/var/www/html/fog/service/ipxe/</code>), not under <code>/tftpboot</code>. The TFTP daemon runs chrooted to <code>/tftpboot</code>, so the file existed but TFTP could never see it. That’s fixed in <code>working-1.6</code> (PR #1664) with a new setting, <code>FOG Settings → TFTP Server → FOG_TFTP_ROOT_DIR</code>, which the installer sets to the real TFTP root. Run the updater once it’s merged and check that setting reads <code>/tftpboot</code>; after that, queue a task for the Pi and you should see <code>/tftpboot/pxelinux.cfg/01-88-a2-9e-53-34-c0</code> appear on the server. Please confirm that file is there before the next boot test — it’s the one thing I can check in code but not on your box.</p>
<p dir="auto"><strong>Your current boot loop is a different, earlier step.</strong> From the console shot: U-Boot itself loaded cardless, which means the Pi’s EEPROM network boot already pulled the firmware and <code>u-boot.bin</code> from <code>/tftpboot</code> over TFTP. That proves the OPNsense <code>next-server</code>, the FOG TFTP service and the firewall are all fine for this client — so ignore my earlier firewall angle. What’s looping is <code>bootcmd=bootflow scan</code>: that’s U-Boot’s standard-boot sequence, which tries mmc, usb, then ethernet, and the ethernet step starts with U-Boot’s <em>own</em> DHCP request (<code>BOOTP broadcast 1, 2, 3...</code>). That DHCP never succeeds, and it’s never been shown to work in this thread — your earlier manual test set <code>ipaddr</code>/<code>serverip</code> by hand and skipped DHCP entirely. The empty per-architecture filenames in OPNsense are fine, by the way: the <code>pxe</code> boot method doesn’t need a bootfile name at all. (Side note, unrelated to the Pi: the iPXE-class filename in OPNsense is what gets handed to a client that is <em>already</em> running iPXE, and FOG expects <code>default.ipxe</code> there, not <code>ipxe.efi</code> — with <code>ipxe.efi</code> your x86 UEFI clients will reload iPXE forever. Worth a look when you’re back on those.)</p>
<p dir="auto">Two things to try at the U-Boot prompt, and please paste the exact text rather than a screenshot if you can:</p>
<pre><code>dhcp
</code></pre>
<p dir="auto">on its own. If it also loops on BOOTP, then U-Boot’s network driver isn’t getting a lease and we look at OPNsense’s DHCP log for that MAC (does the request even arrive, does it offer). If it <em>does</em> get an address, then:</p>
<pre><code>pxe get
pxe boot
</code></pre>
<p dir="auto">once the FOG update above is in and the <code>01-...</code> file is confirmed on disk. If that works by hand, <code>setenv bootcmd 'dhcp; pxe get; pxe boot'</code> and <code>saveenv</code> gets you the automated path — <code>bootflow scan</code> should get there too, but the manual sequence tells us which step is at fault when it doesn’t.</p>
]]></description><link>http://forums.fogproject.org/post/158615</link><guid isPermaLink="true">http://forums.fogproject.org/post/158615</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Wed, 02 Sep 2026 10:25:26 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Wed, 02 Sep 2026 08:09:38 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/7217">@Tom-Elliott</a></p>
<p dir="auto">Hi, I’m sending you the two screenshots—one from OPNsense and the other from the Raspberry Pi.</p>
<p dir="auto"><img src="/assets/uploads/files/1788336318429-1f3ee7f3-69f9-473e-b150-4ff087aba3ba-image.png" alt="1f3ee7f3-69f9-473e-b150-4ff087aba3ba-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="/assets/uploads/files/1788336327686-ec7c7fc7-dea7-4a5b-8ba0-6e22440ae87a-image.png" alt="ec7c7fc7-dea7-4a5b-8ba0-6e22440ae87a-image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>http://forums.fogproject.org/post/158614</link><guid isPermaLink="true">http://forums.fogproject.org/post/158614</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Wed, 02 Sep 2026 08:09:38 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Tue, 01 Sep 2026 13:14:27 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> Good — that rules out the firewall/permissions angle cleanly, thanks for actually checking rather than taking my word for it.</p>
<p dir="auto">The new symptom is a different failure than before, and it’s outside anything FOG serves: looping on BOOTP with no attempt at <code>Retrieving file...</code> means it’s failing at DHCP/BOOTP negotiation, a step before <code>pxe get</code> would ever run. FOG can’t see that far back — the board never gets far enough to ask FOG anything.</p>
<p dir="auto">You’ve also moved to a materially different boot path than what we’d been testing: cardless, via the Pi’s own network-boot EEPROM, rather than typing commands by hand at the U-Boot prompt. That matters here, because the EEPROM’s automatic network-boot flow runs <em>its own</em> boot sequence, built into that U-Boot, not necessarily the <code>dhcp</code> / <code>pxe get</code> / <code>pxe boot</code> lines from earlier in this thread — those were for a manually-typed <code>bootcmd</code>. If the EEPROM path uses <code>bootp</code> instead of <code>dhcp</code>, or expects OPNsense to hand it specific DHCP options, that’s a different thing to get right than what we tested manually.</p>
<p dir="auto">Two things I’d need to actually say anything useful here, since I can’t see either from where I’m sitting:</p>
<ol>
<li>What’s the board actually running right now — did the <code>nano</code> edit touch a persisted <code>bootcmd</code> (<code>printenv bootcmd</code>), or is this the EEPROM’s own default network-boot sequence with nothing custom in the loop at all?</li>
<li>In OPNsense’s DHCP config for that subnet, what are options 66 (<code>next-server</code>) and 67 (<code>filename</code> / <code>bootfile-name</code>) set to? The EEPROM’s PXE client needs those to know where to send its own request in the first place — if they’re pointing at the wrong place, or missing, U-Boot never gets the chance to see FOG at all, and that would produce exactly a BOOTP loop with nothing after it.</li>
</ol>
<p dir="auto">That’ll tell us whether this is a boot-script problem (fixable on your end) or a DHCP-options problem (fixable in OPNsense) — right now I genuinely can’t tell which from here.</p>
]]></description><link>http://forums.fogproject.org/post/158607</link><guid isPermaLink="true">http://forums.fogproject.org/post/158607</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Tue, 01 Sep 2026 13:14:27 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Tue, 01 Sep 2026 13:10:25 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/7217">@Tom-Elliott</a></p>
<p dir="auto">Here is an update following our latest troubleshooting sessions and tests:</p>
<pre><code>The !V@JL artifact: That part was indeed a leftover artifact from editing the file manually with nano. Once cleaned up, we hit a regression: the Raspberry Pi no longer downloads the 563-byte config file at all anymore. It now loops directly on BOOTP broadcast and times out without hitting the TFTP stage (Retrieving file... doesn't trigger anymore).

Goal &amp; Architecture: The target deployment must remain 100% cardless (no local storage, no SD card, no USB drive used during boot), relying purely on the RPi 4 network boot EEPROM + OPNsense DHCP + FOG/U-Boot.

Regarding your earlier notes on TFTP/Firewall:

    We are running UFW on the FOG server, and we verified that nf_conntrack_tftp is active (lsmod | grep tftp confirmed).

    BOOT_external_tftp_server is not enabled (TFTP runs locally on the FOG box).

    The Pi and FOG server are on the same subnet, with no intermediate restrictive ACLs on that local segment.

The permission fix: We noted your mention about the file permissions fix for downloaded files not being set properly after upload in the working-1.6 branch. Could this regression (dropping back to infinite BOOTP loops instead of attempting the TFTP fetch) be tied to how the file is currently served or indexed, or is there a specific way U-Boot expects the handoff after DHCP?
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/1788268222557-4052d670-f8f4-4f76-ae50-03d630c809ec-image.png" alt="4052d670-f8f4-4f76-ae50-03d630c809ec-image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>http://forums.fogproject.org/post/158606</link><guid isPermaLink="true">http://forums.fogproject.org/post/158606</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Tue, 01 Sep 2026 13:10:25 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Tue, 01 Sep 2026 11:01:36 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> Correction on the firewall angle: if your server went through FOG’s own installer on ufw or firewalld, that’s actually less likely to be it than I made it sound — the installer already handles the exact “TFTP works for the request but the reply is on a random port” problem for both of those (a named <code>tftp</code> service on firewalld, and <code>nf_conntrack_tftp</code> loaded for ufw), specifically because it’s bitten people before.</p>
<p dir="auto">So rather than “check your firewall” in general, four narrower things:</p>
<ol>
<li>Which firewall are you actually running — <code>ufw</code>, <code>firewalld</code>, or plain <code>iptables</code>? The installer only auto-configures the first two; if it’s bare iptables, my original theory stands and you’d need to allow the ephemeral UDP range by hand.</li>
<li>If it’s ufw: <code>lsmod | grep tftp</code> — the installer tries to load <code>nf_conntrack_tftp</code> but silently continues if that fails, so it’s worth confirming it’s actually loaded rather than assumed.</li>
<li>Is <code>BOOT_external_tftp_server</code> set to “yes” in your FOG settings? If so and your TFTP is actually running on the FOG box itself, firewalld would have skipped opening it for you.</li>
<li>Are the Pi and the FOG server on the same subnet/VLAN, or is there a router, switch ACL, or (if this is a VM/cloud box) a security group between them? None of the above touches anything outside this box.</li>
</ol>
<p dir="auto">If you’ve got shell on the FOG server, <code>tcpdump -ni &lt;iface&gt; port 69 or portrange 32768-60999</code> while you retry <code>pxe get</code> is still the fastest way to see whether the request goes out and nothing comes back (firewall/network) versus the request itself failing (something else entirely).</p>
]]></description><link>http://forums.fogproject.org/post/158605</link><guid isPermaLink="true">http://forums.fogproject.org/post/158605</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Tue, 01 Sep 2026 11:01:36 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Tue, 01 Sep 2026 10:56:15 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> That’s real progress — <code>pxe get</code> finding <code>pxelinux.cfg/01-88-a2-9e-53-34-c0</code> by MAC means the naming convention and the file-generation side both work end to end. That’s the part I couldn’t test myself, so thank you for actually running it.</p>
<p dir="auto">On the timeout itself: “found the file, then hung mid-transfer” (<code>Retrieving file: ...</code> succeeding, then <code>Loading: T T T T T T</code> / <code>Retry count exceeded</code>) points at TFTP’s own connection model, not at FOG. TFTP’s initial request goes to port 69, but the server then hands the rest of that transfer off to a <em>different</em>, randomly chosen UDP port for the actual data — so if there’s a firewall between the Pi and your FOG server that only allows port 69 through, the request succeeds (that’s why U-Boot found the file) and every packet after it gets silently dropped. That matches your symptom closely enough that I’d check it first: either open the OS’s ephemeral UDP range to your TFTP daemon, or (simpler if this is on the same box) confirm nothing’s filtering loopback/LAN traffic to it at all. If you’ve got shell on the FOG server, <code>tcpdump -ni &lt;iface&gt; port 69 or portrange 32768-60999</code> while you retry <code>pxe get</code> should show the request going out and then nothing coming back, which would confirm it.</p>
<p dir="auto">Separately — while looking into this I found a real gap on FOG’s side and fixed it regardless of whether it’s your actual cause: the file <code>pxe get</code> downloads wasn’t having its permissions set after upload, so if your TFTP daemon reads as a different user than the account FOG uploads over SFTP with, that alone could produce exactly this symptom (found the file, denied reading it). That fix is in the same <code>working-1.6</code> branch now, so another update will pick it up. Worth ruling both things out — they’re not mutually exclusive.</p>
<p dir="auto">On your scalability question: for 100–200 units, don’t script the SD card at all — the RPi 4’s own boot EEPROM supports <strong>network boot as the <em>first</em> boot mode</strong>, ahead of SD/USB, which is exactly what you want instead of the local-storage-timeout-then-BOOTP-fallback sequence you saw. <code>rpi-eeprom-config</code> (or the <code>raspi-config</code> boot order menu) lets you set that once, and once it’s set it’s a firmware-level property of the board, not something FOG or an SD card image controls — one flash per unit, and after that every power-on goes straight to network boot, no <code>bootcmd</code> persistence step needed on your end at all. I’d flash that as part of whatever imaging/provisioning process gets each Pi ready before it ever talks to FOG the first time, rather than trying to solve it per-deployment.</p>
<p dir="auto">I don’t have a Pi 4 here to confirm the exact EEPROM boot-order syntax for your firmware revision, so double-check against Raspberry Pi’s own EEPROM config docs before you commit to a fleet-wide flash — but the “make network boot the default at the firmware level” shape of the answer is what actually gets you out of typing anything at the prompt.</p>
]]></description><link>http://forums.fogproject.org/post/158604</link><guid isPermaLink="true">http://forums.fogproject.org/post/158604</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Tue, 01 Sep 2026 10:56:15 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Tue, 01 Sep 2026 07:23:20 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/7217">@Tom-Elliott</a></p>
<p dir="auto">"Hi again! Great news regarding the new TFTP fallback mechanism.</p>
<p dir="auto">I tested it manually by setting the IP addresses:<br />
Plaintext</p>
<p dir="auto">setenv ipaddr 192.168.203.50<br />
setenv serverip 192.168.203.113<br />
pxe get</p>
<p dir="auto">What happened:</p>
<pre><code>U-Boot successfully found the correct path generated by FOG based on the MAC address (Retrieving file: pxelinux.cfg/01-88-a2-9e-53-34-c0).

However, the download times out (Loading: T T T T T T) and results in a Retry count exceeded.
</code></pre>
<p dir="auto">For context: a deployment task was explicitly active and queued in the FOG web interface before running the test, so the file should be there.</p>
<p dir="auto">Is there a specific TFTP block size or setting required in working-1.6 for U-Boot’s pxe get to successfully pull the file without timing out, or could it be related to firewall/TFTP service configuration on the server side?"</p>
]]></description><link>http://forums.fogproject.org/post/158601</link><guid isPermaLink="true">http://forums.fogproject.org/post/158601</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Tue, 01 Sep 2026 07:23:20 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Tue, 01 Sep 2026 06:51:37 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/7217">@Tom-Elliott</a></p>
<p dir="auto">"To answer your question directly: yes, so far I have only been testing manually at the U-Boot prompt (=&gt;).</p>
<p dir="auto">My main concern right now is scalability. Since I need to deploy this across a fleet of 100 to 200 Raspberry Pi units, configuring each SD card manually or typing commands at the prompt for every single machine is not an option.</p>
<p dir="auto">What is the recommended best practice in FOG working-1.6 to handle automation for a large fleet? Can the bootcmd be permanently stored in the Pi’s onboard EEPROM once, or can U-Boot fetch a boot script via TFTP automatically without manual card preparation?"</p>
]]></description><link>http://forums.fogproject.org/post/158600</link><guid isPermaLink="true">http://forums.fogproject.org/post/158600</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:51:37 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Mon, 31 Aug 2026 15:17:12 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/49728">@Jeremy</a> Good news on the wget front — I closed that gap I mentioned. FOG can<br />
now serve boards with no <code>wget</code> at all, over plain TFTP instead of HTTP.</p>
<p dir="auto">U-Boot’s <code>pxe get</code> command doesn’t need <code>wget</code> — every U-Boot build has it,<br />
and unlike <code>wget</code> it isn’t configurable: it always fetches<br />
<code>pxelinux.cfg/01-&lt;mac, dash-separated, lowercase&gt;</code> by TFTP from whatever<br />
server your board’s <code>serverip</code> points at. FOG now keeps a real file at that<br />
path for every host, kept in sync automatically whenever a task is queued,<br />
completed, or canceled — so your boot sequence becomes just:</p>
<pre><code>dhcp
pxe get
pxe boot
</code></pre>
<p dir="auto">No URL, no query string, nothing for the “bad port”/no-wget class of problem<br />
to trip over — the filename is fixed by the MAC, so there’s nothing to<br />
substitute.</p>
<p dir="auto">This just merged into working-1.6 — same branch you’re already tracking<br />
(you quoted 1.6.0-beta.4707 a few hours ago; this landed after that), so<br />
running your update again should pick it up. Two things to check once you<br />
have:</p>
<ul>
<li>Settings → FTP/TFTP needs a TFTP host/username/password configured — same<br />
connection FOG already uses to upload your ARM kernel, so if that’s<br />
already working for you, you’re set.</li>
<li>I still don’t have a Pi to test this against, same as everything else in<br />
this thread — if <code>pxe get</code> doesn’t find the file, or finds one FOG didn’t<br />
mean to serve, that’s exactly the kind of thing I need you to report back.</li>
</ul>
<p dir="auto">One thing from your last post I want to flag separately, because it looks<br />
like a different problem from the wget one: the boot sequence you<br />
described — times out on local storage, then falls into a BOOTP broadcast<br />
loop that gives up with “Retry time exceeded” — reads like U-Boot’s own<br />
<em>default</em> <code>bootcmd</code> running, not a custom one. That’s the standard<br />
Raspberry Pi fallback behavior when nothing else answers, and it wouldn’t<br />
run <code>dhcp</code> / <code>pxe get</code> / <code>pxe boot</code> at all, custom or not.</p>
<p dir="auto">Everything you’ve described testing so far — the <code>wget</code>/<code>pxe boot</code> sequence,<br />
the <code>curl</code> check, now <code>pxe get</code> — sounds like it’s been typed by hand at the<br />
<code>=&gt;</code> prompt each time. That proves the commands work, but it can’t be “fully<br />
automated,” which was the goal from your very first post: nothing runs<br />
automatically unless it’s <em>persisted</em> as <code>bootcmd</code>, either with<br />
<code>setenv bootcmd '...'; saveenv</code> on the board itself, or as a <code>boot.scr</code> /<br />
<code>extlinux.conf</code> your SD card or TFTP server hands U-Boot on its own at power-on.</p>
<p dir="auto">Can you confirm which of those two you actually have in place right now? If<br />
the answer is “neither yet — I’ve only been testing at the prompt,” that’s<br />
probably the real blocker to automation, independent of wget vs. TFTP, and<br />
worth sorting out before we look any further at the fetch mechanism itself.</p>
]]></description><link>http://forums.fogproject.org/post/158596</link><guid isPermaLink="true">http://forums.fogproject.org/post/158596</guid><dc:creator><![CDATA[Tom Elliott]]></dc:creator><pubDate>Mon, 31 Aug 2026 15:17:12 GMT</pubDate></item><item><title><![CDATA[Reply to FOG Project Image Capture on Raspberry Pi 4 (ARM64) via U-Boot on Mon, 31 Aug 2026 14:36:34 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="http://forums.fogproject.org/uid/7217">@Tom-Elliott</a> "Hi again,</p>
<p dir="auto">Following your instructions, I checked the U-Boot prompt. When typing wget, it responds with:<br />
Unknown command wget try help<br />
So the U-Boot build on these boards does not include the wget command.</p>
<p dir="auto">Also, for context on how the board behaves at boot, here is what happens visually during the startup sequence (attached photo): it tries to boot locally, times out on storage (mmc / usb), and then falls back to a standard network BOOTP broadcast loop (Retry time exceeded).</p>
<p dir="auto">Given that U-Boot lacks wget and relies on standard BOOTP/PXE broadcast rather than direct HTTP fetching, what is the recommended way or fallback mechanism to have these boards pull their configuration from FOG?"</p>
<p dir="auto"><img src="/assets/uploads/files/1788186982671-b1a36046-9e12-4cca-bb7a-8eeda752b04a-image.png" alt="b1a36046-9e12-4cca-bb7a-8eeda752b04a-image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>http://forums.fogproject.org/post/158595</link><guid isPermaLink="true">http://forums.fogproject.org/post/158595</guid><dc:creator><![CDATA[Jeremy]]></dc:creator><pubDate>Mon, 31 Aug 2026 14:36:34 GMT</pubDate></item></channel></rss>