PXE,Pre-boot eXecution Environment
-预启动执行环境,在操作系统之前运行
-可用于远程安装
工作模式
-PXE client 集成在网卡的启动芯片中
-当计算机引导时,从网卡芯片中把PXE client调入内存执行,获取PXE server配置、显示菜单,根据用户选择将远程引导程序下载到本机运行
网络装机的优势(一台pxe服务器给没装系统的裸机装系统)
规模化:同时装配多台主机
自动化:装系统、配置各种服务
远程实现:不需要光盘、U盘等物理安装介质
需要哪些服务组件?
-DHCP服务,分配IP地址、定位引导程序
-TFTP服务,提供引导程序下载
-FTP服务(或HTTP/NFS),提供yum安装源
要想在CentOS 7上安装PXE服务器,要完成以下任务:
1、 安装dhcp、tftp、vsftpd服务器等软件
2、 设置IP地址
3、 关闭SELinux、firewalld
4、 配置dhcpd、tftp
5、 将CentOS 7映像文件部署到FTP服务器的输入目录中
第一步
安装dhcpd、tftp、syslinux、wget和vsftpd
输入 yum install -y dhcp tftp tftp-server syslinux wget vsftpd
第二步
关闭SELinux和防火墙
手动修改/etc/selinux/config,确保SELINUX=permissive
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
poweroff
第三步
在VMWARE中将虚拟机的网络适配器设置为“主机模式”vmnet0
编辑,虚拟网络编辑器,vmnet0,去掉勾选,即不允许本地的dhcp服务器分配ip
第四步
这时候已经不需要上网了,所以可以为CentOS 7随意设置IP地址
nmcli con show
nmcli con modi ens32 ipv4.method manual ipv4.addresses 192.168.1.1/24
#我的网卡接口id是ens32。于是将它的IP设为192.168.1.1
nmcli con up ens32
nmcli con show
ip a
#确认192.168.1.1已经成功设置
第五步
设置dhcp服务器
vim /etc/dhcp/dhcpd.conf
确保配置文件内容如下:
ddns-update-style interim;
ignore client-updates;
authoritative;
allow booting;
allow bootp;
allow unknown-clients;
# A slightly different configuration for an internal subnet.
subnet 192.168.1.0 netmask 255.255.255.0
{
range 192.168.1.2 192.168.1.253;
option domain-name-servers 192.168.1.1;
option domain-name "server1.example.com";
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 600;
max-lease-time 7200;
# PXE SERVER IP
next-server 192.168.1.1; # DHCP server ip
filename "pxelinux.0";
}
至此,上文的filename所指的pxelinux.0目前还没有部署到位。最终它的位置是/tftpboot/pxelinux.0,但不要在这里使用路径,仅使用这个名称就好。上面的每一行结尾都是一个分号(;)。
第六步
为xinetd配置TFTP服务器,即将tftp服务交给xinetd来管理
vim /etc/xinetd.d/tftp
/etc/xinetd.d/tftp的内容如下:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
我们要将tftp服务的位置挪到/tftpboot中,将有个程序仍然认为它的路径在/var/lib/tftpboot中,所以,要改回来。
vim /usr/lib/systemd/system/tftp.service
将ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot
修改为:ExecStart=/usr/sbin/in.tftpd -s /tftpboot
看,只有这样,才能与/etc/xinetd.d/tftp中的相应内容保持一致
第七步
设置TFTP服务器网络启动文件。首先要创建一个路径/tftpboot
mkdir /tftpboot
chmod 777 /tftpboot
cp -v /usr/share/syslinux/pxelinux.0 /tftpboot
cp -v /usr/share/syslinux/menu.c32 /tftpboot
cp -v /usr/share/syslinux/memdisk /tftpboot
cp -v /usr/share/syslinux/mboot.c32 /tftpboot
cp -v /usr/share/syslinux/chain.c32 /tftpboot
再创建两个路径:
mkdir /tftpboot/pxelinux.cfg
mkdir /tftpboot/netboot/
第八步
将CentOS的ISO文件发布到FTP的文件夹中。要做到这一点,必须要有一个CentOS 7的ISO文件。我要把它以虚拟光盘的形式挂载到虚拟机中
点击屏幕右下方光盘图标,在短菜单中选择“连接到主机”
lsblk
查看光盘挂载的路径,如sr0 /run/media/root/CentOS 7 x86_64
mkdir -p /var/ftp/pub
cp -r /run/media/root/'CentOS 7 x86_64'/* /var/ftp/pub
“CentOS 7 x86_64”要用引号括起来,否则会出错。
cp -r /run/media/root/CentOS 7\ x86_64/* /var/ftp/pub
第九步
将启动时需要使用的镜像文件拷贝到目录位置
cp /var/ftp/pub/images/pxeboot/vmlinuz /tftpboot/netboot/
cp /var/ftp/pub/images/pxeboot/initrd.img /tftpboot/netboot/
第十步
创建一个kickstart,即无人值守安装文件,名字叫ks.cfg
vim /var/ftp/pub/ks.cfg
其内容如下:
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use NFS installation media
url --url="ftp://192.168.1.1/pub/"
rootpw --plaintext 123456
#root的密码设为123456
# Use graphical install
graphical
firstboot disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux disabled
# Installation logging level
logging level=info
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader location=mbr
clearpart --all --initlabel
part swap --asprimary --fstype="swap" --size=1024
part /boot --fstype xfs --size=200
part pv.01 --size=1 --grow
volgroup rootvg01 pv.01
logvol / --fstype xfs --name=lv01 --vgname=rootvg01 --size=1 --grow
%packages
@core
wget
%end
%post
%end
保存后,用ksvalidator检查一下是否有语法错误
ksvalidator /var/ftp/pub/ks.cfg
第十一步
创建一个pxe菜单
vim /tftpboot/pxelinux.cfg/default
default的内容如下:
default menu.c32
prompt 0
timeout 30
MENU TITLE Togogo.net Linux Training
LABEL centos7_x64
MENU LABEL CentOS 7 X64
KERNEL /netboot/vmlinuz
APPEND initrd=/netboot/initrd.img inst.repo=ftp://192.168.1.1/pub ks=ftp://192.168.1.1/pub/ks.cfg
最后这个APPEND写成一行,中间不要断行
第十二步
systemctl enable dhcpd
systemctl enable tftp
systemctl enable vsftpd
将以上服务设为开机自动启动
systemctl restart vsftpd
systemctl restart dhcpd
systemctl restart tftp
重新启动以上服务
验证
在VMware中创建一个新的虚拟机,以充当验证PXE服务器的客户机。将其网络适配器的网络连接设为“主机模式”
然后启动这台虚拟机。于是,我们就能看到,这台虚拟机可以在无人干预的情况下安装CentOS Linux的Minimal,即最小化安装