在 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://serverIP和http://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 菜单。
如果您需要启动实时映像并执行系统修复或数据恢复,请选择要安装的分发版或工具映像。
更新于:5个月前
相关文章
- macOS 使用 SSH 连接服务器
- VSCode 插件 Remote SSH 连接远程服务器
- 购买阿里云服务器、安装宝塔面板、放开安全组端口
- Debian Linux国内常用镜像源
- PHP之内置web服务器
- 如何正确安装IIS服务器
- Apache报错:无法使用可靠的服务器域名
- C#的网站通过Windows性能计数器监测服务器的性能
- 提高服务器性能的实用技巧:如何使用ddlinux
- 如何在Java中创建一个简单的HTTP服务器
- 创建 Netboot.XYZ 服务器以通过网络安装发行版
- 如何在 Ubuntu 或 Debian Linux 上安装 ntopng
- 如何在 Docker 容器中运行 Emby 媒体服务器
- 如何在 Debian 12 上安装 OpenStack(Bookworm)
- 如何在 Debian 12 或 Debian 11 上安装 PHP 8.3
- 如何在 OPNsense 上启用和启动 SSH 服务器
- 在 Debian 12/11/10 上安装 Pi-hole 网络广告拦截器
- 将 Proxmox VM 迁移到另一个 Proxmox 服务器
- 如何在 Debian 12/11/10 上安装 OpenSearch
- 使用 DNSCrypt 安装和配置加密 DNS 服务器