使用树莓派+PXE网络安装Windows

in #cn2 months ago

image.png

记录下最近用树莓派和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推荐

https://1hour.win


感谢你的阅读,我是中文区见证人之一,欢迎通过 AuthSteem 来给我投票,或者打开 https://steemitwallet.com/~witnesses 页面,输入 ety001 进行投票。

2.gif

中文区的见证人目前有:
支持一下他们(按字母顺序),一人可以有30票


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.

2.gif

Sort:  

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