首页 程序笔记 在 Ubuntu 或 Debian 上设置 netboot.xyz iPXE 服务器

在 Ubuntu 或 Debian 上设置 netboot.xyz iPXE 服务器

您是否厌倦了每次要安装基于 Linux 的操作系统时都使用可启动 USB 介质?在这里,我们向您展示一个解决方案,可帮助您轻松在裸机或虚拟化环境中自动化安装 Linux 和 Unix 系统。这肯定会节省您大量时间,并使操作系统安装过程变得有趣且快速。

我们所说的工具正是netboot.xyz。该软件的创建是为了使用户能够通过其轻量级工具启动多种类型的操作系统,根据互联网的速度,您可以在几秒钟或几分钟内启动并运行。您可以探索和测试任何操作系统,而无需一遍又一遍地下载 ISO 和重写介质。 netboot.xyz 还可用于救援操作系统,这对于系统管理员角色至关重要。

netboot.xyz 工具使用 iPXE 项目在 BIOS 中提供用户友好的菜单,您可以在其中选择要安装的操作系统,同时自定义启动标志。这是通过网络上大多数系统上可用的预启动执行环境 (PXE) 实现的。我们创建这篇文章是为了演示如何在 Ubuntu 或 Debian 上执行安装、配置和使用 netboot.xyz iPXE

在我们的安装中,我们充分利用 Docker 或 ansible 在 Ubuntu 或 Debian Linux 机器上设置 netboot.xyz iPXE 环境。这些方法会自动从默认配置生成自定义模板,但您可以覆盖它们。这使您能够自定义 netboot.xyz 环境以满足您的规范。

1. 更新您的系统

登录到要配置 netboot.xyz 的服务器并更新它。

sudo apt update && sudo apt upgrade -y

有时更新后需要重新启动。

[ -f /var/run/reboot-required ] && sudo reboot -f

2. 设置netboot.xyz环境

我们将考虑两种方法来实现这一目标。

方法一:使用Docker容器(推荐

要安装 Docker Engine,请运行以下命令,如如何在 Linux 系统上安装 Docker Engine 一文中所述。

Ubuntu:

sudo apt update
sudo apt -y install lsb-release gnupg apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker

Debian:

sudo apt update
sudo apt install lsb-release gnupg2 apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/debian.gpg
sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker

检查 docker 版本以确认安装成功。

$ docker --version
Docker version 25.0.0, build e758fe5

创建将包含容器内容的目录。

mkdir ~/netboot_xyz && ~/netboot_xyz

创建 docker 撰写文件

vim docker-compose.yml

以下是您可以修改的内容。

---
services:
  netbootxyz:
    image: ghcr.io/netbootxyz/netbootxyz
    container_name: netbootxyz
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - ./config:/config
      - ./assets:/assets #optional
    ports:
      - 3000:3000
      - 69:69/udp
      - 80:80 #optional
    restart: unless-stopped

使用的参数:

端口 (-p)

环境变量 (-e)

体积映射 (-v)

拉取容器镜像。

jkmutai@pxe:~/netboot_xyz$ docker compose pull
[+] Pulling 4/4
 ✔ netbootxyz 3 layers [⣿⣿⣿]      0B/0B      Pulled                                                                                                                                             31.2s
   ✔ 661ff4d9561e Pull complete                                                                                                                                                                  3.2s
   ✔ c5bf41c866f3 Pull complete                                                                                                                                                                 26.2s
   ✔ 6bd6a73a9b6f Pull complete                                                                                                                                                                  2.3s

使用以下命令启动容器。

$ docker compose up -d
[+] Running 1/2
 ⠼ Network netboot_xyz_default  Created                                                                                                                                                          0.4s
 ✔ Container netbootxyz         Started

您可以如下检查命令的状态。

$ docker compose ps
NAME         IMAGE                           COMMAND          SERVICE      CREATED              STATUS              PORTS
netbootxyz   ghcr.io/netbootxyz/netbootxyz   "sh /start.sh"   netbootxyz   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:69->69/udp, :::69->69/udp, 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp

访问http://serverIP:3000上的Web配置界面

接下来转到步骤3

方法 2:使用 Ansible Playbook(仅供参考

安装 Python 3 和 pip 模块。

sudo apt install python3 python3-pip

使用 pip python 包管理器安装 Ansible。

pip3 install --user ansible

~/.local/bin 添加到默认情况下不存在的 PATH 中。

### Bash ###
echo 'export PATH=$PATH:~/.local/bin' >>~/.bashrc

### Zsh ###
echo 'export PATH=$PATH:~/.local/bin' >>~/.zshrc

获取 bash 或 zsh 配置文件以使用已安装的 ansible 二进制文件。

### Bash ###
source ~/.bashrc

### Zsh ###
source ~/.zshrc

通过检查ansible版本来测试安装是否成功。

$ ansible --version
ansible [core 2.16.2]
  config file = None
  configured module search path = ['/home/jkmutai/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/jkmutai/.local/lib/python3.10/site-packages/ansible
  ansible collection location = /home/jkmutai/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/jkmutai/.local/bin/ansible
  python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
  jinja version = 3.0.3
  libyaml = True

安装 git,它用于从 github 克隆 netboot.xyz 代码。

sudo apt install git

查看 netboot.xyz github 存储库。

git clone https://github.com/netbootxyz/netboot.xyz.git

将工作目录切换到 netboot.xyz。

cd netboot.xyz

这是 Ansible 角色结构

用于设置 netbootxyz 环境的 ansible 角色具有以下主要组件;

  • defaults/main.yml – 包含部署、操作系统版本、实用程序和引导加载程序的默认设置
  • tasks/* – 包含渲染模板和编译 iPXE 引导加载程序的所有任务
  • 模板/磁盘 – iPXE 引导加载程序的模板
  • 模板/菜单 – netboot.xyz 菜单的模板
  • vars/* – 包含支持编译和部署 netboot.xyz 所需的软件包列表

要覆盖默认值,请在 user_overrides.yml 中提供您的覆盖。有关示例,请参阅 user_overrides.yml。

# set desired site name
site_name: ipxe.lab.example.com

# set desired boot domain
boot_domain: lab.example.com

bootloader_tftp_enabled: true
bootloader_https_enabled: true
bootloader_http_enabled: true

使用以下命令运行 ansible playbook,在 Ubuntu 或 Debian 系统上设置 netbootxyz 环境。

### Running as root user ###
ansible-playbook -i inventory site.yml

### Running as normal user with sudo password ###
ansible-playbook -i inventory site.yml --become --ask-become-pass 

执行的剧本将执行以下操作;

  • 使用默认配置设置为 netboot.xyz 环境生成菜单
  • 生成 iPXE 引导加载程序以引导到该环境
  • 为那些想要添加其他选项的人生成自定义菜单选项

成功安装将在输出中包含 failed=0

所有生成的内容将放置在默认的 Web 服务器根目录中 - /var/www/html

ls -lh /var/www/html

Ubuntu Linux 的 iPXE 文件示例。

cat /var/www/html/ubuntu.ipxe

您可以在浏览器中打开http://serverIPhttp://serverIP/ipxe/来查看以图形方式显示内容。

安装TFTP服务器

需要 tftp 服务器来托管 iPXE 文件。我们还可以使用 dnsmasq

sudo apt -y install dnsmasq

然后将配置编辑到 /etc/dnsmasq.conf 并设置如下。

$ sudo vim /etc/dnsmasq.conf
enable-tftp
tftp-root=/var/www/html/
dhcp-boot=netboot.xyz.kpxe

更改 systemd 解析的链接以避免端口 53 上发生冲突

sudo ln -fs /run/systemd/resolve/resolv.conf /etc/resolv.conf

重新启动这两个服务

sudo systemctl restart dnsmasq systemd-resolved

3. 在 DHCP 服务器上配置 TFTP

要以 PXE 方式引导系统,您需要一个现有的 DHCP 服务器,您可以在其中将此 TFTP 服务器设置为 DHCP 引导目标。我们的设置仅提供托管来自 netboot.xyz 的最新 IPXE 内核版本的 TFTP 服务器。

有一个选项可以设置您自己的 DHCP 服务器并在设置中配置下一个服务器参数。请参见下面的示例。

option arch code 93 = unsigned integer 16;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.34 192.168.0.254;       # Change this range as appropriate for your network
  next-server 192.168.1.254;               # Change this to the address of your netboot.xyz TFTP server
  option subnet-mask 255.255.255.0;
  option routers 192.168.1.1;             # Change this to the address of your router
  option broadcast-address 192.168.1.255;
  option domain-name "mylab.example.com";     # This is optional
  option domain-name-servers 1.1.1.1;
  if exists user-class and ( option user-class = "iPXE" ) {
    filename "http://boot.netboot.xyz/menu.ipxe";
  } elsif option arch = encode-int ( 16, 16 ) {
    filename "http://boot.netboot.xyz/ipxe/netboot.xyz.efi";
    option vendor-class-identifier "HTTPClient";
  } elsif option arch = 00:07 {
    filename "netboot.xyz.efi";
  } else {
    filename "netboot.xyz.kpxe";
  }
}

其中 192.168.1.254 是 netboot.xyz 服务器的 IP 地址。

一些路由器设置示例

让我们考虑一些路由器示例,了解如何更新 DHCP 服务器设置,以配置指向具有启动文件名的 TFFP 服务器的下一个服务器地址。

netboot.xyz 引导文件类型

以下是您可以在 DHCP 配置中设置为启动文件的启动文件名称列表。

奥普森感

导航至服务 -> DHCP 服务器,然后选择要更改 DHCP 设置的网络名称。设置TFTP服务器IP

在“网络启动”>高级部分下设置服务器的IP地址。

设置如下。

  • 勾选启用网络启动
  • 将下一个服务器 IP 设置为您的服务器 IP 地址
  • 将默认 BIOS 文件名设置为 netboot.xyz.kpxe
  • 将 UEFI 32 和 64 位文件名设置为 netboot.xyz.efi

PFSense

设置与 OPNsense 类似。请参阅下面的屏幕截图。

Unifi 安全网关(带控制器)

导航至网络 -> LAN(或您需要启动的其他网络)-> <高级 DHCP 选项

  • 勾选启用网络启动
  • 服务器 – 设置 YOURSERVERIP
  • 文件名- netboot.xyz.kpxe

4.使用netboot.xyz安装操作系统

对于裸机,在 BIOS 设置中启用网络启动并打开服务器电源。

对于虚拟机环境,创建一个没有 ISO 的 VM,然后更改启动顺序以通过网络启动启动。

接下来启动 VM,PXE 启动过程应立即开始。

接下来,您将看到 netboot.xyz 菜单。

如果您需要启动实时映像并执行系统修复或数据恢复,请选择要安装的分发版或工具映像。


2

站心网

您是否厌倦了每次要安装基于 Linux 的操作系统时都使用可启动 USB 介质?在这里,我们向您展示一个解决方案..

为您推荐

卸载阿里云、腾讯云服务器监控系统教程

所周知,阿里云、腾讯云的服务器都自带监控(AliYunDun/阿里云盾/安骑士),大家都不想自己的所作所为都被监控着,比如我在上面安装XX服务,一旦云监控查到,会被警告,很麻烦,我们总想着自己买的东西能够完全自己..

服务器安装数据库MySQL8.0版本,打包导入到MySQL5.6失败的结局方式

最近数据库升级为mysql8.0,在使用过程中发现一些问题,首先mysql8.0有很多新特性,对服务器配置要求较高,所有就考虑把数据库版本切换到MySQL5.6,经过多出测试处理发现在8.0数据库打包的数据导入到5.6总是报错,或..

TinyMCE 富文本编辑器常用菜单设置

TinyMCE是一款流行的开源富文本编辑器,广泛应用于网页内容管理系统(CMS)和各种Web应用程序中。它提供了丰富的功能和高度可定制性。下面将介绍一些常用的菜单设置:工具栏:显示或隐藏工具栏。可以通过配置文件中..

EntityFramework SQLite 为时间字段设置默认值为当前时间

在使用 Entity Framework Core 和 SQLite 时,可以通过以下步骤为时间字段设置默认值为当前时间:方法一:在模型配置中设置默认值你可以在 DbContext 的 OnModelCreating 方法中,通过 Fluent API 配置默认值:prote..

修改VisualSVN Server地址为ip地址,修改svn服务端地址为ip或者域名地址的方法

svn服务端搭建成功之后,地址太长很麻烦,想搞一个服务器专门做svn服务端,修改svn地址为ip地址无奈网上教程不靠谱,于是自己研究了下1.修改VisualSVN 的地址2修改地址并保存很多人不成功就在这里,点击确认之后复制..

服务架构进化论

1.原始分布式时代一直以来,我可能和大多数的人认知一样,认为我们的服务架构的源头是单体架构,其实不然,早在单体系统盛行之前,我们的前辈们就已经探索过使用多个独立的分布式服务共同完成一个大型的系统的实现方..

.NET 9 即将推出的功能Task.WhenEach

.NET 爱好者!我刚刚偶然发现了一个非常酷的新 PR,它被合并到 .NET 运行时存储库中,我想分享一个例子。希望您能为新的 .NET 版本大肆宣传!在即将到来的 .NET 9 版本中,我们预计会有一个名为 .它在这里让您的异步..

针对 Go 语言开发的 SQL 驱动模拟库

数据库交互是几乎所有应用程序不可或缺的一部分,开发者们常常需要对数据库进行各种操作,包括插入、更新、删除和查询等。然而,在开发过程中直接对真实数据库进行操作不仅耗时耗力,还可能带来数据一致性和安全性的..

DockerUI 中文可视化Docker管理工具使用示例

DockerUI 是由国内开发者打造的一款优秀的 Docker 可视化管理工具。该工具拥有简洁直观的UI界面,可以轻松进行Docker主机管理、集群管理,以及Docker任务的编排等操作。DockerUI不仅展示了资源利用率、系统信息和更..

Blazor的N种渲染模式原理和常见问题说明

我们从下面这幅图开始,下图显示了三种渲染模式,分别称之为静态SSR、交互式SSR(即之前的BlazorServer)、交互式CSR(即之前的BlazorWasm)。还有一种渲染模式BlazorHybrid,稍后说。一、先浅层理解一个图例静态SSR:经..

前端CSS常见的三种设计模式

CSS设计模式主要包括OOCSS、SMACSS和BEMCSS等。以下是对这些模式的具体介绍:OOCSS:面向对象的CSS,旨在编写高可复用、低耦合和高扩展的CSS代码。它将抽象(结构)和实现(样式)分离,抽离公共代码,以提高代码的..

WinToUSB | 把Windows塞进U盘里即插即用

不论是在外出差,还是在家临时办公,现在很多设备携带起来都不是那么方便,在这种情况下,有一个轻巧而高效的操作系统环境就显得格外关键。今天,要给大家介绍一款超级实用的便携式系统启动盘,凭借其独特功能和卓越..

.NET Framework被淘汰了吗?

.NET Framework并未完全被淘汰,但它的某些版本确实已经停止支持。微软在2023年11月10日停止了对.NET Framework 4.8之前的版本的支持。这一决策意味着使用这些旧版本的应用程序将不再获得安全更新和其他维护,从而可..

强大的 .NET Mock 框架 单元测试模拟库Moq使用教程

单元测试是确保代码质量和可靠性的重要手段。当我们的代码依赖于外部系统、数据库或第三方服务时,编写有效的单元测试可能会变得复杂且耗时。为了简化这一过程,模拟(Mocking)技术应运而生。在 .NET 生态系统中,M..

CLS 问题:超过 0.1(桌面设备) 是什么意思?

在网页设计和开发中,CLS(Cumulative Layout Shift)是指页面布局的累计偏移量。当一个用户与页面互动时,如果页面的某些元素突然改变位置或大小,导致整个布局发生偏移,就会产生布局偏移。这种偏移可能会影响用户..

Angular UT 模拟执行setTimeout

在 Angular 单元测试中,我们经常需要模拟异步操作,比如 setTimeout。提高测试速度: 真实环境下的 setTimeout 会阻塞测试,导致测试运行时间过长。确保测试的可靠性: 模拟 setTimeout 可以让我们更好地控制异步操..

JavaScript 的 sessionStorage 能否加锁?

直接给 sessionStorage 加锁是不可能的。sessionStorage 的本质: sessionStorage 是浏览器提供的一种用于在当前浏览器会话中存储数据的机制。它存储在客户端,数据仅在当前浏览器窗口或标签页中有效。加锁的必要性..

Redis 同步、击穿、穿透及雪崩简述

对Redis最常见的几个问题,简要的说下我的理解与解决方法。数据同步指Redis做为缓存,在数据变化时,怎么保持与数据库数据同步的。一般解决方案为:缓存双删(同步方案大都采用删除缓存,而不会更新新缓存。缓存击穿..

Vue 3.5引入新特性 还有与SSR相关的改进

Vue 3.5引入了响应式属性解构、useTemplateRef方法、useId实用函数、内部响应性重构等新特性。以下是具体介绍:响应式属性解构此功能允许开发者在defineProps宏中解构属性而不会失去响应性,这为组件间的属性传递提..

Asp.Net Core进程内托管 和 进程外托管的区别

在ASP.NET Core中,托管模型决定了应用程序如何运行及其与Web服务器交互的方式。主要有两种托管模式:进程内托管(In-Process Hosting)和进程外托管(Out-of-Process Hosting)。每种模式都有其独特的优势和适用场..

发表回复

返回顶部