下面是详解Linux系统下PXE服务器的部署过程的完整攻略。
一、PXE服务器简介
PXE(Preboot eXecution Environment)是一种基于网络的远程启动技术,能够在网卡启动的基础上,通过网络启动计算机。PXE服务器就是支持PXE的服务器,主要功能是为客户端提供网络启动所需要的相关数据和服务。
二、PXE服务器的部署过程
1.安装DHCP服务
首先,我们需要在PXE服务器上安装DHCP服务。DHCP服务是为PXE客户端分配IP地址所必需的服务。在Ubuntu系统下,可以使用以下命令进行安装:
sudo apt-get update
sudo apt-get install isc-dhcp-server
安装完成后,需要进行配置。打开配置文件 /etc/dhcp/dhcpd.conf
,在末尾添加以下内容:
# Subnet definition
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.20 192.168.1.100;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
# Next-server and filename option
next-server 192.168.1.5;
filename "pxelinux.0";
}
其中,subnet是定义子网的参数,192.168.1.0和255.255.255.0分别表示子网的IP地址和子网掩码。range是定义IP地址段的参数,192.168.1.20和192.168.1.100分别表示IP地址段的起始地址和终止地址。option是定义DHCP选项的参数,routers表示默认网关的IP地址,broadcast-address表示广播地址。next-server和filename是定义PXE客户端需要获取的服务器IP和启动文件名。
2.安装TFTP服务
其次,我们需要在PXE服务器上安装TFTP服务。TFTP服务是为PXE客户端提供启动文件所必需的服务。在Ubuntu系统下,可以使用以下命令进行安装:
sudo apt-get install tftpd-hpa
安装完成后,需要进行配置。打开配置文件 /etc/default/tftpd-hpa
,将以下两行前面的注释去掉:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
其中,TFTP_USERNAME表示TFTP服务的用户名,TFTP_DIRECTORY表示TFTP服务的根目录。
3.安装PXE启动文件
接着,我们需要在TFTP服务的根目录下安装PXE启动文件。在Ubuntu系统下,可以使用以下命令进行安装:
sudo apt-get install pxelinux syslinux-common
安装完成后,需要将以下两个文件拷贝到TFTP服务的根目录中:
- /usr/lib/syslinux/pxelinux.0
- /usr/lib/syslinux/menu.c32
4.安装镜像文件
最后,我们需要在TFTP服务的根目录下安装镜像文件。以Ubuntu为例,可以使用以下命令进行安装:
sudo apt-get install nfs-kernel-server
安装完成后,需要进行配置。打开配置文件 /etc/exports
,在末尾添加以下内容:
/opt/install/ubuntu-20.04 192.168.1.0/24(rw,sync,no_subtree_check,insecure)
其中,/opt/install/ubuntu-20.04表示Ubuntu镜像文件所在的目录,192.168.1.0/24表示允许访问该目录的IP地址段,rw表示可读可写,sync表示同步写入,no_subtree_check表示不检查子目录,insecure表示允许非特权客户端访问。
至此,PXE服务器的部署过程已经完成。
三、示例说明
示例一:Ubuntu 20.04的无人值守安装
以Ubuntu 20.04为例,假设我们已经在PXE服务器上成功部署了PXE服务,并且已经将Ubuntu 20.04的镜像文件拷贝到了/opt/install/ubuntu-20.04目录下。
首先,我们需要准备一个无人值守的安装配置文件,以便PXE客户端在安装时自动化完成安装过程。以以下内容为例:
# Ubuntu Server install file
d-i debian-installer/locale string en_US.UTF-8
d-i keyboard-configuration/xkb-keymap select us
d-i netcfg/get_hostname string ubuntu20
d-i netcfg/get_domain string example.com
d-i netcfg/disable_autoconfig boolean true
d-i netcfg/get_ipaddress string 192.168.1.20
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.1.1
d-i mirror/country string manual
d-i mirror/http/hostname string archive.ubuntu.com
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string
d-i apt-setup/services-select multiselect security
d-i clock-setup/utc boolean true
d-i time/zone string UTC
d-i passwd/user-fullname string PXE User
d-i passwd/username string pxeuser
d-i passwd/user-password-crypted password $6$9QVyhiQYm7/kw$R7WwhCKh342fwGcW1ZOUEBjJY3OX5KPgBtYB7S4eojefcHHH1/ZsuWPhqJ3sC5QqKskQm.sIXlM1PTPEn3mrT.
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman-auto/expert_recipe string \
boot-root :: \
5000 50 5000 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
mountpoint{ /boot } \
. \
15000 50 15000 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
mountpoint{ / } \
. \
5000 50 100% linux-swap \
method{ swap } format{ } \
.
d-i debian-installer/allow_unauthenticated boolean true
d-i pkgsel/update-policy select none
d-i pkgsel/include string openssh-server vim
tasksel tasksel/first multiselect standard, ubuntu-server
d-i finish-install/reboot_in_progress note
将上述配置文件保存为一个文件,例如preseed.cfg。
然后,我们需要在/opt/install/ubuntu-20.04目录下创建一个pxe.cfg文件,内容如下:
default menu.c32
prompt 0
timeout 300
label ubuntu
menu label Install Ubuntu 20.04.1 LTE
kernel ubuntu-20.04.1/vmlinuz
append initrd=ubuntu-20.04.1/initrd.gz netcfg/choose_interface=eth0 url=http://192.168.1.5/preseed.cfg
其中,label表示菜单项名称,menu label表示菜单显示的名称,kernel表示启动文件,append表示传递给内核的参数。
再然后,我们需要将preseed.cfg、vmlinuz和initrd.gz这三个文件拷贝到/opt/install/ubuntu-20.04.1目录下。
最后,在PXE客户端启动时,选择“Install Ubuntu 20.04.1 LTE”菜单项,即可开始无人值守安装Ubuntu 20.04系统。
示例二:CentOS 8的Kickstart安装
以CentOS 8为例,假设我们已经在PXE服务器上成功部署了PXE服务,并且已经将CentOS 8的镜像文件拷贝到了/opt/install/centos-8目录下。
首先,我们需要准备一个Kickstart安装配置文件,以便PXE客户端在安装时自动化完成安装过程。以以下内容为例:
# Kickstart file for CentOS 8
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Root password
rootpw --plaintext password
# Language selection
lang en_US.UTF-8
# Keyboard selection
keyboard us
# Network information
network --bootproto=dhcp --device=eth0 --onboot=yes --hostname=centos8 --activate
# System timezone
timezone Asia/Shanghai --isUtc
# Repositories
repo --name=AppStream --baseurl=file:///media/BaseOS/AppStream
repo --name=BaseOS --baseurl=file:///media/BaseOS/BaseOS
# System services
services --enabled=chronyd
# Disk partitioning
clearpart --all --initlabel
autopart --type=lvm
# Disable interactive setup
%include /tmp/network.ks
%include /tmp/partitioning.ks
%include /tmp/post-install.ks
%post
curl http://192.168.1.5/post-install.sh | bash
%end
将上述配置文件保存为一个文件,例如anaconda.ks。
然后,我们需要在/opt/install/centos-8目录下创建一个pxe.cfg文件,内容如下:
default menu.c32
prompt 0
timeout 300
label centos
menu label Install CentOS 8
kernel CentOS-8.0/vmlinuz
append initrd=CentOS-8.0/initrd.img inst.ks=http://192.168.1.5/anaconda.ks ip=dhcp
其中,label表示菜单项名称,menu label表示菜单显示的名称,kernel表示启动文件,append表示传递给内核的参数。
再然后,我们需要将anaconda.ks、vmlinuz和initrd.img这三个文件拷贝到/opt/install/CentOS-8.0目录下。
最后,在PXE客户端启动时,选择“Install CentOS 8”菜单项,即可开始Kickstart安装CentOS 8系统。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Linux系统下PXE服务器的部署过程 - Python技术站