无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 51433|回复: 243
打印 上一主题 下一主题

[教程] 20210226更新:RyanTC—Tinycore16MB的微型移動Linux系統建pxe伺服器。合併到u盤啟動

  [复制链接]
1#
发表于 2019-7-28 19:21:38 | 显示全部楼层
能做成tcz档不,我好无聊时编译成单文件linux

点评

短訊覆你  详情 回复 发表于 2019-7-28 19:42
回复

使用道具 举报

2#
发表于 2019-7-29 19:50:38 | 显示全部楼层
只需要dnsmasq这一个包就行了吗,看来可以做成pxe的tftpboot路径用启动参数来自定义

点评

沒錯, 只需更改(懶人包)中的引導bash(dnsmasq設定)就可以了  详情 回复 发表于 2019-7-29 21:30
回复

使用道具 举报

3#
发表于 2019-7-29 21:40:49 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-7-29 21:47 编辑

根据楼主脚本编译了个比较肥的单文件演示版本(里面很多以前折腾过的垃圾文件),通杀bios/efi,随带随启,不过没在lib目录下放文件,貌似这脚本还是挺方便实用的,改天再改。。
efi下直接启动或chainloader
bios下直接作为kernel启动
链接: https://share.weiyun.com/5pqYA8c (密码:usFG)
效果
回复

使用道具 举报

4#
发表于 2019-7-29 21:57:56 | 显示全部楼层
KERNEL ipxe.efi dhcp && chain http://10.10.10.10/NFW.ipxe
这个是能用ipxe.efi启到自定义的ipxe文件去的吗,以前从没这么用过,还是只能配合dnsmas才能用

点评

是,chain是核心,initrd是核心參數/環境  详情 回复 发表于 2019-7-30 00:59
是,chain是核心,initrd是核心參數/環境  详情 回复 发表于 2019-7-30 00:59
自訂版建議修改/etc/init.d/dhcp.sh sleep XX........之後就是我的bash了  详情 回复 发表于 2019-7-29 22:36
回复

使用道具 举报

5#
发表于 2019-7-30 08:00:24 | 显示全部楼层
想弄个脚本检测u盘是否存在pxeroot文件夹,存在就挂载到mnt/tftproot下,对应tftp-root,bash一窍不通,还在慢慢查

点评

請教下,掛載後怎用?  详情 回复 发表于 2019-7-30 12:57
回复

使用道具 举报

6#
发表于 2019-7-30 11:06:20 | 显示全部楼层
上面的脚本已经折腾好了,tinycore配置http用哪个好

点评

Three steps are required to install HTTP Serwer: 1. Download and install (tce-load -w -i busybox-httpd.tcz); 2. Make it load on the each boot (edit file /opt/bootlocal.sh);  详情 回复 发表于 2019-7-30 12:47
回复

使用道具 举报

7#
发表于 2019-7-30 13:01:41 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-7-30 13:22 编辑
hkkitlee 发表于 2019-7-30 12:57
請教下,掛載後怎用?

挂载后列出里面指定类型的启动文件(比如包含grldr中的"ldr"或kpxe、efi之类的,) 把这个目录的启动文件添加到dnsmasq配置文件中,pxe启动后可以选中启动
-----------------------------------------------------------------------

大概想法是这样的,启动linux后搜索u盘的pxeboot目录,并把它设为tftp、http的根目录  列出相关*.efi等可启动文件配置到conf里,在启动时显示供选择,
然后启动网启服务



现在我只折腾成功了自动挂载,设为tftp目录,,列出菜单还没实现

点评

我理解 1應該只欠dnsmasq.conf中tftp的根路徑設成你掛載的tftp-root 2再根據客戶機回報arch所需的指定啟動文件。 是否這樣?  详情 回复 发表于 2019-7-30 13:49
回复

使用道具 举报

8#
发表于 2019-7-30 14:04:09 | 显示全部楼层
hkkitlee 发表于 2019-7-30 13:49
我理解
1應該只欠dnsmasq.conf中tftp的根路徑設成你掛載的tftp-root
2再根據客戶機回報arch所需的指 ...

嗯,挂载和http tftp啥的我已经瞎搞了下实现了,
就差列表指定目录的文件为启动文件了,

点评

成功不遠了 溫馨提示:記得dnsmasq內指示啟動文件是以tftp-root作為根!不是系統根目錄作根就可以! 完成發個帖出來分享下~  详情 回复 发表于 2019-7-30 14:13
回复

使用道具 举报

9#
发表于 2019-7-30 14:35:48 | 显示全部楼层
hkkitlee 发表于 2019-7-30 14:13
成功不遠了

溫馨提示:記得dnsmasq內指示啟動文件是以tftp-root作為根!不是系統根目錄作根就可以! ...

是啊,启动文件常要换的,搞试验用
回复

使用道具 举报

10#
发表于 2019-7-30 15:13:44 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-7-30 15:17 编辑

列菜单可以了,不过有点郁闷,启动时会在启动文件后面会加.0。。。然后提示找不到xxxx.xxx.0

我明明放的managerpxebios.kpxe,启动的也是这个文件,但提示的是managerpxebios.kpxe.0 not found

点评

不郁悶,這好像是要兼容老bios的pxe rom,都忘記講了 多建幾個pxe,坑慣就不坑了~哈哈  详情 回复 发表于 2019-7-30 15:18
回复

使用道具 举报

11#
发表于 2019-7-30 15:29:56 | 显示全部楼层
hkkitlee 发表于 2019-7-30 15:18
不郁悶,這好像是要兼容老bios的pxe rom,都忘記講了

多建幾個pxe,坑慣就不坑了~哈哈

这个没法解决吗,还是文件一定得加个.0

点评

Linux命令: ln -s xxxxx xxxxx.0 #建立帶*.0的捷徑 或 手動加.0  详情 回复 发表于 2019-7-30 15:50
回复

使用道具 举报

12#
发表于 2019-7-30 15:55:41 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-7-30 16:08 编辑
hkkitlee 发表于 2019-7-30 15:50
Linux命令:
ln -s xxxxx xxxxx.0 #建立帶*.0的捷徑


我加了.0之后在传输时又给我加了.0,于是变成.0.0了,

然后暂时是用文件实际有.0,配置里是 ${biosfile%.0}这样,
。。。这软件包有点变态啊。


efi文件没这问题吧,好坑

点评

試試在原文件加個副檔名,就好像不再需要.0了 我的引導檔有副檔名就沒問過了  详情 回复 发表于 2019-7-30 16:20
回复

使用道具 举报

13#
发表于 2019-7-30 17:29:50 | 显示全部楼层
又遇到个麻烦,tinypxe能启的它不能启,貌似得用钦定的pxe菜单文件

点评

對一對網頁路徑是否正確  详情 回复 发表于 2019-7-30 17:40
回复

使用道具 举报

14#
发表于 2019-7-30 19:18:40 | 显示全部楼层
hkkitlee 发表于 2019-7-30 17:40
對一對網頁路徑是否正確

菜单和取文件都正常了的,
不过bios下不能启动g4d(grldr)
启kpxe文件丢失内置脚本的,脚本是设置下一个启动文件为g4d

点评

「引導檔」引導另一個「引導檔」是有機會失敗,特別是bios 還有就是一款引導已經有多種啟動命令!幾個引導檔看齊所有真的是吃不消。 Grub2命令多得直接嚇死人 kpxe內置腳本是否已測試過?  详情 回复 发表于 2019-7-30 19:36
回复

使用道具 举报

15#
发表于 2019-7-30 19:28:28 | 显示全部楼层
hkkitlee 发表于 2019-7-30 17:40
對一對網頁路徑是否正確



比如这个 kpxe本来内痣了脚本,脚本是set bootfile下面那个g4d文件,死循环了,,
直接引导g4d,报错了,

看来它这个有点像生成3com那个pxe bootmenu,并不是什么启动文件都支持的,我估计能直接启软盘img文件

点评

messagepxebios 回報體積過大 Ipxe 是死循環,應該係script有問題不執行  详情 回复 发表于 2019-7-30 19:49
回复

使用道具 举报

16#
发表于 2019-7-30 19:42:58 | 显示全部楼层
hkkitlee 发表于 2019-7-30 19:36
「引導檔」引導另一個「引導檔」是有機會失敗,特別是bios
還有就是一款引導已經有多種啟動命令!幾個引 ...

应该知道是为啥失败了, 它出现的菜单应该和这个软件生成的pxe启动菜单.mba文件是一样的东西,我再确认下,还有就是efi分这么多不知道啥意思,有没有地方参考,我vmware认出来的efi居然是bc_efi

点评

#2 pxe-service=IA64_EFI, "Boot IA64_EFI", uefi/ipxe64.efi #6 pxe-service=IA32_EFI, "Boot IA32_EFI", uefi/ipxe32.efi #7 pxe-service=X86-64_EFI, "Boot X86-64_EFI", uefi/ipxe64.efi #8 pxe-se  详情 回复 发表于 2019-7-30 19:55
回复

使用道具 举报

17#
发表于 2019-7-30 20:45:56 | 显示全部楼层
hkkitlee 发表于 2019-7-30 19:49
messagepxebios 回報體積過大

Ipxe 是死循環,應該係script有問題不執行或沒script可執行

这两个在tinypxe下都是可以启的,tinycore下不知道有没有其它的服务端
回复

使用道具 举报

18#
发表于 2019-7-30 21:49:21 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-7-30 22:03 编辑



bios和uefi都需要特殊格式的启动文件才行,看来我还得重新编译ipxe。。。

卧槽,试来试去,还是就pxelinux.0正常

点评

發個dnsmasq.conf來看看  详情 回复 发表于 2019-7-30 22:52
回复

使用道具 举报

19#
发表于 2019-7-31 09:12:07 | 显示全部楼层
hkkitlee 发表于 2019-7-30 22:52
發個dnsmasq.conf來看看

set -- $(cat /proc/cmdline)
for x in "$@"; do
case "$x" in
myip=*)
export myip="${x#myip=}"
;;
pxeroot=*)
export pxeroot"${x#pxeroot=}"
;;

esac
done
#mount
for i in $(ls /mnt); do
mount /mnt/$i
done

if [ !-n $bootmulu ]; then
mulu=$( find /mnt/ -name pxeboot -type d)
else
mulu=$( find /mnt/ -name $pxeroot -type d)
fi


sudo /bin/cat << EOF > /etc/dnsmasq.conf

#Don't function as a DNS server:
port=0

#Log lots of extra information about DHCP transactions.
log-dhcp

enable-tftp
tftp-root=$mulu

#Disable re-use of the DHCP servername and filename fields as extra
#option space. That's to avoid confusing some old or broken DHCP clients.
dhcp-no-override

pxe-prompt="Press F8 for NBP (Net Boot Program) menu.Default ipxe.", 10

#0


#pxe-service=X86PC, "kkpxe for Legacy BIOS", undionly.kkpxe
#pxe-service=X86PC, "kpxe for Legacy BIOS", undionly.kpxe
#pxe-service=X86PC, "pxe for Legacy BIOS", undionly.pxe

#2

#pxe-service=IA64_EFI, "Boot IA64_EFI", uefi/ipxe64.efi

#6

#pxe-service=IA32_EFI, "Boot IA32_EFI", uefi/ipxe32.efi

#7
#pxe-service=X86-64_EFI, "Boot X86-64_EFI", uefi/ipxe64.efi

#8
#pxe-service=Xscale_EFI, "Boot BC_EFI", uefi/ipxe64.efi

#9
#pxe-service=BC_EFI, "Boot BC_EFI", uefi/ipxe64.efi
EOF
#test
cd $mulu
for biosfilea in $(find *bios* -type f ); do
echo pxe-service=X86PC, "${biosfilea%.*}", ${biosfilea%.0} >> /etc/dnsmasq.conf
done
for biosfileb in $(find *.0 -type f ); do
echo pxe-service=X86PC, "${biosfileb%.*}", ${biosfileb%.0} >> /etc/dnsmasq.conf
done


for efi64a in $(find *64* -type f ); do
echo pxe-service=BC_EFI, "$efi64a", $efi64a  >> /etc/dnsmasq.conf
done

for efi64b in $(find *64* -type f ); do
echo pxe-service=X86-64_EFI, "$efi64b", $efi64b  >> /etc/dnsmasq.conf
done

for efi64c in $(find *64* -type f ); do
echo pxe-service=IA64_EFI, "$efi64c", $efi64c  >> /etc/dnsmasq.conf
done

for efi32 in $(find *32* -type f ); do
echo pxe-service=IA32_EFI, "$efi32", $efi32  >> /etc/dnsmasq.conf
done

sleep 8
ip=$(/sbin/ifconfig |grep -v 127 | grep 'inet ' | sed 's/^.*inet addr://g' | sed 's/ *Bcast.*$//g')
echo "dhcp-range=$ip,proxy" >> /etc/dnsmasq.conf
echo tftp:$mulu
echo $ip
sleep 2
/usr/local/sbin/dnsmasq -9 &
/usr/local/httpd/sbin/httpd -p 80 -h $mulu &
filetool.sh -b
cd /tce/optional


我改成这样了,暂时用pxelinux能启

点评

讀了一會,這個在思路上和程式上有點意見: 動態資料夾 動態檔案數 「半」動態檔名 既然此影像檔是用來啟動,何不設為: 絕對路徑存放引導檔 已可啟動的引導檔「不」以尋找方式寫設定檔了,是寫死的 而需要  详情 回复 发表于 2019-7-31 11:53
回复

使用道具 举报

20#
发表于 2019-7-31 09:13:54 | 显示全部楼层
回复

使用道具 举报

21#
发表于 2019-7-31 12:09:55 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-7-31 12:54 编辑
hkkitlee 发表于 2019-7-31 11:53
讀了一會,這個在思路上和程式上有點意見:
動態資料夾
動態檔案數


img文件用3com boot image editor修改成tcp/ip启动可以直启的  如图


,以前把整个win98弄进img里直接启动到桌面过
不过这个pxemenu貌似跟3com的不太一样,3com那个兼容性很好,可以启动grldr,这个不行,有点不太理解。。

点评

留意一下你的gif圖,tinypxe的log中是有回傳客戶機*MAXDOS9.SYS* Linux是比軟「原始」,你不叫他不做。 沒什麼背境作業。也因為如此什麼都得手工。也可以手工。 性能也就是如此搾出來。就是如此又愛又恨。  详情 回复 发表于 2019-7-31 13:43
回复

使用道具 举报

22#
发表于 2019-7-31 12:35:16 | 显示全部楼层
linux貌似有一点不好,获取不到ip就没地址了,要是像win一样,没dhcp能取到169.254.1.1这样的地址就好了
回复

使用道具 举报

23#
发表于 2019-7-31 15:46:23 | 显示全部楼层
hkkitlee 发表于 2019-7-31 13:43
留意一下你的gif圖,tinypxe的log中是有回傳客戶機*MAXDOS9.SYS*

Linux是比軟「原始」,你不叫他不 ...

可能我没描述清楚才没讨论到点上,不过我已经实证了是可以兼容启动3com工具生成mba文件,并直接启动img文件,


efi文件好像没启成功,不知道为什么,难道也要加.0?
回复

使用道具 举报

24#
发表于 2019-7-31 17:42:56 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-7-31 19:51 编辑
hkkitlee 发表于 2019-7-31 16:14
很好!!再堅持點完工了~~
逐個擊破排錯吧,一步一步收窄問題


nbp菜单有出来的,列文件也正常,但就是选中后过了一会回到EFI固件设置界面了



现在基本搞通能启什么类型的文件了,重新编译了.pxe类型的ipxe(bios)目前正常,还有两个东西待解决

dnsmsasq要配置proxydhcp,不然有路由的情况tftp不到文件
局域网没有dhcp的时候tinycore要分配一个地址,169.254.0.0段的。。


可惜今天公司的机晚上连不上远程桌面编译,家里同步不过来,只好先编译几个启动文件

点评

看似bios/uefi都可啟動了。恭喜完工了! Proxydhcp差不多是必備了。不必動到原來網絡「基本設定」。 外出工作時,即使「求」,人家網管人員多數也不理你。  详情 回复 发表于 2019-7-31 20:28
回复

使用道具 举报

25#
发表于 2019-7-31 21:04:23 | 显示全部楼层
hkkitlee 发表于 2019-7-31 20:28
看似bios/uefi都可啟動了。恭喜完工了!

Proxydhcp差不多是必備了。不必動到原來網絡「基本設定」。 ...

没有dhcp的情况下tinycore会不会有ip地址的,我暂时没试

点评

當然沒有,除非手動設定。 常規伺服器是手動設定,不靠dhcp。 但pxe 又怎可能沒dhcp,伺服器不要客戶機都要啦! 我的版本要用在不同網域上,只是網段/子掩碼不同就不能硬設定。  详情 回复 发表于 2019-7-31 21:27
回复

使用道具 举报

26#
发表于 2019-7-31 22:26:37 | 显示全部楼层
还是遇到挺多坑的,在tinypxe里,ipxe收到的是next-server,dnsmasq里就变成dhcp-server了
proxydhcp/next-server变成了proxydhcp/dhcp-server...
搞了半天才发现这个奇葩的问题

点评

不是坑 只是專用名詞,多用linux就不陌生 還可以實際點,sudo netstat -tunlp 直接問系統開了什麼端口 Pxe:67,69,4011 Smb:137-139,445  详情 回复 发表于 2019-7-31 22:55
回复

使用道具 举报

27#
发表于 2019-8-1 09:17:33 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-8-1 09:35 编辑
hkkitlee 发表于 2019-7-31 22:55
不是坑
只是專用名詞,多用linux就不陌生


不知道能不能在dnsmasq里指定next-server,懒得整一大堆ipxe引导文件。。
谷歌了下貌似是dhcp-option=pxe,66,"$ip" ,赶紧试下先


其实我最终的用处是在一个没有dhcp的环境用,当然也要可以在有dhcp的环境用,

点评

我的是網啟版,dhcp是必備了 等你好消息哦  详情 回复 发表于 2019-8-1 10:24
回复

使用道具 举报

28#
发表于 2019-8-1 11:07:07 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-8-1 11:15 编辑
hkkitlee 发表于 2019-8-1 10:24
我的是網啟版,dhcp是必備了

等你好消息哦


哎,今天早上公司里用在线编译折腾不了ipxe,ipxe里的next-server可以取到了,但proxydhcp/next-server还是不行,看来还得继续折腾
我这个是网启,本地通用的
不过你用网启来网启一个网启服务器,那不是。。。。

点评

https://rom-o-matic.eu/  详情 回复 发表于 2019-8-1 11:29
回复

使用道具 举报

29#
发表于 2019-8-1 12:04:17 | 显示全部楼层
hkkitlee 发表于 2019-8-1 11:29
https://rom-o-matic.eu/

這個網啟出來的網啟,肯定「不是」本地用了!

不是,我的应用场景是在没任何dhcp服务器的机房用u盘启动这个tinycore变成服务器,

其它机器开起来进入pe,然后用微力同步p2p分发数据

现在折腾了个ipxe脚本,勉强可以满足我需求了。

#!ipxe
set getfile managerpxe
ifopen net0
ifstat
   set menu-timeout 5000
   set menu-default dhcpserver
:boot
prompt --key 0x02 --timeout 2000 Press Ctrl-B for the iPXE command line... && shell ||
chain file:/pxeboot/${getfile} || goto netboot

:netboot
dhcp
chain tftp://${dhcp-server}/${getfile} || chain tftp://${proxydhcp/dhcp-server}/${getfile} ||
goto start


:menu
isset ${ip} || dhcp
goto start

:start
  menu Choose An Existing Server!  Serverip:${serverip}  bootfile: ${getfile}
  item --gap --             --------------------------------PXE BOOT-----------------------------
  item dhcpserver        ${dhcp-server}
  item proxydhcp         ${proxydhcp/dhcp-server}
  item retry             set filename   

  item --gap --             ---------------------------- Advanced options -----------------------
  item --key c config       Configure settings                                   -- c
  item --key p pxelinux     Load PXELinux menu                                   -- p
  item shell                Drop to iPXE shell
  item reboot               Reboot computer
  item --key x exit         Exit iPXE and continue BIOS boot                     -- x
  choose --timeout ${menu-timeout} --default ${menu-default} selected
  goto ${selected}

:dhcpserver
echo ${dhcp-server}/${getfile}
chain tftp://${dhcp-server}/${getfile} || set menu-default proxydhcp ||
goto start

:proxydhcp
echo ${proxydhcp/dhcp-server}/${getfile}
chain tftp://${proxydhcp/dhcp-server}/${getfile} || set menu-default retry ||
goto start

:retry
console
echo set Filename
read getfile
set menu-default dhcpserver
goto start

:shell
  echo Type 'exit' to get the back to the menu
  shell
  goto start

:failed
  echo Booting failed, dropping to shell
  goto shell

:reboot
  reboot

:exit
  exit

:config
  config
  goto start

回复

使用道具 举报

30#
发表于 2019-8-1 12:07:49 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-8-1 12:17 编辑



这样一个ipxe脚本灵活应用
不怕取不到文件。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-16 19:32

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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