找回密码
 立即注册
CeraNetworksBGVM服务器主机交流IP归属甄别会员请立即修改密码
查看: 38|回复: 3

OpenWrt 实现 PXE 服务器 (TFTP+NFS) 以引导无盘工作站

[复制链接]

46

主题

2166

回帖

5840

积分

论坛元老

积分
5840
发表于 2022-5-8 15:34:53 | 显示全部楼层 |阅读模式
原载于 https://blog.iks.moe/archives/OpenWrt-PXE-Server-TFTP-NFS-diskless-Ubuntu.html
作者:iks

一、综述
顾名思义,无盘系统是用于网吧、机房等公用计算机的一种网络传输技术。使用无盘系统启动的计算机将不使用本机的硬盘获得启动系统,而是通过网络的指定服务器去获得启动系统的镜像,并下载回本机后用于机器启动。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 的分区[ol]
  • /dev/mmcblk0p3[/ol]复制代码挂载为[ol]
  • /mnt/main[/ol]复制代码.



    目录详情如下:

    [ol]
  • /mnt/main/nfsroot[/ol]复制代码NFS 根目录;
    [ol]
  • /mnt/main/tftproot[/ol]复制代码TFTP 根目录。


    四、TFTP 和 NFS 环境配置
    安装软件包[ol]
  • nfs-kernel-server-utils[/ol]复制代码(一般都安装了):



    NFS 设置共享目录,“路径”填写[ol]
  • /mnt/main/nfsroot/[/ol]复制代码,“允许的客户端”填写[ol]
  • *[/ol]复制代码,[ol]
  • 选项[/ol]复制代码填写[ol]
  • rw,no_root_squash,async,insecure,no_subtree_check[/ol]复制代码。



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



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



    如果 OpenWrt 没有图形界面,则修改[ol]
  • /etc/config/dhcp[/ol]复制代码,在[ol]
  • config dnsmasq[/ol]复制代码内写入以下内容:
    [ol]
  • option enable_tftp '1'
  • option tftp_root '/mnt/main/tftproot'[/ol]复制代码
    新起一行,填入以下内容:
    [ol]
  • config boot linux
  •         option filename 'pxelinux.0'
  •         option serveraddress '172.18.54.1'
  •         option servername 'OpenWrt'[/ol]复制代码
    其中,[ol]
  • 172.18.54.1[/ol]复制代码为 OpenWrt 的 IP 地址。



    执行[ol]
  • /etc/init.d/dnsmasq restart[/ol]复制代码重启 DNSmasq。
    五、上传镜像
    打开步骤二下载的镜像,解压其[ol]
  • .disk[/ol]复制代码和[ol]
  • casper[/ol]复制代码文件夹。



    将其上传到 OpenWrt 的[ol]
  • /mnt/main/nfsroot[/ol]复制代码目录。



    六、配置 PXELinux
    将步骤五中[ol]
  • casper[/ol]复制代码文件夹中的[ol]
  • initrd[/ol]复制代码和[ol]
  • vmlinuz[/ol]复制代码文件上传到 OpenWrt 的[ol]
  • /mnt/main/tftproot[/ol]复制代码目录。
    下载 Debian Installer for NetBoot (Ubuntu 没有这个) https://opentuna.cn/debian/dists/bullseye/main/installer-amd64/current/images/netboot/netboot.tar.gz ,解压以下文件至同一文件夹:

    [ol]
  • debian-installer/amd64/pxelinux.0[/ol]复制代码[ol]
  • debian-installer/amd64/boot-screens/ldlinux.c32[/ol]复制代码[ol]
  • debian-installer/amd64/boot-screens/libcom32.c32[/ol]复制代码[ol]
  • debian-installer/amd64/boot-screens/libutil.c32[/ol]复制代码[ol]
  • debian-installer/amd64/boot-screens/vesamenu.c32[/ol]复制代码





    将其上传到 OpenWrt 的[ol]
  • /mnt/main/tftproot[/ol]复制代码目录。
    在[ol]
  • /mnt/main/tftproot[/ol]复制代码目录新建目录[ol]
  • pxelinux.cfg[/ol]复制代码,在[ol]
  • /mnt/main/tftproot/pxelinux.cfg[/ol]复制代码目录新建文件[ol]
  • default[/ol]复制代码并填入以下内容:
    [ol]
  • 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[/ol]复制代码
    其中,[ol]
  • 172.18.54.1[/ol]复制代码为 OpenWrt 的 IP 地址。
    [ol]
  • /mnt/main/tftproot[/ol]复制代码目录的文件如下:



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



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



    文件系统结构欣赏:



    鸣谢

    https://blog.nanpuyue.com/2013/027.html 基于 OpenWrt 的 Linux 无盘工作站方案 - 南浦月
    https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1877618 Bug #1877618 “20.04 fails to boot via PXE (amd64) - “hidden .dis...” : Bugs : ubiquity package : Ubuntu
    https://askubuntu.com/questions/1371786/problem-setting-up-pxe-boot-with-diskless-client-ubuntu-20-04-dnsmasq-nfs-serve dhcp - problem setting up pxe boot with diskless client ubuntu 20.04 (dnsmasq,nfs server) ltsp like - Ask Ubuntu
    https://askubuntu.com/questions/1404516/screen-turns-yellow-even-using-the-live-option-ubuntu-22-04 drivers - Screen turns yellow even using the live option Ubuntu 22.04 - Ask Ubuntu
  • 回复

    使用道具 举报

    3

    主题

    982

    回帖

    2944

    积分

    金牌会员

    积分
    2944
    发表于 2022-5-8 15:36:27 | 显示全部楼层
    感谢大佬的小论文
    回复

    使用道具 举报

    17

    主题

    349

    回帖

    1195

    积分

    金牌会员

    积分
    1195
    发表于 2022-5-8 15:37:12 | 显示全部楼层
    支持大佬技术贴,帮顶
    回复

    使用道具 举报

    487

    主题

    4337

    回帖

    1万

    积分

    论坛元老

    积分
    10967
    发表于 2022-5-8 15:38:14 | 显示全部楼层
    @HOH 来整几句
    回复

    使用道具 举报

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

    本版积分规则

    Archiver|手机版|小黑屋|HS2V主机综合交流论坛

    GMT+8, 2024-5-13 21:14 , Processed in 0.052279 second(s), 3 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5

    © 2001-2023 Discuz! Team.

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