使用树莓派+PXE网络安装Windows
记录下最近用树莓派和PXE来网络安装windows需要的文件和配置过程。
树莓派是3b,系统是 ubuntu20.04。
需要先安装 dnsmasq。
这个软件能够同时支持 DHCP 和 TFTP 。因为网络安装的时候,客户端需要先通过DHCP获取IP,然后通过TFTP下载各种引导文件,引导进入安装程序。
由于树莓派的网线传输比wifi快,所以,我将会通过树莓派的有线网卡来进行网络安装。
那么需要先设置固定IP,方法如下:
#/etc/netplan/50-cloud-init.yaml
network:
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.11.1/24
gateway4: 192.168.11.1
version: 2
wifis:
wlan0:
access-points:
ety001_wifi:
password: 12345678
dhcp4: true
dhcp6: true
optional: true
配置好以后,重启下网络,netplan apply
。
这样我可以通过 Wifi 进行 SSH 连接,进行配置。通过有些网络进行网络安装。
之后,配置dnsmasq。配置文件如下:
# /etc/dnsmasq.d/pxe.conf
port=0
listen-address=192.168.11.1
interface=eth0
enable-tftp
tftp-root=/tftp
dhcp-range=eth0,192.168.11.100,192.168.11.200
dhcp-boot=pxelinux.0
重启 dnsmasq ,systemctl restart dnsmasq
。
创建 /tftp 目录用于存储引导等文件。
下面开始准备这些文件。
首先下载个支持网络共享的 WinPE。
这里我用的是:https://pan.baidu.com/s/13XJYGlfxODORByq4cOynMw 密码: qtls 。
下载完后的 iso 文件,放到 /tftp 中。
然后下载 syslinux 并解压,https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/Testing/6.04/syslinux-6.04-pre1.tar.gz。
从解压出来的文件,寻找以下文件并放到 /tftp 下面:
ldlinux.c32
libutil.c32
memdisk
menu.c32
pxelinux.0
引导文件准备完毕后,开始配置 PXE。
在 /tftp 目录下创建 pxelinux.cfg 目录。
创建 PXE 配置文件,如下:
# /tftp/pxelinux.cfg/default
UI menu.c32
MENU TITLE Network Boot
TIMEOUT 50
LABEL winpe
MENU LABEL Boot Windows PE from network
KERNEL memdisk
INITRD winpe.iso
APPEND iso raw
OK,到这里,引导相关的工作就完成了。这个时候,可以去客户端开机,使用网络启动选项,看看是否能够成功引导进入 WinPE。如果成功,那么就完成了大半了。
接下来,可以选择安装的手段比较多。比如准备 GHO 文件或者 WIM 文件。
这里,我是准备了 WIM 安装文件。然后通过 samba 让 WinPE 可以读取到树莓派上的 WIM 安装文件,进行安装。
创建共享目录 /data/share,安装 samba。
apt install samba
配置文件如下:
# /etc/samba/smb.conf
[global]
log file = /var/log/samba/log.%m
max log size = 5000
security = user
guest account = nobody
map to guest = Bad User
load printers = yes
cups options = raw
[share]
comment = share
path = /data/share
writable = yes
guest ok = yes
create mode = 0777
directory mode = 0777
把准备好的 WIM 安装文件放到 /data/share 目录下面,就可以在 WinPE 中使用共享访问到了。
之后的安装过程就跟使用U盘安装没啥异常了。
在折腾这个的过程中,其实我还尝试过能不能直接引导进入 MSDN 版的安装程序。
而 PXELINUX 是无法引导的(至少我没找到或者研究出来),能够引导的方法是使用 iPXE。
iPXE 是另外一个网络安装引导程序。可以通过配置 dnsmasq 的 dhcp-boot
来调用。
然而我想要同时支持 PXELINUX 和 iPXE,咋整?
经过研究,发现可以通过 PXELINUX 来启动 iPXE。具体的配置如下:
下载 ipxe.lkrn 到 /tftp。
安装 nginx ,使 /data/share 作为网站根目录。
在 /data/share 目录下创建 iPXE 配置文件,文件名为 boot.ipxe,内容如下:
#!ipxe
:start
menu PXE Boot Options
item shell iPXE shell
item win10-net Istall win10 from 192.168.11.1
item exit Exit to BIOS
choose --default win10-net --timeout 10000 option && goto ${option}
:shell
shell
:win10-net
cpuid --ext 29
set win10_root http://192.168.11.1/win10
kernel ${win10_root}/wimboot
initrd ${win10_root}/install.bat install.bat
initrd ${win10_root}/winpeshl.ini winpeshl.ini
initrd ${win10_root}/iso/bootmgr bootmgr
initrd ${win10_root}/iso/boot/bcd BCD
initrd ${win10_root}/iso/boot/boot.sdi boot.sdi
initrd ${win10_root}/iso/sources/boot.wim boot.wim
boot
:exit
exit
其中 bootmgr,bcd,boot.sdi,boot.wim 是 ISO 中的文件,位置需要自己确认下。
创建 /data/share/win10 目录,下载 wimboot 到该目录。
创建 /data/share/win10/iso 目录,并挂载 MSDN 版的 WIN10 ISO镜像到 /data/share/win10/iso 。
在 /data/share/win10 目录创建 install.bat ,内容如下:
wpeinit.exe
net use \\192.168.11.1\share
\\192.168.11.1\share\win10\iso\sources\setup.exe
其中的 setup.exe 需要自己确认其在 ISO 中的目录位置。
在 /data/share/win10 目录创建 winpeshl.ini 文件,内容如下:
[LaunchApps]
"install.bat"
这样配置后,就可以通过 PXELINUX 调起 iPXE,在iPXE中调起 Win10 MSDN安装程序。
完美!
ET碎碎念,每周更新,欢迎订阅,点赞,转发!
好用不贵的VPS推荐
感谢你的阅读,我是中文区见证人之一,欢迎通过 AuthSteem 来给我投票,或者打开 https://steemitwallet.com/~witnesses 页面,输入 ety001 进行投票。
中文区的见证人目前有:
支持一下他们(按字母顺序),一人可以有30票:
- @cn-witnesses| 投票
- @ety001| 投票
- @familyonline-tv| 投票
- @fuli| 投票
- @justyy |投票
- @ldsn001| 投票
- @lemooljiang| 投票
- @maiyude | 投票
- @smt-wherein| 投票
Thank you for reading. I'm a witness. I would really appreciate your witness vote! You can vote by SteemLogin. Or open https://steemitwallet.com/~witnesses page, input ety001 to vote.
Hi @ety001
xpilar.witness
I want to contribute even more and I now want to announce that @xpilar.witness is mine and that I am running this witness
I see that I have voted for you and will ask you the same thing