├── Application ├── config.ini ├── files │ ├── boot │ │ ├── BCD │ │ └── boot.sdi │ ├── efi │ │ └── Microsoft │ │ │ └── Boot │ │ │ └── BCD │ ├── ipxe-i386.efi │ ├── ipxe-undionly.kpxe │ ├── ipxe-x64.efi │ ├── ipxe.pxe │ ├── menu.png │ ├── wimboot │ ├── wimboot.ipxe │ └── wimbootM.ipxe ├── filter.sample ├── pxesrv.exe └── pxesrv.txt ├── README.md └── Resources ├── Tweet.PNG ├── Tweet2.PNG └── img ├── TinyIPXE_GUI.PNG └── demo.gif /Application/config.ini: -------------------------------------------------------------------------------- 1 | [dhcp] 2 | start=1 3 | proxydhcp=0 4 | httpd=1 5 | bind=1 6 | root=Files 7 | filename=ipxe.pxe 8 | altfilename=wimbootM.ipxe 9 | binl=0 10 | dnsd=0 11 | smb=0 12 | opt1=255.255.255.0 13 | opt3=10.0.0.254 14 | opt6=10.0.0.200 15 | opt15=JM2K69.loc 16 | opt28=10.0.0.255 17 | opt43=0 18 | opt51=3600 19 | opt54=10.0.0.200 20 | next-server=10.0.0.200 21 | poolstart=10.0.0.201 22 | poolsize=10 23 | [arch] 24 | 00006=ipxe-i386.efi 25 | 00007=ipxe-x64.efi 26 | 00009=ipxe-x64.efi 27 | [frmDHCPServer] 28 | top=242 29 | left=159 30 | [web] 31 | port=8080 32 | -------------------------------------------------------------------------------- /Application/files/boot/BCD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Application/files/boot/BCD -------------------------------------------------------------------------------- /Application/files/boot/boot.sdi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Application/files/boot/boot.sdi -------------------------------------------------------------------------------- /Application/files/efi/Microsoft/Boot/BCD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Application/files/efi/Microsoft/Boot/BCD -------------------------------------------------------------------------------- /Application/files/ipxe-i386.efi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Application/files/ipxe-i386.efi -------------------------------------------------------------------------------- /Application/files/ipxe-undionly.kpxe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Application/files/ipxe-undionly.kpxe -------------------------------------------------------------------------------- /Application/files/ipxe-x64.efi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Application/files/ipxe-x64.efi -------------------------------------------------------------------------------- /Application/files/ipxe.pxe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Application/files/ipxe.pxe -------------------------------------------------------------------------------- /Application/files/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Application/files/menu.png -------------------------------------------------------------------------------- /Application/files/wimboot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Application/files/wimboot -------------------------------------------------------------------------------- /Application/files/wimboot.ipxe: -------------------------------------------------------------------------------- 1 | #!ipxe 2 | 3 | set boot-url http://${next-server}:8080 4 | 5 | cpuid --ext 29 && set arch x64 || set arch x86 6 | kernel ${boot-url}/wimboot quiet 7 | initrd ${boot-url}/BOOT/BCD BCD 8 | initrd ${boot-url}/BOOT/BOOT.SDI BOOT.SDI 9 | initrd ${boot-url}/SOURCES/PSD/${buildarch}/BOOT.WIM BOOT.WIM 10 | boot 11 | 12 | :unknown 13 | echo Unknown platform ${platform}_${buildarch} -------------------------------------------------------------------------------- /Application/files/wimbootM.ipxe: -------------------------------------------------------------------------------- 1 | #!ipxe 2 | 3 | set boot-url http://${next-server}:8080 4 | set menu-timeout 5000 5 | set submenu-timeout ${menu-timeout} 6 | 7 | isset ${menu-default} || set menu-default exit 8 | cpuid --ext 29 && set arch x64 || set arch x86 9 | 10 | goto Konsole_${platform}_${buildarch} || goto unknown2 11 | 12 | :Konsole_efi_x86_64 13 | console --picture ${boot-url}/menu.png 14 | 15 | :Konsole_pcbios_i386 16 | echo No console available now 17 | console --picture ${boot-url}/menu.png 18 | 19 | :unknown2 20 | goto start 21 | 22 | ######## MAIN MENU ################### 23 | :start 24 | menu IPXE @JM2K69 for PSD 25 | item 26 | item --gap -- ------------------------- PSD Boot ------------------------------------------ 27 | item wimboot Boot HTTP for PSD x64 28 | item wimboot2 Boot HTTP MDT x64 29 | item exit Exit 30 | item --gap -- ------------------------------ Advanced ------------------------------------- 31 | item config Configure settings 32 | item shell Enter iPXE shell 33 | item reboot Reboot 34 | choose --default wimboot --timeout 30000 target && goto ${target} 35 | 36 | :wimboot 37 | cpuid --ext 29 && set arch x64 || set arch x86 38 | kernel ${boot-url}/wimboot quiet 39 | initrd ${boot-url}/BOOT/BCD BCD 40 | initrd ${boot-url}/BOOT/BOOT.SDI BOOT.SDI 41 | initrd ${boot-url}/SOURCES/PSD/${buildarch}/BOOT.WIM BOOT.WIM 42 | boot 43 | 44 | :wimboot2 45 | cpuid --ext 29 && set arch x64 || set arch x86 46 | kernel ${boot-url}/wimboot quiet 47 | initrd ${boot-url}/BOOT/BCD BCD 48 | initrd ${boot-url}/BOOT/BOOT.SDI BOOT.SDI 49 | initrd ${boot-url}/SOURCES/MDT/${buildarch}/BOOT.WIM BOOT.WIM 50 | boot 51 | 52 | :reboot 53 | reboot 54 | 55 | :config 56 | config 57 | goto start 58 | 59 | :shell 60 | echo Type exit to get the back to the menu 61 | shell 62 | set menu-timeout 0 63 | goto start 64 | -------------------------------------------------------------------------------- /Application/filter.sample: -------------------------------------------------------------------------------- 1 | 00-0C-29-AC-30-33 2 | 01-02-03-04-05-06 3 | aa-bb-cc-dd-ee-ff 4 | 08-00-27-4C-A8-A7 -------------------------------------------------------------------------------- /Application/pxesrv.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Application/pxesrv.exe -------------------------------------------------------------------------------- /Application/pxesrv.txt: -------------------------------------------------------------------------------- 1 | 1.0.0.2 2 | modified : pxe options hidden by default 3 | modified : altfilename hidden by default 4 | fixed : form no more stays on top 5 | fixed : form position is default 6 | 1.0.0.3 7 | fixed : auto add character '/' when requesteddocument is a folder 8 | 1.0.0.4 9 | fixed : bug in tftpd daemon : blksize was not handled when tsize was set. would not affect all clients, but would affect wds 10 | 1.0.0.5 11 | modified : change of name for Tiny PXE Server 12 | 1.0.0.6 13 | added : binl active if at least one of the binl fields is field (wdsnbp.com will query a new boot file name and bcd file name (option 252)) 14 | 1.0.0.7 15 | added : BINL checkbox (will actually enable proxy dhcp on udp:4011) 16 | added : support for NCQ requests, will send back NCR answers with correct driver details : enabling RIS/XP network installation 17 | 1.0.0.8 18 | fixed : in dhcp, answer.flags=query.flags now 19 | added : more debugging 20 | 1.0.0.9 21 | fixed : random timeouts on tftp. oack return moved to thread.execute rather than thread.create 22 | 1.0.0.10 23 | added : will use datas from config.ini, if any (see sample) 24 | added : auto start of services possible 25 | added : about box 26 | added : forms will remember last top/left position 27 | fixed : working/current directory 28 | 1.0.0.11 29 | added : dns server (will send back A/PTR records only, use the windows hosts file to add records) 30 | 1.0.0.12 31 | added : can use @mac or @ip in the filename to send back the requester mac or ip as part of the filename/path 32 | 1.0.0.13 33 | added : ability to filter (inclusive) mac addresses 34 | added : quick and dirty faq that will evolve as it goes 35 | 1.0.0.14 36 | added : proxydhcp option in the gui 37 | added : proxydhcp option in config.ini 38 | modified : cleaner log 39 | added : verbose option in config.ini 40 | fixed (again) : unicast/broadcast will match the query 41 | added : log option in config.ini to log to a file 42 | 1.0.0.15 43 | added : option (smb) in config.ini to create auto a windows share named PXE pointing to boot folder 44 | fixed : in proxydhcp mode, will not send a dhcp_offer if query is not coming from a PXEClient 45 | 1.0.0.16 46 | fixed: remoteport=4011 when srcport=4011 -> was preventing some ipxe client to boot (uefi for exemple) 47 | changed: opt60='' by default when using opt67 (was 'PXEClient' before) -> was preventing ipxe client to boot with opt67 48 | changed: opt60='PXEClient' when proxydhcp=1 (was hardcoded before) -> more flexible 49 | fixed: xid is now displayed correctly -> was reversed order 50 | fixed: was sending an empty boot filename in proxydhcp in the dhcp_offer stage -> removed, was preventing proxydhcp+opt67 51 | changed: bind=true by default when multiple interfaces detected -> was preventing pxe boot with multiple interfaces when bind=false 52 | 1.0.0.17 53 | fixed : should detect if a socket is already in use 54 | fixed : messages sent from threads would not always reach the memo box 55 | added : will execute an executable/batch if cmd parameter is present in config.ini 56 | fixed : httpd will now handle both non keep-alive (default) and keep-alive http requests 57 | fixed : would create crashes (under certain conditions) if the root path was incorrect 58 | fixed : would not start tftpd if not set in config.ini 59 | added : support for dhcp-relay (handle giaddr) 60 | added : opt252 in config file 61 | 1.0.0.18 62 | added : @arch variable can be used in the altfilename (next to @mac and @ip). 00000 = bios, 00006=efi32, etc ... see https://www.rfc-editor.org/rfc/rfc4578.txt 63 | fixed : tftpd will also bind if option is checked 64 | modified : if the root folder in config.ini is incorrect, it will be set to the exe current directory 65 | modified : if the filename cannot be resolved (like when using @arch or @mac), it will not prevent execution 66 | modified : tftp will display the full path (within root) for a file request 67 | added : @arch will also be used in opt252 68 | fixed : opt67 in the config.ini would not set the root folder 69 | added : [arch] section in config.ini optional, applies to filename and opt67. ex values -> 00006=bootia32.efi, 00007=bootx64.efi, etc ... 70 | added : support for nics.txt for BINL (overule the inf parsing) 71 | fixed : opt13 was incorrect when loading a filename thru config.ini 72 | fixed : opt13 was incorrect when using arch=00007/00006 73 | fixed : when using opt67, would crash if [arch] section was missing 74 | added : can re load settings from config.ini 75 | added : can save settings to config.ini 76 | added : smb checkbox 77 | fixed : httpd uses fmShareDenyWrite to allow multiple i/o to one file 78 | added : sent bootp packet will be word aligned 79 | added : will replace \0 by null char for opt60,66,67 (some pxe clients require a null terminated string there) 80 | added : attempt to support rfc951 = boot request will be handled as dhcp request (rfc951=1 in config.ini) 81 | added : no_hostname=1 in config.ini to skip the server hostname field 82 | changed : if opt54='0.0.0.0' then skip in makebootp_vend (useless?) 83 | added : no_opt13=1 in config.ini to skip option 13 84 | changed : opt53 skipped if bootp request (i.e not a dhcp request) to be compatible with bootp clients 85 | 1.0.0.19 86 | added : root can be an http url (netboot for debian, ubuntu, ...) 87 | fixed : stream.free on udp transfer complete 88 | added : can log to a syslog server (add syslog=host in config.ini) 89 | fixed : non critical udp socket errors would stop the dhcp daemon 90 | added : in analysedata, will exit loop as soon as a dhcp message is found 91 | added : in analysedata, will prevent (byte)offset>255 92 | added : offline button will terminatethread if still active (53,67,4011) 93 | fixed : no more high cpu usage on random occasions 94 | added : new options skip_dhcp_inform & skip_dhcp_discarded 95 | added : forcerenew dhcp messages logged 96 | 1.0.0.20 97 | added : new option wsMinimized in config.ini to start the app minimized 98 | fixed : @mac,@ip,@arch added to dhcp_offer (was only dhcp_ack before) 99 | fixed : pool start correct when opt54 set in ini file 100 | todo : send arch in dhcp offer 101 | added : @opt54 variable next to @mac,@ip,@arch -> similar to ${next-server} in ipxe 102 | fixed : next server passed to send_dhcpoffer and send_dhcpack 103 | added : will add a scrollbar when active monitor height <=600 104 | added : vscroll=1 in config.ini will force a vertical scrollbar 105 | fixed : option 6 dns server was wrong when choosing a different NIC 106 | added : arch will be taken into account in the dhcp offer as well 107 | fixed : tftpd can be disabled again in config.ini 108 | added : will select the active nic in the opt54 combo box 109 | modified : 2 more fields hidden and moved to the advanced part of the form 110 | fixed : log to file is disabled 111 | added : a syslog server is included in the zip file (syslog=127.0.0.1 in the config.ini) 112 | 1.0.0.21 113 | modified : dns proxy will read entries from config.ini (section=hostname,ident=ip or section=ip,ident=host), no more from hosts file 114 | added : right click open config.ini 115 | added : right click open root_path 116 | fixed : share folder will now add everyone read-only on share permissions 117 | added : share is created with STYPE_TEMPORARY flag, i.e will not survive a reboot 118 | added : TPS will answer to specific 'discovery' messages (see discover.zip) 119 | fixed : wsMinimized=1 was preventing form_show and load_config 120 | added : each daemon will report on which ip it is listening (useful to troubleshoot) 121 | added : syslogd will read ip under [syslog] in config.ini if one wants to bind to a specific interface (instead of 0.0.0.0 by default) 122 | fixed : error handling in log_memo to avoid a possible date bug 123 | fixed : httpd could not list files/folder in a non indexed folder 124 | modified : ucimp.pas uses winsock, not wsck 125 | modified : iphlpapi_helper.pas uses winsock, not wsck 126 | modified : usnoop uses winsock, not wsck 127 | modified : iptypes uses winsock, not wsck 128 | modified : removed ipheader unit in main form 129 | modified : TPS does not use wsck unit anymore 130 | 1.0.0.22 131 | added : CTRL+R to refresh interfaces 132 | added : [map] section, before=after 133 | fixed : free stream after transfercomplete 134 | added : safety counter when downloading from remote http server (udp to http) 135 | added : /config:x:\path\config.ini 136 | added : pick up another config file (menu) 137 | added : CTRL+I to display current config file path 138 | 1.0.0.23 139 | added: php,vbs,py files can be processed server side using php, vbs, py entries under web section 140 | added : will notify in the log window if another dhcp server exists on the LAN 141 | added : if index.html exists, http will display this file instead of listing directory 142 | added : httpd will be bound to one interface (or binded...) if bind option is selected 143 | fixed : http server now supports bigger than 2gb 144 | fixed : minor bug in dnsd where the daemon would stop unexpectedly under some circumstances -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tiny_iPXE 2 | 3 | iPXE solution for Windows iPXE **WDS** **MDT** **PSD** **OSDCLOUD** 4 | 5 | # Demo 6 | 7 | * We can boot from **any architecture** 8 | * With ou without Menu 9 | * Fully customizable 10 | * We can boot from HTTPS-HTTP, iSCSI, Disk, ISO and WimFile with wimboot. 11 | 12 | ![Auhtors_img](/Resources/Tweet.PNG) 13 | 14 | 15 | ![alt](https://github.com/JM2K69/Tiny_iPXE/blob/main/Resources/img/demo.gif) 16 | 17 | # Menu Ipxe 18 | 19 | An example of configuration file : 20 | 21 | ```ini 22 | #!ipxe 23 | 24 | set boot-url http://${next-server}:8080 25 | 26 | cpuid --ext 29 && set arch x64 || set arch x86 27 | kernel ${boot-url}/wimboot quiet 28 | initrd ${boot-url}/BOOT/BCD BCD 29 | initrd ${boot-url}/BOOT/BOOT.SDI BOOT.SDI 30 | initrd ${boot-url}/SOURCES/PSD/${buildarch}/BOOT.WIM BOOT.WIM 31 | boot 32 | 33 | :unknown 34 | echo Unknown platform ${platform}_${buildarch} 35 | ``` 36 | 37 | # Main application 38 | 39 | 40 | ![Auhtors_img](/Resources/img/TinyIPXE_GUI.PNG) 41 | 42 | Here there is the main panel and the only panel to configure Tiny Ipxe Server. 43 | 44 | # Contribution 45 | 46 | 47 | 48 | ![Auhtors_img](/Resources/Tweet2.PNG) 49 | -------------------------------------------------------------------------------- /Resources/Tweet.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Resources/Tweet.PNG -------------------------------------------------------------------------------- /Resources/Tweet2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Resources/Tweet2.PNG -------------------------------------------------------------------------------- /Resources/img/TinyIPXE_GUI.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Resources/img/TinyIPXE_GUI.PNG -------------------------------------------------------------------------------- /Resources/img/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JM2K69/Tiny_iPXE/00b689174fc48cc4d97b21d979938fa7ca1f4751/Resources/img/demo.gif --------------------------------------------------------------------------------