黑帽联盟

标题: Kickstart+HTTP+DHCP+TFTP全自动批量安装部署Linux系统 [打印本页]

作者: admin    时间: 2019-11-25 17:58
标题: Kickstart+HTTP+DHCP+TFTP全自动批量安装部署Linux系统
主要讲述了[PXE] linux(centos)PXE无盘服务器搭建,安装,启动及pxe协议详解 , Kickstart (PXE+DHCP+TFTP+HTTP)。

PXE环境概述

作为中小公司的运维,经常会遇到一些机械式的重复工作。如何进行批量一次大批量部署服务器安装?方法: Kickstart (PXE+DHCP+TFTP+HTTP)  或  Cobbler
Redhat系通主要有两种方式:Kickstart和Cobbler。
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。
Cobbler集中和简化了通过网络安装操作系统需要使用到的DHCP、TFTP和DNS服务的配置。Cobbler不仅有一个命令行界面,还提供了一个Web界面,大大降低了使用者的入门水平。Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成。
PXE,全名Pre-boot Execution Environment,预启动执行环境;简单的说,Cobbler是对kickstart的封装,简化安装步骤、使用流程,并降低使用者的门槛。而kickstart实现方式依赖于PXE环境。通过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操作系统;由Intel和Systemsoft公司于1999年9月20日公布的技术;运行在Client/Server的工作模式;   PXE客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议;PXE客户端(client)这个术语是指机器在PXE启动过程中的角色。一个PXE客户端可以是一台服务器、笔记本电脑或者其他装有PXE启动代码的机器(我们电脑的网卡)。
PXE client是需要安装Linux的计算机,TFTP Server、DHCP Server及HTTPD Server部署在在PXE Server端。Bootstrap文件、配置文件以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下,而ks.cfg 及 系统内核部署在HTTPD server目录。
    10.png
1.pxe client必须支持pxe用户端功能,并且开机时选择网络启动,这样系统才能以网络的方式进入pxe启动程序
2.pxe服务器必须至少提供DHCP及TFTP的服务才行,且其中
    DHCP服务器必须能够除未pxe client分配ip地址外,还需告知tftp所在的位置(即pxelinux.0的文件位置)
    TFTP服务器则为pxe client 提供bootloader 及 kernel 等重要文件下载服务
3.使用NFS/HTTP/FTP之一的服务器提供pxe client所需程序及软件来源等通讯协议
    11.png

kickstart自动化安装实例

安装环境介绍

实验环境以两台VMware虚拟机为例:

虚拟机A:CentOS 6.7系统,作为PXE安装服务器,网络连接到NAT网络,并关闭VMnet8的DHCP服务,IP地址:192.168.87.60/24,网关192.168.87.2/24;

虚拟机B:新建空白虚拟机,作为PXE客户端,网络连接到NAT网络,也可以和虚拟机A一起放在“仅主机”或“桥接”网络(相同即可),移除DVD及其他不用的设备;

在正式进行服务配置前,最好关闭PXE服务器的防火墙和Selinux:

关闭防火墙iptables:


   [root@localhost ~]#iptables -F   

    [root@localhost ~]#service iptables stop

    关闭Selinux:      

   [root@localhost ~]#setenforce 0      

   [root@localhost ~]#vim /etc/selinux/config         

    SELINUX=disabled


配置DHCP服务

PXE启动流程第一阶段需要通过DHCP服务为客户端分配IP地址,指定TFTP服务器地址,指定pxelinux.0引导程序。

   1.      安装DHCP服务

     [root@localhost ~]# yum -y install dhcp

2.      设置DHCP服务开机启动


     [root@localhost ~]#chkconfig --level dhcpd 2345 on         

     [root@localhost ~]#chkconfig --list     dhcpd           

     0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

3.      修改DHCP服务主配置文件


    [root@localhost ~]#vim /etc/dhcp/dhcpd.conf
#响应客户端的启动查询(开机时发送的DHCP请求)
allow booting;
allow bootp;
#不使用DNS动态更新,忽略客户端DNS更新
ddns-update-style none;
ignore client-updates;
#为客户端指定DNS名称和DNS服务器的IP地址
option domain-name-servers 192.168.87.60;
#指定客户端DHCP租期和连接DHCP服务器超时时间即最大租期
default-lease-time 3600;
max-lease-time 7200;
#指定DHCP服务器发送的日志信息的日志级别
log-facility local7;
#子网区域
subnet 192.168.87.0 netmask 255.255.255.0 {
#设置客户端子网掩码
  option subnet-mask 255.255.255.0;
#客户端IP地址池
  range dynamic-bootp 192.168.87.61 192.168.2.200;
#tftp服务器的地址
  next-server 192.168.87.60;
#需要从tftp服务器下载并执行的PXE引导文件
  filename "pxelinux.0";
  default-lease-time 3600;
  max-lease-time 7200;
#指定客户端默认网关IP地址
  option routers 192.168.87.2;
}

4.      重启DHCP服务

    [root@localhost ~]#service dhcpd restart
配置TFTP服务

TFTP服务是一个没有主服务程序的轻量级服务,它依靠系统xinetd守护进程启动。xinetd进程监听不同网络端口,根据端口发送数据到不同的服务进程。在安装好TFTP服务后,xinetd服务就监听UDP的69号端口,将这个端口收到的数据发送给TFTP程序。

1.      安装xinetd和tftp-server

    [root@localhost ~]#yum -y install xinetd tftp-server


2.      设置xinetd服务开机启动


    [root@localhost ~]#chkconfig --level xinetd 345 on

    [root@localhost ~]#chkconfig --list    xinetd         

    0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭   

    基于 xinetd 的服务:

            tftp:           启用

3.      编辑tftp配置文件,开启tftp服务


    [root@localhost ~]#vim /etc/xinetd.d/tftp        

    #将配置文件中disable后面的yes改成no   

    service tftp    {

    ……   

    disable = no   

    ……   

    }

4.      重启xinetd服务

    [root@localhost ~]#service xinetd restart
配置Syslinux及系统引导必须文件

PXE系统启动引导需要一些必须的文件,其中pxelinux.0文件通过安装syslinux包获得;vmlinuz是压缩的可引导、可执行的linux内核文件,initrd.img是“initial ramdisk”,用于临时引导硬件到内核vmlinuz接管,加载文件系统和SCSI设备驱动,这两个文件可以从安装光盘images/pxeboot目录复制;

1.      安装syslinux包,复制引导文件pxelinux.0


    [root@localhost ~]#yum -y install syslinux        

    [root@localhost ~]#locate pxelinux.0   

    /usr/share/syslinux/pxelinux.0   

    #将pxe引导文件复制到TFTP根目录中   

    [root@localhost ~]#cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

2.      挂载CentOS光盘,复制系统引导必须文件


    [root@localhost ~]#mount /dev/cdrom /media/cdrom        

    [root@localhost cdrom]#cp images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/   

    [root@localhost cdrom]#cp isolinux/{vesamenu.c32,boot.msg} /var/lib/tftpboot/

3.      创建系统引导模版文件default


    [root@localhost cdrom]#mkdir /var/lib/tftpboot/pxelinux.cfg        

    [root@localhost cdrom]#cp isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

4.      编辑系统引导模版文件default


    [root@localhost ~]#vim /var/lib/tftpboot/pxelinux.cfg/default        

#需要修改两处
    #第1处:将第一行default后面标签改成linux,表示引导时使用这个标签下指定的内容去查找操作系统的位置
    default linux
    #第2处:找到linux标签,修改inst.stage2和ks后面配置指向FTP服务器
    label linux
      menu label ^Install CentOS 6.7 64bit
      menu default
      kernel vmlinuz
      append initrd=initrd.img inst.stage2=http://192.168.87.1 ks=http://192.168.87.1/ks.cfg quiet

这里我使用的是http,物理机器搭建的nginx,把centos6.7镜像中的文件拷贝至根目录下,以及后面ks.cfg
12.png

配置Kickstart

Kickstart是一种无人值守安装方式,它的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的自动应答脚本文件,在其后的安装过程中,当出现要求填写参数的情况时,安装程序会首先去查找Kickstart生成的文件,当找到合适的参数时,就采用找到的参数;当没有找到合适的参数时,才需要安装者手工干预。这样,如果告诉安装程序ks.cfg文件位置,并且文件涵盖了安装过程中出现的所有需要填写的参数时,就能实现全自动无人值守安装。

1.  在RHEL桌面环境下配置Kickstart


    [root@localhost ~]#yum –y install system-config-kickstart        

    [root@localhost ~]#system-config-kickstart

A:开始设置语言,键盘,时区,Root密码,安装完毕自动重启;

B:设置安装方式(ftp/http/nfs);

C:安装MBR;

D:设置分区;

E:配置网络;

F:认证配置;

G:SELinux 和防火墙配置;

H:软件包安装选择

经过各种设置,最后是生成的ks.cfg文件预览界面, 文件保存在你指定的路径下面

2.  使用系统现有ks.cfg模版文件

在已安装好的CentOS系统root用户家目录,存在一个anaconda.cfg文件即为本系统的自动化应答脚本文件,可以以此为模版进行配置。


    [root@localhost ~]#ls -l anaconda-ks.cfg         

    -rw------- 1 root root 1080 5月  24 11:08 anaconda-ks.cfg

注意:此配置文件权限为其他人不可读,使用前需要设置权限为其他人可读,否则自动化安装时候anaconda程序会报错“找不到ks.cfg文件”。



下面是我自己的ks.cfg配置文件:

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --enabled --ssh --service=ssh
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.87.1/"

# Root password
rootpw --iscrypted $1$lxq5VjGf$7a5/KyjtfEr/5JO1fokNs/
# System authorization information
auth  --useshadow  --passalgo=md5
# Use graphical install
graphical
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone --isUtc Asia/Shanghai
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder="sda"
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --linux --initlabel

part swap --size 1024
part /boot --size 512
part pv.01 --size 18944
volgroup cbh pv.01
logvol / --vgname=cbh --size=18000 --name=root

%post
if [ -f /boot/grub/menu.lst -a ! -h /boot/grub/menu.lst ]; then cp /boot/grub/menu.lst /boot/grub/menu.lst.bak && sed -i 's/ rhgb//' /boot/grub/menu.lst; fi
if [ -f /boot/grub/grub.conf -a ! -h /boot/grub/grub.conf ]; then cp /boot/grub/grub.conf /boot/grub/grub.conf.bak && sed -i 's/ rhgb//' /boot/grub/grub.conf; fi
if [ -f /boot/grub2/grub.conf -a ! -h /boot/grub2/grub.conf ]; then cp /boot/grub2/grub.conf /boot/grub2/grub.conf.bak && sed -i 's/ rhgb//' /boot/grub2/grub.conf; fi
if [ -f /etc/rc.d/rc.local ]; then cp /etc/rc.d/rc.local /etc/rc.d/rc.local.backup; fi
cat >>/etc/rc.d/rc.local <<EOF
#!/bin/bash
echo
echo "Installing VMware Tools, please wait..."
if [ -x /usr/sbin/getenforce ]; then oldenforce=\$(/usr/sbin/getenforce); /usr/sbin/setenforce permissive || true; fi
mkdir -p /tmp/vmware-toolsmnt0
for i in hda sr0 scd0; do mount -t iso9660 /dev/\$i /tmp/vmware-toolsmnt0 && break; done
cp -a /tmp/vmware-toolsmnt0 /opt/vmware-tools-installer
chmod 755 /opt/vmware-tools-installer
cd /opt/vmware-tools-installer
mv upgra32 vmware-tools-upgrader-32
mv upgra64 vmware-tools-upgrader-64
mv upgrade.sh run_upgrader.sh
chmod +x /opt/vmware-tools-installer/*upgr*
umount /tmp/vmware-toolsmnt0
rmdir /tmp/vmware-toolsmnt0
if [ -x /usr/bin/rhgb-client ]; then /usr/bin/rhgb-client --quit; fi
cd /opt/vmware-tools-installer
for s in sr0 sr1; do eject -s /dev/\$s; done
./run_upgrader.sh
if [ -f /etc/rc.d/rc.local.backup ]; then mv /etc/rc.d/rc.local.backup /etc/rc.d/rc.local; else rm -f /etc/rc.d/rc.local; fi
rm -rf /opt/vmware-tools-installer
sed -i 's/3:initdefault/5:initdefault/' /etc/inittab
if [ -f /boot/grub/menu.lst.bak ]; then mv /boot/grub/menu.lst.bak /boot/grub/menu.lst; fi
if [ -f /boot/grub/grub.conf.bak ]; then mv /boot/grub/grub.conf.bak /boot/grub/grub.conf; fi
if [ -f /boot/grub2/grub.conf.bak ]; then mv /boot/grub2/grub.conf.bak /boot/grub2/grub.conf; fi
if [ -x /usr/sbin/getenforce ]; then /usr/sbin/setenforce \$oldenforce || true; fi
if [ -x /bin/systemd ]; then systemctl restart prefdm.service; else telinit 5; fi
EOF
chmod 755 /etc/rc.d/rc.local
if [ -x /bin/systemd ]; then systemctl enable rc-local.service; fi
/usr/sbin/adduser cbh
/usr/sbin/usermod -p '$1$j1y/Sc15$MpcctVsMPlrccVzKAtOC.1' cbh
/usr/bin/chfn -f "cbh" cbh
/bin/echo done
%end

%packages
@base
@chinese-support
@desktop-platform
@general-desktop
@kde-desktop
@x11

%end

3.测试安装

自动化应答脚本文件ks.cfg配置完毕后,初始化一个VMware虚拟机,将网络连接到NAT网络(必须和作为PXE服务器的虚拟机A在同一个网络,并且VMnet8关闭DHCP服务),移除客户端虚拟机B的DVD及其他不用的设备。这里给它的磁盘设置大些,不然在分区的时候,会报错:磁盘分区空间不足,建议设置为100G

启动PXE Client虚拟机B,自动选择从网卡PXE引导,DHCP 服务器开始给客户机分配IP地址,并指定TFTP服务器地址。

211.jpg
                                图 7  加载vmlinuz和initrd.img文件

212.jpg
图 8  启动CentOS6.7安装过程


注意制作kickstart文件时一定要勾选下面三项,否则会出错。

124.png


参考地址:
https://blog.51cto.com/toddliu/2121532
https://www.jianshu.com/p/378b994d3d83






欢迎光临 黑帽联盟 (https://bbs.cnblackhat.com/) Powered by Discuz! X2.5