20190808更新:16MB RyanTC Linux RamOS PXE Server獨立版,M$ Win手工更換引導檔
本帖最后由 hkkitlee 于 2019-10-20 11:42 编辑更新參考:
編譯/設定ipxe usb UEFI Secure boot/Bios 遠程安裝 / 救援 Linux/Winpe10 +ValdikSS
教學已寫過兩編了,本編是成品
編譯/設定ipxe usb UEFI Secure boot/Bios 遠程安裝 / 救援 Linux/Winpe10 +ValdikSS
不足16MB的移動Linux系統建pxe伺服器。可由u盤,ipxe啟動
這是個操作系統!這是個操作系統!
說兩次是希望各人下載前看清楚!不太明白這是什麼請參考上面兩篇分享。
這版也是RamOS:除非使用者主動掛載電腦硬碟並對其操作,正常所有儲存操作是在內存發生的;所以重啟後會馬上還原。並因爲此特性,不太懂Linux的朋友可以「一邊看教學帖,一邊進去一探究竟」,不怕誤操作危及自身機器。只要重啟就好了。
我的版本不足16MB的移動Linux系統建pxe伺服器。可由u盤,ipxe啟動中是需要連線回我的伺服作啟動。
由於我並不定時開機,所以對於各人使用/學習也不太方便。所以公開下載這個成品「獨立版」。
為了方便入門使用,將增加由「$M 網絡硬盤」更換「PXE引導檔」功能。
寫入影像請參考之前編譯/設定ipxe usb UEFI Secure boot/Bios 遠程安裝 / 救援 Linux/Winpe10 +ValdikSS。
從主機下載:https://hkkitlee.ddns.net:9000/ryantc.zip
聲明:此版本可作獨立使用。TC啟動時「也是會連回我的主機嘗試更新」(請參考我不足16MB的移動Linux系統建pxe伺服器。可由u盤,ipxe啟動的更新bash),如有需要請自行修改。
本帖最后由 hkkitlee 于 2019-8-4 23:15 编辑
增加*自己*的引導檔/文件前需知:
先看看我為了方便增加引導檔選項的dnsmasq.conf設定:
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
pxe-service=X86PC, "Test for Legacy BIOS", test.bios
#2
pxe-service=IA64_EFI, "Boot IA64_EFI", uefi/ipxe64.efi
pxe-service=IA64_EFI, "Test IA64_EFI", uefi/test64.efi
#6
pxe-service=IA32_EFI, "Boot IA32_EFI", uefi/ipxe32.efi
pxe-service=IA32_EFI, "Test IA32_EFI", uefi/test32.efi
#7
pxe-service=X86-64_EFI, "Boot X86-64_EFI", uefi/ipxe64.efi
pxe-service=X86-64_EFI, "Test X86-64_EFI", uefi/test64.efi
#8
pxe-service=Xscale_EFI, "Boot BC_EFI", uefi/ipxe64.efi
pxe-service=Xscale_EFI, "Test BC_EFI", uefi/test64.efi
#9
pxe-service=BC_EFI, "Boot BC_EFI", uefi/ipxe64.efi
pxe-service=BC_EFI, "Test BC_EFI", uefi/test64.efi
EOF
看不明沒關係,總之我就是預留了以下三個檔名給各位自行引導用
test.bios #給傳統bios機器用
test32.efi #給32bit的EFI機器用
test64.efi #給64bit的EFI機器用
當你們有自已的引導文件,可以根據架構arch先改成以上名稱。
溫馨提示:Linux是大小寫有分別的,這與M$ Windows是不同!
而其他檔名就是會連回我的機器,並下載最新版的RyanBoot所預留的檔名。
經網絡磁碟更換/增加引導文件:
預設網絡名稱:WORKGROUP
預設網路磁碟機的用戶名是:root ;密碼:root
在M$ Win的命令行輸入:net use z: \\ryantc\pxe /user:root root
就是把你的Z盤映射至TC中的Samba PXE中;在「我的電腦」內可看見z:「網絡磁碟」
將bios的啟動文件改好名稱(test.bios)直接放入z:\。即z:\test.bios
將uefi的啟動文件改好名稱(test32.efi/test64.efi)放入z:\uefi\。即z:\uefi\test32.efi
客戶機選擇*自己*的引導文件:
20190804:客戶機啟動時。有10秒時間按F8選擇你自己的引導文件(Test XXXX)作啟動。
Press F8 for NBP (Network Boot Program) menu.
後記:
當我的伺服有啟動時,預留給我用的引導檔會在TC啟動時自行下載。
當我的伺服沒有啟動,你就會看見「網絡磁盤」是空的(只有uefi文件夾)。把你自己的引導改名放入也是可用,是沒問題的。
緊記:當你們的機器關機,所有東西會馬上刪除,不儲存在電腦上,包括所有的引導文件。
如有需要,請自行備份。
了了几字可成贴!好贴! 一片空白··········
顺便说下论坛版本要更新了,出现了好多错误。
比如附件和图片上传根本没用,换了几个浏览器也一样。 寫文章不是要一秒內寫完吧。不能慢慢編輯嗎?
先看看我寫過的才下定論也未遲
難道閣下是「閃電俠」? hkkitlee 发表于 2019-8-2 12:43
寫文章不是要一秒內寫完吧。不能慢慢編輯嗎?
先看看我寫過的才下定論也未遲
楼上开玩笑呢。
帖子长先在记事本上编辑好,在粘贴到论坛发帖,有时候网络有问题,一点击没有发上去,辛苦都白费了。 freesoft00 发表于 2019-8-2 12:46
楼上开玩笑呢。
帖子长先在记事本上编辑好,在粘贴到论坛发帖,有时候网络有问题,一点击没有发上去, ...
不是可以 保存草稿 功能么 指南针 发表于 2019-8-2 12:54
不是可以 保存草稿 功能么
ie,有时候想删除字符,按退格键,成ie的后退了,页面返回到上一个页面了,写的东西都没了。
我个人没有用过保存草稿的功能,一般发长贴,是在点发帖之前,先右键把内容复制一下,然后再发送。
出现过写很长,一点发送,网络错误或者其它问题,发不了帖,在打开内容没有了,一点再写的动力都没有了。 freesoft00 发表于 2019-8-2 12:46
楼上开玩笑呢。
帖子长先在记事本上编辑好,在粘贴到论坛发帖,有时候网络有问题,一点击没有发上去, ...
我幾編文也是用手機邊上班邊偷空寫。
所以才沒法用記事本之類幫忙記錄。
評論我寫的不好、需要改進是完全無問題。
別人的帖我管不了,只希望我的帖是給有心的朋友「有個可以學習/實習」的空間。
怎么玩?下载的是usb后缀文件 寫入影像請參考之前編譯/設定ipxe usb UEFI Secure boot/Bios 遠程安裝 / 救援 Linux/Winpe10 +ValdikSS。
影像檔。備份好u 盤,寫入並usb啟動 有WIN server 版本的么 ♂竇豆♂ 发表于 2019-8-3 14:20
有WIN server 版本的么
win版也沒16MB那麼小
這已是M$ Win用家可更改版 已经写入U盘了,引导不了 hkkitlee 发表于 2019-8-3 10:53
寫入影像請參考之前編譯/設定ipxe usb UEFI Secure boot/Bios 遠程安裝 / 救援 Linux/Winpe10 +ValdikSS。
...
OK
楼主来自香港吗,总是用繁体字 guzhentao 发表于 2019-8-4 00:28
已经写入U盘了,引导不了
可否詳細說明你怎麼啟動不了?
你有看讀一樓,二樓嗎?
有自己放置啟動檔嗎?
我測試了很久是可以的 lhb9900 发表于 2019-8-4 01:06
楼主来自香港吗,总是用繁体字
是
IPXE
initrd${xieyi}://${next-server}/test.iso 当test.iso超大时(深度Linux deepin.iso 2.26GB)载入始终卡在0% 本帖最后由 hkkitlee 于 2019-8-4 10:52 编辑
lhb9900 发表于 2019-8-4 10:42
IPXE
initrd${xieyi}://${next-server}/test.iso 当test.iso超大时(深度Linux deepin.iso 2.26GB ...
${xieyi} 走的是什麼協議?
還有就是什麼啟動方式?
不如你完整的放上來看一下 本帖最后由 lhb9900 于 2019-8-4 11:04 编辑
hkkitlee 发表于 2019-8-4 10:47
${xieyi} 走的是什麼協議?
還有就是什麼啟動方式?
走的是http协议
isset ${ip} || dhcp#查询IP,否则分配IP
isset ${next-server} || set next-server ${dhcp-server} || set next-server 192.168.7.100
console --picture http://${next-server}/Boot/grub/back.png && set boot-server http://${next-server} || set boot-server #测试http,并设置优先使用http,否则使用TFTP
goto EFIstartISO
:EFIstartISO
initrd ${boot-server}/ISO/my.iso#请教这个文件大于2G时不能启动,1G是可以启动的
chain ${boot-server}/ISO/isoboot.efi || goto ${PXE_MENU} Linux 在ipxe啟動,應該是選取「核心」vmlinuz,「內存盤」initrd.gz。需要時才加入核心啟動參數或額外的檔案,如Live的filesystem.squashfs。
上面的檔名在各發行版有些微不同,但這幾個就是{關鍵字}。
取自ipxe.org的例子:
#!ipxe
set base http://mirror.centos.org/centos/7/os/x86_64
prompt -k 0x197e -t 2000 Press F12 to install CentOS... || exit
kernel ${base}/images/pxeboot/vmlinuz initrd=initrd.img repo=${base}
initrd ${base}/images/pxeboot/initrd.img
boot 不是很明白这个用途,不如何能具体解决一些什么场景问题 要是能用php脚本控制,类似 https://netboot.xyz/这个就好了。。 江南一根葱 发表于 2019-8-4 12:41
要是能用php脚本控制,类似 https://netboot.xyz/这个就好了。。
看source code不像哦
像是用變量導入所需參數 本帖最后由 lhb9900 于 2019-8-4 13:42 编辑
hkkitlee 发表于 2019-8-4 12:26
Linux 在ipxe啟動,應該是選取「核心」vmlinuz,「內存盤」initrd.gz。需要時才加入核心啟動參數或額外的檔 ...
互联网安装慢呀,这样的方法并不通用于其它LINUX,不同的LINUX要用不同的脚本 本帖最后由 hkkitlee 于 2019-8-4 14:10 编辑
lhb9900 发表于 2019-8-4 13:41
互联网安装慢呀,这样的方法并不通用于其它LINUX,不同的LINUX要用不同的脚本
看來有點誤解了
1啟動方法跟互聯網/內網的「速度」是沒有直接關係的。
2這個方法,我已經在不同的Linux(Centos/Debian/Fedora/Kali/Tinycore/Ubuntu)中
在uefi/bios中測試過,是可以啟動的。些小改變是需要的
3ipxe中整個光盤引導的命令:sanboot,詳細請參閱官網
isoboot.efi在ipxe上chainload啟動有沒有限制?應該需要檢查isoboot.efi和ipxe的文件。因為我未測試過,所以沒有定論。 hkkitlee 发表于 2019-8-4 14:05
看來有點誤解了
1啟動方法跟互聯網/內網的「速度」是沒有直接關係的。
menuentry "用Linux方式启动ISO" --hotkey="L" --class iso{
echo (正在查找ISO内的Linux启动文件,请等待。。即将菜单末尾列出启动文件)
set k="1"
GetHotkey
regexp -s 1:devstr -s 2:path '\((.*)\)(.*)' "$grub_file"
for cfg in /boot/grub/loopback.cfg /efi/boot/loopback.cfg /EFI/BOOT/loopback.cfg; do
if ! test -e (isoloop)$cfg; then continue; fi
cat -s cfgtext (isoloop)$cfg
if regexp '/grub/grub.cfg' "$cfgtext"; then
if ! test -e (isoloop)/grub/grub.cfg; then continue; fi
fi
if regexp '/casper/initrd.lz' "$cfgtext"; then
if ! test -e (isoloop)/casper/initrd.lz; then continue; fi
fi
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$devstr" "$cfg" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
probe -u -s rootuuid $4
export rootuuid
set iso_path="$3"
export iso_path
loopback isoloop "$2"
set root=isoloop
configfile $5
loopback -d isoloop
}
unset cfgtext
loopback -d isoloop
return 0
done
for cfg in /boot/grub/grub.cfg /EFI/BOOT/grub.cfg /EFI/boot/grub.cfg /boot/grub2/grub.cfg \
/efi/boot/grub.cfg /isolinux/live.cfg /boot/isolinux/isolinux.cfg /slax/boot/syslinux.cfg /isolinux/txt.cfg; do
if ! test -e (isoloop)$cfg; then continue; fi
cat -s cfgtext (isoloop)$cfg
if regexp 'iso_path' "$cfgtext"; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$devstr" "$cfg" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
probe -u -s rootuuid $4
export rootuuid
set iso_path="$3"
export iso_path
loopback isoloop "$2"
set root=isoloop
configfile $5
loopback -d isoloop
}
set loopok=1
elif regexp 'boot=casper' "$cfgtext"; then
if test -f (isoloop)/casper/filesystem.squashfs -a -f (isoloop)/casper/vmlinu* -a -f (isoloop)/casper/initr*; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
for preseed in (isoloop)/preseed/*; do
regexp -s preseed '\(isoloop\)(.*)' "$preseed"
preseed="file=/cdrom/${preseed}"
break
done
for vmlinuz in (isoloop)/casper/vmlinu*; do
linux $vmlinuz ${preseed} boot=casper locale=zh_CN locales=zh_CN.UTF-8 iso-scan/filename=${3} quiet splash ---
unset vmlinuz
break
done
for initrd in (isoloop)/casper/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
fi
elif regexp 'boot=live' "$cfgtext"; then
if test -f (isoloop)/live/filesystem.squashfs -a -f (isoloop)/live/vmlinu* -a -f (isoloop)/live/initr*; then
if regexp 'menuentry "Clonezilla' "$cfgtext"; then set params="union=overlay username=user config noswap edd=on nomodeset locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1";
elif regexp 'menuentry "GParted' "$cfgtext"; then set params="union=overlay username=user config noswapip= net.ifnames=0nosplash";
else set params="splash"; fi
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$params" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
for vmlinuz in (isoloop)/live/vmlinu*; do
linux $vmlinuz boot=live locale=zh_CN locales=zh_CN.UTF-8 findiso=${3} components quiet ${4}
unset vmlinuz
break
done
for initrd in (isoloop)/live/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
fi
elif regexp 'rd.live.image' "$cfgtext"; then
if test -d (isoloop)/LiveOS; then
set isodev="UUID"
if test -f (isoloop)/images/pxeboot/vmlinu* -a -f (isoloop)/images/pxeboot/initr*; then set bootpath="/images/pxeboot";
elif test -f (isoloop)/isolinux/vmlinu* -a -f (isoloop)/isolinux/initr*; then set bootpath="/isolinux";
elif test -f (isoloop)/boot/*/loader/linu* -a -f (isoloop)/boot/*/loader/initr*; then
for bootpath in /boot/*/loader; do
if test -d (isoloop)$bootpath; then set isodev="CDLABEL"; break; fi
done
fi
fi
if [ -n "$bootpath" ]; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$bootpath" "$isodev" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
if [ "$5" == "UUID" ]; then probe -u -s isouuid isoloop; else probe -l -s isouuid isoloop; fi
for vmlinuz in (isoloop)${4}/vmlinu* (isoloop)${4}/linu*; do
if ! test -e $vmlinuz; then continue; fi
linux $vmlinuz root=live:${5}=${isouuid} rd.live.image quiet iso-scan/filename=${3}
unset vmlinuz
unset isouuid
break
done
for initrd in (isoloop)${4}/initr*; do
if ! test -e $initrd; then continue; fi
initrd $initrd
unset initrd
break
done
}
unset isodev
unset bootpath
set loopok=1
fi
elif regexp 'inst.stage2=hd:' "$cfgtext"; then
if test -f (isoloop)/images/pxeboot/vmlinu* -a -f (isoloop)/images/pxeboot/initr* -a -d (isoloop)/LiveOS; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
probe -u -s isouuid isoloop
for vmlinuz in (isoloop)/images/pxeboot/vmlinu*; do
linux $vmlinuz inst.stage2=hd:UUID=${isouuid} rd.live.image quiet iso-scan/filename=${3}
unset vmlinuz
unset isouuid
break
done
for initrd in (isoloop)/images/pxeboot/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
fi
elif regexp "initrd=/boot/initrd.gz root=/dev/ram0 vga=normal" "$cfgtext"; then
if test -f (isoloop)/boot/initrd.gz -a -f (isoloop)/boot/bzImage; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/boot/bzImage root=/dev/ram0 vga=normal
initrd (isoloop)/boot/initrd.gz
}
set loopok=1
fi
elif regexp "tinycore.gz" "$cfgtext"; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$cfg" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
set root=isoloop
if regexp 'isolinux.cfg' "$3"; then syslinux_configfile $3; else configfile $3; fi
}
set loopok=1
fi
unset cfgtext
if [ -n "$loopok" ]; then loopback -d isoloop; unset loopok; return 0; fi
done
if test -f (isoloop)/casper/filesystem.squashfs -a -f (isoloop)/casper/vmlinu* -a -f (isoloop)/casper/initr*; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
for preseed in (isoloop)/preseed/*; do
regexp -s preseed '\(isoloop\)(.*)' "$preseed"
preseed="file=/cdrom/${preseed}"
break
done
for vmlinuz in (isoloop)/casper/vmlinu*; do
linux $vmlinuz ${preseed} boot=casper iso-scan/filename=${3} quiet splash ---
unset vmlinuz
break
done
for initrd in (isoloop)/casper/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
elif test -f (isoloop)/live/filesystem.squashfs -a -f (isoloop)/live/vmlinu* -a -f (isoloop)/live/initr*; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
for vmlinuz in (isoloop)/live/vmlinu*; do
linux $vmlinuz boot=live findiso=${3} components quiet splash
unset vmlinuz
break
done
for initrd in (isoloop)/live/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
elif test -f (isoloop)/arch/boot/intel_ucode.img -a -f (isoloop)/arch/boot/*/archiso.img -a -f (isoloop)/arch/boot/*/vmlinuz; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$devstr" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
probe -u -s devuuid $4
for vmlinuz in (isoloop)/arch/boot/*/vmlinuz; do
linux $vmlinuz img_loop=${3} img_dev=/dev/disk/by-uuid/$devuuid earlymodules=loop
unset vmlinuz
unset devuuid
break
done
for initrd in (isoloop)/arch/boot/*/archiso.img; do
initrd (isoloop)/arch/boot/intel_ucode.img $initrd
unset initrd
break
done
}
set loopok=1
elif test -f (isoloop)/antiX/vmlinu* -a -f (isoloop)/antiX/initr*; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
for vmlinuz in (isoloop)/antiX/vmlinu*; do
linux $vmlinuz quiet fromiso=${3} from=usb,cd,hd
unset vmlinuz
break
done
for initrd in (isoloop)/antiX/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
elif test -e (isoloop)/rescue/livecd.squashfs -a -e (isoloop)/boot/kernel.x86_64-efi -a -e (isoloop)/boot/initfs.x86_64-efi \
-a -e (isoloop)/boot/kernel.i386-pc -a -e (isoloop)/boot/initfs.i386-pc; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
if cpuid -l; then set arch="x86_64-efi"; else set arch="i386-pc"; fi
linux (isoloop)/boot/kernel.${arch} root=/dev/ram0 real_root=/dev/loop0 loop=/rescue/livecd.squashfs cdroot_marker=/rescue/livecd.squashfs initrd udev cdroot scandelay=10 quiet splash isoboot=${3} lang=en
initrd (isoloop)/boot/initfs.${arch}
}
set loopok=1
elif test -e (isoloop)/pmagic/m64.img -a -e (isoloop)/pmagic/m32.img -a -e (isoloop)/pmagic/bzImage64 -a -e (isoloop)/pmagic/bzImage \
-a -e (isoloop)/pmagic/fu.img -a -e (isoloop)/pmagic/initrd.img; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
if cpuid -l; then set bz="bzImage64"; set m="m64.img"; else set bz="bzImage"; set m="m32.img"; fi
linux (isoloop)/pmagic/${bz} edd=on vga=normal iso_filename=${3}
initrd (isoloop)/pmagic/initrd.img (isoloop)/pmagic/fu.img (isoloop)/pmagic/${m}
}
set loopok=1
elif test -e (isoloop)/image.squashfs -a -e (isoloop)/livecd -a -e (isoloop)/isolinux/gentoo -a -e (isoloop)/isolinux/gentoo.igz; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/isolinux/gentoo root=/dev/ram0 init=/linuxrc dokeymap looptype=squashfs loop=/image.squashfs cdroot vga=791 isoboot=${3}
initrd (isoloop)/isolinux/gentoo.igz
}
set loopok=1
elif test -e (isoloop)/image.squashfs -a -e (isoloop)/livecd -a -e (isoloop)/isolinux/gentoo -a -e (isoloop)/isolinux/gentoo.xz; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/isolinux/gentoo root=/dev/ram0 init=/linuxrc dokeymap aufs looptype=squashfs loop=/image.squashfs cdroot console=tty1 isoboot=${3}
initrd (isoloop)/isolinux/gentoo.xz
}
set loopok=1
elif test -e (isoloop)/slax/boot/vmlinuz -a -e (isoloop)/slax/boot/initrfs.img; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/slax/boot/vmlinuz vga=normal load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 slax.flags=automount from=$3
initrd (isoloop)/slax/boot/initrfs.img
}
set loopok=1
elif test -e (isoloop)/liveslak -a -e (isoloop)/boot/generic -a -e (isoloop)/boot/initrd.img; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$devstr" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
probe -u -s deviceuuid $4
linux (isoloop)/boot/generic load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 kbd=us tz=localtime locale=us_EN.utf8 livemedia=/dev/disk/by-uuid/${deviceuuid}:$3
initrd (isoloop)/boot/initrd.img
}
set loopok=1
elif test -e (isoloop)/wifislax64 -a -e (isoloop)/boot/vmlinuz -a -e (isoloop)/boot/initrd.xz; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$devstr" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
probe -u -s deviceuuid $4
linux (isoloop)/boot/vmlinuz kbd=us tz=US/Pacific locale=en_US.utf8 xkb= rw livemedia=/dev/disk/by-uuid/${deviceuuid}:$3
initrd (isoloop)/boot/initrd.xz
}
set loopok=1
elif test -e (isoloop)/wifislax -a -e (isoloop)/boot/vmlinuz -a -e (isoloop)/boot/initrd.xz; then
menuentry "[${k}] ${2} (Wifislax With KDE Desktop)" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/boot/vmlinuz noload=000-SMP\;006-Xfce load=English from=${3}
initrd (isoloop)/boot/initrd.xz
}
GetHotkey
menuentry "[${k}] ${2} (Wifislax With Xfce Desktop)" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/boot/vmlinuz noload=000-SMP\;005-Kde load=English from=${3}
initrd (isoloop)/boot/initrd.xz
}
set loopok=1
elif test -e (isoloop)/suse -a -e (isoloop)/boot/*/loader/initrd -a -e (isoloop)/boot/*/loader/linux; then
for vmlinuz in (isoloop)/boot/*/loader/linux; do
if ! test -e $vmlinuz; then continue; fi
break
done
for initrd in (isoloop)/boot/*/loader/initrd; do
if ! test -e $initrd; then continue; fi
break
done
submenu "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$vmlinuz" "$initrd" --hotkey="${k}"--class ArrowR {
menuentry " Installation" "$2" "$3" "$4" "$5" --hotkey=1 {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux ${4} splash=silent install=hd:${3}
initrd ${5}
}
menuentry " Upgrade" "$grub_file" "$path" "$4" "$5" --hotkey=2 {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux ${4} splash=silent upgrade=1 install=hd:${3}
initrd ${5}
}
}
unset vmlinuz
unset initrd
set loopok=1
fi
if [ -n "$loopok" ]; then loopback -d isoloop; unset loopok; return 0; fi
loopback -d isoloop
} hkkitlee 发表于 2019-8-4 14:05
看來有點誤解了
1啟動方法跟互聯網/內網的「速度」是沒有直接關係的。
menuentry "用Linux方式启动ISO" --hotkey="L" --class iso{
echo (正在查找ISO内的Linux启动文件,请等待。。即将菜单末尾列出启动文件)
set k="1"
GetHotkey
regexp -s 1:devstr -s 2:path '\((.*)\)(.*)' "$grub_file"
for cfg in /boot/grub/loopback.cfg /efi/boot/loopback.cfg /EFI/BOOT/loopback.cfg; do
if ! test -e (isoloop)$cfg; then continue; fi
cat -s cfgtext (isoloop)$cfg
if regexp '/grub/grub.cfg' "$cfgtext"; then
if ! test -e (isoloop)/grub/grub.cfg; then continue; fi
fi
if regexp '/casper/initrd.lz' "$cfgtext"; then
if ! test -e (isoloop)/casper/initrd.lz; then continue; fi
fi
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$devstr" "$cfg" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
probe -u -s rootuuid $4
export rootuuid
set iso_path="$3"
export iso_path
loopback isoloop "$2"
set root=isoloop
configfile $5
loopback -d isoloop
}
unset cfgtext
loopback -d isoloop
return 0
done
for cfg in /boot/grub/grub.cfg /EFI/BOOT/grub.cfg /EFI/boot/grub.cfg /boot/grub2/grub.cfg \
/efi/boot/grub.cfg /isolinux/live.cfg /boot/isolinux/isolinux.cfg /slax/boot/syslinux.cfg /isolinux/txt.cfg; do
if ! test -e (isoloop)$cfg; then continue; fi
cat -s cfgtext (isoloop)$cfg
if regexp 'iso_path' "$cfgtext"; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$devstr" "$cfg" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
probe -u -s rootuuid $4
export rootuuid
set iso_path="$3"
export iso_path
loopback isoloop "$2"
set root=isoloop
configfile $5
loopback -d isoloop
}
set loopok=1
elif regexp 'boot=casper' "$cfgtext"; then
if test -f (isoloop)/casper/filesystem.squashfs -a -f (isoloop)/casper/vmlinu* -a -f (isoloop)/casper/initr*; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
for preseed in (isoloop)/preseed/*; do
regexp -s preseed '\(isoloop\)(.*)' "$preseed"
preseed="file=/cdrom/${preseed}"
break
done
for vmlinuz in (isoloop)/casper/vmlinu*; do
linux $vmlinuz ${preseed} boot=casper locale=zh_CN locales=zh_CN.UTF-8 iso-scan/filename=${3} quiet splash ---
unset vmlinuz
break
done
for initrd in (isoloop)/casper/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
fi
elif regexp 'boot=live' "$cfgtext"; then
if test -f (isoloop)/live/filesystem.squashfs -a -f (isoloop)/live/vmlinu* -a -f (isoloop)/live/initr*; then
if regexp 'menuentry "Clonezilla' "$cfgtext"; then set params="union=overlay username=user config noswap edd=on nomodeset locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1";
elif regexp 'menuentry "GParted' "$cfgtext"; then set params="union=overlay username=user config noswapip= net.ifnames=0nosplash";
else set params="splash"; fi
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$params" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
for vmlinuz in (isoloop)/live/vmlinu*; do
linux $vmlinuz boot=live locale=zh_CN locales=zh_CN.UTF-8 findiso=${3} components quiet ${4}
unset vmlinuz
break
done
for initrd in (isoloop)/live/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
fi
elif regexp 'rd.live.image' "$cfgtext"; then
if test -d (isoloop)/LiveOS; then
set isodev="UUID"
if test -f (isoloop)/images/pxeboot/vmlinu* -a -f (isoloop)/images/pxeboot/initr*; then set bootpath="/images/pxeboot";
elif test -f (isoloop)/isolinux/vmlinu* -a -f (isoloop)/isolinux/initr*; then set bootpath="/isolinux";
elif test -f (isoloop)/boot/*/loader/linu* -a -f (isoloop)/boot/*/loader/initr*; then
for bootpath in /boot/*/loader; do
if test -d (isoloop)$bootpath; then set isodev="CDLABEL"; break; fi
done
fi
fi
if [ -n "$bootpath" ]; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$bootpath" "$isodev" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
if [ "$5" == "UUID" ]; then probe -u -s isouuid isoloop; else probe -l -s isouuid isoloop; fi
for vmlinuz in (isoloop)${4}/vmlinu* (isoloop)${4}/linu*; do
if ! test -e $vmlinuz; then continue; fi
linux $vmlinuz root=live:${5}=${isouuid} rd.live.image quiet iso-scan/filename=${3}
unset vmlinuz
unset isouuid
break
done
for initrd in (isoloop)${4}/initr*; do
if ! test -e $initrd; then continue; fi
initrd $initrd
unset initrd
break
done
}
unset isodev
unset bootpath
set loopok=1
fi
elif regexp 'inst.stage2=hd:' "$cfgtext"; then
if test -f (isoloop)/images/pxeboot/vmlinu* -a -f (isoloop)/images/pxeboot/initr* -a -d (isoloop)/LiveOS; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
probe -u -s isouuid isoloop
for vmlinuz in (isoloop)/images/pxeboot/vmlinu*; do
linux $vmlinuz inst.stage2=hd:UUID=${isouuid} rd.live.image quiet iso-scan/filename=${3}
unset vmlinuz
unset isouuid
break
done
for initrd in (isoloop)/images/pxeboot/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
fi
elif regexp "initrd=/boot/initrd.gz root=/dev/ram0 vga=normal" "$cfgtext"; then
if test -f (isoloop)/boot/initrd.gz -a -f (isoloop)/boot/bzImage; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/boot/bzImage root=/dev/ram0 vga=normal
initrd (isoloop)/boot/initrd.gz
}
set loopok=1
fi
elif regexp "tinycore.gz" "$cfgtext"; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$cfg" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
set root=isoloop
if regexp 'isolinux.cfg' "$3"; then syslinux_configfile $3; else configfile $3; fi
}
set loopok=1
fi
unset cfgtext
if [ -n "$loopok" ]; then loopback -d isoloop; unset loopok; return 0; fi
done
if test -f (isoloop)/casper/filesystem.squashfs -a -f (isoloop)/casper/vmlinu* -a -f (isoloop)/casper/initr*; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
for preseed in (isoloop)/preseed/*; do
regexp -s preseed '\(isoloop\)(.*)' "$preseed"
preseed="file=/cdrom/${preseed}"
break
done
for vmlinuz in (isoloop)/casper/vmlinu*; do
linux $vmlinuz ${preseed} boot=casper iso-scan/filename=${3} quiet splash ---
unset vmlinuz
break
done
for initrd in (isoloop)/casper/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
elif test -f (isoloop)/live/filesystem.squashfs -a -f (isoloop)/live/vmlinu* -a -f (isoloop)/live/initr*; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
for vmlinuz in (isoloop)/live/vmlinu*; do
linux $vmlinuz boot=live findiso=${3} components quiet splash
unset vmlinuz
break
done
for initrd in (isoloop)/live/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
elif test -f (isoloop)/arch/boot/intel_ucode.img -a -f (isoloop)/arch/boot/*/archiso.img -a -f (isoloop)/arch/boot/*/vmlinuz; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$devstr" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
probe -u -s devuuid $4
for vmlinuz in (isoloop)/arch/boot/*/vmlinuz; do
linux $vmlinuz img_loop=${3} img_dev=/dev/disk/by-uuid/$devuuid earlymodules=loop
unset vmlinuz
unset devuuid
break
done
for initrd in (isoloop)/arch/boot/*/archiso.img; do
initrd (isoloop)/arch/boot/intel_ucode.img $initrd
unset initrd
break
done
}
set loopok=1
elif test -f (isoloop)/antiX/vmlinu* -a -f (isoloop)/antiX/initr*; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
for vmlinuz in (isoloop)/antiX/vmlinu*; do
linux $vmlinuz quiet fromiso=${3} from=usb,cd,hd
unset vmlinuz
break
done
for initrd in (isoloop)/antiX/initr*; do
initrd $initrd
unset initrd
break
done
}
set loopok=1
elif test -e (isoloop)/rescue/livecd.squashfs -a -e (isoloop)/boot/kernel.x86_64-efi -a -e (isoloop)/boot/initfs.x86_64-efi \
-a -e (isoloop)/boot/kernel.i386-pc -a -e (isoloop)/boot/initfs.i386-pc; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
if cpuid -l; then set arch="x86_64-efi"; else set arch="i386-pc"; fi
linux (isoloop)/boot/kernel.${arch} root=/dev/ram0 real_root=/dev/loop0 loop=/rescue/livecd.squashfs cdroot_marker=/rescue/livecd.squashfs initrd udev cdroot scandelay=10 quiet splash isoboot=${3} lang=en
initrd (isoloop)/boot/initfs.${arch}
}
set loopok=1
elif test -e (isoloop)/pmagic/m64.img -a -e (isoloop)/pmagic/m32.img -a -e (isoloop)/pmagic/bzImage64 -a -e (isoloop)/pmagic/bzImage \
-a -e (isoloop)/pmagic/fu.img -a -e (isoloop)/pmagic/initrd.img; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
if cpuid -l; then set bz="bzImage64"; set m="m64.img"; else set bz="bzImage"; set m="m32.img"; fi
linux (isoloop)/pmagic/${bz} edd=on vga=normal iso_filename=${3}
initrd (isoloop)/pmagic/initrd.img (isoloop)/pmagic/fu.img (isoloop)/pmagic/${m}
}
set loopok=1
elif test -e (isoloop)/image.squashfs -a -e (isoloop)/livecd -a -e (isoloop)/isolinux/gentoo -a -e (isoloop)/isolinux/gentoo.igz; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/isolinux/gentoo root=/dev/ram0 init=/linuxrc dokeymap looptype=squashfs loop=/image.squashfs cdroot vga=791 isoboot=${3}
initrd (isoloop)/isolinux/gentoo.igz
}
set loopok=1
elif test -e (isoloop)/image.squashfs -a -e (isoloop)/livecd -a -e (isoloop)/isolinux/gentoo -a -e (isoloop)/isolinux/gentoo.xz; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/isolinux/gentoo root=/dev/ram0 init=/linuxrc dokeymap aufs looptype=squashfs loop=/image.squashfs cdroot console=tty1 isoboot=${3}
initrd (isoloop)/isolinux/gentoo.xz
}
set loopok=1
elif test -e (isoloop)/slax/boot/vmlinuz -a -e (isoloop)/slax/boot/initrfs.img; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/slax/boot/vmlinuz vga=normal load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 slax.flags=automount from=$3
initrd (isoloop)/slax/boot/initrfs.img
}
set loopok=1
elif test -e (isoloop)/liveslak -a -e (isoloop)/boot/generic -a -e (isoloop)/boot/initrd.img; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$devstr" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
probe -u -s deviceuuid $4
linux (isoloop)/boot/generic load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 kbd=us tz=localtime locale=us_EN.utf8 livemedia=/dev/disk/by-uuid/${deviceuuid}:$3
initrd (isoloop)/boot/initrd.img
}
set loopok=1
elif test -e (isoloop)/wifislax64 -a -e (isoloop)/boot/vmlinuz -a -e (isoloop)/boot/initrd.xz; then
menuentry "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$devstr" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
probe -u -s deviceuuid $4
linux (isoloop)/boot/vmlinuz kbd=us tz=US/Pacific locale=en_US.utf8 xkb= rw livemedia=/dev/disk/by-uuid/${deviceuuid}:$3
initrd (isoloop)/boot/initrd.xz
}
set loopok=1
elif test -e (isoloop)/wifislax -a -e (isoloop)/boot/vmlinuz -a -e (isoloop)/boot/initrd.xz; then
menuentry "[${k}] ${2} (Wifislax With KDE Desktop)" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/boot/vmlinuz noload=000-SMP\;006-Xfce load=English from=${3}
initrd (isoloop)/boot/initrd.xz
}
GetHotkey
menuentry "[${k}] ${2} (Wifislax With Xfce Desktop)" "$grub_file" "$path" --hotkey="${k}"--class ArrowR {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux (isoloop)/boot/vmlinuz noload=000-SMP\;005-Kde load=English from=${3}
initrd (isoloop)/boot/initrd.xz
}
set loopok=1
elif test -e (isoloop)/suse -a -e (isoloop)/boot/*/loader/initrd -a -e (isoloop)/boot/*/loader/linux; then
for vmlinuz in (isoloop)/boot/*/loader/linux; do
if ! test -e $vmlinuz; then continue; fi
break
done
for initrd in (isoloop)/boot/*/loader/initrd; do
if ! test -e $initrd; then continue; fi
break
done
submenu "[${k}] ${2}立即启动$grub_file" "$grub_file" "$path" "$vmlinuz" "$initrd" --hotkey="${k}"--class ArrowR {
menuentry " Installation" "$2" "$3" "$4" "$5" --hotkey=1 {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux ${4} splash=silent install=hd:${3}
initrd ${5}
}
menuentry " Upgrade" "$grub_file" "$path" "$4" "$5" --hotkey=2 {
echo (正在后台加载文件,请等待。。)
loopback isoloop "$2"
linux ${4} splash=silent upgrade=1 install=hd:${3}
initrd ${5}
}
}
unset vmlinuz
unset initrd
set loopok=1
fi
if [ -n "$loopok" ]; then loopback -d isoloop; unset loopok; return 0; fi
loopback -d isoloop
} lhb9900 发表于 2019-8-4 14:10
menuentry "用Linux方式启动ISO" --hotkey="L" --class iso{
echo (正在查找ISO内的Linux启动文件, ...
这是较完整LINUX启动脚本,看看就头疼,一直在寻找LINUX整体ISO的方法
页:
[1]
2