CentOS Kickstart PXE 实现系统自动安装

3,752 阅读3分钟

什么是 Kickstart Installations?

Kickstart Installations(启动安装),实现无人值守自动化安装

Kickstart files(启动文件),安装前准备好,可用来自动执行安装。它可以保存在单个服务器系统上,支持一对多:即单个文件在多台计算机上安装 CentOS

启动安装的过程

  1. 创建启动文件
  2. 使 Kickstart files 在可移动媒体、硬盘驱动器或网络位置上可用
  3. 创建启动介质(安装源),用于开始安装    
  4. 使安装源可用
  5. 启动 Kickstart Installations

创建启动文件

如果有安装好的 CentOS,在 /root 目录下就会生成一个 anaconda-ks.cfg 文件。

# 为需 root 用户执行;$ 为任意用户执行,以下均以此标准    

一:可以按照对 CentOS 的要求通过 ios 镜像先装一下,这样就可以拿到一份不怎么需要修改的 Kickstart 配置文件

# ll /root  # 你应该可以看到 anaconda-ks.cfg 文件

二:使用 Kickstart Configuration Tool 来创建和修改 Kickstart 配置文件

# yum install system-config-kickstart    # 安装K...C...Tool

# system-config-kickstart    # 启动K...C...Tool

验证 Kickstart 配置文件

使用 ksvalidator 验证 Kickstart 的配置文件语法

# yum install pykickstart

$ ksvalidator /path/to/kickstart.ks    # 路径为kcikstart文件的路径

Kickstart 配置文件参考

文件(ks.cfg)保存一下,后面会用到

#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --plaintext 123456
# Use network installation
url --url="http://192.168.1.101/CentOS/7/repo"
# System language
lang en_US
# 用户协议
eula --agreed
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text
firstboot --disable
# SELinux configuration
selinux --disabled

# Firewall configuration
firewall --disabled
# Network information
network  --bootproto=dhcp --device=ens33
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai --isUtc

user --groups=wheel --name=admin --password=$6$dFOvxfykHlSQW0Al$lYq0jhdvX0MzJsfF5poagu2tRGdb9
//xrzTIvfF6JKE1q2yflO19nGZf/A77/Pyp0vIjmk7f31gFmrtrypxBa/ 
--iscrypted --gecos="admin"

# System bootloader configuration
bootloader --location=none
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all
# Disk partitioning information
part /boot --fstype="xfs" --size=1024
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --grow --size=1

%packages
...
...
...
%end

创建启动介质

Kickstart files 必须放置在以下位置之一

  • 在可移动介质上,如 DVD 或 USB 闪存驱动器

    PS:将完整 iso 刻录到 DVD 上,并设置计算机启动连接DVD

  • 连接到安装系统的硬盘上

    PS:将完整 iso 放在 硬盘 / USB 上安装系统

  • 在从安装系统可接触到的网络共享上

    PS:将 iso 镜像或安装树复制到可从安装系统访问的网络上,通过网络进行安装

使 Kickstart files 可用

搭建镜像源

# yum install httpd  
# systemctl start httpd
# systemctl enable httpd 
# cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system  #选择性执行

创建一个文件夹, 挂在 iso 镜像

# mkdir -p /var/www/html/CentOS/7/repo
# mount -r /dev/sr0 /var/www/html/CentOS/7/repo

搭建 tftp server

# yum install tftp-server
# yum install tftp
# yum install xinetd

# vi /etc/xinetd.d/tftp # service tftp
{
    socket_type     = dgram
    protocol        = udp
    wait            = yes
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /var/lib/tftpboot
    disable         = no   #将此值改为no,表明开启此服务
    per_source      = 11
    cps             = 100 2
    flags           = IPv4
}

# systemctl enable tftp
# systemctl start tftp
# systemctl status tftp 
# firewall-cmd --add-service=tftp # 关闭防火墙

关闭SElinux, 将 SELINUX=enforcing 改为 SELINUX=disabled, 重启SElinux

# vi /etc/selinux/config 

配置 DHCP server

网络启动没地方配置 ip,只能自动获取

# yum install dhcp
# vi /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#

subnet 192.168.48.0 netmask 255.255.255.0 {
    range 192.168.48.10 192.168.48.100;
    option routers 192.168.48.1;
    class "pxeclients" {
        match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
        next-server 192.168.48.128;
        filename "pxelinux.0";
        }
} 
# systemctl start dhcpd 
# systemctl enable dhcpd 
# systemctl status dhcpd

配置 PXE 启动文件

BIOS(Legacy)方式启动

# yum install syslinux
# mkdir -p /var/lib/tftpboot/pxelinux # tftp 默认目录为 /var/lib/tftpboot
# cp /path_to/syslinux/{pxelinux.0, vesamenu.c32 , menu.c32}  /var/lib/tftpboot/pxelinux 

创建启动菜单

# mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg
# vi /var/lib/tftpboot/pxelinux/pxelinux.cfg/default

添加启动选项:

default vesamenu.c32

timeout 100
label 1
menu label ^1)Install CentOS7 x86_64(KickStart)
kernel images/CentOS/7/vmlinuz
append initrd=images/CentOS/7/initrd.img ks=http://192.168.1.101/CentOS/7/ks.cfg 

label 2
menu label ^2)Install CentOS7 x86_64(Manual)
kernel images/CentOS/7/vmlinuz
append initrd=images/CentOS/7/initrd.img inst.repo=http://192.168.1.101/CentOS/7/repo

CentOS Kickstart files

使安装源可用,默认启动菜单指定内核文件,没有就无法正常启动。

# mkdir -p /var/lib/tftpboot/pxelinux/CentOS/7/

# cp /path_to_x86_64_images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/images/CentOS/7/

PS:/path_to_x86_64_images:如果挂在路径不知道,通过 find / -name "pxeboot" 查找到pxeboot路径

启动 Kickstart Installations

设置 BIOS 启动为 PXE 启动,通常情况下按 “F12”

需要网络安装系统的机器和服务器接入互通局域网, 就可以从网络安装 CentOS 了