├── .gitattributes ├── .gitignore ├── README.md ├── boot.ipxe ├── boot.png ├── lspci.ipxe ├── pciids.ipxe └── screenshot.png /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################# 2 | ## Eclipse 3 | ################# 4 | 5 | *.pydevproject 6 | .project 7 | .metadata 8 | bin/ 9 | tmp/ 10 | *.tmp 11 | *.bak 12 | *.swp 13 | *~.nib 14 | local.properties 15 | .classpath 16 | .settings/ 17 | .loadpath 18 | 19 | # External tool builders 20 | .externalToolBuilders/ 21 | 22 | # Locally stored "Eclipse launch configurations" 23 | *.launch 24 | 25 | # CDT-specific 26 | .cproject 27 | 28 | # PDT-specific 29 | .buildpath 30 | 31 | 32 | ################# 33 | ## Visual Studio 34 | ################# 35 | 36 | ## Ignore Visual Studio temporary files, build results, and 37 | ## files generated by popular Visual Studio add-ons. 38 | 39 | # User-specific files 40 | *.suo 41 | *.user 42 | *.sln.docstates 43 | 44 | # Build results 45 | 46 | [Dd]ebug/ 47 | [Rr]elease/ 48 | x64/ 49 | build/ 50 | [Bb]in/ 51 | [Oo]bj/ 52 | 53 | # MSTest test Results 54 | [Tt]est[Rr]esult*/ 55 | [Bb]uild[Ll]og.* 56 | 57 | *_i.c 58 | *_p.c 59 | *.ilk 60 | *.meta 61 | *.obj 62 | *.pch 63 | *.pdb 64 | *.pgc 65 | *.pgd 66 | *.rsp 67 | *.sbr 68 | *.tlb 69 | *.tli 70 | *.tlh 71 | *.tmp 72 | *.tmp_proj 73 | *.log 74 | *.vspscc 75 | *.vssscc 76 | .builds 77 | *.pidb 78 | *.log 79 | *.scc 80 | 81 | # Visual C++ cache files 82 | ipch/ 83 | *.aps 84 | *.ncb 85 | *.opensdf 86 | *.sdf 87 | *.cachefile 88 | 89 | # Visual Studio profiler 90 | *.psess 91 | *.vsp 92 | *.vspx 93 | 94 | # Guidance Automation Toolkit 95 | *.gpState 96 | 97 | # ReSharper is a .NET coding add-in 98 | _ReSharper*/ 99 | *.[Rr]e[Ss]harper 100 | 101 | # TeamCity is a build add-in 102 | _TeamCity* 103 | 104 | # DotCover is a Code Coverage Tool 105 | *.dotCover 106 | 107 | # NCrunch 108 | *.ncrunch* 109 | .*crunch*.local.xml 110 | 111 | # Installshield output folder 112 | [Ee]xpress/ 113 | 114 | # DocProject is a documentation generator add-in 115 | DocProject/buildhelp/ 116 | DocProject/Help/*.HxT 117 | DocProject/Help/*.HxC 118 | DocProject/Help/*.hhc 119 | DocProject/Help/*.hhk 120 | DocProject/Help/*.hhp 121 | DocProject/Help/Html2 122 | DocProject/Help/html 123 | 124 | # Click-Once directory 125 | publish/ 126 | 127 | # Publish Web Output 128 | *.Publish.xml 129 | *.pubxml 130 | 131 | # NuGet Packages Directory 132 | ## TODO: If you have NuGet Package Restore enabled, uncomment the next line 133 | #packages/ 134 | 135 | # Windows Azure Build Output 136 | csx 137 | *.build.csdef 138 | 139 | # Windows Store app package directory 140 | AppPackages/ 141 | 142 | # Others 143 | sql/ 144 | *.Cache 145 | ClientBin/ 146 | [Ss]tyle[Cc]op.* 147 | ~$* 148 | *~ 149 | *.dbmdl 150 | *.[Pp]ublish.xml 151 | *.pfx 152 | *.publishsettings 153 | 154 | # RIA/Silverlight projects 155 | Generated_Code/ 156 | 157 | # Backup & report files from converting an old project file to a newer 158 | # Visual Studio version. Backup files are not needed, because we have git ;-) 159 | _UpgradeReport_Files/ 160 | Backup*/ 161 | UpgradeLog*.XML 162 | UpgradeLog*.htm 163 | 164 | # SQL Server files 165 | App_Data/*.mdf 166 | App_Data/*.ldf 167 | 168 | ############# 169 | ## Windows detritus 170 | ############# 171 | 172 | # Windows image file caches 173 | Thumbs.db 174 | ehthumbs.db 175 | 176 | # Folder config file 177 | Desktop.ini 178 | 179 | # Recycle Bin used on file shares 180 | $RECYCLE.BIN/ 181 | 182 | # Mac crap 183 | .DS_Store 184 | 185 | 186 | ############# 187 | ## Python 188 | ############# 189 | 190 | *.py[co] 191 | 192 | # Packages 193 | *.egg 194 | *.egg-info 195 | dist/ 196 | build/ 197 | eggs/ 198 | parts/ 199 | var/ 200 | sdist/ 201 | develop-eggs/ 202 | .installed.cfg 203 | 204 | # Installer logs 205 | pip-log.txt 206 | 207 | # Unit test / coverage reports 208 | .coverage 209 | .tox 210 | 211 | #Translations 212 | *.mo 213 | 214 | #Mr Developer 215 | .mr.developer.cfg 216 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | IPXEBOOT 2 | ======== 3 | ![alt tag](https://raw.githubusercontent.com/bradgillap/IPXEBOOT/master/screenshot.png) 4 | Boot script for iPXE - open source boot firmware. 5 | http://ipxe.org/ 6 | 7 | Some scripting borrowed from Robin. He's like a wizard or something. 8 | https://gist.github.com/robinsmidsrod/2234639 9 | 10 | and 11 | 12 | http://boot.salstar.sk/ 13 | 14 | 15 | Reasoning: 16 | I put this up because I feel like there aren't enough examples of IPXE on the Internet just yet. 17 | 18 | Screenshot of pxeboot menu. 19 | 20 | https://github.com/bradgillap/IPXEBOOT/blob/master/screenshot.png 21 | 22 | 23 | -------------------------------------------------------------------------------- /boot.ipxe: -------------------------------------------------------------------------------- 1 | #!ipxe 2 | 3 | #beginning of file incase of failure 4 | :start 5 | 6 | # Some constants I didn't need right away but may be helpful if you have long addresses or directories to keep track of. 7 | 8 | set boot-url http://10.0.0.1 #Example http://10.0.0.1 No trailing slashes. 9 | set nfs-server 10.0.0.1 #Example just the raw IP of the NFS server no slashes 10 | set nfs-root /srv/tftp/nfs #Example the raw path to the NFS server in linux. NO trailing slash. 11 | set image-dir images # Cut down on the hardlinking of directories. Example /boot/images NO trailing slashes. 12 | set boot-image boot.png #set your background boot image if you have console vesafb and png turned on. Exmaple: Boot image should go in http://yourwhatever.com/boot.png 13 | 14 | # Only use this if you compiled your ipxe with console and png options see http://ipxe.org/cmd/console 15 | # I'm so nice I even provide you with the wallpaper. https://github.com/bradgillap/IPXEBOOT/blob/master/boot.png 16 | console --x 1024 --y 768 # I have to put up with some sucky monitors at work. 17 | console --picture ${boot-url}/${boot-image} #1024x768 Graphic 18 | 19 | # Some menu default timeout 20 | set menu-timeout 1000000 21 | 22 | #Set the default menu item selected. 23 | isset ${menu-default} || set menu-default exit 24 | 25 | # Figure out if client is 64-bit capable 26 | cpuid --ext 29 && set arch x64 || set arch x86 27 | 28 | #This is just another way to write the same thing using amd64 and i386 instead of x86 and x64. We use x86 and x64 because it's easier to read for most people. 29 | #The ubuntu-online install needs this and some others. Notice the difference between the variable $(archl) and $(arch) 30 | cpuid --ext 29 && set archl amd64 || set archl i386 31 | 32 | ###################### BEGIN VERSION CONSTANTS ################################## 33 | set master-version March-2014 34 | set hdt-version 0.5.20 35 | set astra-version 6.14 36 | set freedos-version 1.1 37 | set winpe8-version March-2014 38 | set winpe7-version March-2014 39 | set bootrepair-version 2013-05-08 40 | set pmagic-version 2014-02-06 41 | set systemrescue-version 4.1.0 42 | set hirens-version 15.2 43 | set clonezilla-version 2.2.1-25 44 | set gparted-version 0.18.0-1 45 | set redobackup-version 1.0.4 46 | set deblive64-version 7.4-nonfree 47 | set ophcrackxp-version 3.6.0 48 | set ophcrackvista-version 3.6.0 49 | set memtestx86-version 5.01 50 | set hdat-version 5.0 51 | set spinrite-version 6.0 52 | set dban-version 2.2.8 53 | set ntpassword-version 2014-02-01 54 | set konboot-version 2.4 55 | set acronis-version 2014 56 | set trinity-version 372 57 | ###################### END VERSION CONSTANTS #################################### 58 | 59 | ###################### BEGIN MAIN MENU ########################################## 60 | #GOTO line for changing architecture so it doesn't run the arch command again. 61 | :menu 62 | menu IPXE SUPERBOOT UPDATED ${master-version} 63 | item --gap -- ------------------------- System Info ------------------------------------------------------------------------------------- 64 | item --key 0 start (0) Architecture: ${arch} - Reset? #If user chooses this it reset the arch. 65 | item --key 1 changearch (1) Switch Opposite Architecture 66 | item --key 2 netinfo (2) Network Card Info 67 | item --key 3 lspci (3) PCI Detection Info 68 | item --key 4 hdt (4) Hardware Detection Tool ${hdt-version} 69 | item --key 5 astra (5) Astra System Info ${astra-version} 70 | item --gap -- ------------------------- Operating Systems Install ------------------------------------------------------------------------- 71 | item --key 6 freedos (6) FreeDOS ${freedos-version} IMG 72 | item --key 7 winpe7 (7) WinPE Win7 ${winpe7-version} 200 MB+ WIM 73 | item --key 8 winpe8 (8) WinPE Win8 ${winpe8-version} 200 MB+ WIM 74 | item --key 9 ubuntu-installer-remote (9) Ubuntu ${archl} Dynamic Net Install HTTP WEB 75 | item --gap -- ------------------------- Live Boot Environments ---------------------------------------------------------------------------- 76 | item --key a bootrepair (A) Boot Repair ${arch} ${bootrepair-version} NFS 77 | item --key b pmagic (B) Parted Magic ${pmagic-version} 400+ MB ISO 78 | item --key c systemrescue (C) System Rescue ${systemrescue-version} HTTP 79 | item --key d trinity (D) Trinity Rescue ${trinity-version} 80 | item --key e hirens (E) Hiren's Boot ${hirens-version} 600+ MB ISO 81 | item --key f clonezilla (F) Clonezilla ${arch} ${clonezilla-version} HTTP 82 | item --key g gparted (G) Gparted ${arch} ${gparted-version} HTTP 83 | item --key h redobackup (H) RedoBackup! ${redobackup-version} NFS 84 | item --key i acronis (I) Acronis ${acronis-version} 350+ MB ISO 85 | item --key j deblive64 (J) Debian Live ONLY X64 ${deblive64-version} Wheezy HTTP 86 | item --key k ophcrackxp (K) Ophcrack Live XP ${ophcrackxp-version} 400+ MB ISO 87 | item --key l ophcrackvista (L) Ophcrack Live Vista ${ophcrackvista-version} 400+ MB ISO 88 | item --gap -- ------------------------- Tools and utilities ------------------------------------------------------------------------------- 89 | item --key m memtestx86 (M) Memtestx86 ${memtestx86-version} ISO 90 | item --key n hdat (N) Hdat ${hdat-version} Hard Drive Diagnostics IMG 91 | item --key o spinrite (O) SpinRite ${spinrite-version} HD Repair IMG 92 | item --key p dban (P) Dban ${dban-version} Wipe Warning! DESTRUCTIVE! IMG 93 | item --key q ntpassword (Q) Offline NT Password and Registry Editor ${ntpassword-version} WARNING! EFS ENCRYPTION! ISO 94 | item --key v konboot (V) Kon-boot ${konboot-version} 95 | item --gap -- ------------------------- Advanced options ----------------------------------------------------------------------------------- 96 | item --key z config (Z) Configure settings 97 | item --key t external (T) External Linux Installs http://boot.salstar.sk/ 98 | item --key s shell (S) Drop to iPXE shell 99 | item --key r reboot (R) Reboot computer 100 | item --key x exit (X) Exit 101 | 102 | choose --timeout ${menu-timeout} --default ${menu-default} selected || goto cancel 103 | set menu-timeout 0 104 | goto ${selected} 105 | 106 | ###################### END MAIN MENU #################################### 107 | ###################### BEGIN TASKS ###################################### 108 | 109 | ###################### Built In IPXE Commands ########################### 110 | 111 | :cancel 112 | echo You cancelled the menu, dropping you to a shell. 113 | :shell 114 | echo Type 'exit' to get the back to the menu. 115 | echo Type 'help' for more IPXE commands. 116 | echo 117 | echo INTERFACE,IP,SUBNET,GATEWAY 118 | echo ....................................... 119 | echo 120 | route #IP INFO 121 | echo 122 | echo ....................................... 123 | 124 | shell 125 | set menu-timeout 0 126 | set submenu-timeout 0 127 | goto start 128 | 129 | :failed 130 | echo Booting failed, dropping to shell and freeing memory. 131 | imgfree 132 | goto shell 133 | 134 | :reboot 135 | reboot 136 | 137 | :exit 138 | exit 0 139 | 140 | :config 141 | config 142 | goto start 143 | 144 | :back 145 | set submenu-timeout 0 146 | clear submenu-default 147 | goto start 148 | 149 | # This forces the document to do the opposite architecture from the menu down. 150 | :changearch 151 | cpuid --ext 29 && set arch x86 || set arch x64 152 | goto menu 153 | ################### END OF BUILT IN COMMMANDS ########################### 154 | 155 | ####### BEGIN SYSTEM INFO ######### 156 | 157 | :hdt 158 | initrd ${image-dir}/hdt-0.5.2.img 159 | chain memdisk || goto failed 160 | 161 | :astra 162 | initrd ${image-dir}/astraiso.iso 163 | chain memdisk iso raw || goto failed 164 | 165 | :netinfo 166 | menu Select network card 167 | item netX Default (netX) 168 | set idx:int32 0 169 | :sel_card_loop isset ${net${idx}/mac} || goto sel_card_done 170 | item net${idx} net${idx} 171 | inc idx && goto sel_card_loop 172 | :sel_card_done 173 | choose netcard || goto start 174 | 175 | :netinfo_show 176 | menu Network info for ${netcard} 177 | item --gap Chip: 178 | item chip ${space} ${${netcard}/chip} 179 | item --gap MAC: 180 | item mac ${space} ${${netcard}/mac} 181 | item --gap IP/mask: 182 | item ip ${space} ${${netcard}/ip}/${${netcard}/netmask} 183 | item --gap Gateway: 184 | item gw ${space} ${${netcard}/gateway} 185 | item --gap Domain: 186 | item domain ${space} ${${netcard}/domain} 187 | item --gap DNS: 188 | item dns ${space} ${${netcard}/dns} 189 | item --gap DHCP server: 190 | item dhcpserver ${space} ${${netcard}/dhcp-server} 191 | item --gap Next-server: 192 | item nextserver ${space} ${next-server} 193 | item --gap Filename: 194 | item filename ${space} ${${netcard}/filename} 195 | choose empty || 196 | goto start 197 | 198 | :lspci 199 | chain ${boot-url}/lspci.ipxe 200 | goto start 201 | 202 | ##################### END SYSTEM INFO #################################### 203 | 204 | ##################### BEGIN Operating Systems Install #################### 205 | 206 | :freedos 207 | initrd ${image-dir}/freedosv1.img 208 | chain memdisk || goto failed 209 | 210 | # Special set base-url constant for remote host 211 | :ubuntu-installer-remote 212 | echo Starting Ubuntu 12.04 ${archl} installer. 213 | set base-url http://no.archive.ubuntu.com/ubuntu/dists/precise/main/installer-${archl}/current/images/netboot/ubuntu-installer/${archl} 214 | kernel ${base-url}/linux 215 | initrd ${base-url}/initrd.gz 216 | #imgargs linux auto=true url=http://yourserver/some/path/preseed.cfg 217 | boot || goto failed 218 | 219 | :winpe8 220 | kernel wimboot 221 | initrd /winpe8/${arch}/media/bootmgr bootmgr 222 | initrd /winpe8/${arch}/media/Boot/BCD BCD 223 | initrd /winpe8/${arch}/media/Boot/Fonts/segmono_boot.ttf segmono_boot.ttf 224 | initrd /winpe8/${arch}/media/Boot/Fonts/segoe_slboot.ttf segoe_slboot.ttf 225 | initrd /winpe8/${arch}/media/Boot/Fonts/segoen_slboot.ttf segoen_slboot.ttf 226 | initrd /winpe8/${arch}/media/Boot/Fonts/wgl4_boot.ttf wgl4_boot.ttf 227 | initrd /winpe8/${arch}/media/Boot/boot.sdi boot.sdi 228 | initrd /winpe8/${arch}/media/sources/boot.wim boot.wim 229 | boot || goto failed 230 | 231 | :winpe7 232 | kernel wimboot 233 | initrd /winpe7/${arch}/ISO/bootmgr bootmgr 234 | initrd /winpe7/${arch}/ISO/boot/bcd BCD 235 | initrd /winpe7/${arch}/ISO/boot/boot.sdi boot.sdi 236 | initrd /winpe7/${arch}/winpe.wim boot.wim 237 | boot || goto failed 238 | 239 | ################ END Operating Systems Install ########################### 240 | 241 | ################ BEGIN Live Boot Environments ########################### 242 | 243 | :hirens 244 | initrd ${image-dir}/Hiren's.BootCD.15.2.iso 245 | chain memdisk iso raw || goto failed 246 | 247 | :clonezilla 248 | kernel ${image-dir}/clonezilla/${arch}/vmlinuz boot=live config noswap nolocales edd=on nomodeset vga=788 nosplash noprompt fetch=${boot-url}/${image-dir}/clonezilla/${arch}/filesystem.squashfs 249 | initrd ${image-dir}/clonezilla/${arch}/initrd.img 250 | boot || goto failed 251 | 252 | :gparted 253 | kernel ${image-dir}/gparted/${arch}/vmlinuz boot=live config union=aufs noswap noprompt vga=788 fetch=${boot-url}/${image-dir}/gparted/${arch}/filesystem.squashfs 254 | initrd ${image-dir}/gparted/${arch}/initrd.img 255 | boot || goto failed 256 | 257 | :redobackup 258 | kernel ${image-dir}/redobackup/casper/vmlinuz boot=casper netboot=nfs nfsroot=${nfs-server}:${nfs-root}/redobackup/ 259 | initrd ${image-dir}/redobackup/casper/initrd.lz 260 | boot || goto failed 261 | 262 | :acronis 263 | initrd ${image-dir}/acronis2014.iso 264 | chain memdisk iso raw || goto failed 265 | 266 | :trinity 267 | initrd ${image-dir}/trinity-rescue-kit.3.4-build-372.iso 268 | chain memdisk iso || goto failed 269 | 270 | :bootrepair 271 | kernel ${image-dir}/bootrepair/${arch}/casper/vmlinuz boot=casper netboot=nfs nfsroot=${nfs-server}:${nfs-root}/bootrepair/${arch}/ 272 | initrd ${image-dir}/bootrepair/${arch}/casper/initrd.lz 273 | boot || goto failed 274 | 275 | :systemrescue 276 | kernel ${boot-url}/${image-dir}/systemrescue/isolinux/rescue${arch} 277 | initrd ${image-dir}/systemrescue/isolinux/initram.igz 278 | imgargs rescue${arch} dodhcp netboot=${boot-url}/${image-dir}/systemrescue/sysrcd.dat 279 | boot || goto failed 280 | 281 | :ophcrackxp 282 | initrd ${image-dir}/ophcrack-xp-livecd-3.6.0.iso 283 | chain memdisk iso raw || goto failed 284 | 285 | :ophcrackvista 286 | initrd ${image-dir}/ophcrack-vista-livecd-3.6.0.iso 287 | chain memdisk iso raw || goto failed 288 | 289 | #vmalloc=512 is the ISO + 50mb or so to give it room to breathe in ram. 290 | :pmagic 291 | initrd ${image-dir}/pmagic_2014_02_26.iso 292 | chain memdisk iso vmalloc=512M || goto failed 293 | 294 | # x86 version of this has some weird double initd1 and initrd2 that I couldn't figure out. 295 | :deblive64 296 | kernel ${image-dir}/debian/live/debian-live-7.4-amd64-gnome-desktop+nonfree.vmlinuz 297 | initrd ${image-dir}/debian/live/debian-live-7.4-amd64-gnome-desktop+nonfree.initrd.img 298 | imgargs debian-live-7.4-amd64-gnome-desktop+nonfree.vmlinuz boot=live config console=ttyS0 username=live fetch=${boot-url}/${image-dir}/debian/live/debian-live-7.4-amd64-gnome-desktop+nonfree.squashfs 299 | boot || goto failed 300 | 301 | ###################### END Live Boot Environments ###################### 302 | 303 | ###################### START Tools and Utilities ####################### 304 | :hdat 305 | initrd ${image-dir}/HDAT2FDD.IMG 306 | chain memdisk || goto failed 307 | 308 | :spinrite 309 | initrd ${image-dir}/spinritev6.iso 310 | chain memdisk iso raw || goto failed 311 | 312 | :memtestx86 313 | initrd ${image-dir}/memtest86v5.iso || goto failed 314 | chain memdisk iso raw || goto failed 315 | 316 | :ntpassword 317 | initrd ${image-dir}/cd140201.iso 318 | chain memdisk iso || goto failed 319 | 320 | :konboot 321 | initrd ${image-dir}/kon-boot.img 322 | chain memdisk || goto failed 323 | 324 | # quick explanation of imgargs. We don't need to put the path to DBA.BZI because we just downloaded to a root path. 325 | :dban 326 | kernel ${image-dir}/DBAN.BZI 327 | imgargs DBAN.BZI nuke="dwipe --method gutmann --rounds 2 --verify last" silent vga=785 328 | boot || goto failed 329 | 330 | # This was just a test for boot.wim. We use winpe instead with injected drivers for lan and disks 331 | #:wimboot 332 | #kernel wimboot 333 | #initrd win7/bootmgr bootmgr 334 | #initrd win7/boot/bcd BCD 335 | #initrd win7/boot/boot.sdi boot.sdi 336 | #initrd win7/sources/boot.wim boot.wim 337 | #imgstat 338 | #boot || goto failed 339 | 340 | :external 341 | chain http://boot.salstar.sk || goto failed 342 | goto start -------------------------------------------------------------------------------- /boot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradgillap/IPXEBOOT/6b14e73b5f8d656a569fa9adc6828f46ee7c406d/boot.png -------------------------------------------------------------------------------- /lspci.ipxe: -------------------------------------------------------------------------------- 1 | #!ipxe 2 | 3 | clear addr 4 | pciscan addr && goto pciscan_found || 5 | echo Missing "pciscan" command. Recompile ipxe with PCI_CMD. 6 | exit 7 | :pciscan_found 8 | 9 | set spaces2:hex 20:20 10 | set spaces4:hex 20:20:20:20 11 | 12 | imgfetch ${boot-url}/pciids.ipxe 13 | isset ${sigs} || goto skip_verify 14 | imgverify pciids.ipxe ${sigs}pciids.ipxe.sig || 15 | :skip_verify 16 | 17 | clear addr 18 | menu PCI device list 19 | :scan pciscan addr || goto scan_done 20 | clear ven 21 | clear dev 22 | set vendor ${pci/${addr}.0.2} 23 | set device ${pci/${addr}.2.2} 24 | chain pciids.ipxe 25 | item --gap ${addr:busdevfn} ${spaces4:string} ${ven} 26 | item b${addr:busdevfn} ${spaces2:string} ${vendor}:${device} ${dev} 27 | goto scan 28 | :scan_done 29 | choose press_enter || 30 | 31 | imgfree pciids.ipxe 32 | exit 33 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradgillap/IPXEBOOT/6b14e73b5f8d656a569fa9adc6828f46ee7c406d/screenshot.png --------------------------------------------------------------------------------