基于PXE+kickstart批量安装centos7:

本文是纯文字,后续会补充图片

1.环境:

CentOS Linux release 7.4.1708 (Core)
kernel:3.10.0-693.el7.x86_64

2.PXE、kickstart简介

PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,
工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,
并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,
再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)
协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,
从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,
如:Windows95/98/2000/windows2003/windows2008/win7/win8,linux等。

3.需要安装的服务,以及应用:

DHCP 用于批量安装时客户端自动获取IP,并提供引导系统所需的其他信息
TFTP 传输小文件非常便捷的根据,因为系统开机启动时引导文件和加载的内核文件都是小文件,所以一般选TFTP
FTP(NFS,HTTP..) 引导完成并成功加载内核后就需要向系统提供安装所需的各种系统软件,大文件传输用FTP、HTTP、NFS更可靠,我这里用的是FTP

应用:
system-config-kickstart.noarch 用于生成自应答文件ks.cfg,我是图形界面下安装后生成ks.cfg文件的,似乎命令行界面也能,后续会尝试
syslinux 安装后会生成系统引导文件/usr/share/syslinux/pxelinux.0

***安装前要关闭防火墙和selinux

4.安装DHCP服务

yum install -y dhcp
配置DHCP
vim /etc/dhcp/dhcpd.conf

我的配置:
subnet 188.188.188.0 netmask 255.255.255.0 {
range 188.188.188.2 188.188.188.50; #作用域
default-lease-time 21600;
max-lease-time 43200;
next-server 188.188.188.119; #TFTP服务器地址
filename "pxelinux.0";
}

启动DHCP服务
systemctl start dhcpd

检查是否启动成功,DHCP默认在67号端口
lsof -i :67
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dhcpd 14690 dhcpd 7u IPv4 1215873 0t0 UDP *:bootps

安装完成后建议验证是否能正常分配ip,/var/lib/dhcpd/dhcpd.leases有分配ip的记录

5.安装TFTP并启动

yum install -y tftp tftp-server
systemctl start tftp.socket
查看状态:
systemctl status tftp.socket
默认根目录为/var/lib/tftpboot/

若需要TFTP开机自启需安装xinetd服务,这里没有需求,所有可以不安装

TFTP监听在69端口

6.安装并启动ftp服务(以前就配好的一台yum服务器,此步骤省略,只描述修改的部分)

以前的ftp目录是/yum,现在在/yum下创建了两个目录,centos7和kickstarts,/yum/centos7存放源,/yum/kickstarts存放ks.cfg

注意:配置*.repo文件中第一行要写[development],填写其他内容会导致后面system-config-kickstart命令生成自动应答文件kc.cfg时提示软件包被禁用

可以打开浏览器测试ftp服务是否成功安装并启用

有时间可以尝试一下http或者NFS

7.复制或创建启动所需目录和文件至/var/lib/tftpboot/

下面是我的内容:

ls -lh /var/lib/tftpboot/
-rw-r--r-- 1 root root  21K 6月  28 16:10 chain.c32   #
-rw-r--r-- 1 root root  47M 6月  28 16:06 initrd.img
-rw-r--r-- 1 root root  33K 6月  28 16:10 mboot.c32   #
-rw-r--r-- 1 root root  26K 6月  28 16:10 memdisk     #
-rw-r--r-- 1 root root  54K 6月  28 16:10 menu.c32    #
-rw-r--r-- 1 root root  27K 6月  28 16:01 pxelinux.0  #
drwxr-xr-x 2 root root   21 6月  29 09:27 pxelinux.cfg
-rw-r--r-- 1 root root 5.7M 6月  28 16:06 vmlinuz
标记#号的都是从/usr/share/syslinux/下复制的

vmlinuz和initrd.img是PXE专用的内核文件,在系统yum仓的image/pxeboot/下

ls -lh /var/lib/tftpboot/pxelinux.cfg/
-rw-r--r-- 1 root root 232 6月  29 09:27 default

以下目录和文件默认在TFTP的根目录下自行复制或创建,安装TFTP后默认是/var/lib/tftpboot/
pxelinux.cfg此目录需存放一个名为default的文件,用作设置系统引导的配置文件,包括加载的内核,yum仓库源(可以是http,NFS,FTP提供)路径,自动应答配置文件(ks.cfg)路径,
ks.cfg文件可以理解为系统安装的自动应答文件,配置好后可以使安装过程完全不需手动操作,它可以在安装过程中对磁盘分区、网卡、软件包等实现自动配置,此文件格式与/root/anaconda-ks.cfg相同

我的ks.cfg配置:

#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
#Install OS instead of upgrade
install
#Keyboard layouts
keyboard 'us'
#Root password
rootpw --iscrypted $1$Cp7O9es8$lemYREzfQ5fM8di1XGlck1
#Use network installation
url --url="ftp://188.188.188.111/centos7"
#System language
lang en_US
#Firewall configuration
firewall --disabled
#System authorization information
auth  --useshadow  --passalgo=sha512
#Use graphical install
graphical
#SELinux configuration
selinux --disabled
#Do not configure the X Window System
skipx

#Network information
network  --bootproto=dhcp --device=eth0
#Reboot after installation
reboot
#System timezone
timezone Asia/Shanghai
#System bootloader configuration
bootloader --location=mbr
#Clear the Master Boot Record
zerombr
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part /boot --fstype="xfs" --size=1000
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --grow --size=1

%packages
@base
@core
@network-server
@remote-desktop-clients

%end

default文件其实就是定制版的isolinux.cfg文件,isolinux.cfg就是系统安装镜像下isolinux/目录中的一个文件,它的作用就是定义linux起始安装界面各种参数
因为是自定义批量部署,我们可以简化它的配置,但pxe安装时文件名必须为default(应该是必须,没试过改名)

我的配置:

default menu.c32
        prompt 5
        timeout 30
        menu title CENTOS7

        label linux
        menu label Install Centos7
        kernel vmlinuz
        append initrd=initrd.img inst.repo=ftp://188.188.188.111/centos7 inst.ks=ftp://188.188.188.111/kickstarts/ks.cfg

计算机启动后,需要引导文件加载内核文件才能进入安装界面
pxelinux.0 - 系统引导文件,安装syslinux后自动生成在/usr/share/syslinux/下
vmlinuz、initrd.img、chain.c32、mboot.c32、menu.c32、memdisk(不限于这些文件,可以根据自己的需求复制):
这些文件内核文件,需要从yum仓库复制TFTP的根目录下,PXE引导时会由DHCP服务器提供这些文件的路径(一般都是TFTP服务器)从TFTP服务器上加载到内存,并进入系统安装引导界面
若清楚操作系统开机启动原理,此处会很好理解


8.开启客户端,设置为网卡启动引导

虚拟机报错:No space left on device
内存小于2G