Linux:PXE+Kickstart批量自动化安装系统

一、简介


1.1 什么是PXE
  • Preboot Execution Environment,预启动执行环境;
  • 通过网络接口启动计算机时,不依赖本地存储设备(如硬盘)或本地已安装的操作系统;
  • Client/Server的工作模式(CS架构);
  • PXE客户端会调用网际协议(IP)、用户数据包协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议;
  • PXE客户端(Client)是指机器在PXE启动过程中的角色。一个PXE客户端可以是一台服务器、笔记本电脑或者其他装有PXE启动代码的机器(我们电脑的网卡)

作用:引导装机

1.2 PXE + Kickstart无人值守安装操作系统完整过程

PXE客户端:相当于等待安装系统的服务器

DHCP服务:给服务器分配IP地址

TFTP服务:文件传输,简单的传输服务

http服务:用于下载ks.cfg以及系统镜像文件

《流程图》Linux:PXE+Kickstart批量自动化安装系统_第1张图片

1.3 批量装机软件介绍

Readhat系主要有两种:Kickstart 和 Cobbler

  • Kickstart是一种无人值守的安装方式。
    工作原理:
    在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用;如果没有找到合适的参数,便会弹出对话框让安装者手动填写。
  • Cobbler简单说就是一个web界面,内置了配置管理系统。
    简单地说,Cobbler是对Kickstart的封装,简化安装步骤、使用流程,降低使用门槛。

二、系统环境


[root@elk-1 ~]# cat /etc/redhat-release    //系统版本
  ntOS Linux release 7.6.1810 (Core) 
  
[root@elk-1 ~]# uname -r                   //内核版本
3.10.0-957.el7.x86_64

[root@elk-1 ~]# getenforce                //selinux,必须关闭,否则失败 
Disabled

[root@elk-1 ~]# ifconfig ens32|awk -F "[ :]+" 'NR==2 {print $3}'
10.0.0.114

三、DHCP服务


3.1 DHCP简介

dhcp服务端口 67

DHCP 动态主机配置协议,通常被应用在大型局域网环境中,主要作用是集中管理、分配IP地址、使网络环境中的主机自动获取IP地址、网关地址、DNS服务器地址等信息,并能够提升地址的使用率。

:DHCP服务器会默认保存两个小时客户端的登录信息。

3.2 部署DHCP
[root@elk-1 ~]# yum install dhcp -y
......
Dependency Updated:
  dhclient.x86_64 12:4.2.5-79.el7.centos                     dhcp-common.x86_64 12:4.2.5-79.el7.centos                   
  dhcp-libs.x86_64 12:4.2.5-79.el7.centos                   
  
Complete!
3.3 配置文件位置
[root@elk-1 ~]# rpm -ql dhcp|grep "dhcpd.conf"
/etc/dhcp/dhcpd.conf
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
/usr/share/doc/dhcp-4.2.5/ldap/dhcpd-conf-to-ldap
/usr/share/man/man5/dhcpd.conf.5.gz

[root@elk-1 ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example    //配置模板文件位置
#   see dhcpd.conf(5) man page
#
3.4 配置DHCP文件
[root@elk-1 ~]# grep -Ev "^$|#" /etc/dhcp/dhcpd.conf
subnet 100.100.100.0 netmask 255.255.255.0 {
	range 100.100.100.100 100.100.100.120;
	option subnet-mask 255.255.255.0;
	default-lease-time 21600;
	max-lease-time 43200;
	next-server 100.100.100.2;
	filename "/pxelinux.0";
}
------
参数说明:
subnet:网段
netmask:子网掩码
range:给客户端分配的地址池
option subnet-mask:分配给客户端的子网掩码
default-lease-time:租期
max-lease-time:最大租期
next-server:TFTP服务器地址(本机IP)
filename:TFTP给PXE客户端的文件名
3.5 启动服务
[root@elk-1 ~]# systemctl start dhcpd 
[root@elk-1 ~]# netstat -lntup|grep dhcp
udp        0      0 0.0.0.0:67              0.0.0.0:*                           7191/dhcpd 
3.6 特别注意
  • 本来软件安装完成后都要加入开机自启,但这个Kickstart系统不能开机自启,而且用完后服务都要关闭,防止未来重启服务器后自动重装系统。
  • 如果机器数量过多的话,注意dhcp服务器的地址池,不要因为耗尽IP而导致dhcp服务器没有IP地址分配的情况。
3.7 DHCP指定监听网卡

如果是多网卡模式,默认是监听eth0网卡,需手动指定监听网卡。

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

四、TFTP服务


4.1 TFTP简介

TFTP服务端口 69

TFTP 简单文件传输协议,是TCP/IP协议族中的一个,用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,端口号为69.

4.2 部署TFTP
[root@elk-1 ~]# yum install tftp-server -y
......
Installed:
  tftp-server.x86_64 0:5.2-22.el7                                              

Complete!
4.2 编辑配置文件
[root@elk-1 ~]# 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                      //将yes改为no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
4.3 启动服务
[root@elk-1 ~]# systemctl start xinetd.service

[root@elk-1 ~]# netstat -lntup|grep 69
udp        0      0 0.0.0.0:69              0.0.0.0:*                           8872/xinetd 

五、 HTTP服务


5.1 部署http
[root@elk-1 ~]# yum install httpd -y
......
Dependency Updated:
  httpd-tools.x86_64 0:2.4.6-93.el7.centos                                     

Complete!
5.2 修改配置文件
[root@elk-1 ~]# sed -i "95i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf

在95行插入ServerName 127.0.0.1:80,否则启动报错。
5.3 创建目录
[root@elk-1 ~]# mkdir /var/www/html/centos7.6

www是yum安装的默认站点目录。
5.4 挂载镜像

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

挂载移动光驱:

[root@localhost mnt]# ls -l /dev/  
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/centos7.6   ##由于使用HTTP安装,所以镜像文件到挂到http根目录下部署不同的镜像创建不通目录

#mount /dev/sr0 /var/www/html/centos7.6  #挂载移动镜像设备到我们创建的http主页目录

如果是镜像文件已上传到linux中,可以这样挂

#mount -o loop /opt/CentOS-7-x86_64-Minimal-1511.iso /var/www/html/centos7.6

# ls /var/www/html/centos7.6

-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

不管怎么弄,只要把安装光盘内容能通过web发布即可。如果复制镜像就有点浪费时间,但生产环境就一定要复制了。光盘读取速度优先。

5.5 浏览器访问

Linux:PXE+Kickstart批量自动化安装系统_第2张图片

六、配置支持PXE的启动程序


6.1 PXE引导配置(bootstrap)

syslinux是一个功能强大的引导加载程序,而且兼容各种介质。
syslinux是一个小型的linux操作系统,它的目的是简化首次安装linux的时间,并建立维护或其它特殊用途的启动盘。

[root@elk-1 ~]# yum install syslinux -y
......
Installed:
  syslinux.x86_64 0:4.05-15.el7                                                                 

Dependency Installed:
  mtools.x86_64 0:4.0.18-5.el7                                                                  
  
Complete!

[root@elk-1 ~]# ll /usr/share/syslinux/pxelinux.0 
-rw-r--r-- 1 root root 26759 Oct 31  2018 /usr/share/syslinux/pxelinux.0
#复制启动菜单程序文件
[root@elk-1 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
##复制引导程序到tftp目录
[root@elk-1 ~]# cp -a /var/www/html/CentOS-7.6/isolinux/* /var/lib/tftpboot/

这里有一个很大的坑

若不给tftpboot目录下所有文件执行权限的话,后面启动界面安装系统的时候会报错:PXE-T00 permission denied

chmod -R 777 /var/lib/tftpboot/
#创建一个pxelinux.cfg的目录,存放客户端的配置文件
[root@elk-1 ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg

[root@elk-1 ~]# cp /var/www/html/CentOS-7.6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

七、创建 ks.cfg


7.1 生成kickstart配置文件的三种方法:
  • 每安装好一台CentOS机器,系统都会生成并记录真实的安装配置,生成的文件名为 anaconda-ks.cfg,位于/root/下。
  • CentOS提供了图形化的kickstart配置工具。需要安装图形化界面才可以使用。
    配置工具命令为:
    redhat-config-kickstart
    system-config-kickstart
  • 使用编辑器创建kickstart配置文件。
7.2 ks.cfg 文件组成
  • 命令段 键盘类型、语言、安装方式等系统配置,有必须项和可选项;若缺少必选项,安装时会中断并提示手动选择。
  • 软件包段
%packages:软件包开头的标识位

@groupname:指定安装的包组

package_name:指定安装的包

-package_name:指定不安装的包
  • 脚本段(可选段)
%pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)
%post:安装系统后执行的命令或脚本(基本支持所有命令)
7.3 参数说明
install   告知安装程序,这儿是一次全新安装,为不是升级upgrade。
url       通过ftp或http从远程服务器上安装。
nfs       从指定的nfs服务器安装
text      使用文本模式安装
lang      设置语言  lang en_US.UFT-8
keyboard  设置系统键盘类型 keyboard us
zerombr   清除mbr引导信息,系统引导相关配置。
clearpart 设置分区
reboot    装机完成后必须重启
关键字 含义
install 告知安装程序,这是一次全新安装,而不是升级upgrade
url --url=" " 通过FTPHTTP从远程服务器上的安装树中安装。
url --url="http://10.0.0.7/CentOS-6.7/"
url --url ftp://:@/
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]中的一种,缺省值是dhcp。bootp和dhcp被认为是相同的。
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,swap和vfat。
–asprimary,强迫把分区分配为主分区,否则提示分区失败。
–size=,以MB为单位的分区最小值.在此处指定一个整数值,如500.不要在数字后面加MB。
–grow,告诉分区使用所有可用空间(若有),或使用设置的最大值。
firstboot 负责协助配置redhat一些重要的信息。
firstboot --disable
selinux 关闭selinuxselinux --disabled
firewall 关闭防火墙。firewall --disabled
logging 设置日志级别。logging --level=info
reboot 设定安装完成后重启,此选项必须存在,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,也可以选择halt关机。
7.4 编写ks文件
# mkdir /var/www/html/ks_config
[root@elk-1 /var/www/html/ks_config]# cat centos7.6-ks.cfg 
# 告知安装程序,这是一次全新安装,而不是升级
install
# 通过http下载安装镜像
url --url="http://100.100.100.2/Centos7.6"
# 以文本格式安装
text

# Run the Setup Agent on first boot
firstboot --disable
ignoredisk --only-use=sda

# 键盘和语言
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# 网络配置
# Network information
network  --bootproto=dhcp --device=ens33 --ipv6=auto --activate
network  --hostname=localhost.localdomain

# 设置用户密码123456
# Root password
auth --enableshadow --passalgo=sha512
rootpw --iscrypted $6$0Hu4r5pwNdX1zdsJ$Y58jOsbs0kSlplbtVf3lacoA7Etbf8tHH6BwxR78VT74Ut6D1Q/g.rS5GSwYZD5rAZpA4NmNlTBSZkyNZP3JZ0

# 启动服务
# System services
services --enabled="chronyd"
selinux --disabled
firewall --disabled

# 时区
# System timezone
timezone Asia/Shanghai --isUtc --nontp

#添加内核参数 指定mbr引导 选择sda启动
# System bootloader configuration
bootloader  --append="crashkernel=auto rhgb quiet" --location=mbr --boot-drive=sda
# Clear the Master Boot Record清除mbr引导信息。
zerombr
##清空分区
clearpart --all --initlabel
##分区
part /boot --fstype=ext4 --asprimary --size=500
part swap --size=65536
part / --fstype=ext4 --size=1 --grow --asprimary


# 安装完成重启
reboot

# 最小化安装和指定的安装软件
%packages
@base
@compat-libraries
@development
net-tools
sysstat
lrzsz
telnet 
wget 
vim 
%end

# KDUMP禁止
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end

# 安装完成后执行的命名,这里设置阿里云的yum源镜像
%post
/usr/bin/yum-config-manager --add-repo=http://mirrors.aliyun.com/repo/Centos-7.repo
%end

给配置文件执行权限
# chmod 777 /var/www/html/ks_config/
7.5 整合编辑default配置文件
[root@elk-1 /var/lib/tftpboot/pxelinux.cfg]# cat default 
default ks
prompt 0

label ks
  kernel vmlinuz
  append initrd=initrd.img ks=http://10.0.0.114/ks_config/centos7.6-ks.cfg

八、服务器开启PXE装机以及后续问题


8.1 dell服务器开机F12进行PXE装机后如果一直没反应,检查服务端的DHCP和PXE问题

8.2开机后进入PXE安装,但是出现下图问题:

Linux:PXE+Kickstart批量自动化安装系统_第3张图片

我遇到的原因是:

/var/lib/tftpboot/pxelinux.cfg/default   #此文件中指定的 网卡名字和客户端的网卡名字不符,导致卡在这步,正常来说按照上面配置不会遇到这个

8.3开机后提示http://10.0.0.114/var/www/html/ks_config/centos7.6-ks.cfg not found 404

这是因为default文件路径写错了,服务器获取不到centos7.6-ks.cfg文件,无法进行安装操作。

九、安装成功


Linux:PXE+Kickstart批量自动化安装系统_第4张图片
参考地址:
https://blog.csdn.net/openbox2008/article/details/80089567
https://note.youdao.com/publicshare/?id=de7548ccd42f223683e12a3d4d94ad27&type=note

你可能感兴趣的:(linux,pxe,自动化)