Alright so I made some progress. I dont know PHP or C, and I’m just learning how iPXE is working.
I was using the template above, which I retrieved from https://forums.fogproject.org/topic/15969/securing-fog-boot-options/17?sort=oldest_to_newest
But, I don’t really know where that is from, so I wanted to find my own menu template. I was able to find that by putting http://<My FOG IP address>/fog/service/ipxe/boot.php? into my web browser.
#!ipxe
set fog-ip <my fog ip>
set fog-webroot fog
set boot-url http://${fog-ip}/${fog-webroot}
cpuid --ext 29 && set arch x86_64 || set arch i386
goto get_console
:console_set
colour --rgb 0x00567a 1 ||
colour --rgb 0x00567a 2 ||
colour --rgb 0x00567a 4 ||
cpair --foreground 7 --background 2 2 ||
goto MENU
:alt_console
cpair --background 0 1 ||
cpair --background 1 2 ||
goto MENU
:get_console
console --picture http://<my fog ip>/fog/service/ipxe/bg.png --left 100 --right 80 && goto console_set || goto alt_console
:MENU
menu
colour --rgb 0xff0000 0 ||
cpair --foreground 1 1 ||
cpair --foreground 0 3 ||
cpair --foreground 4 4 ||
item --gap Host is NOT registered!
item --gap -- -------------------------------------
item fog.local Boot from hard disk
item fog.memtest Run Memtest86+
item fog.reginput Perform Full Host Registration and Inventory
item fog.reg Quick Registration and Inventory
item fog.deployimage Deploy Image
item fog.multijoin Join Multicast Session
item fog.sysinfo Client System Information (Compatibility)
item fog.advancedlogin Advanced Menu
choose --default fog.local --timeout 3000 target && goto ${target}
:fog.local
sanboot --no-describe --drive 0x80 || goto MENU
:fog.memtest
kernel memdisk initrd=memtest.bin iso raw
initrd memtest.bin
boot || goto MENU
:fog.reginput
kernel bzImage32 loglevel=4 initrd=init_32.xz root=/dev/ram0 rw ramdisk_size=275000 web=http://<my fog ip>/fog/ consoleblank=0 rootfstype=ext4 storage=<my fog ip>:/images/ storageip=<my fog ip> nvme_core.default_ps_max_latency_us=0 loglevel=4 mode=manreg
imgfetch init_32.xz
boot || goto MENU
:fog.reg
kernel bzImage32 loglevel=4 initrd=init_32.xz root=/dev/ram0 rw ramdisk_size=275000 web=http://<my fog ip>/fog/ consoleblank=0 rootfstype=ext4 storage=<my fog ip>:/images/ storageip=<my fog ip> nvme_core.default_ps_max_latency_us=0 loglevel=4 mode=autoreg
imgfetch init_32.xz
boot || goto MENU
:fog.deployimage
login
params
param mac0 ${net0/mac}
param arch ${arch}
param username ${username}
param password ${password}
param qihost 1
isset ${net1/mac} && param mac1 ${net1/mac} || goto bootme
isset ${net2/mac} && param mac2 ${net2/mac} || goto bootme
param sysuuid ${uuid}
:fog.multijoin
login
params
param mac0 ${net0/mac}
param arch ${arch}
param username ${username}
param password ${password}
param sessionJoin 1
isset ${net1/mac} && param mac1 ${net1/mac} || goto bootme
isset ${net2/mac} && param mac2 ${net2/mac} || goto bootme
param sysuuid ${uuid}
:fog.sysinfo
kernel bzImage32 loglevel=4 initrd=init_32.xz root=/dev/ram0 rw ramdisk_size=275000 web=http://<my fog ip>/fog/ consoleblank=0 rootfstype=ext4 storage=<my fog ip>:/images/ storageip=<my fog ip> nvme_core.default_ps_max_latency_us=0 loglevel=4 mode=sysinfo
imgfetch init_32.xz
boot || goto MENU
:fog.advancedlogin
login
params
param mac0 ${net0/mac}
param arch ${arch}
param username ${username}
param password ${password}
param advLog 1
isset ${net1/mac} && param mac1 ${net1/mac} || goto bootme
isset ${net2/mac} && param mac2 ${net2/mac} || goto bootme
param sysuuid ${uuid}
:bootme
chain -ar http://<my fog ip>/fog/service/ipxe/boot.php##params ||
goto MENU
autoboot
The idea here is I want to have two users: one user that can do full registration, quick reg, deploy, quick delete, etc.
The other user can only deploy.
How I’m thinking of doing this is limiting the main menu options to Deploy and Advanced menu, only. Deploy (in the main menu) will be locked behind the user2 credentials, while advanced menu will be locked behind the user1 credentials. The advanced menu will contain all of tasks that user1 should have access to: full reg, quick reg, deploy, quick del, etc.
I have implemented the advanced menu by, essentially, copying and pasting my Main menu template in FOG Configuration>iPXE General Configuration>Advanced Menu settings>Advanced menu command
Which seems to work, however when I PXE boot and select Full Host Registration and Inventory, it boots me back to the menu because boot
fails.
Now, I’m trying to figure out why boot
is failing, to not much avail.
Edit: the error I’m getting on boot is
Could not boot: Error 0x7f048283 (http://ipxe.org/7f048283)
Could not boot: Error 0x7f048283 (http://ipxe.org/7f048283)
Could not boot: Error 0x7f048283 (http://ipxe.org/7f048283)
Chainloading failed, hit 's' for the iPXE shell; reboot in 10 seconds