Kickstart

222 阅读4分钟

原理

PXE请求顺序说明

PXE 客户端发送UDP广播请求

  PXE 客户端从PXE网卡启动,通过PXE BootROM(自启动芯片)以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP。

DHCP 服务器提供信息

  DHCP服务器收到客户端的请求,验证是否来至合法的PXE 客户端的请求,验证通过它将给客户端提供响应,这个响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。

PXE 客户端请求下载启动文件

  客户端收到服务器的回应 后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

TETP 服务器响应客户端请求并传送文件

  当服务器收到客户端的请求后,将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM由TFTP通讯协议从tftp服务器下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。

请求下载自动应答文件

  客户端通过 pxelinux.cfg/default 文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。

客户端安装操作系统

  将ks.cfg文件下载回来后,通过该文件找到http镜像,并按照该文件的配置请求下载安装过程需要的软件包。

  http镜像和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。

  安装完成后,将提示重新引导计算机。

开始配置

1.关闭乱七八糟的东西

1.关闭selinux

2.关闭防火墙

systemctl stop firewalld

2.配置一块新的网卡,设置新网段

vim /etc/sysconfig/network-scripts/ifcfg-ens37

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=10.0.0.5
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
DEVICE=ens37
ONBOOT=yes

重启网卡

service network restart

3.安装dhcp服务

yum -y install dhcp

配置dhcp服务

cat >>/etc/dhcp/dhcpd.conf<<EOF
subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.1 10.0.0.200;
    option subnet-mask 255.255.255.0;
    default-lease-time 21600;
    max-lease-time 43200;
    option routers 10.0.0.5;
    option domain-name-servers 114.114.114.114;
    next-server 10.0.0.5;
    filename "/pxelinux.0";
}
EOF
allow                       允许pxe
next-server                 tftp服务器的ip信息,可以配置在非dhcp服务器
filename                    tftp服务器的预启动文件
subnet                      配置dhcp服务器的网络信息,10.0.0.0/24
range dynamic-bootp         设置分配的地址范围
subnet-mask                 配置分配地址的子网掩码
option routers              配置分配的路由地址,可以直接上网 route -n
option domain-name-servers  dns地址设置 cat /etc/resolv.conf

启动dhcp服务

systemctl start dhcpd
systemctl enable dhcpd

测试是否可以使用dhcp获取ip(测试方法可以新建另一台机器在同一交换机的即可)


4.安装TFTP

yum -y install tftp-server

配置

vim /etc/xinetd.d/tftp

disable= yes
改为
disable= no

启动tftp

systemctl start tftp
systemctl enable tftp

5.安装HTTP服务

yum -y install httpd

启动

systemctl start httpd
systemctl enable httpd

6.挂载镜像

创建目录

mkdir /var/www/html/CentOS7

挂载镜像

mount /dev/cdrom /var/www/html/CentOS7

7.PXE配置

系统引导配置

yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp -a /var/www/html/CentOS7/isolinux/* /var/lib/tftpboot/
mkdir -p /var/lib/tftpboot/pxelinux.cfg
cp /var/www/html/CentOS7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

创建root密码

python -c 'import crypt; print(crypt.crypt("111111"))'

配置ks.cfg

mkdir /var/www/html/ks_config

vim /var/www/html/ks_config/CentOS7-ks.cfg

#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512

# 告知安装程序,这是一次全新安装,而不是升级
install 

# 通过http下载安装镜像
url --url="http://10.0.0.5/CentOS7/" 

# 以文本格式安装
text 

# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=dhcp --device=ens192 --ipv6=auto --activate
network  --hostname=localhost.localdomain

# Root password
rootpw --iscrypted $6$dIIFN1r/r0AhjHdf$mXt6eYceyhQkOZcmD13VPepPs0s7s2Y1aBb.Op2kq9TBncFRMasAsPHACqsESBbscWtDYqNoYSUS4bE6yW0Zy0
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel

# 安装好重启
reboot

%packages
@^minimal
@core
chrony
kexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

配置default

vim /var/lib/tftpboot/pxelinux.cfg/default

改为以下内容

default ks
prompt 0

label ks
  kernel vmlinuz
  append initrd=initrd.img ks=http://10.0.0.5/ks_config/CentOS7-ks.cfg