PXE+Kickstart无人值守批量安装Centos7.4操作系统

一、PXE简介

  • PXE,全名Pre-boot Execution Environment,预启动执行环境;
  • 通过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操作系统;
  • 由Intel和Systemsoft公司于1999年9月20日公布的技术;
  • Client/Server的工作模式;
  • PXE客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议;
  • PXE客户端(client)这个术语是指机器在PXE启动过程中的角色。一个PXE客户端可以是一台服务器、笔记本电脑或者其他装有PXE启动代码的机器(我们电脑的网卡)。

二、PXE工作流程

1.网卡上的PXE芯片有512字节,存放了DHCP和TFTP的客户端
2.启动计算机并选择网卡启动
3.PXE上的DHCP客户端会向DHCP服务器,申请IP地址
4.DHCP服务器分配一个IP址地给它,同时DHCP配置文件还告诉PXE
  TFTP服务器的地址,并去下载一个pxelinux.0的文件
  (1)next-server 192.168.128.140;
  (2)filename "pxelinux.0";
5.pxelinux.0告诉PXE要址载的配置文件是pxelinux.cfg目录下面的default
6.PXE下载并依据配置文件的内容下载启动必须的文件,并通过kickstart.cfg配置文件开始安装系统

如图

PXE+Kickstart无人值守批量安装Centos7.4操作系统

三、安装前的准备

(0)环境准备

    1.dell r720 服务器1台

    2.vware workstation 10

    3.手动安装一台centos7.4做为部署服务器,配置以下各步骤后,再启多个新的虚拟,实现自动安装

虚拟机网卡采用NAT模式,不要使用桥接模式,DHCP服务器,在同一局域网多个DHCP服务会有冲突。
VMware的NAT模式的dhcp服务要关闭,避免干扰。

(1)由于涉及到主机间不同基于不同协议的通信,所以为了避免不必要的麻烦,我们选择关闭防火墙以及selinux。

#systemctl disable firewalld          # 关闭防火墙
#vim /etc/selinux/config               # 修改文件永久关闭selinux
SELINUX=disabled                         # 设置SELINUX的值为disabled
(2)查看一下生效情况
# firewall-cmd --state
not running
# getenforce
Disabled

(3)配置静态网卡
#vim /etc/sysconfig/network-scripts/ifcfg-eth0  # 设置静态IP
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.128.140
NETMASK=255.255.255.0
GATEWAY=192.168.128.2
DNS1=202.96.128.166
#systemctl restart network     #重启网络服务


四、安装并配置DHCP服务

# yum install dhcp -y

#rpm -ql dhcp         # 查询dhcp相关的配置文件
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
/usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example

#cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example  /etc/dhcp/dhcpd.conf   # 复制模板配置文件

# vim  /etc/dhcp/dhcpd.conf

#---------可用最简配置-------------------

  next-server 192.168.128.140;         #tftp服务器地址
  filename "pxelinux.0";              #启动文件

 subnet 192.168.128.0 netmask 255.255.255.0 {:

  range 192.168.128.10 192.168.128.50;  #ip地址
  option routers 192.168.128.2;        #网关
  option domain-name-servers 192.168.128.2; #DNS
}

#systemctl start dhcpd
#systemctl enable dhcpd

-------------------------------------------------------------

** 多网卡默认监听eth0,指定DHCP监听eth1网卡**
# vim /etc/sysconfig/dhcpd  在这个文件中,不是/etc/dhcp/dhcpd.conf
# Command line options here
DHCPDARGS=eth1  # 指定监听网卡

五、安装并配置TFTP服务(1)安装xinetd、tftp-server和syslinux(或syslinux-tftpboot 使用这个包就不必手工将启动内核文件vmlinuz, initrd.img pxelinux.0复制到tftp server的根目录下,这个包自动搞好。
# yum install -y xinetd
# yum install -y tftp-server syslinux  #syslinux 会在 /usr/share/syslinux/pxelinux.0 生成pxelinux.0文件 ,需要手动复制到/var/lib/tftpboot/ 目录中,详细见第8小点。

(2)配置xinetd,由xinetd管理tftp

# vim /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  #默认disable是yes的,把它改为no即可
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

systemctl enable tftp
systemctl enable xinetd
systemctl start tftp
systemctl start xinetd

(3)TFTP服务根目录下要放4个文件
    (1)vmlinuz     #vmlinuz是可引导的、压缩的内核文件,vmlinuz是vmlinux的压缩文件。是可执行的Linux内核
    (2)initrd.img  #initrd.img是“initial ram disk”的简写。initrd用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态
    (3)boot.msg   #启动信息,可以修改
    (4)pxelinux.cfg/default #安装菜单
    (5)pxelinux.0  #由syslinux生成
在第8步中,有详细说明

六、安装并配置HTTP服务

(1)安装HTTP服务
yum -y install httpd
#systemctl enable httpd             
#systemctl start httpd             # 启动http服务
(2)后续要做的
   1.将ks.cfg文件COPY到:/var/www/html
   2.将镜像文件挂到:/var/www/html/cdrom

systemctl enable httpd

systemctl start httpd


七、配置ks.cfg文件

(1)ks.cfg模板文件在/root下的anaconda-ks.cfg文件
# cp /root/anaconda-ks.cfg  /var/www/html/ks.cfg
(2)编辑ks.cfg文件,稍微修改一下安装介质就可以

 vim /var/www/html/ks.cfg

#---------可用最简配置-------------------

#version=DEVEL
# System authorization information
auth --useshadow --enablemd5
# Install OS instead of upgrade
install
# Use CDROM installation media
url --url="http://192.168.128.140/cdrom"
# Use graphical install
#graphical
text
# Firewall configuration
firewall --enabled
firstboot --disable
ignoredisk --only-use=sda
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network  --bootproto=dhcp --device=link --activate

network  --hostname=localhost.localdomain

# Reboot after installation
reboot
# Root password
rootpw --iscrypted $1$GM1bMPDP$QTx3eC82a9MWJmcCaMpPX1
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc
# X Window System configuration information
xconfig  --startxonboot
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr
# Partition clearing information

clearpart --all --initlabel

# Disk partitioning information
part /boot --fstype="xfs" --size=1024
part swap --fstype="swap" --size=2048

part / --fstype="xfs"  --size=1 --grow  

%packages
@base
@compat-libraries
@debugging
@development
gcc
glibc
gcc-c++
openssl-devel
openssh
tree
nmap
sysstat
lrzsz
vim

%end

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

%end

(3)更改ks.cfg权限

chmod +r  /var/www/html/ks.cfg 

(4)参数说明

关键字 含义
install 告知安装程序,这是一次全新安装,而不是升级upgrade
url --url=" " 通过FTPHTTP从远程服务器上的安装树中安装。
url --url="http://10.0.0.7/CentOS-6.7/"
url --url ftp://<username>:<password>@<server>/<dir>
nfs 从指定的NFS服务器安装。
nfs --server=nfsserver.example.com --dir=/tmp/install-tree
text 使用文本模式安装。
lang 设置在安装过程中使用的语言以及系统的缺省语言。lang en_US.UTF-8
keyboard 设置系统键盘类型。keyboard us
zerombr 清除mbr引导信息。
bootloader 系统引导相关配置。
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
--location=,指定引导记录被写入的位置.有效的值如下:mbr(缺省),partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序)。
--driveorder,指定在BIOS引导顺序中居首的驱动器。
--append=,指定内核参数.要指定多个参数,使用空格分隔它们。
network 为通过网络的kickstart安装以及所安装的系统配置联网信息。
network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6
--bootproto=[dhcp/bootp/static]中的一种,缺省值是dhcpbootpdhcp被认为是相同的。
static方法要求在kickstart文件里输入所有的网络信息。
network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2
请注意所有配置信息都必须在一行上指定,不能使用反斜线来换行。
--ip=,要安装的机器的IP地址.
--gateway=,IP地址格式的默认网关.
--netmask=,安装的系统的子网掩码.
--hostname=,安装的系统的主机名.
--onboot=,是否在引导时启用该设备.
--noipv6=,禁用此设备的IPv6.
--nameserver=,配置dns解析.
timezone 设置系统时区。timezone --utc Asia/Shanghai
authconfig 系统认证信息。authconfig --enableshadow --passalgo=sha512
设置密码加密方式为sha512 启用shadow文件。
rootpw root密码
clearpart 清空分区。clearpart --all --initlabel
--all 从系统中清除所有分区,--initlable 初始化磁盘标签
part 磁盘分区。
part /boot --fstype=ext4 --asprimary --size=200
part swap --size=1024
part / --fstype=ext4 --grow --asprimary --size=200
--fstype=,为分区设置文件系统类型.有效的类型为ext2,ext3,swapvfat
--asprimary,强迫把分区分配为主分区,否则提示分区失败。
--size=,以MB为单位的分区最小值.在此处指定一个整数值,如500.不要在数字后面加MB
--grow,告诉分区使用所有可用空间(若有),或使用设置的最大值。
firstboot 负责协助配置redhat一些重要的信息。
firstboot --disable
selinux 关闭selinuxselinux --disabled
firewall 关闭防火墙。firewall --disabled
logging 设置日志级别。logging --level=info
reboot 设定安装完成后重启,此选项必须存在,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,也可以选择halt关机。


八、复制内核文件

PXE+Kickstart无人值守批量安装Centos7.4操作系统

内核文件、虚拟根文件以及菜单文件,我们都是通过tftp服务来提供的,由于系统及版本的不同,对于一个比较复制机群来说,我们需要准备不同系统,不同版本的内核文件,initrd.img文件。菜单文件只需要一份即可。/var/lib/tftpboot/目录规划如下:

(1)挂载光驱,虚拟一定要先在连接光驱打上钩
[[email protected] mnt]# ls -l /dev|grep cdrom    
lrwxrwxrwx 1 root root           3 4月  25 23:58 cdrom -> sr0
crw-rw---- 1 root cdrom    21,   1 4月  25 23:58 sg1
brw-rw---- 1 root cdrom    11,   0 4月  25 23:58 sr0 #找到光驱设备名

#mkdir /var/www/html/cdrom  由于使用HTTP安装,所以镜像文件到挂到http根目录下

#mount /dev/cdrom /var/www/html/cdrom  #挂载

如果是镜像文件已上传到linux中,可以这样挂
#mount -o loop /opt/CentOS-7-x86_64-Minimal-1511.iso /var/www/html/cdrom

# ls /var/www/html/cdrom
-rw-rw-r-- 3 root root     14 9月   5 2017 CentOS_BuildTag
drwxr-xr-x 3 root root   2048 9月   5 2017 EFI
-rw-rw-r-- 3 root root    227 8月  30 2017 EULA
-rw-rw-r-- 3 root root  18009 12月 10 2015 GPL
drwxr-xr-x 3 root root   2048 9月   5 2017 images
drwxr-xr-x 2 root root   2048 9月   5 2017 isolinux
drwxr-xr-x 2 root root   2048 9月   5 2017 LiveOS
drwxrwxr-x 2 root root 641024 9月   5 2017 Packages
drwxr-xr-x 2 root root   4096 9月   5 2017 repodata
-rw-rw-r-- 3 root root   1690 12月 10 2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r-- 3 root root   1690 12月 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r-- 1 root root   2883 9月   6 2017 TRANS.TBL

(2)将镜像中的启动文件COPY到tftp server的根目录中

# cp /var/www/html/cdrom/images/pxeboot/vmlinuz     /var/lib/tftpboot/     #第2个文件,vmlinuz文件,在镜像文件images/pxeboot

vmlinuz是可引导的、压缩的内核文件,vmlinuz是vmlinux的压缩文件。是可执行的Linux内核

# cp /var/www/html/cdrom/images/pxeboot/initrd.img  /var/lib/tftpboot/     #第1个文件,initrd.img文件,在镜像文件images/pxeboot

initrd是“initial ram disk”的简写。initrd用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态

(3)复制pxelinux.0文件到tftp目录下
首先安装yum -y install syslinux
 cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

(4)编辑pxelinux.cfg菜单文件,即isolinux.cfg
# mkdir /var/lib/tftpboot/pxelinux.cfg
# vim /var/lib/tftpboot/pxelinux.cfg/default

该菜单文件的配置模板在镜像文件中:/var/www/html/cdrom/isolinux/isolinux.cfg 中 

#cp /var/www/html/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default # 复制并改名

#cp /var/www/html/cdrom/isolinux/boot.msg /var/lib/tftpboot   #可以编辑boot.msg

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

#---------可用最简配置-------------------

default ks    
prompt 0            #1出现提示,0不出现提示
  kernel ks
  append initrd=initrd.img  ks=http://192.168.128.140/ks.cfg  #指定ks.cfg文件读取的位置


九、安装结束

PXE+Kickstart无人值守批量安装Centos7.4操作系统

PXE+Kickstart无人值守批量安装Centos7.4操作系统

PXE+Kickstart无人值守批量安装Centos7.4操作系统