PXE+Kickstart无人值守安装操作系统
一、PXE 与 Kickstart
PXE(Preboot eXecution Environmen)预启动执行环境,也被称为预执行环境,是一种通过网络接启动计算机的机制。这种启动机制不依赖本地存储设备(如硬盘)或本地已安装的操作系统。
PXE采用Client/Server的工作模式,PXE 客户机(client)这个术语是指机器在PXE启动过程中的角色。一个PXE 客户机(client)可以是一台服务器、桌面级电脑、笔记本电脑或者其他装有PXE启动代码的机器。现在电脑的网卡几乎都支持PXE启动。
要注意的是PXE不是一种安装方式,而是一种引导的方式。 pxe方式要求安装的计算机中必须包含一个支持PXE 的网卡,且主板支持网络引导,PXE(Pre-boot Execution Environment)协议使计算机可以通过网络启动。
Kickstart是一种无人值守安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数;比如:我们安装系统的时候需要分区、设置时区、设置root密码、安装后执行的脚本等等,这些操作都记录下来并生成一个名为ks.cfg的文件。
*PXE+Kickstart 全自动安装操作系。
*Pykickstart,kickstart软件,用来在操作系统安装过程的配置文件ks.cfg。
*initrd,init ramdisk,初始化磁盘影像文件,是一个启动时存在于内存的文件系统。用于加载驱动模块和挂载根文件系统。initrd.img是一个小的基础镜像, 放的是和启动相关的驱动模块。通常的步骤是先启动内核,然后内核挂载initrd.img,并执行里面的脚本来进一步挂载各种各样的模块。其中最重要的就是根文件系统驱动模块,有了它才能挂载根文件系统,继而运行用户空间的第一个应用程序init或者systemd,完成系统后续的启动
*vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”,vmlinuz是可执行的Linux内核,vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。
二、PXE原理图及说明
工作原理说明:
1、客户机(client)加电启动,访问PXE Server上的DHCP服务器,请求IP地址,DHCP返回IP地址和PXE文件的位置;
2、client获得IP后就可以与同网段的TFTP服务器进行通信,访问TFTP请求获取pxelinux.0文件,TFTP发送pxelinux.0给client,client执行pxelinux.0文件;
3、client向TFTP请求配置文件(pxelinux.cfg),发送回配置文件进行读取获得启动时所需要的参数,然后继续运行下一步;
4、请求vmlinuxz,initrd.img,得到了内核文件和启动的基础镜像后client就可以进行启动了;
5、client启动内核,进入内核界面,通过vsftpd服务器获得系统安装镜像,然后进行自动化安装系统直到完成。
*对于client请求的文件TFTP都有一个响应请求并发送的过程,client接收到文件后进行执行(读取),并得到下一步执行信息。
三、操作环境
操作软件:VMware虚拟机
操作系统:CentOS7.9
网络连接:桥接模式
服务端IP:192.168.0.101
四、安装环境
# 关闭防火墙、selinux
[root@localhost ~]# systemctl stop firewalld #关闭防火墙
[root@localhost ~]# systemctl disable firewalld #永久关闭防火墙
[root@localhost ~]# setenforce 0 #关闭selinux
[root@localhost ~]# sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config #开机关闭selinux
# 配置yum源并按章软件包
[root@localhost ~]# rm -rf /etc/yum.repos.d/* #删除原有yum源
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@localhost ~]# yum clean all #清除缓存
[root@localhost ~]# yum makecache fast #重新制作缓存
[root@localhost ~]# yum install -y dhcp tftp tftp-server syslinux wget vsftpd pykickstart #安装相关服务工具
# 配置静态ip地址
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPADDR=192.168.0.101 #设置为当前服务器ip
PREFIX=24
GATEWAY=192.168.0.2
DNS1=114.114.114.114
DNS2=8.8.8.8
DEVICE="ens33"
ONBOOT="yes"
#配置完后重启网络
[root@localhost ~]# systemctl restart network
五、DHCP服务器配置
[root@localhost ~]# 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.0.0 netmask 255.255.255.0 #服务所在网段
{
range 192.168.0.101 192.168.0.200; #client支持ip范围(允许哪些ip)
option domain-name-servers 192.168.0.2;
option domain-name "server1.example.com";
option routers 192.168.0.2;
option broadcast-address 192.168.0.255;
default-lease-time 600; #默认的ip租赁时间
max-lease-time 7200; #最大的IP租赁时间
# PXE SERVER IP
next-server 192.168.0.101; #tftp服务端IP地址
filename "pxelinux.0"; #网络引导程序
}
六、TFTP服务器配置
[root@localhost ~]# vim /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 #更改为no
per_source = 11
cps = 100 2
flags = IPv4
}
[root@localhost ~]# cp -rvf /usr/share/syslinux/{pxelinux.0,menu.c32,memdisk,mboot.c32,chain.c32} /var/lib/tftpboot/
[root@localhost ~]# mkdir -v /var/lib/tftpboot/pxelinux.cfg
[root@localhost ~]# mkdir -v /var/lib/tftpboot/netboot
七、vsftpd服务器配置
- 连接cd驱动器,挂载镜像
- 拷贝启动镜像,设置安装参数
[root@localhost ~]# mount /dev/cdrom /mnt #重新挂载磁盘驱动器
[root@localhost ~]# cp -rvf /mnt/* /var/ftp/pub/ #拷贝镜像
# 拷贝系统启动时需要的镜像文件
[root@localhost ~]# cp -rvf /var/ftp/pub/images/pxeboot/vmlinuz /var/lib/tftpboot/netboot/
[root@localhost ~]# cp -rvf /var/ftp/pub/images/pxeboot/initrd.img /var/lib/tftpboot/netboot/
# 创建ks.cfg 文件
[root@localhost ~]# 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.0.101/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
reboot
%packages
@core
wget
%end
%post
%end
# 检查语法是否有错误
[root@localhost ~]# ksvalidator /var/ftp/pub/ks.cfg
八、PXE菜单
[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
prompt 0
timeout 30
MENU TITLE Togogo.net Linux Training
LABEL centos7_x64
MENU LABEL CentOS 7 X64 for BMXFF #启动菜单显示的内核名称
KERNEL /netboot/vmlinuz
APPEND initrd=/netboot/initrd.img inst.repo=ftp://192.168.0.101/pub ks=ftp://192.168.0.101/pub/ks.cfg
九、重启服务
[root@localhost ~]# systemctl enable dhcpd vsftpd tftp
[root@localhost ~]# systemctl restart dhcpd vsftpd tftp
十、自动安装
- 新建虚拟机,要注意的是内存至少要2G才能够支撑自动安装,网络模式和服务机一样桥接。
- 开机启动,启动后就会自动安装,安装系统的时候需要分区、设置时区、设置语言、设置root密码等都会自动设置。