无忧启动论坛

 找回密码
 注册
搜索

菜鸟WSL环境iPXE编译及网启二三事

查看数: 21295 | 评论数: 50 | 收藏 21
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-4-14 00:21

正文摘要:

本帖最后由 hhh333 于 2021-4-16 06:29 编辑      iPXE网启确实够快,而且在不停更新,不得不每次按自己的意愿编译定制,时间一长又忘记,干脆记下来以免重新捡起时又走弯路。前面都在UOS中 ...

回复

QuadAndroid 发表于 2024-2-20 23:30:37
teasiu 发表于 2021-4-15 22:54
写得很好。
但还是缺少了很多有趣的灵魂。
提示几点:

一直不知道,chain --replace --autofree这里带的2个参数是什么意思。翻译的话,牛头不对马嘴。
无犹启动 发表于 2023-10-22 20:31:03
谢谢分享
giver 发表于 2022-11-28 18:28:05
bjay2008xmy 发表于 2021-6-18 10:25
在编译make bin/ipxe.iso embed=boot.ipxe时出了一个问题
boot.ipxe中的内容是:
  #!ipxe

我也遇到这个问题,解决了吗?
jpzsj 发表于 2022-4-25 01:34:18
江南一根葱 发表于 2021-4-16 08:18
可以参考下我的自动编译
https://github.com/zwj4031/ipxe
直接clone下来本地编译也很方便

大神,用户名和密码是多少,我下载学习看看
bjay2008xmy 发表于 2021-6-18 10:25:20
提示: 作者被禁止或删除 内容自动屏蔽
snaca 发表于 2021-5-27 11:11:23
都是大神啊,感谢分享。
I_want_to_love_ 发表于 2021-5-17 18:28:01
我对各位大佬的敬仰之情犹如滔滔江水  延绵不绝
201287zr 发表于 2021-5-17 15:30:07
终于有大大较为系统的介绍ipxe编译回本置了,先学习下,希望持续更新介绍更多高级玩法。
hhh333 发表于 2021-5-4 14:08:10
前面菜单中已经有iPXE进PXE的菜单项了,实际上就是启动PXE启动器,如pxelinux或grldr;
pxe进iPXE也简单,就是调用相应的iPXE启动器,如下为pxelinux进iPXE的菜单的写法
  1. LABEL bootiPXE
  2.         MENU LABEL [^X] --转iPXE网启
  3.         kernel /BOOT/IPXE.KRN
  4.         append initrd=/BOOT/H3_iPXEM.LST
复制代码
wangruixue 发表于 2021-4-30 16:27:37
已经可以使用PXE引导UEFI的RHEL73安装
已经可以使用IPXE引导UEFI的WINPE
怎么把他们合起来?
就是IPXE中引导PXE.或者PXE中引导IPXE也可以?有大神看看嘛????
熄灭的烟 发表于 2021-4-30 10:05:02
楼主你好,请问“ipxe.lkrn”这个文件如果要内置脚本要怎么编译,比如我要先DHCP获取IP地址,然后链接到网站上读取启动菜单(http://127.0.0.1/menu.ipxe)。望楼主看到回帖能够百忙之中抽出点时间教我们一下。谢谢!
yongzhe 发表于 2021-4-27 11:07:01
咨询一个问题  原配的启动菜单文件  怎么样可以显示UTF8的中文? 谢谢
lusir401 发表于 2021-4-22 10:00:07
交流才会有提高,知识是越论越精呀。
hhh333 发表于 2021-4-21 16:50:30
lusir401 发表于 2021-4-21 16:49
终于在这看到葱大放大招了,还有啥的赶紧抖出来。

抛砖引玉
lusir401 发表于 2021-4-21 16:49:28
终于在这看到葱大放大招了,还有啥的赶紧抖出来。

点评

抛砖引玉  详情 回复 发表于 2021-4-21 16:50
hkkitlee 发表于 2021-4-16 11:26:41
我覺得樓主分享了如何建立「編譯環境」也是個很好的點。
一般都是只分享腳本而已。

bios/efi我是寫在一起的,需要時再用判斷式分開執行。維護更新也少更新一份腳本。

至於腳本內容,多寫就精煉;我目標是(依次序)以不載入無謂檔案、邏輯簡單並提供使用者更靈活彈性功能、格式整齊這幾個大原則,所以沒什麼固定寫法。

https://gitee.com/hkkitlee/Ryanb ... /blob/main/oln.ipxe
teasiu 发表于 2021-4-16 09:01:45
iscsi超好玩。
前提是你有一个openwrt或者群晖nas之类的。
什么东西都可以启动来玩。

另外,WSL2才是真谛,玩法又有一点点不一样的。(太旧的主板或不支持)。

nfs启动的话,速度有些优势。

ftp则可以补充某些不方便http的情形。
江南一根葱 发表于 2021-4-16 08:18:15
hhh333 发表于 2021-4-16 06:36
虽然有自己的一些原创搞法,但总的算是入门级。iSCSI以前玩过,sanboot/nfs没玩过。写这个一是怕自己忘记 ...

可以参考下我的自动编译
https://github.com/zwj4031/ipxe
直接clone下来本地编译也很方便
hhh333 发表于 2021-4-16 06:36:37
teasiu 发表于 2021-4-15 22:54
写得很好。
但还是缺少了很多有趣的灵魂。
提示几点:

虽然有自己的一些原创搞法,但总的算是入门级。iSCSI以前玩过,sanboot/nfs没玩过。写这个一是怕自己忘记,二是也想借帖向大佬们讨教讨论一下ipxe的一些高级玩法,老大也写一些?

点评

可以参考下我的自动编译 https://github.com/zwj4031/ipxe 直接clone下来本地编译也很方便  详情 回复 发表于 2021-4-16 08:18
jpzsj 发表于 2021-4-15 23:58:21
怎么做一个即支持EFI,又支持BIOS的引导文件,我是用NAS,每次改引导文件很麻烦
teasiu 发表于 2021-4-15 22:54:37
本帖最后由 teasiu 于 2021-4-15 23:37 编辑

写得很好。
但还是缺少了很多有趣的灵魂。
提示几点:
1.把ipxe.org网站的文档读透,加上几个有意思的技术要点上来。
    a . 编译出一个规范的,含背景图片的,带nfs,ftp等参数下载的固件出来。
     b. 制作一个规范的,有提示的菜单出来。
      c. 增加ipxe网启的sanboot, iscsi, nfs, wimboot的东西出来。
       d. 制作出属于自己网卡的固件,并刷入网卡(或主板)的技术要领。
2. github上有很多类似的有趣的技术参考源码
3. 用g4d,pxelinux, grub2各种引导的关联性。

我自己研究了一些,正在一个人瞎着玩乐,刚想写点什么给无忧,跑进来看到你这篇文章,感觉和我想的差不多,就多嘴了。

https://github.com/teasiu/ipxe

上面是我自己改着玩的。

点评

一直不知道,chain --replace --autofree这里带的2个参数是什么意思。翻译的话,牛头不对马嘴。  详情 回复 发表于 2024-2-20 23:30
虽然有自己的一些原创搞法,但总的算是入门级。iSCSI以前玩过,sanboot/nfs没玩过。写这个一是怕自己忘记,二是也想借帖向大佬们讨教讨论一下ipxe的一些高级玩法,老大也写一些?  详情 回复 发表于 2021-4-16 06:36
江南一根葱 发表于 2021-4-15 13:43:44
hhh333 发表于 2021-4-15 11:45
我浪费几个字,你浪费流量,就这区别

  • 喜欢改文件名且又想节省几m流量的话,再加个判断,这样写姿势更丰富,更容易看懂(个人觉得)。
     #判断
  • issq ${platform} pcbios && set msboot bootmgr.exe ||
  • issq ${platform} efi && set msboot bootx64.efi ||
     #启动
  • :wimboot
  • kernel ${booturl}/app/wimboot/wimboot ||
  • initrd ${booturl}/app/wimboot/${msboot} ${msboot} ||
  • initrd ${booturl}/app/wimboot/bcd bcd ||
  • initrd ${booturl}/app/wimboot/boot.sdi boot.sdi ||
  • initrd -n boot.wim ${booturl}/${wim}  boot.wim ||
  • boot || goto wimmenu
至于其它提高代码可读性的方法,我觉得稍对齐些(完全遵守缩进规则太难),用notepad艹打开编辑,完全没问题。

hhh333 发表于 2021-4-15 11:45:18
江南一根葱 发表于 2021-4-15 10:47
哈哈,你更浪费啊,,每个wim都配一份bcd和bootmgfw.efi,
用你的文件的话,连wimboot都不需要 ...

我浪费几个字,你浪费流量,就这区别

点评

[*]喜欢改文件名且又想节省几m流量的话,再加个判断,这样写姿势更丰富,更容易看懂(个人觉得)。 #判断 [*]issq ${platform} pcbios && set msboot bootmgr.exe || [*]issq ${platform} efi && set msboo  详情 回复 发表于 2021-4-15 13:43
江南一根葱 发表于 2021-4-15 10:47:57
本帖最后由 江南一根葱 于 2021-4-15 10:49 编辑
hhh333 发表于 2021-4-15 10:07
呵,三个启动都down下来,确实也是个思路,不过不经济吧,浪费两个文件

哈哈,你更浪费啊,,每个wim都配一份bcd和bootmgfw.efi,
用你的文件的话,连wimboot都不需要的,而且,这样让电脑自己去判断,还不会出错,“代码”也有高强的可读性

点评

我浪费几个字,你浪费流量,就这区别  详情 回复 发表于 2021-4-15 11:45
hhh333 发表于 2021-4-15 10:07:24
江南一根葱 发表于 2021-4-14 18:02
不需要分开,更不需要判断,脑洞够大的话,据说还可以这样写
  • :wimmenu
  • menu wimfile

  • 呵,三个启动都down下来,确实也是个思路,不过不经济吧,浪费两个文件

    点评

    哈哈,你更浪费啊,,每个wim都配一份bcd和bootmgfw.efi, 用你的文件的话,连wimboot都不需要的  详情 回复 发表于 2021-4-15 10:47
    2013mqqdg 发表于 2021-4-15 00:32:39
    神贴,看来我的菜单还是小儿科了
    江南一根葱 发表于 2021-4-14 18:02:50
    本帖最后由 江南一根葱 于 2021-4-14 18:58 编辑
    hhh333 发表于 2021-4-14 16:53
    我不知道仔细读了TinyPXE的菜单没有,记不起了。不过我还是坚持把bios和efi分开的观点。毕竟差异比较大, ...

    不需要分开,更不需要判断,脑洞够大的话,据说还可以这样写
    • :wimmenu
    • menu wimfile
    •    item --gap Choose Resolution ratio
    •    item --key 1 win8.wim           1. win8pe
    •    item --key 2 win9.wim           2. win9pe
    •    item --key 3 win10.wim          3. win10pe
    •    item --key m menu             M. Back to menu
    • choose --timeout ${bootfile-timeout} --default 800x600 selected ||
    • iseq ${selected} menu && goto menu ||
    • set wim ${selected} && goto wimboot ||
    • :wimboot
    • kernel ${booturl}/app/wimboot/wimboot ||
    • initrd ${booturl}/app/wimboot/bootmgr.exe bootmgr.exe ||
    • initrd ${booturl}/app/wimboot/bootx64.efi bootx64.efi ||
    • initrd ${booturl}/app/wimboot/bootia32.efi bootia32.efi ||
    • initrd ${booturl}/app/wimboot/bcd bcd ||
    • initrd ${booturl}/app/wimboot/boot.sdi boot.sdi ||
    • initrd -n boot.wim ${booturl}/${wim}  boot.wim ||
    • boot || goto wimmenu

    通吃bios/uefi64/uefi32

    点评

    呵,三个启动都down下来,确实也是个思路,不过不经济吧,浪费两个文件  详情 回复 发表于 2021-4-15 10:07
    邪恶海盗 发表于 2021-4-14 17:22:18
    hhh333 发表于 2021-4-14 16:53
    我不知道仔细读了TinyPXE的菜单没有,记不起了。不过我还是坚持把bios和efi分开的观点。毕竟差异比较大, ...

    我觉得我的菜单可读性还是不错的,当然每个人的习惯不一样,适合自己的才是最好的
    hhh333 发表于 2021-4-14 16:53:52
    邪恶海盗 发表于 2021-4-14 16:10
    我的菜单,貌似是用的TinyPXE的改的:

    我不知道仔细读了TinyPXE的菜单没有,记不起了。不过我还是坚持把bios和efi分开的观点。毕竟差异比较大,efi中的工具也少,不然要不断地进行判断,人为增加菜单难度,牺牲可读性没必要。何况efi中还有32位与64位要判断。

    点评

    不需要分开,更不需要判断环境,完你还可以交给电脑自己来判断,脑洞够大的据说还可以这样写  详情 回复 发表于 2021-4-14 18:02
    我觉得我的菜单可读性还是不错的,当然每个人的习惯不一样,适合自己的才是最好的  详情 回复 发表于 2021-4-14 17:22
    邪恶海盗 发表于 2021-4-14 16:10:30
    我的菜单,貌似是用的TinyPXE的改的:
    1. #!ipxe

    2. #set boot-url http://hidao.org/pxe
    3. set boot-url http://${next-server}
    4. #set iqn iqn.2008-08.com.starwindsoftware:test
    5. #set nfs-server nfs://${next-server}
    6. #set cifs-server //${next-server}
    7. #set mytarget iscsi:${next-server}::::iqn.2008-08.com.starwindsoftware:target1
    8. #set gateway 0.0.0.0
    9. #set keep-san 1
    10. #set initiator-iqn iqn.client

    11. # Setup some basic convenience variables
    12. set menu-timeout 8000
    13. set submenu-timeout ${menu-timeout}
    14. #check platform (pcbios or efi), buildarch (i386 or X86_64)
    15. echo Platform: ${platform}
    16. echo Buildarch: ${buildarch}
    17. # Ensure we have menu-default set to something
    18. isset ${menu-default} || set menu-default WinPE_x64
    19. #console --picture ${boot-url}/bg.png

    20. ######## MAIN MENU ###################
    21. :start
    22. iseq ${platform} efi && menu iPXE Boot Menu (UEFI) - Mod By hidao.org || menu iPXE Boot Menu (BIOS) - Mod By hidao.org
    23. item --gap -- IP:${ip} , DHCP:${dhcp-server} , boot-url = ${boot-url}
    24. item
    25. item --gap --                  ----------------------- Win PE -----------------------
    26. item --key 1 isoboot           [1] Boot boot.iso ------------------------ (BIOS/UEFI) Unavailable
    27. item --key 2 WinPE_x86         [2] Boot boot32.wim ---------------------- (BIOS/UEFI) Unavailable
    28. item --key 3 WinPE_x64         [3] Boot boot64.wim ---------------------- (BIOS/UEFI) Unavailable
    29. item --gap --
    30. item --gap --                  ----------------------- Linux ------------------------
    31. item --key l Slitaz            [L] Boot Slitaz -------------------------- (BIOS Only) Available
    32. item --key t TinyCore          [T] Boot TinyCore ------------------------ (BIOS Only) Available
    33. item --key k kolibri           [K] Boot Kolibri ------------------------- (BIOS Only) Available
    34. item --key e menuetos          [E] Boot MenuetOS ------------------------ (BIOS Only) Available
    35. item --key w gocloud           [W] Install openwrt X86 ------------------ (BIOS Only) Available
    36. item --gap --
    37. item --gap --                  ----------------------- Other Tools ------------------
    38. item --key m memtest           [M] Boot Memtest x86 --------------------- (BIOS/UEFI) Available
    39. item --key g GhostDos          [G] Boot GhostDos ------------------------ (BIOS Only) Available
    40. item --key d MaxDos            [D] Boot MaxDos -------------------------- (BIOS Only) Available
    41. item --gap --
    42. #item --gap --                  ---------------------- Exit Boot -----------
    43. item --key x exit              [X] Exit iPXE and continue boot ----------------------
    44. item --gap --
    45. item --gap --
    46. item --gap --                  ----------------------- Advanced options -------------
    47. item --key c config            [C] Configure settings -------------------------------
    48. item --key i shell             [I] Enter iPXE shell ---------------------------------
    49. item --key r reboot            [R] Reboot -------------------------------------------
    50. item --key s power             [S] Shutdown -----------------------------------------
    51. choose --timeout ${menu-timeout} --default ${menu-default} selected
    52. goto ${selected}
    53. #choose --default exit --timeout ${menu-timeout} target && goto ${target}

    54. ########## UTILITY ITEMS ####################
    55. :local80
    56. sanboot --no-describe --drive 0x80

    57. :local81
    58. sanboot --no-describe --drive 0x81

    59. :isoboot
    60. initrd ${boot-url}/sources/boot.iso || goto Failed
    61. chain ${boot-url}/memdisk iso raw || goto Failed
    62. boot || goto Failed

    63. :WinPE_x86
    64. iseq ${platform} efi && set bootfile bootia32.efi && set bcdfile efi-BCD && set wimbootfile wimboot.efi || set bootfile bootmgr && set bcdfile bios-BCD && set wimbootfile wimboot
    65. kernel ${boot-url}/${wimbootfile}      || goto Failed
    66. initrd ${boot-url}/boot/${bootfile}    || goto Failed        
    67. initrd ${boot-url}/boot/${bcdfile} BCD || goto Failed           
    68. initrd ${boot-url}/boot/boot.sdi       || goto Failed            
    69. initrd ${boot-url}/sources/boot32.wim  || goto Failed         
    70. boot || goto Failed
    71. goto start

    72. :WinPE_x64
    73. iseq ${platform} efi && set bootfile bootix64.efi && set bcdfile efi-bcd && set wimbootfile wimboot.efi || set bootfile bootmgr && set bcdfile bios-bcd && set wimbootfile wimboot
    74. kernel ${boot-url}/${wimbootfile} ${wimbootfile} || goto Failed
    75. initrd ${boot-url}/boot/${bootfile}  ${bootfile} || goto Failed
    76. initrd ${boot-url}/boot/${bcdfile}           BCD || goto Failed
    77. initrd ${boot-url}/boot/boot.sdi        BOOT.SDI || goto Failed
    78. initrd  ${boot-url}/sources/boot64.wim  boot.wim || goto Failed
    79. boot || goto Failed
    80. goto start
    81.    
    82. :TinyCore
    83. kernel ${boot-url}/sources/vmlinuz root=/dev/null vga=788 autologin     || goto Failed
    84. initrd ${boot-url}/sources/core.gz    || goto Failed
    85. boot || goto Failed
    86.    
    87. :Slitaz
    88. kernel ${boot-url}/sources/bzImage root=/dev/null vga=788 autologin     || goto Failed
    89. initrd ${boot-url}/sources/rootfs.gz    || goto Failed
    90. boot || goto Failed

    91. :kolibri
    92. initrd ${boot-url}/images/kolibri.img   || goto Failed
    93. chain ${boot-url}/memdisk img raw       || goto Failed
    94. boot || goto Failed

    95. :menuetos
    96. initrd ${boot-url}/images/menuetos.img   || goto Failed
    97. chain ${boot-url}/memdisk img raw       || goto Failed
    98. boot || goto Failed

    99. :gocloud
    100. chain ${boot-url}/oppxeins       || goto Failed
    101. boot || goto Failed

    102. :memtest
    103. chain ${boot-url}/images/memtest || goto Failed
    104. boot || goto Faild
    105. goto start
    106.   

    107. :GhostDos
    108. initrd ${boot-url}/images/ghost.img   || goto Failed
    109. chain ${boot-url}/memdisk img raw     || goto Failed
    110. boot || goto Failed

    111. :MaxDos
    112. initrd ${boot-url}/images/MAXDOS.img      || goto Failed
    113. chain ${boot-url}/memdisk ima raw         || goto Failed
    114. boot || goto Failed

    115. :Failed
    116. echo Booting Failed, dropping to shell
    117. goto shell
    118.    
    119. :shell
    120. echo Type exit to get the back to the menu
    121. shell
    122. set menu-timeout 0
    123. goto start


    124. :reboot
    125. reboot

    126. :Power
    127. poweroff

    128. :exit
    129. exit

    130. :config
    131. config
    132. goto start
    复制代码

    点评

    我不知道仔细读了TinyPXE的菜单没有,记不起了。不过我还是坚持把bios和efi分开的观点。毕竟差异比较大,efi中的工具也少,不然要不断地进行判断,人为增加菜单难度,牺牲可读性没必要。何况efi中还有32位与64位要判  详情 回复 发表于 2021-4-14 16:53

    小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

    闽公网安备 35020302032614号

    GMT+8, 2024-11-13 02:25

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表