Subcategories

  • Technical help directly related to FOG.
    9k Topics
    86k Posts
    Tom ElliottT

    @MatMurdock @Fog_Newb

    Apologies, this one’s on me.

    There’s a constant, FOG_BASE_DIR, that the Secure Boot signing code uses to find where FOG is installed. On 1.6 the installer writes that value out for PHP to read. When I ported the signing code back to 1.5 I brought the half that uses the constant and not the half that sets it. On PHP 7 that’s a warning nobody sees. On PHP 8 it’s a hard fatal, which is where the 500 comes from.

    @MatMurdock thank you, you found exactly the right line and your patch is sound.

    @Fog_Newb your bisect nailed it. 2144 good, 2191 bad, and the commit that broke it is 2179. That saved me a lot of digging.

    The proper fix is merged and is in 1.5.10.2213 on dev-branch. Update and re-run the installer. I’ve confirmed the fatal is gone, but I haven’t been able to reproduce your setup end to end, so please let me know either way whether the kernel page behaves for you now. If it still 500s, grab the Apache error log or php-fpm log around the failure and post it, because then it’s something else and I want to see it.

    Two things on the boot problem:

    I still can’t reproduce the ram-0 error and I don’t want to guess at it. Can you get a photo of the screen when it fails? The exact wording matters. And let me know if that laptop is booting UEFI or legacy BIOS.

    If it’s legacy BIOS, there’s a separate bug that was also live in your window. 2191 shipped an iPXE build with a batch of commands disabled that our boot menu needs. Symptom is params: command not found then Could not boot: Exec format error. That went in at 2208, but the server won’t heal itself, /tftpboot/undionly.kkpxe only gets replaced when the installer runs again.

    Worth trying the ramdisk size too since it’s quick. FOG Configuration → FOG Settings → Kernel Ramdisk Size, bump it to 512000.

  • Problems with specific computer models.
    713 Topics
    8k Posts
    Tom ElliottT

    @rpycroft Thank you for the writeup. The elimination you did up front — cables,
    link speed, compression, RAID vs AHCI, all three storage nodes, BIOS, iPXE
    files — saved me a lot of guessing, and the commit you linked is the right one.

    You’re right that it’s the r8169 switch, but not quite in the way it looks.
    The in-kernel driver isn’t worse than the vendor one here. It exposed something
    we’d had broken for nine years without knowing.

    Two kernel options that are on by default upstream have been off in the FOS
    kernel config since 2016:

    # CONFIG_PCIEASPM is not set # CONFIG_PCI_MMCONFIG is not set

    ASPM is PCIe link power management — it lets the link drop into a low power
    state when idle and wake when there’s traffic. Waking up is the expensive part.

    Nobody noticed for nine years because the Realtek vendor drivers we used to
    ship handled ASPM themselves. Our r8168 build had dynamic ASPM compiled in,
    which effectively switched ASPM off any time packets were moving. It didn’t
    matter that the kernel couldn’t manage it, because the driver never asked the
    kernel to.

    r8169 does it the normal way: it asks the PCI core to disable L1 once, when the
    card is probed. That’s where this bites. With CONFIG_PCIEASPM off, the function
    it calls isn’t a function at all — it’s a stub that returns “success” without
    doing anything. So r8169 is told the OS disabled L1, marks ASPM as being under
    OS control, and then goes on to enable ASPM and L1.2 on the card — on a
    kernel with no ASPM code in it that disabled nothing. Not one line in the logs
    to say so.

    That “falling back to CSI” line you included is the second option. Without
    CONFIG_PCI_MMCONFIG the kernel only sees the first 256 bytes of each device’s
    config space, and the registers controlling the L1 sub-states live past that.
    So even a kernel that wanted to fix this couldn’t reach them. Including that
    line is what let me tie the two together, so thank you for pasting it.

    That also explains the two things in your report that looked strangest:

    Why UEFI and not legacy — ASPM is programmed by the firmware, and Dell’s UEFI
    path turns L1 on where the legacy/CSM path leaves it off. Our kernel couldn’t
    change it either way, so whatever the firmware picked stuck. Legacy was never
    actually faster; you were getting a machine where ASPM was already off.

    Why deploys and not captures — a deploy is your client receiving. The link
    goes quiet between bursts from the server, drops into L1.2, and pays the wake
    cost over and over. A capture is the client sending, which keeps the link
    busy so it never gets the chance to sleep. That’s your 15 GB/min upload sitting
    next to a 1.2 GB/min download on the same cable.

    Worth saying before anyone suggests it: adding pcie_aspm=off to the kernel
    arguments does nothing on a FOS kernel. The code registering that argument is
    inside the same #ifdef, so it’s compiled out too. It would look like you tried
    the standard fix and it didn’t help.

    I’ve built you an experimental x64 kernel with both options turned back on:

    https://github.com/FOGProject/fos/releases/tag/EXP_20260805-123232 sha256 6fadc7204889bc76fe943520319044940c24654365a523d5df7adf8327a88d25

    It’s the kernel only — your init is untouched and doesn’t need changing. Back
    up your current /var/www/html/fog/service/ipxe/bzImage, drop this one in its
    place, and deploy to one of the 3070s. Putting the old file back is the whole
    rollback if it doesn’t help.

    If you want to confirm the diagnosis yourself first, it takes about a minute
    and doesn’t need my kernel at all. Boot a 3070 to a shell in debug mode:

    lspci -nn | grep -i ethernet # note the Realtek address, e.g. 02:00.0 lspci -t # note the root port above it, e.g. 00:1c.5 setpci -s 02:00.0 CAP_EXP+10.w setpci -s 00:1c.5 CAP_EXP+10.w

    The bottom two bits of each value are the ASPM setting — 0 is off, 2 is L1,
    3 is L0s+L1. Run it once booted UEFI and once booted legacy. If I have this
    right, UEFI shows a 2 or a 3 and legacy shows a 0.

    And to watch it fix itself, clear both (root port first) and rerun the deploy
    without rebooting:

    setpci -s 00:1c.5 CAP_EXP+10.w=0000 setpci -s 02:00.0 CAP_EXP+10.w=0000

    That’s not a fix you can keep — it’s gone on the next boot — but if the speed
    jumps back to 6-10 GB/min, that confirms it before you swap any files.

    One loose end: could you post the raw output of ethtool -k <interface>? You
    mentioned tx checksumming being off and I want to be sure I’m not waving away a
    second, separate problem. It shouldn’t be able to cause a download-only
    slowdown, but I’d rather look than assume.

    Thanks for the report and for offering to test — I’m taking you up on it.

  • Technical help related to a Windows Problem.
    1k Topics
    8k Posts
    G

    @Tom-Elliott

    I pulled latest dev-branch version 1.5.10.1856, re-run installer and snapins are working again.

    Thank you very much for help.

  • Technical help related to a Linux Problem.

    730 Topics
    6k Posts
    C

    @Numa09
    I had the same problem with a TP-Link switch. The model was a TL-SG2428P, and the FOG client would get stuck at:

    “Running post init scripts…”

    There were no error messages on the server, and the server firewall was disabled.

    After seeing your comment, I disabled the DoS protection feature on the switch, and FOG started working normally.

    Thank you, man!

  • Technical help related to a Mac Problem.

    81 Topics
    943 Posts
    Bristow 0B

    Hello everyone,

    As I work at a secondary school, I was able to get hold of some Catalina iMacs (iMac 14.3).
    I already use FOG to deploy Windows and Linux images on PCs.

    I would like to deploy a LinuxMint image on these iMacs.

    However, I am unable to boot into PXE on them with FOG, and I do not know what is wrong.

    I modified my DHCP server as follows:

    ## FOG class "UEFI-32-1" { match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00006"; filename "i386-efi/ipxe.efi"; } class "UEFI-32-2" { match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00002"; filename "i386-efi/ipxe.efi"; } class "UEFI-64-1" { match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00007"; filename "ipxe.efi"; } class "UEFI-64-2" { match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00008"; filename "ipxe.efi"; } class "UEFI-64-3" { match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00009"; filename "ipxe.efi"; } class "Apple-Intel-Netboot" { match if substring (option vendor-class-identifier, 0, 14) = "AAPLBSDPC/i386"; option dhcp-parameter-request-list 1,3,17,43,60; if (option dhcp-message-type = 8) { option vendor-class-identifier "AAPLBSDPC"; if (substring(option vendor-encapsulated-options, 0, 3) = 01:01:01) { # BSDP List option vendor-encapsulated-options 01:01:01:04:02:80:00:07:04:81:00:05:2a:09:0D:81:00:05:2a:08:69:50:58:45:2d:46:4f:47; } elsif (substring(option vendor-encapsulated-options, 0, 3) = 01:01:02) { #BSDP Select option vendor-encapsulated-options 01:01:02:08:04:81:00:05:2a:82:0a:4e:65:74:42:6f:6f:74:30:30:31; # filename "i386-efi/ipxe.efi"; filename "snp.efi"; } } } class "Legacy" { match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00000"; filename "undionly.kkpxe"; } ### END FOG

    I tested ipxe.efi in 64-bit and 32-bit, as well as snp.efi, but it still doesn’t work. I get some kind of spinning planet when I try to boot.

    I admit I don’t fully understand the documentation page: https://wiki.fogproject.org/wiki/index.php/FOG_on_a_MAC

    Thanks in advance!

  • General Developer questions relating to FOG.
    686 Topics
    5k Posts
    Bristow 0B

    @Tom-Elliott

    I’ve updated my FOG to the stable release and also updated my script with the following three lines, and everything’s fine – the database has been backed up successfully, it’s perfect!

    fogApiToken="XYZ=" fogUsrToken="ZYF" curl -ik -X GET "http://$fogServerAddress/fog/system/export" -H "fog-api-token: $fogApiToken" -H "fog-user-token: $fogUsrToken" -o $backupDir/mysql/fog.sql 2>>$backupDir/logs/error.log 1>>$backupDir/logs/progress.log 2>&1

    Thanks again for all your hard work on the FOG project!

106

Online

12.7k

Users

17.6k

Topics

156.8k

Posts