基于ubuntu部署PXE Server用于网络安装ubuntu

环境说明
        操作系统镜像:ubuntu-22.04.1-live-server-amd64.iso
        可以直接去官网下载https://ubuntu.com/download/server

 PXE Server选择的是最小化安装ubuntu-22.04

(一) PXE Server安装必须的软件(2个)

安装HTTP服务器
这里使用的是apache2
sudo apt-get install apache2

安装DHCP、TFTP服务器
dnsmasq同时实现了DHCP、TFTP、DNS三种服务器
sudo apt-get install dnsmasq

安装后报53端口冲突:

直接忽略该报错就行,后面会通过绑定端口解决

bind-interfaces

(二) 准备相关文件

1. tftpd的默认服务根目录是/var/ftpd

ftpd
├── grubx64.efi
├── boot
│      └── live-server
│              ├── initrd
│              └── vmlinuz
└── grub
      ├── bootx64.efi
      ├── grub.cfg
      └── x86_64-efi
              ├── command.lst
              ├── crypto.lst
              ├── fs.lst
              └── terminal.lst

说明:文件initrd、vmlinuz、command.lst、crypto.lstfs.lst和terminal.lst来自 ubuntu安装包

 

  • bootx64.efi、grubx64.efi 引导程序,来自shim.signed grub-efi-amd64-signed安装包
     

sudo apt-get download shim.signed

dpkg -x shim-signed_1.51+15.4-0ubuntu9_amd64.deb shim

sudo apt-get download grub-efi-amd64-signed

dpkg -x grub-efi-amd64-signed_1.182~22.04.1+2.06-2ubuntu10_amd64.deb grub

cp ./grub/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed  /var/ftpd/grubx64.efi

cp ./shim/usr/lib/shim/shimx64.efi.signed  /var/ftpd/grub/bootx64.efi

  • grub.cfg 自建,内容如下

menuentry "Try or Install Ubuntu Server" {

    set gfxpayload=keep

    linux  /boot/live-server/vmlinuz root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url='http://192.168.0.49/iso/ubuntu-22.04.1-live-server-amd64.iso' autoinstall ds=nocloud-net\;s=http://192.168.0.49/autoinstall/ ---

    initrd /boot/live-server/initrd

}

这里的ip:192.168.0.49是“安装源服务器”传输以上文件所用的那个网卡的网络地址,根据实际情况修改。

2. apache2的默认服务根目录是 /var/www/html

html/
├── autoinstall
│   ├── meta-data
│   └── user-data
├── index.html
└── iso
    └── ubuntu-22.04.1-live-server-amd64.iso

说明

  • autoinstall 目录存放参数自动配置文件,user-data、meta-data是cloud-init要求的文件名。

meta-data只需创建一个依此命名的空文件;

user-data的内容可以参考此安装源服务器在 /var/log/installer/ 目录下的 autoinstall-user-data ,这是基于当前的系统的应答文件,我们可以以它作为基础,根据实际情况进行修改。重点要关注一下网络和分区那里。

  • iso 目录存放操作系统镜像文件。

(三) 修改配置文件

dnsmasq的默认配置文件为/etc/dnsmasq.conf,关键配置有以下几个

# 指定服务的网卡,对应上述ip:192.168.0.49的那张网卡名

interface=enp2s0

# 绑定端口

bind-interfaces

# 设置DHCP分发IP端范围、地址掩码、IP地址有效时间(网段自定义)

dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h

# 设置引导程序相对tftp根目录的路径

dhcp-match=set:efi-x86_64,option:client-arch,7

dhcp-boot=tag:efi-x86_64,grub/bootx64.efi

# 打开tftp服务

enable-tftp

# 设置tftp根路径

tftp-root=/var/ftpd

# 设置日志路径

log-facility=/var/log/dnsmasq.log

修改配置后,重启dnsmasq服务才能生效。

sudo service dnsmasq restart

至此,安装源服务器上的配置都已修改完毕,接着网络启动所有客户端服务器就

开始进行网络安装了。

参考 :devops - 通过 PXE 自动化安装 Ubuntu Server - logger - SegmentFault 思否


---------------------------------------------------------------------------------------------------------------------------------

测试验证过程:

一、使用Hyper-V虚拟化环境验证

验证主机系统:Windows 10,16G内存

Hyper-V 管理器版本如下:

PXE server安装 ubuntu-22.04.1-live-server-amd64.iso时选择最小化安装

 PXE server配置如下图所示,新增了一张网卡MyPrivateNet(内部网络)专门用于PXE启动

PXE client配置如下:

 在创建PXE client虚拟机时选择从网络启动,在PXE server上按照上述步骤配置后,启动PXE client即可完成操作系统安装。

遇到的问题:

1、无法从PXE启动,进入到PXE后很快就失败

取消勾选“启用安全启动”即可

2、 使用Hyper-V 验证时报“Out of memory”,经检查发现是虚拟机的内存设置的太小了,增加内存大小即可解决。

3、 Failed to start initial cloud-init job 

怀疑cloud-init不兼容Hyper-V,使用物理机验证时没有类似问题。

二、使用物理机验证

1、选择一台物理机作为PXE server,最小化安装 ubuntu-22.04.1-live-server-amd64.iso

2、另选一台服务器作为PXE client,组网如下,服务器配置有RAID卡的话,需要提前对系统盘做RAID。

 按照前文配置说明完成对PXE server的部署后,启动PXE client,当出现如下画面的时候代表已经连接到PXE server

 这一步显示的就是我们再grub.cfg中配置的菜单:menuentry "Try or Install Ubuntu Server"

在PXE server查看dnsmasq日志,正常的启动日志如下:

 PXE client在OS安装完成后会自动重启。


---------------------------------------------------------------------------------------------------------------------------------

记录一下测试过程中遇到的问题:

1、最后一步分区的时候报错,提示如下:

 根据倒数第二行的提示,按enter键后去查看crash日志:

 从日志可以看出我们再user-data中配置的ubuntu-vg在文件系统中已经存在。

原因就是我们测试用的PXE client已经安装过操作系统了

而且之前的操作系统并没有安装到系统盘sda上 ,清除掉nvme0n1p3上的ubuntu-vg之后重新PXE安装即可

2、报错“pxe unable to find a live file system on the network”

 经检查发现是PXE sever上的iso包不是从官方下载的,文件名不一样,导致这个iso下载不到PXE client,更改文件名即可。


3、使用物理机验证时报“wget: can't connect to remote host”,提示信息显示获取了一个169.254.3.1的ip地址,并不是DHCP server分配的那个。

 经排查发现是那台服务器的网卡不支持PXE启动,换了一台服务器就没有类似问题。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值