一、综述

顾名思义,无盘系统是用于网吧、机房等公用计算机的一种网络传输技术。使用无盘系统启动的计算机将不使用本机的硬盘获得启动系统,而是通过网络的指定服务器去获得启动系统的镜像,并下载回本机后用于机器启动。PXE (Pre-boot Execution Environment) 是由 Intel 设计的协议,它是无盘系统的一种实现形式。很巧,OpenWrt 作为路由器操作系统,工作在网关模式下支持标准 DHCP, TFTP 和 NFS 协议实现;而目前大多数带有板载有线网卡的机器都支持网络启动 (Network Boot),能够在客户端侧支持 PXE。

本文以 https://blog.nanpuyue.com/2013/027.html 为原本,适当修改了部分内容以适应时代的变化,旨在使其能够支持 Ubuntu 22.04 LTS 的启动,为近世治理提供参考(错乱)。

需求硬件:

  • 运行在网关模式下的 OpenWrt 设备(一般是路由器);
  • 附着在上述 OpenWrt 设备上的至少 8GB 的空闲存储空间(路由器自带的也行,外接的 U 盘也行);
  • 有线连接至上述 OpenWrt 设备的支持网络启动的计算机。

本方案继承原文,以 Ubuntu 作为案例,能够向旧兼容到 Ubuntu 12.04 LTS,其他发行版亦可参考本文。

二、下载 Ubuntu 镜像

对于 Ubuntu 镜像,问就是清华大学的 OpenTUNA https://opentuna.cn/ubuntu-releases/22.04/ubuntu-22.04-desktop-amd64.iso (通过亚马逊云科技的 CloudFront 分发,基本没有限速)。对于 8GB 及以上内存的电脑来说,64 位的 Ubuntu Desktop 还是能够轻松对付的。

三、调整和挂载相关目录

OpenWrt 挂载目录的方案请自行查找,本文将 13.94GB 的分区 /dev/mmcblk0p3 挂载为 /mnt/main .

diskMountInfo

目录详情如下:

  • /mnt/main/nfsroot NFS 根目录;
  • /mnt/main/tftproot TFTP 根目录。

四、TFTP 和 NFS 环境配置

安装软件包 nfs-kernel-server-utils (一般都安装了):

nFSInstall

NFS 设置共享目录,“路径”填写 /mnt/main/nfsroot/ ,“允许的客户端”填写 *选项 填写 rw,no_root_squash,async,insecure,no_subtree_check

nFSSet

如果 OpenWrt 没有图形界面,或未安装 NFS 管理的 LuCI APP,则修改 /etc/exports,加入一行 /mnt/main/nfsroot/ *(rw,no_root_squash,async,insecure,no_subtree_check) ,保存后执行 exportfs -rv

nFSCLIConfig

网络-DHCP/DNS 处提供了 TFTP 配置,其中“启用 TFTP 服务器”调整为“使能”(即勾选),“TFTP 服务器根目录”填写 /mnt/main/tftproot,“网络启动镜像”填写 pxelinux.0

tFTPEnableGUI

如果 OpenWrt 没有图形界面,则修改 /etc/config/dhcp,在 config dnsmasq 内写入以下内容:

option enable_tftp '1'
option tftp_root '/mnt/main/tftproot'

新起一行,填入以下内容:

config boot linux
    option filename 'pxelinux.0'
    option serveraddress '172.18.54.1'
    option servername 'OpenWrt'

其中,172.18.54.1 为 OpenWrt 的 IP 地址。

tFTPEnableCLI

执行 /etc/init.d/dnsmasq restart 重启 DNSmasq。

五、上传镜像

打开步骤二下载的镜像,解压其 .diskcasper 文件夹。

imageUploadList

将其上传到 OpenWrt 的 /mnt/main/nfsroot 目录。

imageUploadResult

六、配置 PXELinux

将步骤五中 casper 文件夹中的 initrdvmlinuz 文件上传到 OpenWrt 的 /mnt/main/tftproot 目录。

下载 Debian Installer for NetBoot (Ubuntu 没有这个) https://opentuna.cn/debian/dists/bullseye/main/installer-amd64/current/images/netboot/netboot.tar.gz ,解压以下文件至同一文件夹:

  • debian-installer/amd64/pxelinux.0
  • debian-installer/amd64/boot-screens/ldlinux.c32
  • debian-installer/amd64/boot-screens/libcom32.c32
  • debian-installer/amd64/boot-screens/libutil.c32
  • debian-installer/amd64/boot-screens/vesamenu.c32

pXELinuxConfigUploadList

将其上传到 OpenWrt 的 /mnt/main/tftproot 目录。

/mnt/main/tftproot 目录新建目录 pxelinux.cfg ,在 /mnt/main/tftproot/pxelinux.cfg 目录新建文件 default 并填入以下内容:

default vesamenu.c32
prompt 0
timeout 30
menu title UBUNTU LIVE
label ^Ubuntu Desktop
kernel vmlinuz
append initrd=initrd ip=dhcp boot=casper netboot=nfs nfsroot=172.18.54.1:/mnt/main/nfsroot locale=zh_CN.UTF-8 

其中,172.18.54.1 为 OpenWrt 的 IP 地址。

/mnt/main/tftproot 目录的文件如下:

pXELinuxConfigUploadResult

七、引导

不同主板开启“从网络引导 ROM”功能的操作步骤不尽相同,建议联系主板制造商获得支持。

bootSuccess

由于 NVIDIA 显卡对 Linux 一贯以来的不友好和 Ubuntu 22.04 的 bug,部分使用 NVIDIA 显卡输出的设备在 Ubuntu 22.04 下默认色彩异常,可以通过“设置”里的“色彩”调整解决。

colorAdmin

文件系统结构欣赏:

fSView

鸣谢

Last modification:May 8, 2022
If you think my article is useful to you, please feel free to appreciate