• Proper way to reinstall the FOG Client

    4
    0 Votes
    4 Posts
    131 Views
    jfernandzJ

    @Tom-Elliott oh, sorry, I didn’t notice this big yellow button in the General tab

    48c096ca-5f09-42d1-84dc-647e5bc6e22d-image.png

    And I can see the same button for the group, so I guess I can handle this. Thank you very much @Tom-Elliott ! 😄

  • Upgrading FOG

    5
    0 Votes
    5 Posts
    160 Views
    jfernandzJ

    @Tom-Elliott

    Well, the errors I can see in the /var/log/apache2/other_vhosts_access.log are:

    172.120.1.253:443 172.120.1.195 - - [09/Oct/2025:18:47:03 +0800] "POST /fog/service/Pre_Stage1.php HTTP/1.1" 500 3891 "-" "curl/8.14.1" 172.120.1.253:443 172.120.1.195 - - [09/Oct/2025:18:47:08 +0800] "POST /fog/service/Pre_Stage1.php HTTP/1.1" 500 3891 "-" "curl/8.14.1" 172.120.1.253:443 172.120.1.195 - - [09/Oct/2025:18:47:13 +0800] "POST /fog/service/Pre_Stage1.php HTTP/1.1" 500 3891 "-" "curl/8.14.1" 172.120.1.253:443 172.120.1.195 - - [09/Oct/2025:18:47:18 +0800] "POST /fog/service/Pre_Stage1.php HTTP/1.1" 500 3891 "-" "curl/8.14.1"

    Regarding the /var/log/apache2/error.log are:

    [Thu Oct 09 18:48:29.019424 2025] [proxy_fcgi:error] [pid 1662:tid 1662] [client 172.120.1.195:59922] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught ValueError: min(): Argument #1 ($value) must contain at least one element in /var/www/html/fog/lib/fog/image.class.php:396\nStack trace:\n#0 /var/www/html/fog/lib/fog/image.class.php(396): min()\n#1 /var/www/html/fog/lib/reg-task/taskqueue.class.php(112): Image->getStorageGroup()\n#2 /var/www/html/fog/service/Pre_Stage1.php(24): TaskQueue->checkIn()\n#3 {main}\n thrown in /var/www/html/fog/lib/fog/image.class.php on line 396' [Thu Oct 09 18:48:34.062774 2025] [proxy_fcgi:error] [pid 790:tid 790] [client 172.120.1.195:52762] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught ValueError: min(): Argument #1 ($value) must contain at least one element in /var/www/html/fog/lib/fog/image.class.php:396\nStack trace:\n#0 /var/www/html/fog/lib/fog/image.class.php(396): min()\n#1 /var/www/html/fog/lib/reg-task/taskqueue.class.php(112): Image->getStorageGroup()\n#2 /var/www/html/fog/service/Pre_Stage1.php(24): TaskQueue->checkIn()\n#3 {main}\n thrown in /var/www/html/fog/lib/fog/image.class.php on line 396' [Thu Oct 09 18:48:39.106621 2025] [proxy_fcgi:error] [pid 1461:tid 1461] [client 172.120.1.195:52776] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught ValueError: min(): Argument #1 ($value) must contain at least one element in /var/www/html/fog/lib/fog/image.class.php:396\nStack trace:\n#0 /var/www/html/fog/lib/fog/image.class.php(396): min()\n#1 /var/www/html/fog/lib/reg-task/taskqueue.class.php(112): Image->getStorageGroup()\n#2 /var/www/html/fog/service/Pre_Stage1.php(24): TaskQueue->checkIn()\n#3 {main}\n thrown in /var/www/html/fog/lib/fog/image.class.php on line 396'

    The php version the server is running is:

    # php --version PHP 8.2.29 (cli) (built: Jul 3 2025 16:16:05) (NTS) Copyright (c) The PHP Group Zend Engine v4.2.29, Copyright (c) Zend Technologies with Zend OPcache v8.2.29, Copyright (c), by Zend Technologies
  • Resizable Linux

    5
    0 Votes
    5 Posts
    280 Views
    S

    @Tom-Elliott Hi, I finally made it. Here is a screenshot of the error, installing clone Linux, from 512 gb m2 ssd, to 500 gb m2 ssd. And an error is caused with the sections
    5576202d-a566-4124-9c8f-378d29cac505-image.png
    b64f740c-5e04-48db-b049-5630abcc1e0a-image.png

  • Subnet Groups Plugin | Dynamic Groups Not Working

    3
    0 Votes
    3 Posts
    167 Views
    C

    @Tom-Elliott, disregard this request.

    I edited ‘addsubnetgroup.hook.php’ which simplified getting the client IP and adding the host to the respective group. I understand this also removes certain checks that were in place but for my environment it is now working as intended.

    Old ‘addSubnetgroupHost’ function:

    public function addSubnetgroupHost($arguments) { if (!in_array($this->node, (array)self::$pluginsinstalled)) { return; } $Host = $arguments['Host']; $mac = $Host->get('mac'); if (!isset($mac)) { return; } // Setup for tests $name = $ipn = $Host->get('name'); $ip = $Host->get('ip'); $ipr = self::resolveHostname($name); // Perform all tests. $ip1t = filter_var($ip, FILTER_VALIDATE_IP); $ip2t = filter_var($ipn, FILTER_VALIDATE_IP); $ip3t = filter_var($ipr, FILTER_VALIDATE_IP); // If resolve hostname returns a valid IP, set IP appropriately. // Otherwise, if the name is valid, use it. // Otherwise, return if base $ip is false. if (false !== $ip3t) { $ip = $ipr; } elseif (false !== $ip2t) { $ip = $ipn; } elseif (false === $ip1t) { return; } // Now list our subnet groups. Route::listem('subnetgroup'); $SNGroups = json_decode(Route::getData()); foreach ($SNGroups->subnetgroups as &$SNGroup) { if (in_array($SNGroup->groupID, $Host->get('groups'))) { $Host->removeGroup($SNGroup->groupID)->save(); } $subnetList = str_replace(' ', '', $SNGroup->subnets); $subnets = explode(',', $subnetList); foreach ($subnets as &$subnet) { if ($this->_ipCIDRCheck($ip, $subnet)) { $Host->addGroup($SNGroup->groupID)->save(); unset($subnet); continue 2; } unset($subnet); } unset($SNGroup); } }

    New code:

    public function addSubnetgroupHost($arguments) { if (!in_array($this->node, (array)self::$pluginsinstalled)) { return; } $Host = $arguments['Host']; $mac = $Host->get('mac'); if (!isset($mac)) { return; } // Use the real source IP from the request $ip = $_SERVER['REMOTE_ADDR']; // Now list our subnet groups. Route::listem('subnetgroup'); $SNGroups = json_decode(Route::getData()); foreach ($SNGroups->subnetgroups as &$SNGroup) { if (in_array($SNGroup->groupID, $Host->get('groups'))) { $Host->removeGroup($SNGroup->groupID)->save(); } $subnetList = str_replace(' ', '', $SNGroup->subnets); $subnets = explode(',', $subnetList); foreach ($subnets as &$subnet) { if ($this->_ipCIDRCheck($ip, $subnet)) { $Host->addGroup($SNGroup->groupID)->save(); unset($subnet); continue 2; } unset($subnet); } unset($SNGroup); } }
  • Dockerize FOG

    2
    0 Votes
    2 Posts
    1k Views
    8

    @tchavei2

    check out my image! Let me know if it works for you

    https://forums.fogproject.org/topic/18000/unofficial-docker-image-beta

  • Adding Deploying images to the main iPXE menu without need to login

    Unsolved
    3
    0 Votes
    3 Posts
    516 Views
    Tom ElliottT

    @mr-Twister Can you please try this:

    http://forums.fogproject.org/post/122702

    effectively your boot menu likely needs to be:

    params param mac0 ${net0/mac} param arch ${arch} param qihost 1 kernel bzImage loglevel=4 initrd=init.xz root=/dev/ram0 rw ramdisk_size=127000 web=http://${fog-ip}/fog/ consoleblank=0 rootfstype=ext4 mac= ftp=<storageIPHere> storage=<storageIPHere>:/images/ storageip=<storageIPHere> irqpoll chkdsk=0 capone=1 type=down img=<imageNameHere> imgType=n imgPartitionType=all imgid=2 osid=<imageOSIDHere> imgFormat=<imageFormatHere> imgfetch init.xz boot

    Replacing as appropriate:
    <storageIPHere>
    <imageNameHere>
    <imageOSIDHere>
    <imageFormatHere>

    with your relevant information.

    Ultimately finding these pieces of data relevant to your specific image will be the hardest part, but once done I believe this will do what you are wanting/hoping.

  • Fog is indexing only sdb

    11
    0 Votes
    11 Posts
    2k Views
    Tom ElliottT

    @Bearr1976 If you use the latest init, the primary drive is supposed to be /dev/sda automatically (technically the first in alphabetical order) so by setting Host Primary Disk, may be forcing it to use that specific drive. In your case, if you’re trying to capture multiple disks, I suspect you would need the Host Primary Disk unset. If there’s something else not working right after unsetting please let me know and I’ll try to see what I can do to replicate the issue.

  • ip helper address instead of DHCP options 66 + 67

    1
    0 Votes
    1 Posts
    148 Views
    No one has replied
  • Consolidating FOG and AikenWorkbench to one subnet. One PXE for both.

    3
    0 Votes
    3 Posts
    4k Views
    J

    Thank you for your detailed reply, @george1421

    I have decided to run both servers on the same network. With DHCP switched off on AikenWorkbench, I’m able to boot intoFOG menu.

    Your entries aren’t quite right, or I’m doing something wrong. If I use it as is, I’m getting something like "Could not boot: Not found (https://ipxe.org2d12618e)

    I have decided to exclude some of the commands and narrowed it down to:

    chain -ar tftp://192.168.2.1/grub/bootx64.efi boot || goto MENU

    And I’m trying to run it on EFI EFI-capable machine, but I’m only getting to the grub console and no further.

    I understand my best bet is to learn how iPXE works and study its documentation.

    There is more config from Aken if this helps:

    cat /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/awbcboot" TFTP_ADDRESS="192.168.2.1:69" TFTP_OPTIONS="--secure" ls /awbcboot bios biso boot grub ls /awbcboot/grub biso boot bootx32.efi bootx64.efi grub.cfg grub.cfg.bak snap unicode.pf2

    And grub.cfg

    cat grub.cfg set default="0" set timeout=0 menuentry 'Aiken Workbench V2 UEFI ...' --class gnu-linux --class gnu --class os { linux (pxe)/boot/vmlinuz-awc root=/dev/nfs nfsroot=${pxe_default_server}:/awbclient ip=dhcp rw libata.allow_tpm=1 -- initrd (pxe)/boot/initrd.img-awc

    And here is the whole dhcp.conf but we don’t use Apple class as they dropped PXE support.

    ddns-update-style none; authoritative; allow booting; allow bootp; option domain-name-servers 208.67.222.222; option arch code 93 = unsigned integer 16; class "AppleNBI-i386" { 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 = 1) { option vendor-class-identifier "AAPLBSDPC/i386"; option vendor-encapsulated-options 08:04:81:00:00:67; } if (option dhcp-message-type = 8) { option vendor-class-identifier "AAPLBSDPC"; if (substring (option vendor-encapsulated-options, 0, 6) = 01:01:01:02:02:01) { option dhcp-parameter-request-list 60, 43; option vendor-encapsulated-options 01:01:01:03:04:C0:A8:02:01:04:02:80:00:07:04:81:00:00:89:09:2A:81:00:00:89:09:44:6f:45:2d:49:6d:61:67:65; } } if (substring (option vendor-class-identifier, 15, 7) = "iMac4,1") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 7) = "iMac4,2") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 7) = "iMac5,1") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 7) = "iMac5,2") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 7) = "iMac6,1") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 10) = "MacBook1,1") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 10) = "MacBook2,1") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 13) = "MacBookPro1,1") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 13) = "MacBookPro1,2") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 13) = "MacBookPro2,1") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 13) = "MacBookPro2,2") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 13) = "MacBookAir1,1") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 10) = "Macmini1,1") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 9) = "MacPro1,1") { filename "grub/bootx32.efi"; }elsif (substring (option vendor-class-identifier, 15, 9) = "Xserve1,1") { filename "grub/bootx32.efi"; }else { filename "grub/bootx64.efi"; } } class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 192.168.2.1; if (option arch = 00:00) { filename "bios/pxelinux.0"; }elsif (option arch = 00:06) { filename "grub/bootx32.efi"; }elsif (option arch = 00:07) { filename "grub/bootx64.efi"; } } subnet 192.168.2.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.2.10 192.168.2.254; next-server 192.168.2.1; option subnet-mask 255.255.255.0; option broadcast-address 192.168.2.255; option routers 192.168.2.1; default-lease-time 600; max-lease-time 3600; }
  • FOG postdownloadscripts copydrivers not working anymore

    1
    0 Votes
    1 Posts
    880 Views
    No one has replied
  • Recapture a cloned disk

    5
    0 Votes
    5 Posts
    2k Views
    S

    @Tom-Elliott I fixed it by directly removing the dirty flag using Linux. sudo ntfsfix -d /dev/nvme...

    We need to redo our golden image, so we will check at that time if we still get the same behavior.

    Thx for the help !

  • Capturing is fast, but deploying is super slow

    3
  • Deploying ChromeOS Flex with FOG

    1
    0 Votes
    1 Posts
    862 Views
    No one has replied
  • UEFI PXE not booting

    8
    0 Votes
    8 Posts
    2k Views
    J

    @george1421

    I’ve reinstalled FOG, using the in-built DHCP server instead of the router.
    Worked perfectly first time, after setting the router as a relay instead.

    Thank you very much for all your help! 🙂

  • multicast settings

    1
    0 Votes
    1 Posts
    159 Views
    No one has replied
  • 0 Votes
    2 Posts
    946 Views
    No one has replied
  • PXE over IPv4

    7
    0 Votes
    7 Posts
    2k Views
    george1421G

    @Faurel ok good that looks like a clean dhcp process. It would be helpful to have the pcap file in my hand, but you want to expand the OFFER packet. The OFFER packet you can tell from the Info column.

    In the packet you may need to expand the dhcp section. You should see the image similar to below. What is important is the next server IP address should point to IP address of your fog server. and boot file name should be ipxe.efi. You see in this example that the boot file name was not given, this is the error with this packet. The next server and boot file are in the ethernet header. This is the legacy bootp pxe section.

    The next place you need to check is the dhcp options below. You should see dhcp options 66 which should be the IP address of the fog server and dhcp 67 should be the boot file name of ipxe.efi. In this picture this packet is also in error since the dhcp server is not sending out all of the pxe booting info. So if your offer packet looks like this you have a problem.

    Screenshot from 2025-05-07 17-14-20.png

  • could not verify mount point, check if .mntcheck exists /bin/fog.download

    2
    0 Votes
    2 Posts
    349 Views
    M

    Any luck clearing up this error? Running into the same thing now setting up a separate storage node location(still local). I get this when trying to deploy an image.

  • How to upload ISOs to the PXE server?

    2
    0 Votes
    2 Posts
    2k Views
    george1421G

    This tutorial will give you a good general overview. https://forums.fogproject.org/topic/10944/using-fog-to-pxe-boot-into-your-favorite-installer-images

    Since you are talking XP, then you are also meaning bios firmware. For bios you can use a utility called memdisk.

    https://forums.fogproject.org/post/142041 step #18. The memdisk program is only supported under a bios based computer. If you have uefi there is a different process. There are some limitations with bios mode, your iso file MUST be less than 2GB, this is a limitation of a 32 bit bios.

  • Issue when exiting Refind Lubuntu image

    1
    0 Votes
    1 Posts
    863 Views
    No one has replied

111

Online

12.3k

Users

17.4k

Topics

155.8k

Posts