使用 iPXE 和 netboot.xyz 重装 VPS 系统

Published by rcdfrd on 2022-04-01

使用 iPXE 和 netboot.xyz 重装 VPS 系统

下面我将介绍使用 iPXEnetboot.xyz 引导 Linux 安装程序(本文以 Ubuntu Server 为例),自行安装系统。

前提条件

要使用此方法重装系统,VPS 需要满足以下几个条件:

  • 不能是 OpenVZ 等虚拟化技术
  • 有 VNC
  • 使用 GRUB2 引导系统
  • 包管理有 iPXE(如果没有,则需要手动安装)

如果 VPS 使用的是 OpenVZ 技术,或者不提供 VNC 功能,则无法进行安装;不满足其他两项的,理论上也可以实现,但不在本文讨论范围之内。

此外,不保证你安装过程中不会遇到奇奇怪怪的问题。安装前请备份数据。

重装步骤

1. 修改 grub 配置文件,延长默认等待时间

默认情况下引导菜单可能太快消失,或者根本不出现。这一步的目的是使稍后选择 iPXE 引导选项更容易。

编辑 grub 配置文件 /etc/default/grub

sudo nano /etc/default/grub

修改前的配置文件:

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"

修改后的配置文件:

GRUB_DEFAULT=0
#GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=300
#GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"

这一步的要点是,让引导菜单显示足够长的时间以便选择引导选项。

修改完成后,运行更新命令:

sudo update-grub

2. 记录机器 IP 地址(如有必要)

如果你的 VPS 是用 DHCP 获取地址的,那就不需要进行这一步操作;否则需要记录下接口名、IP 地址、掩码、网关等信息。

运行命令:

> ifconfig
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 104.*.*.*  netmask 255.255.255.0  broadcast 104.*.*.255
        inet6 fe80::*  prefixlen 64  scopeid 0x20<link>
        ether 00:*  txqueuelen 1000  (Ethernet)
        RX packets 9779  bytes 707184 (707.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 109  bytes 14479 (14.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

此处接口名是 ens3,IP 地址是 104.*.*.*,掩码是 255.255.255.0

网关:

> ip route
default via 104.*.*.1 dev ens3 proto static
104.*.*.0/24 dev ens3 proto kernel scope link src 104.*.*.*
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1

这里显示网关是 104.*.*.1

3. 安装 iPXE 并重启

Ubuntu 或 Debian 可以用以下命令安装 iPXE:

sudo apt install ipxe
sudo reboot

如果你用的是 CentOS,可以参考《CentOS7 配置 GRUB2+iPXE 进行网络重装》

完成之后重启并进入 VNC。

选择“Network boot (iPXE)”选项,进入 iPXE。

4. 在 iPXE 中引导 netboot.xyz

进入 iPXE 命令行

当你看到“Press Ctrl-B for the iPXE command line…”时,请立即按下 Ctrl + B 快捷键,进入 iPXE 命令行。此消息转瞬即逝,可以在进入之前就保持狂按,以免错过。

配置网络

接下来,我们需要配置网络。根据 VPS 是否有 DHCP,配置方式有所不同。

  • 有 DHCP 时,只需执行

    dhcp
    set dns 1.1.1.1
    ifopen net0
    
  • 无 DHCP 时,需要执行下列命令,并把其中的“”换成之前记下的 IP 地址、掩码、网关及 1.1.1.1 或其他可用的 DNS 服务器

    set net0/ip <ip>
    set net0/netmask <netmask>
    set net0/gateway <gateway>
    set dns <nameserver>
    ifopen net0
    

引导 netboot.xyz

配置好网络后,就可以用以下命令引导进入 netboot.xyz 了:

chain --autofree http://boot.netboot.xyz