一般我们传统的安装操作系统的方式:光盘安装,U盘安装,网络安装 。而Kickstart是一种无人值守的安装方式,它的工作原理是提前定义好了linux安装过程的配置文件,这个配置文件通常为ks.cfg。有了这个文件,可以让Linux在安装过程中按照我们预先定义的要求进行自动化安装,同时对于部署大量主机也非常方便。
PXE(preboot execute environment,预启动执行环境)工作于Client/Server的网络模式,支持通过网络从远端服务器下载镜像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导安装操作系统。
pxe可以引导多种操作系统。严格来说,PXE并不是一种安装方式,而是一种引导方式
进行PXE安装的必要条件是在要安装的计算机中必须包含一个PXE支持的网卡(NIC),即网卡中必须要有PXE Client,PXE Client在网卡的ROM中
当计算机引导时,BIOS把PXE Client调入内存中执行,然后由PXE Client将放置在远端的文件通过网络下载到本地运行
#使用PXE引导需要设置DHCP服务器和TFTP服务器#
DHCP服务器会给PXE Client分配一个IP地址,由于是给PXE Client分配IP地址,所以在配置DHCP服务器时需要增加相应的PXE设置
此外,在PXE Client的ROM中,已经存在TFTP Client,那么它就可以通过TFTP协议到TFTP Server 上下载所需的文件了
PXE的引导过程:
1、PXE Client端通过PXE BootROM(自启动芯片)(BIOS里面的PXE固件)广播一个DHCP discover包
2、支持PXE的DHCP服务器返回分配给客户机的IP以及启动文件的放置位置
3、PXE Client会向本网络中的TFTP服务器索取pxelinux.0(引导文件)、pxelinux.cfg/default(启动菜单配置文件)、vmlinuz(可执行的linux内核,负责安排所有的硬件启动)和initrd.img(驱动程序模块)文件
5、pxe client由TFTP从服务端下载启动安装程序所必需的文件(pxelinux.0、pxelinux.cfg/default)后,会根据default文件中定义的引导顺序,加载内核和文件系统
6、这些启动资源其实就是最小的操作系统,这个最小操作系统在装载了网络驱动和TCP/IP协议栈之后,就可以通过HTTP、FTP、NFS方式进行安装
而配置PXE需要下载DHCP,xinetd,tftp-server三个服务器
DHCP 动态主机配置协议,为客户端分配IP地址
xinetd 监视网络请求的守护进程,根据请求调用相应的服务进程来处理连接请求
#例如FTP、Telnet、SSH等就适合使用xinetd模式
tftp-server 简单文件传输协议,用于向客户端提供安装引导相关的文件
#udp的69号端口
vsftpd 为客户端提供系统安装时所需的文件
syslinux 产生pxelinux.0文件
system-config-kickstart 用于生成kickstart配置文件
PXE+Kickstart
PXE: 自动引导
Kickstart: 协议 规定了安装系统的时候从配置文件读取安装步骤
ks.cfg: 定义了安装软件,磁盘划分,网络配置,主机名配置,用户配置,语言
安装的软件:
DHCP: 提供PXE client的IP,并且告诉客户端 启动文件的位置pxelinux.0 #DHCP
PXE client启动后,首先要做的就是获取IP,拿到启动文件的位置
PXE Client获取到IP,以及从TFTP服务器上获取到启动文件 #TFTP
PXE Client还会向TFTP获取: pxelinux.cfg/default 启动菜单
PXE Client还会向TFTP获取:可以执行的linux内核vmlinuz
PXE Client还会向TFTP获取: initrd.img
PXE Client还会获取vesamenu.c32: 图形化的
安装DHCP并配置
dhcp --- 不仅动态分配ip,还要提供启动文件的位置
①filename: 客户端要下载的文件名
②next-server:文件放在哪个服务器下
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp-server/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
ddns-update-style none; #忽略域名更新
ignore client-updates; #忽略ip的更新
default-lease-time 600; #默认ip租期
max-lesae-time7200; #ip的最大租期
subnet 192.168.220.0 netmask 255.255.255.0 { #ip网段
option routers 192.168.220.2; #ip网关
option domain-name-servers 114.114.114.114; #dns地址
range dynamic-bootp 192.168.220.70 192.168.220.80; #ip范围
filename "pxelinux.0"; #获取文件名字
next-server 192.168.220.138; #服务端(写本机ip)
}
安装tftp
[root@localhost ~]# yum install tftp tftp-server xinetd -y
//在xinetd中配置tftp,启动xinetd,它会在/etc/xinetd.d/对应的配置文件中找寻tftp
//tftp的配置文件就写了xinetd的启动服务配置
[root@localhost ~]# cd /etc/xinetd.d/
[root@localhost xinetd.d]# vim tftp
[root@localhost xinetd.d]# cat tftp
service tftp
{
protocol = udp #udp协议
port = 69 #69号端口
socket_type = dgram #文件类型
wait = yes #是否等待
user = root #root用户
server = /usr/sbin/in.tftpd #tftp的位置
server_args = -u root -s /tftproot #tftp提供的服务位置
disable = no #开启服务
}
//然后重启xinetd服务
systemctl restart xinetd
//尝试tftp本地ip
tftp 192.168.220.138
syslinux拷贝
//安装syslinux
[root@localhost /]# yum install syslinux -y
//拷贝的第一个文件: pxelinux.0
[root@localhost /]# cd /usr/share/syslinux
[root@localhost syslinux]# cp pxelinux.0 /tftproot
//挂载光盘到/mnt
[root@localhost /]# mount /dev/sr0 /mnt
//拷贝驱动程序,可执行内核
[root@localhost /]# cd /mnt
[root@localhost mnt]# cd images/pxeboot
[root@localhost pxeboot]# cp initrd.img vmlinuz /tftproot
[root@localhost pxeboot]# pwd
/mnt/images/pxeboot
//此时到/tftproot下查看
[root@localhost pxeboot]# cd /tftproot/
[root@localhost tftproot]# ll
total 73704
-r--r--r--. 1 root root 66509268 Jan 5 15:27 initrd.img
-rw-r--r--. 1 root root 42376 Jan 5 15:21 pxelinux.0
-r-xr-xr-x. 1 root root 8913760 Jan 5 15:27 vmlinuz
//尝试创建mkdir文件
[root@localhost tftproot]# mkdir pxelinux.cfg
//拷贝启动菜单文件,从光盘下
[root@localhost tftproot]# cd /mnt/
[root@localhost mnt]# ls
AppStream EFI extra_files.json images media.repo RPM-GPG-KEY-redhat-release
BaseOS EULA GPL isolinux RPM-GPG-KEY-redhat-beta TRANS.TBL
[root@localhost mnt]# cd isolinux/
[root@localhost isolinux]# ls
boot.cat grub.conf isolinux.bin ldlinux.c32 libutil.c32 splash.png vesamenu.c32
boot.msg initrd.img isolinux.cfg libcom32.c32 memtest TRANS.TBL vmlinuz
[root@localhost isolinux]# cp isolinux.cfg /tftproot/pxelinux.cfg/default
[root@localhost isolinux]# cp vesamenu.c32 /tftproot/
[root@localhost ~]# cd /usr/share/syslinux/
[root@localhost syslinux]# ls
altmbr.bin dir.c32 ifcpu64.c32 lfs.c32 meminfo.c32 syslinux64.exe
altmbr_c.bin disk.c32 ifcpu.c32 libcom32.c32 menu.c32 syslinux.c32
altmbr_f.bin dmi.c32 ifmemdsk.c32 libgpl.c32 pci.c32 syslinux.com
cat.c32 dmitest.c32 ifplop.c32 liblua.c32 pcitest.c32 syslinux.exe
chain.c32 dosutil isohdpfx.bin libmenu.c32 pmload.c32 vesa.c32
cmd.c32 elf.c32 isohdpfx_c.bin libutil.c32 poweroff.c32 vesainfo.c32
cmenu.c32 ethersel.c32 isohdpfx_f.bin linux.c32 prdhcp.c32 vesamenu.c32
config.c32 gfxboot.c32 isohdppx.bin lpxelinux.0 pwd.c32 vpdtest.c32
cptime.c32 gptmbr.bin isohdppx_c.bin ls.c32 pxechn.c32 whichsys.c32
cpu.c32 gptmbr_c.bin isohdppx_f.bin lua.c32 pxelinux.0 zzjson.c32
cpuid.c32 gptmbr_f.bin isolinux.bin mboot.c32 reboot.c32
cpuidtest.c32 gpxecmd.c32 isolinux-debug.bin mbr.bin rosh.c32
debug.c32 hdt.c32 kbdmap.c32 mbr_c.bin sanboot.c32
dhcp.c32 hexdump.c32 kontron_wdt.c32 mbr_f.bin sdi.c32
diag host.c32 ldlinux.c32 memdisk sysdump.c32
[root@localhost syslinux]# cp ldlinux.c32 /tftproot/
//此时tree查看tftproot下的文件
[root@localhost /]# tree tftproot/
tftproot/
├── initrd.img
├── ldlinux.c32
├── pxelinux.0
├── pxelinux.cfg
│ └── default
├── vesamenu.c32
└── vmlinuz
使用vsftpd下载镜像
//下载vstfpd服务
[root@localhost /]# yum install vsftpd -y
//安装之后去配置 启用匿名用户
[root@localhost /]# cd /etc/vsftpd/
[root@localhost vsftpd]# vim vsftpd.conf
anonymous_enable=YES
//重启vstpd服务
[root@localhost /]# systemctl restart vsftpd
#此时需要保证可以可以虚拟登录
//此时更改挂载点目录,到虚拟目录/var/ftp/pub,来作为我们存储镜像的目录
#先去解挂载:
[root@localhost /]# umount /mnt
#把镜像挂载到
[root@localhost /]# /var/ftp/pub:mount /dev/sr0 /var/ftp/pub
配置:
[root@localhost ~]# cd /var/ftp
[root@localhost ftp]#vim ks.cfg
//一定要在这个位置下进行vim ks.cfs 负责服务端无法正常保存
# 只对nvme0n1这个磁盘进行分区
ignoredisk --only-use=nvme0n1
#自动分区
autopart --type=lvm
# 对nvme0n1 进行清理以及初始化
clearpart --all --initlabel --drives=nvme0n1
# 图像化
graphical
# 重启
reboot
# 这块儿是需要变化的:ftp://192.168.2220.138/pub/AppStream作为我们的仓库
repo --name="AppStream" --baseurl=ftp://192.168.220.138/pub/AppStream
#192.168.233.138的ftp的pub目录加载镜像
url --url="ftp://192.168.220.138/pub"
#键盘设置
keyboard --vckeymap=us --xlayouts='us'
# 禁用firstboot,要是Setup Agent
firstboot --disable
# 语言设置
lang en_US.UTF-8
# 网络使用dhcp, ens160
network --bootproto=dhcp --device=ens160 --ipv6=auto --activate
#主机名设置
network --hostname=localhost
#root用户密码设置
rootpw --plaintext root
#图形化界面登录
xconfig --startxonboot
#启用chronyd服务
services --enabled="chronyd"
# 时区
timezone Asia/Shanghai --isUtc
#普通用户 ---使用的是root 密码在/etc/shadow
user --group=pxe --name=pxe --password=$6$767s1H3t8Sp7KEq6$.zPBBy7nAUB3gFmFs7KLqRN1W5qeTIjOAAnQ/DwcAyRRLjKXvkGObaMSQ/bOgeuBD/9bG0T6fwTsEHD.utiJI1 --iscrypted --gecos="pxe"
软件安装:
%packages
@^graphical-server-environment
kexec-tools
tree
curl
httpd
dhcp-server
xinetd
%end
%addon com_redhat_kdump --enable --reverse-mb='auto'
%end
//关闭防火墙和selinux!!!
重新选择一个虚拟机:此时已经可以自动装机