pxe+kickstart | cobbler 上百台服务器无人值守定制化、差异化安装操作系统环境 + kickstart配置文件详解(全文1万3千字,没有耐心不建议看!)

文章目录

    • 写在开头的话
  • pxe+kickstart | cobbler
    • 00. 前提概述
      • 0.1 需要安装的软件
      • 0.2 软件介绍
      • 0.3 软件起到的作用
      • 0.4 实现过程
      • 0.5 什么是 PXE
      • 0.6 PXE的工作过程
      • 0.7 Kickstart和Cobbler 的介绍
    • 01. 准备工作
      • 1.1 主机环境
      • 1.2 网络配置
      • 1.3 关闭防火墙
      • 1.4 关闭Selinux
      • 1.5 挂载镜像文件,配置yum源为光盘获取
    • 02. 安装所需软件
      • 2.1 安装配置 DHCP
      • 2.2 安装配置xinetd 服务和 tftp 服务
      • 2.3 安装syslinux
      • 2.4 复制引导文件到tftp的主目录下
      • 2.5 安装httpd 服务
      • 2.6 操作系统安装配置文件设置
      • 2.7 设置网络安装
    • 03. 关于ks.cfg文件与kickstart
      • 3.1 ks.cfg 文件详解
      • 3.2 ks脚本演示
      • 3.3 编辑default 文件
      • 3.4 图形化界面设置ks.cfg
    • 04. 关于PXE 配置文件default
    • 05. cobbler 自动部署
      • 5.1 cobbler介绍
      • 5.2 cobbler对应关系
      • 5.3 cobbler集成的服务
      • 5.4 cobbler工作原理
      • 5.5 cobbler安装
      • 5.6 配置cobbler
      • 5.7 `Cobbler`配置安装`Centos7.x`
      • 5.8 cobbler Web管理界面配置
      • 5.9 定制化安装
      • 5.10 到此,自动化安装已经完成,现在测试
    • 写在最后的话:


这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/107751713
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!


写在开头的话

  • 请记住:实践是掌握知识的最快方法
  • 如果你只是怀着看看的态度去快速浏览文章,而不去认认真真的把文章里面讲的任何一个知识点去实践一遍,那么你永远也掌握不了它
  • 生命不息,折腾不止!

pxe+kickstart | cobbler

00. 前提概述

0.1 需要安装的软件

  1. DHCP
  2. http
  3. tftp
  4. xinetd
  5. syslinux
  6. kickstart

0.2 软件介绍

  1. DHCP

DHCPDynamic Host Configuration Protocol,动态主机设置协议)是用于局域网动态分配IP地址的工具,主机发送请求消息给DHCP服务器的68端口,DHCP服务器回应应答消息给主机的67号端口

  1. http

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

  1. tftp

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

  1. xinetd

xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器,常用来管理多种轻量级Internet服务。xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。

  1. syslinux

syslinux是一个功能强大的引导加载程序,而且兼容各种介质。它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。它的安装很简单,一旦安装syslinux好之后,sysLinux启动盘就可以引导各种基于DOS的工具,以及MS-DOS/Windows或者任何其它操作系统。不仅支持采用BIOS结构的主板,而且从6.0版也开始支持采用EFI结构的新型主板。

  1. kickstart

kickstart是一个定义了Linux安装过程的配置文件, 其工作原理是预先把原本需要手工填写的参数保存成一个ks.cfg 文件,当安装过程中出现需要填写参数情况下,安装程序会先找ks.cfg文件,找到合适的参数则自动执行,找不到合适的参数则需要手动填写


0.3 软件起到的作用

  1. PXE作用: 引导装机
  2. Kickstart作用: 将安装系统的过程中通过ks.cfg文件中的配置信息,实现自动安装配置达到无人值守自动安装;
  3. TFTP: 支持PXE 引导的网卡中从tftp服务器端下载pxelinux.0文件、vmlinuzinitrd.img等内核引导文件;
  4. DHCPPXE引导过程中获首先获取IP地址,并提供pxelinux.0文件位置;
  5. HTTP: 用于下载ks.cfg以及系统镜像文件

0.4 实现过程

  1. 客户端(没有装系统的计算机)通过在局域网内寻找DHCP服务器
  2. DHCP服务器回应,发送IP地址给该客户端并且告诉该客户端下一步寻找哪一个服务器,也就是TFTP
  3. 客户端向TFTPBootLoader
  4. TFTP服务器将pxelinux.0相关文件交给客户端
  5. 客户端向TFTP服务器要内核文件和initrd.img
  6. TFTP将这两个文件路径告诉客户端
  7. 客户端通过TFTP提供的路径向http服务要ks.cfg(自应答文件)
  8. 客户端根据ks.cfg文件中指定的安装路径寻找安装所需要的文件

0.5 什么是 PXE

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

0.6 PXE的工作过程

  1. PXE ClientDHCP发送请求 PXE Client从自己的PXE网卡启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP

  2. DHCP服务器提供信息 DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。

  3. PXE客户端请求下载启动文件 客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0pxelinux.cfg/defaultvmlinuzinitrd.img等文件。

  4. Boot Server响应客户端请求并传送文件 当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROMTFTP通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。

  5. 请求下载自动应答文件 客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。

    这里有个问题,在第2步和第5步初始化2次网络了,这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。因此PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序,从而进行两次获取IP地址过程,但IP地址在DHCP的租期内是一样的。

  6. 客户端安装操作系统 将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。 OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。


0.7 Kickstart和Cobbler 的介绍

  • Redhat系主要有两种KickstartCobbler

  • Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。

  • Cobbler集中和简化了通过网络安装操作系统需要使用到的DHCPTFTPDNS服务的配置。Cobbler不仅有一个命令行界面,还提供了一个Web界面,大大降低了使用者的入门水平。Cobbler内置了一个轻量级配置管理系统,而且它也支持和其它配置管理系统集成,如Puppet,暂时不支持SaltStack

简单的说,Cobbler是对kickstart的封装,简化安装步骤、使用流程,降低使用者的门槛。

01. 准备工作

1.1 主机环境

  • 主机环境说明
[root@idys ~] cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)
[root@idys ~] uname -r
3.10.0-1062.el7.x86_64
[root@idys ~] uname -m
x86_64

1.2 网络配置

  1. 虚拟机上的虚拟网络编辑器上关闭本地DHCP服务
  2. 克隆一台虚拟机
  3. 编辑网卡文件,删除UUID,修改ip,子网掩码,dnsONBOOT,网关,ip获取方式static
[root@idys ~] vi /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens32"
DEVICE="ens32"
ONBOOT="yes"
IPADDR="192.168.200.172"
PREFIX="24"
GATEWAY="192.168.200.2"
DNS1="114.114.114.114"
DNS2="8.8.8.8"
IPV6_PRIVACY="no"
  1. 重启网卡
[root@idys ~] systemctl restart network
  1. 查看网络是否为开机自启动
[root@idys ~] chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
  1. 查看网络运行状态
[root@idys ~] systemctl status network 
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
   Active: active (exited) since Fri 2020-07-31 18:08:34 CST; 7min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1719 ExecStop=/etc/rc.d/init.d/network stop (code=exited, status=0/SUCCESS)
  Process: 1874 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=0/SUCCESS)

Jul 31 18:08:34 idys.com systemd[1]: Starting LSB: Bring up/down networki....
Jul 31 18:08:34 idys.com network[1874]: Bringing up loopback interface:  ...]
Jul 31 18:08:34 idys.com network[1874]: Bringing up interface ens32:  Con...)
Jul 31 18:08:34 idys.com network[1874]: [  OK  ]
Jul 31 18:08:34 idys.com systemd[1]: Started LSB: Bring up/down networking.
Hint: Some lines were ellipsized, use -l to show in full.

1.3 关闭防火墙

  1. 查看防火墙运行状态
[root@idys ~] systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-07-31 17:58:38 CST; 20min ago
     Docs: man:firewalld(1)
 Main PID: 640 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─640 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid...

Jul 31 17:58:37 idys.com systemd[1]: Starting firewalld - dynamic firewal....
Jul 31 17:58:38 idys.com systemd[1]: Started firewalld - dynamic firewall....
Hint: Some lines were ellipsized, use -l to show in full.
  1. 关闭防火墙
[root@idys ~] systemctl stop firewalld 
  1. 关闭防火墙开机自启动
[root@idys ~] systemctl disable firewalld
  1. 再次查看防火墙的运行状态
[root@idys ~] systemctl status firewalld 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

Jul 31 17:58:37 idys.com systemd[1]: Starting firewalld - dynamic firewal....
Jul 31 17:58:38 idys.com systemd[1]: Started firewalld - dynamic firewall....
Jul 31 18:18:53 idys.com systemd[1]: Stopping firewalld - dynamic firewal....
Jul 31 18:18:53 idys.com systemd[1]: Stopped firewalld - dynamic firewall....
Hint: Some lines were ellipsized, use -l to show in full.

1.4 关闭Selinux

  1. 查看Selinux的运行状态:发现其属于运行状态
[root@idys ~] getenforce 
Enforcing
  1. 关闭Selinux
[root@idys ~] setenforce 0
  1. 再次查看Selinux,发现它已经关闭
[root@idys ~] getenforce 
Permissive
  1. 设置Selinux永久关闭(不再开机自启动)
[root@idys ~] vi /etc/selinux/config 
SELINUX=disabled

1.5 挂载镜像文件,配置yum源为光盘获取

  1. 挂载光盘
[root@idys yum.repos.d] vim /etc/fstab  # 添加如下内容,让光盘自动开机挂载
UUID=2019-09-09-19-08-41-00               /media/cdrom            iso9660 defaults        0 0
[root@idys yum.repos.d] mount -a  # 检测fstab文件,然后自动挂载
mount: /dev/sr0 is write-protected, mounting read-only
  1. 配置yum源的,光盘镜像
[root@idys yum.repos.d] vi CentOS-Media.repo 
[c7-media]
name=CentOS-$releasever - Media
baseurl= file:///media/cdrom/  # 设置光盘源的位置
# file:///media/CentOS/
# file:///media/cdrecorder/
gpgcheck=1
enabled=1  # enable 设置为 1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

  1. yum网络源文件删除
[root@idys yum.repos.d] mv CentOS-Base.repo CentOS-Base.repo.bak

  1. 删除原来的缓存,然后生成缓存
[root@idys yum.repos.d] yum clean all
Loaded plugins: fastestmirror
Cleaning repos: c7-media
[root@idys yum.repos.d] yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
c7-media                                              | 3.6 kB     00:00     
(1/4): c7-media/group_gz                                | 165 kB   00:00     
(2/4): c7-media/primary_db                              | 6.0 MB   00:00     
(3/4): c7-media/filelists_db                            | 7.3 MB   00:00     
(4/4): c7-media/other_db                                | 2.6 MB   00:00  

02. 安装所需软件

2.1 安装配置 DHCP

  1. 安装DHCP服务
[root@idys yum.repos.d] yum -y install dhcp
  1. 配置DHCP
[root@idys yum.repos.d] vim /etc/dhcp/dhcpd.conf  # 添加如下内容
allow booting;                                        #==》是否响应使用者查询
allow bootp;                                          #==》是否响应激活查询
ddns-update-style interim;                            #==》配置DHCP-DNS 互动更新模式
ignore client-updates;
subnet 192.168.200.0 netmask 255.255.255.0 {
     
        range dynamic-bootp 192.168.200.180 192.168.200.250;    #==》指定IP地址池
        option subnet-mask 255.255.255.0;             #==》指定子网掩码
        option domain-name-servers 192.168.200.172;         #==》指定DNS服务器IP地址
        default-lease-time 21600;                     #==》指定默认租约时间,单位秒
        max-lease-time 43200;                         #=》最大租约时间,单位秒
        next-server 192.168.200.172;                  #=》设置服务器从引导文件中安装的位置
        filename "pxelinux.0";                        #=》开始启动文件名称
}
  1. 开启DHCP服务,同时设置DHCP开机自启动
[root@idys yum.repos.d] systemctl status dhcpd  # 查看DHCP服务启动状态
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
[root@idys yum.repos.d] systemctl start dhcpd  #开启 dhcp服务
[root@idys yum.repos.d] systemctl enable dhcpd  # 设置 dhcp服务,开机自启动
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

2.2 安装配置xinetd 服务和 tftp 服务

  1. 安装xinetd服务
[root@idys yum.repos.d] yum -y install xinetd
  1. 安装tftp服务
[root@idys yum.repos.d] yum -y install tftp-server
  1. 配置tftp
[root@idys yum.repos.d] vi /etc/xinetd.d/tftp 
# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
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,开启tftp服务
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
  1. 开始xinetd服务,同时设置为开机自启动
[root@idys yum.repos.d] systemctl start xinetd
[root@idys yum.repos.d] systemctl enable xinetd
  1. 查看开机自启动状态
[root@idys yum.repos.d] chkconfig --list
****
        tftp:           on
****

2.3 安装syslinux

  1. 安装syslinux
[root@idys yum.repos.d] yum -y install syslinux
  1. 查看syslinux软件安装文件的位置
[root@idys yum.repos.d] rpm -ql syslinux  
/usr/bin/gethostip
/usr/bin/isohybrid
/usr/bin/memdiskfind
/usr/bin/syslinux
/usr/share/doc/syslinux-4.05
/usr/share/doc/syslinux-4.05/COPYING
/usr/share/doc/syslinux-4.05/CodingStyle.txt
/usr/share/doc/syslinux-4.05/NEWS
/usr/share/doc/syslinux-4.05/README
/usr/share/doc/syslinux-4.05/SubmittingPatches.txt
/usr/share/doc/syslinux-4.05/comboot.txt
/usr/share/doc/syslinux-4.05/distrib.txt
/usr/share/doc/syslinux-4.05/extlinux.txt
/usr/share/doc/syslinux-4.05/gpt.txt
/usr/share/doc/syslinux-4.05/isolinux.txt
/usr/share/doc/syslinux-4.05/keytab-lilo.txt
/usr/share/doc/syslinux-4.05/logo
/usr/share/doc/syslinux-4.05/logo/syslinux-100.png
/usr/share/doc/syslinux-4.05/mboot.txt
/usr/share/doc/syslinux-4.05/memdisk.txt
/usr/share/doc/syslinux-4.05/menu.txt
/usr/share/doc/syslinux-4.05/pxelinux.txt
/usr/share/doc/syslinux-4.05/rfc5071.txt
/usr/share/doc/syslinux-4.05/sample
/usr/share/doc/syslinux-4.05/sample/Makefile
/usr/share/doc/syslinux-4.05/sample/m16-640x640-syslinux.jpg
/usr/share/doc/syslinux-4.05/sample/sample.msg
/usr/share/doc/syslinux-4.05/sample/syslinux_splash.jpg
/usr/share/doc/syslinux-4.05/sample/syslogo.lss
/usr/share/doc/syslinux-4.05/sample/syslogo.ppm.gz
/usr/share/doc/syslinux-4.05/sdi.txt
/usr/share/doc/syslinux-4.05/syslinux.txt
/usr/share/doc/syslinux-4.05/usbkey.txt
/usr/share/man/man1/gethostip.1.gz
/usr/share/man/man1/isohybrid.1.gz
/usr/share/man/man1/memdiskfind.1.gz
/usr/share/man/man1/syslinux.1.gz
/usr/share/man/man1/syslinux2ansi.1.gz
/usr/share/syslinux
/usr/share/syslinux/altmbr.bin
/usr/share/syslinux/altmbr_c.bin
/usr/share/syslinux/altmbr_f.bin
/usr/share/syslinux/cat.c32
/usr/share/syslinux/chain.c32
/usr/share/syslinux/cmd.c32
/usr/share/syslinux/config.c32
/usr/share/syslinux/cpuid.c32
/usr/share/syslinux/cpuidtest.c32
/usr/share/syslinux/diag
/usr/share/syslinux/diag/geodsp1s.img.xz
/usr/share/syslinux/diag/geodspms.img.xz
/usr/share/syslinux/diag/handoff.bin
/usr/share/syslinux/disk.c32
/usr/share/syslinux/dmitest.c32
/usr/share/syslinux/dosutil
/usr/share/syslinux/dosutil/copybs.com
/usr/share/syslinux/dosutil/eltorito.sys
/usr/share/syslinux/dosutil/mdiskchk.com
/usr/share/syslinux/elf.c32
/usr/share/syslinux/ethersel.c32
/usr/share/syslinux/gfxboot.c32
/usr/share/syslinux/gptmbr.bin
/usr/share/syslinux/gptmbr_c.bin
/usr/share/syslinux/gptmbr_f.bin
/usr/share/syslinux/gpxecmd.c32
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/gpxelinuxk.0
/usr/share/syslinux/hdt.c32
/usr/share/syslinux/host.c32
/usr/share/syslinux/ifcpu.c32
/usr/share/syslinux/ifcpu64.c32
/usr/share/syslinux/ifplop.c32
/usr/share/syslinux/int18.com
/usr/share/syslinux/isohdpfx.bin
/usr/share/syslinux/isohdpfx_c.bin
/usr/share/syslinux/isohdpfx_f.bin
/usr/share/syslinux/isohdppx.bin
/usr/share/syslinux/isohdppx_c.bin
/usr/share/syslinux/isohdppx_f.bin
/usr/share/syslinux/isolinux-debug.bin
/usr/share/syslinux/isolinux.bin
/usr/share/syslinux/kbdmap.c32
/usr/share/syslinux/linux.c32
/usr/share/syslinux/ls.c32
/usr/share/syslinux/lua.c32
/usr/share/syslinux/mboot.c32
/usr/share/syslinux/mbr.bin
/usr/share/syslinux/mbr_c.bin
/usr/share/syslinux/mbr_f.bin
/usr/share/syslinux/memdisk
/usr/share/syslinux/memdump.com
/usr/share/syslinux/meminfo.c32
/usr/share/syslinux/menu.c32
/usr/share/syslinux/pcitest.c32
/usr/share/syslinux/pmload.c32
/usr/share/syslinux/poweroff.com
/usr/share/syslinux/pwd.c32
/usr/share/syslinux/pxechain.com
/usr/share/syslinux/pxelinux.0
/usr/share/syslinux/reboot.c32
/usr/share/syslinux/rosh.c32
/usr/share/syslinux/sanboot.c32
/usr/share/syslinux/sdi.c32
/usr/share/syslinux/sysdump.c32
/usr/share/syslinux/syslinux.com
/usr/share/syslinux/syslinux.exe
/usr/share/syslinux/syslinux64.exe
/usr/share/syslinux/ver.com
/usr/share/syslinux/vesainfo.c32
/usr/share/syslinux/vesamenu.c32
/usr/share/syslinux/vpdtest.c32
/usr/share/syslinux/whichsys.c32
/usr/share/syslinux/zzjson.c32

2.4 复制引导文件到tftp的主目录下

  1. 复制/usr/share/syslinux/下的pxelinux.0文件到/var/lib/tftpboot/
[root@idys yum.repos.d] cp -a /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
  1. 复制/media/cdrom/images/pxeboot/下的initrd.imgvmlinuz文件到/var/lib/tftpboot
[root@idys yum.repos.d] cp -a /media/cdrom/images/pxeboot/{
     initrd.img,vmlinuz} /var/lib/tftpboot/
  1. 复制系统光盘下的boot.msgvesamenu.c32文件到/var/lib/tftpboot
[root@idys yum.repos.d] cp -a /media/cdrom/isolinux/{
     boot.msg,vesamenu.c32} /var/lib/tftpboot/
  1. tftp主目录下创建pxelinux.cfg目录
[root@idys yum.repos.d] mkdir /var/lib/tftpboot/pxelinux.cfg
  1. 复制系统光盘下的isolinux.cfg文件到pxelinux.cfg目录下
[root@idys yum.repos.d] cp -a /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/
  1. 改名
[root@idys yum.repos.d] cd /var/lib/tftpboot/pxelinux.cfg/
[root@idys pxelinux.cfg] ls
isolinux.cfg
[root@idys pxelinux.cfg] mv isolinux.cfg default
  1. 修改default文件
[root@idys pxelinux.cfg] vim default 
default linux  # 第一行把 default vesamenu.c32 改为  default linux
#default vesamenu.c32  

label linux
  menu label ^Install CentOS 7
  kernel vmlinuz
  append initrd=initrd.img ks=http://192.168.200.172/ks.cfg  # 加上这一行,把下面一行注释掉
# append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet

2.5 安装httpd 服务

  1. 安装httpd服务
[root@idys pxelinux.cfg] yum -y install httpd
  1. 设置开启服务。同时设置,开机自启动。
[root@idys pxelinux.cfg] systemctl start httpd
[root@idys pxelinux.cfg] systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

2.6 操作系统安装配置文件设置

  1. /root/目录下复制anaconda-ks.cfg文件到/var/www/html下,改名为ks.cfg
[root@idys pxelinux.cfg] cp -a  ~/anaconda-ks.cfg /var/www/html/ks.cfg  
  1. 修改ks.cfg
# 将开头的cdrom 修改为 url --url=http://192.168.200.172/cdrom
[root@idys pxelinux.cfg] vim /var/www/html/ks.cfg 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
url --url=http://192.168.200.172/cdrom
# Use graphical install
*******************
  1. 设置权限
[root@idys pxelinux.cfg] chown apache:apache /var/www/html/ks.cfg 
  1. 挂载镜像到http主目录下的cdrom目录下
[root@idys html] blkid /dev/sr0   # 查看CD光盘信息
/dev/sr0: UUID="2019-09-09-19-08-41-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"  
[root@idys cdrom] vim /etc/fstab  # 编辑系统挂载文件,添加如下行
UUID=2019-09-09-19-08-41-00               /var/www/html/cdrom     iso9660 defaults        0 0
[root@idys html] mount -a  # 重新检测挂载

这个时候已经可以可以自动化安装操作系统了,如果安装过程出错,可以通过Alt+F2-F5切到其他控制台查看报错信息


2.7 设置网络安装

  • 现在我们要开始自动安装操作系统了,再次之前,我们需要设置安装方式为网络

pxe+kickstart | cobbler 上百台服务器无人值守定制化、差异化安装操作系统环境 + kickstart配置文件详解(全文1万3千字,没有耐心不建议看!)_第1张图片


03. 关于ks.cfg文件与kickstart

  • 通常,我们在安装操作系统的过程中,需要大量的和服务器交互操作,为了减少这个交互过程,kickstart就诞生了。使用这种kickstart,只需事先定义好一个Kickstart自动应答配置文件ks.cfg(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了在安装过程中多次的人机交互,从而实现无人值守的自动化安装。

  • 生成kickstart配置文件的三种方法:

  1. 方法1、 每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于/root/anaconda-ks.cfg
  2. 方法2、Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。kickstart配置工具命令为redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4,RHEL5)网上有很多用CentOS桌面版生成ks文件的文章,如果有现成的系统就没什么可说。但没有现成的,也没有必要去用桌面版,命令行也很简单
  3. 方法3、阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置文件。

3.1 ks.cfg 文件详解

  • 命令段 键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项

  • 软件包段

%packages
@groupname:指定安装的包组
package_name:指定安装的包
-package_name:指定不安装的包

在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。

  • 脚本段(可选)
%pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)
%post:安装系统后执行的命令或脚本(基本支持所有命令)
  • 参数说明
关键字 含义
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]中的一种,缺省值是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关机。

3.2 ks脚本演示

  • 脚本1演示
[root@linux-node1 ~]# vim /var/www/html/ks_config/CentOS-6.7-ks.cfg
# Kickstart Configurator for CentOS 6.7 by idys
install
url --url="http://10.0.0.7/CentOS-6.7/"
text
lang en_US.UTF-8
keyboard us
zerombr
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
rootpw  --iscrypted $6$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/
clearpart --all --initlabel
part /boot --fstype=ext4 --asprimary --size=200
part swap --size=1024
part / --fstype=ext4 --grow --asprimary --size=200
firstboot --disable
selinux --disabled
firewall --disabled
logging --level=info
reboot
%packages
@base
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet

%post
wget -O /tmp/optimization.sh http://10.0.0.7/ks_config/optimization.sh &>/dev/null
/bin/sh /tmp/optimization.sh  # 代表之后执行一个脚本
%end

  • 脚本2演示
# Kickstart file automatically generated by anaconda.

install

url --url=http://192.168.21.128/os/

lang en_US.UTF-8

zerombr yes

key --skip

keyboard us

network --device eth0 --bootproto dhcp --onboot on

#network --device eth0 --bootproto static --ip 192.168.21.250 --netmask 255.255.255.0 --gateway 192.168.21.2 --nameserver 8.8.8.8 --hostname CentOS5.10

rootpw --iscrypted $1$QqobZZ1g$rYnrawi9kYlEeUuq1vcRS/

firewall --enabled --port=22:tcp

authconfig --enableshadow --enablemd5

selinux --disabled

timezone Asia/Shanghai

bootloader --location=mbr --driveorder=sda

# The following is the partition information you requested

# Note that any partitions you deleted are not expressed

# here so unless you clear all partitions first, this is

# not guaranteed to work

#clearpart --linux

clearpart --all --initlabel

part / --bytes-per-inode=4096 --fstype="ext3" --size=2048

part /boot --bytes-per-inode=4096 --fstype="ext3" --size=128

part swap --bytes-per-inode=4096 --fstype="swap" --size=500

part /data --bytes-per-inode=4096 --fstype="ext3" --grow --size=1

reboot

%packages

ntp

expect

@base

@core

@dialup

@editors

@text-internet

keyutils

trousers

fipscheck

device-mapper-multipath

%post

#同步系统时间

ntpdate cn.pool.ntp.org

hwclock --systohc

echo -e "0 1 * * * root /usr/sbin/ntpdate cn.pool.ntp.org > /dev/null" >> /etc/crontab

service crond restart

#添加用户组

groupadd maintain

groupadd develop

mkdir -p /home/maintain

mkdir -p /home/develop

#添加用户

useradd -g maintain user01 -d /home/maintain/user01 -m

echo "123456"|passwd user01 --stdin

useradd -g maintain user02 -d /home/maintain/user02 -m

echo "123456"|passwd user02 --stdin

useradd -g maintain user03 -d /home/maintain/user03 -m

echo "123456"|passwd user03 --stdin

useradd -g maintain user04 -d /home/maintain/user04 -m

echo "123456"|passwd user04 --stdin

#禁止root用户直接登录系统

sed -i "s/#PermitRootLogin yes/PermitRootLogin no/g" '/etc/ssh/sshd_config'

service sshd restart

#禁止开机启动的服务

chkconfig acpid off

chkconfig atd off

chkconfig autofs off

chkconfig bluetooth off

chkconfig cpuspeed off

chkconfig firstboot off

chkconfig gpm off

chkconfig haldaemon off

chkconfig hidd off

chkconfig ip6tables off

chkconfig isdn off

chkconfig messagebus off

chkconfig nfslock off

chkconfig pcscd off

chkconfig portmap off

chkconfig rpcgssd off

chkconfig rpcidmapd off

chkconfig yum-updatesd off

chkconfig sendmail off

#允许开机启动的服务

chkconfig crond on

chkconfig kudzu on

chkconfig network on

chkconfig readahead_early on

chkconfig sshd on

chkconfig syslog on

#禁止使用Ctrl+Alt+Del快捷键重启服务器

sed -i "s/ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/#ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/g" '/etc/inittab'

telinit q

#优化系统内核

echo -e "ulimit -c unlimited" >> /etc/profile

echo -e "ulimit -s unlimited" >> /etc/profile

echo -e "ulimit -SHn 65535" >> /etc/profile

source /etc/profile

sed -i "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g" '/etc/sysctl.conf'

echo -e "net.core.somaxconn = 262144" >> /etc/sysctl.conf

echo -e "net.core.netdev_max_backlog = 262144" >> /etc/sysctl.conf

echo -e "net.core.wmem_default = 8388608" >> /etc/sysctl.conf

echo -e "net.core.rmem_default = 8388608" >> /etc/sysctl.conf

echo -e "net.core.rmem_max = 16777216" >> /etc/sysctl.conf

echo -e "net.core.wmem_max = 16777216" >> /etc/sysctl.conf

echo -e "net.ipv4.netfilter.ip_conntrack_max = 131072" >> /etc/sysctl.conf

echo -e "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180" >> /etc/sysctl.conf

echo -e "net.ipv4.route.gc_timeout = 20" >> /etc/sysctl.conf

echo -e "net.ipv4.ip_conntrack_max = 819200" >> /etc/sysctl.conf

echo -e "net.ipv4.ip_local_port_range = 10024 65535" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_retries2 = 5" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_syn_retries = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_synack_retries = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_timestamps = 0" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_tw_len = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_keepalive_time = 120" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_keepalive_probes = 3" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_keepalive_intvl = 15" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_max_tw_buckets = 36000" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_max_orphans = 3276800" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_max_syn_backlog = 262144" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_wmem = 8192 131072 16777216" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_rmem = 32768 131072 16777216" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_mem = 94500000 915000000 927000000" >> /etc/sysctl.conf

/sbin/sysctl -p

#执行外部脚本

cd /root

wget http://192.168.21.128/autoip.sh

sh /root/autoip.sh

3.3 编辑default 文件

  • 内容如下
# 最精简配置
[root@linux-node1 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default ks
prompt 0  # 开启会显示命令行'boot: '提示符。prompt值为0时则不提示,将会直接启动'default'参数中指定的内容。

label ks
  kernel vmlinuz
  append initrd=initrd.img ks=http://10.0.0.7/ks_config/CentOS-6.7-ks.cfg # 告诉安装程序ks.cfg文件在哪里

# append initrd=initrd.img ks=http://10.0.0.7/ks_config/CentOS-6.7-ks.cfg ksdevice=eth0
# ksdevice=eth0代表当客户端有多块网卡的时候,要实现自动化需要设置从eth1安装,不指定的话,安装的时候系统会让你选择,那就不叫全自动化了。

3.4 图形化界面设置ks.cfg

  • 首先我们应该安装GNOME图形界面,因为只要这样我们才能使用system-config-kickstart工具
[root@idys html] yum groupinstall -y "X Window System"
[root@idys html] yum grouplist   # 查看软件包组
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Installed Environment Groups:
   GNOME Desktop
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
   Server with GUI
   KDE Plasma Workspaces
   Development and Creative Workstation
Installed Groups:
   Graphical Administration Tools
Available Groups:
   Compatibility Libraries
   Console Internet Tools
   Development Tools
   Legacy UNIX Compatibility
   Scientific Support
   Security Tools
   Smart Card Support
   System Administration Tools
   System Management
Done
[root@idys html] yum -y groupinstall "Graphical Administration Tools" "GNOME Desktop" #安装GNOME 桌面
[root@idys html] yum -y install system-config-kickstart  # 安装kickstart 图形化配置界面
[root@idys html] system-config-kickstart  # 启动图形化的界面配置ks.cfg文件

  • 接下来便可以通过图形界面设置ks.cfg

pxe+kickstart | cobbler 上百台服务器无人值守定制化、差异化安装操作系统环境 + kickstart配置文件详解(全文1万3千字,没有耐心不建议看!)_第2张图片


04. 关于PXE 配置文件default

由于多个客户端可以从一个PXE服务器引导,PXE引导映像使用了一个复杂的配置文件搜索方式来查找针对客户机的配置文件。如果客户机的网卡的MAC地址为8F:3H:AA:6B:CC:5D,对应的IP地址为10.0.0.195,那么客户机首先尝试以MAC地址为文件名匹配的配置文件,如果不存在就以IP地址来查找。根据上述环境针对这台主机要查找的以一个配置文件就是 /tftpboot/pxelinux.cfg/01-8F:3H:AA:6B:CC:5D。如果该文件不存在,就会根据IP地址来查找配置文件了,这个算法更复杂些,PXE映像查找会根据IP地址16进制命名的客户机配置文件。例如:10.0.0.195对应的16进制的形式为C0A801C3。(可以通过syslinux软件包提供的gethostip命令将10进制的IP转换为16进制)

如果C0A801C3文件不存在,就尝试查找C0A801C文件,如果C0A801C也不存在,那么就尝试C0A801文件,依次类推,直到查找C文件,如果C也不存在的话,那么最后尝试default文件。

总体来说,pxelinux搜索的文件的顺序是:

/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/tftpboot/pxelinux.cfg/C0A801C3
/tftpboot/pxelinux.cfg/C0A801C
/tftpboot/pxelinux.cfg/C0A801
/tftpboot/pxelinux.cfg/C0A80
/tftpboot/pxelinux.cfg/C0A8
/tftpboot/pxelinux.cfg/C0A
/tftpboot/pxelinux.cfg/C0
/tftpboot/pxelinux.cfg/C
/tftpboot/pxelinux.cfg/default
  • 应用:如果已经从厂商获取了服务器MAC地址,就可以差异化定制安装服务器了。

05. cobbler 自动部署

5.1 cobbler介绍

  1. Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCPDNS等。
  2. Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用。
  3. Cobbler是较早前的kickstart的升级版,优点是比较容易配置,还自带web界面比较易于管理。
  4. Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成,如Puppet

5.2 cobbler对应关系

  • 图片演示

pxe+kickstart | cobbler 上百台服务器无人值守定制化、差异化安装操作系统环境 + kickstart配置文件详解(全文1万3千字,没有耐心不建议看!)_第3张图片

Cobbler的配置结构基于一组注册的对象。每个对象表示一个与另一个实体相关联的实体。当一个对象指向另一个对象时,它就继承了被指向对象的数据,并可覆盖或添加更多特定信息。

  • 发行版(distros): 表示一个操作系统。它承载了内核和initrd的信息,以及内核参数等其他数据。
  • 配置文件(profiles):包含一个发行版、一个kickstart文件以及可能的存储库,还包括更多特定的内核参数等其他数据。
  • 系统(systems):表示要配给的机器。它包括一个配置文件或一个镜像、IPMAC地址、电源管理(地址、凭据、类型)以及更为专业的数据等信息。
  • 镜像(images):可以替换一个保函不屑于此类别的文件的发行版对象(例如,无法分为内核和initrd的对象)。

5.3 cobbler集成的服务

  • PXE服务支持
  • DHCP服务管理
  • DNS服务管理
  • 电源管理
  • Kickstart服务支持
  • YUM仓库管理
  • TFTP
  • Apache

5.4 cobbler工作原理

  • 图片演示

pxe+kickstart | cobbler 上百台服务器无人值守定制化、差异化安装操作系统环境 + kickstart配置文件详解(全文1万3千字,没有耐心不建议看!)_第4张图片


Server端

  • 启动Cobbler服务
  • 进行Cobbler错误检查,执行cobbler check命令
  • 进行配置同步,执行cobbler sync命令
  • 复制相关启动文件到TFTP目录中
  • 启动DHCP服务,提供地址分配
  • DHCP服务分配IP地址
  • TFTP传输启动文件
  • Server端接收安装信息
  • Server端发送ISO镜像与Kickstart文件

Client端

  • 客户端以PXE模式启动
  • 客户端获取IP地址
  • 通过TFTP服务器获取启动文件
  • 进入Cobbler安装选择界面
  • 根据配置信息准备安装系统
  • 加载Kickstart文件
  • 传输系统安装的其它文件
  • 进行安装系统

5.5 cobbler安装

  • 主要虚拟机关闭 DHCP服务,网卡设置为NAT模式,或者仅主机
  1. 网络环境
[root@idys ~] cat /etc/redhat-release    #CentOS 7.7 的操作系统
CentOS Linux release 7.7.1908 (Core)
[root@idys ~] uname -r   # 3.10 的内核
3.10.0-1062.el7.x86_64
[root@idys ~] uname -m   
x86_64

  1. 从虚拟机克隆出一台新的机器出来,设置网卡,删除uuid,设置其他选项
[root@idys ~] vi /etc/sysconfig/network-scripts/ifcfg-ens32 
TYPE="Ethernet"
PROXY_METHOD="static"
# 将网络获取方式设置为 static
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens32"
DEVICE="ens32"
# 删除UUID
ONBOOT="yes"
# 设置网卡开机自启动
IPADDR="192.168.200.171"
# 修改ip地址
PREFIX="24"
GATEWAY="192.168.200.2"
# 修改网关
DNS1="114.114.114.114"
DNS2="8.8.8.8"
# 设置dns
IPV6_PRIVACY="no"
  1. 关闭防火墙、SElinux,挂载CentOS7镜像文件,更换镜像源
[root@idys ~] systemctl stop firewalld    # 关闭防火墙
[root@idys ~] systemctl disable firewalld   #设置开机不自动启动
[root@idys ~] setenforce 0   # 临时关闭Selinux
[root@idys ~] getenforce 
Permissive
[root@idys ~] sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config   #永久关闭selinux
[root@idys ~] blkid /dev/sr0 
/dev/sr0: UUID="2019-09-09-19-08-41-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"     # 查看镜像挂载情况
[root@idys ~] vi /etc/fstab    # 编辑镜像文件,将Centos7 的系统盘挂载在/media/cdrom下

#
# /etc/fstab
# Created by anaconda on Mon May 18 18:18:33 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=64dc3aa5-03c8-4087-a410-5d324b56dcb9 /                       xfs     defaults        0 0
UUID=f5da9f3b-36f9-4be9-b435-8f05c36aa437 /boot                   xfs     defaults        0 0
UUID=8b92b2a4-2545-413a-944a-ce22c851feec swap                    swap    defaults        0 0
UUID=2019-09-09-19-08-41-00               /media/cdrom            iso9660 defaults        0 0
[root@idys ~] mount -a     #  重新挂载
mount: /dev/sr0 is write-protected, mounting read-only
# 更换为中科大镜像源
[root@idys ~] sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
         -i.bak \
         /etc/yum.repos.d/CentOS-Base.repo
[root@idys ~] yum clean all   #清楚缓存
Loaded plugins: fastestmirror
Cleaning repos: base extras updates
[root@idys ~] yum makecache    # 重新编译缓存
  1. 配置epel源,安装cobbler及其组件
[root@idys ~] yum -y install epel-release     #配置epel源
[root@idys ~] yum -y install cobbler cobbler-web tftp-server dhcp httpd xinetd pykickstart

*************************************************
  rsync.x86_64 0:3.1.2-10.el7                                                                  
  syslinux.x86_64 0:4.05-15.el7                                                                
  yum-utils.noarch 0:1.1.31-54.el7_8                                                           

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       libxml2.x86_64 0:2.9.1-6.el7.4                 

Complete!
#安装 cobbler cobbler-web tftp-server dhcp httpd xinetd pykickstart
[root@linux-node1 ~]# rpm -ql cobbler  # 查看安装的文件,下面列出部分。
/etc/cobbler                  # 配置文件目录
/etc/cobbler/settings         # cobbler主配置文件,这个文件是YAML格式,Cobbler是python写的程序。
********
/etc/cobbler/dhcp.template    # DHCP服务的配置模板
/etc/cobbler/tftpd.template   # tftp服务的配置模板
/etc/cobbler/rsync.template   # rsync服务的配置模板
/etc/cobbler/iso              # iso模板配置文件目录
/etc/cobbler/pxe              # pxe模板文件目录
/etc/cobbler/power            # 电源的配置文件目录
/etc/cobbler/users.conf       # Web服务授权配置文件
/etc/cobbler/users.digest     # 用于web访问的用户名密码配置文件
/etc/cobbler/dnsmasq.template # DNS服务的配置模板
/etc/cobbler/modules.conf     # Cobbler模块配置文件
****************
/var/lib/cobbler              # Cobbler数据目录
/var/lib/cobbler/config       # 配置文件
/var/lib/cobbler/kickstarts   # 默认存放kickstart文件
/var/lib/cobbler/loaders      # 存放的各种引导程序
**************
/var/www/cobbler              # 系统安装镜像目录
/var/www/cobbler/ks_mirror    # 导入的系统镜像列表
/var/www/cobbler/images       # 导入的系统镜像启动文件
/var/www/cobbler/repo_mirror  # yum源存储目录
*************
/var/log/cobbler              # 日志目录
/var/log/cobbler/install.log  # 客户端系统安装日志
/var/log/cobbler/cobbler.log  # cobbler日志
  1. 启动Cobblerhttpd服务
[root@idys ~] systemctl start httpd cobblerd
[root@idys ~] 
[root@idys ~] systemctl enable httpd cobblerd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/cobblerd.service to /usr/lib/systemd/system/cobblerd.service.

5.6 配置cobbler

检查Cobbler的配置,如果看不到下面的结果,再次重启cobblersystemctl restart cobbler

  1. 配置cobbler的配置文件
[root@idys ~] cp /etc/cobbler/settings{
     ,.ori}
  1. 设置动态修改配置文件
[root@idys ~] sed -ri '/allow_dynamic_settings:/c\allow_dynamic_settings: 1' /etc/cobbler/settings
[root@idys ~] grep allow_dynamic_settings /etc/cobbler/settings
allow_dynamic_settings: 1
[root@idys ~] systemctl restart cobblerd   # 重启cobbler服务
  1. 设置Cobbler服务器IP
[root@idys ~] cobbler setting edit --name=server --value=192.168.200.171
[root@idys ~] grep ^server: /etc/cobbler/settings
server: 192.168.200.171
  1. 设置next_server,如果用Cobbler管理DHCP,修改本项,作用不解释,看kickstart
[root@idys ~] cobbler setting edit --name=next_server --value=192.168.200.171
[root@idys ~] grep ^next_server:.* /etc/cobbler/settings
next_server: 192.168.200.171
  1. 设置用cobbler管理DHCP
[root@idys ~] cobbler setting edit --name=manage_dhcp --value=1
[root@idys ~] grep ^manage_dhcp: /etc/cobbler/settings
manage_dhcp: 1
  1. 防止循环装系统,适用于服务器第一启动项是PXE启动。
[root@idys ~] cobbler setting edit --name=pxe_just_once --value=1
[root@idys ~] grep ^pxe_just_once: /etc/cobbler/settings                      
pxe_just_once: 1
  1. 开启tftp server
[root@idys ~] sed -ri '/disable/c\disable = no' /etc/xinetd.d/tftp
[root@idys ~] systemctl enable xinetd
[root@idys ~] systemctl restart xinetd
  1. 下载boot-loader,发现下载boot-loader报错
[root@idys ~] cobbler get-loaders
task started: 2020-08-02_161756_get_loaders
task started (id=Download Bootloader Content, time=Sun Aug  2 16:17:56 2020)
downloading https://cobbler.github.io/loaders/README to /var/lib/cobbler/loaders/README
Exception occured: 
Exception value: [Errno 14] curl#60 - "Issuer certificate is invalid."
Exception Info:
  File "/usr/lib/python2.7/site-packages/cobbler/remote.py", line 82, in run
    rc = self._run(self)
   File "/usr/lib/python2.7/site-packages/cobbler/remote.py", line 176, in runner
    return self.remote.api.dlcontent(self.options.get("force",False), self.logger)
   File "/usr/lib/python2.7/site-packages/cobbler/api.py", line 735, in dlcontent
    return grabber.run(force)
   File "/usr/lib/python2.7/site-packages/cobbler/action_dlcontent.py", line 73, in run
    urlgrabber.grabber.urlgrab(src, filename=dst, proxies=proxies)
   File "/usr/lib/python2.7/site-packages/urlgrabber/grabber.py", line 773, in urlgrab
    return default_grabber.urlgrab(url, filename, **kwargs)
   File "/usr/lib/python2.7/site-packages/urlgrabber/grabber.py", line 1220, in urlgrab
    return _run_callback(opts.failfunc, opts)
   File "/usr/lib/python2.7/site-packages/urlgrabber/grabber.py", line 1071, in _run_callback
    return cb(obj)
   File "/usr/lib/python2.7/site-packages/urlgrabber/grabber.py", line 1065, in _do_raise
    raise obj.exception

!!! TASK FAILED !!!
  1. 解决下载boot-loader报错
[root@idys ~] yum -y install syslinux  
[root@idys ~] cp /usr/share/syslinux/pxelinux.0 /var/lib/cobbler/loaders/
[root@idys ~] cp /usr/share/syslinux/menu.c32 /var/lib/cobbler/loaders/ 
[root@idys ~] systemctl restart cobblerd   # 重启cobbler
[root@idys ~] cd /var/lib/cobbler/loaders/   
[root@idys loaders] ls   #查看loader内容
COPYING.elilo     COPYING.yaboot  grub-x86_64.efi  menu.c32    README
COPYING.syslinux  elilo-ia64.efi  grub-x86.efi     pxelinux.0  yaboot
  1. 开启rsyncd,并且设置为开机自启动
[root@idys ~] systemctl start rsyncd
[root@idys ~] systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
  1. 设置新装系统的默认root密码150722。下面的命令来源于提示6。random-phrase-here为干扰码,可以自行设定。
[root@idys ~] openssl passwd -1 -salt 'idys' '150722'  #设置干扰码为idys          
$1$idys$GnFZqOWqoDOT4lRj8o95r0
[root@idys ~]  cobbler setting edit --name=default_password_crypted --value='$1$idys$GnFZqOWqoDOT4lRj8o95r0'
  1. 下载fence-agents
[root@idys ~] yum -y install fence-agents
  1. 再次查看检查cobbler,第二项可以不需要
[root@idys loaders] cobbler check
The following are potential configuration items that you may want to fix:

1 : SELinux is enabled. Please review the following wiki page for details on ensuring cobbler works correctly in your SELinux environment:
    https://github.com/cobbler/cobbler/wiki/Selinux
2 : debmirror package is not installed, it will be required to manage debian deployments and repositories
  1. 配置dhcp,修改cobblerdhcp模块,不要直接修改dhcp本身的配置文件,因为cobbler会覆盖
[root@idys loaders] grep ^manage_dhcp /etc/cobbler/settings  # 查看是否设置cobbler 管理dhcp
manage_dhcp: 1
[root@idys loaders] vim /etc/cobbler/dhcp.template   #仅列出修改项
******************
******************
******************
subnet 192.168.200.0 netmask 255.255.255.0 {
     
     option routers             192.168.200.2;   #网关
     option domain-name-servers 114.114.114.114;  #dns
     option subnet-mask         255.255.255.0;   #掩码
     range dynamic-bootp        192.168.200.180 192.168.200.250;   #ip地址池
     default-lease-time         21600;
     max-lease-time             43200;
     next-server                $next_server;
  1. 同步cobbler配置
[root@idys loaders] cobbler sync   #同步cobbler配置
task started: 2020-08-02_165906_sync
task started (id=Sync, time=Sun Aug  2 16:59:06 2020)
running pre-sync triggers
cleaning trees
removing: /var/lib/tftpboot/grub/images
copying bootloaders
copying: /var/lib/cobbler/loaders/pxelinux.0 -> /var/lib/tftpboot/pxelinux.0
copying: /var/lib/cobbler/loaders/menu.c32 -> /var/lib/tftpboot/menu.c32
copying: /var/lib/cobbler/loaders/yaboot -> /var/lib/tftpboot/yaboot
copying: /usr/share/syslinux/memdisk -> /var/lib/tftpboot/memdisk
copying: /var/lib/cobbler/loaders/grub-x86.efi -> /var/lib/tftpboot/grub/grub-x86.efi
copying: /var/lib/cobbler/loaders/grub-x86_64.efi -> /var/lib/tftpboot/grub/grub-x86_64.efi
copying distros to tftpboot
copying images
generating PXE configuration files
generating PXE menu structure
rendering DHCP files
generating /etc/dhcp/dhcpd.conf
rendering TFTPD files
generating /etc/xinetd.d/tftp
cleaning link caches
running post-sync triggers
running python triggers from /var/lib/cobbler/triggers/sync/post/*
running python trigger cobbler.modules.sync_post_restart_services
running: dhcpd -t -q
received on stdout: 
received on stderr: 
running: service dhcpd restart
received on stdout: 
received on stderr: Redirecting to /bin/systemctl restart dhcpd.service

running shell triggers from /var/lib/cobbler/triggers/sync/post/*
running python triggers from /var/lib/cobbler/triggers/change/*
running python trigger cobbler.modules.manage_genders
running python trigger cobbler.modules.scm_track
running shell triggers from /var/lib/cobbler/triggers/change/*
*** TASK COMPLETE ***
  1. cobbler命令帮助
命令 说明
cobbler check 核对当前设置是否有问题
cobbler list 列出所有的cobbler元素
cobbler report 列出元素的详细信息
cobbler sync 同步配置到数据目录,更改配置最好都执行一下
cobbler reposync 同步yum仓库
cobbler distro 查看导入的发行版系统信息
cobbler system 查看添加的系统信息
cobbler profile 查看配置信息

5.7 Cobbler配置安装Centos7.x

  1. 创建挂载点,并进行挂载(前面已经做过了,所以不需要了)
  2. 查看挂载后的目录
[root@idys loaders] ls /media/cdrom/
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
  1. 导入镜像
[root@idys loaders] cobbler import --path=/media/cdrom --name=CentOS7.7 --arch=x86_64
# --path 镜像路径
# --name 为安装源定义一个名字
# --arch 指定安装源是32位、64位、ia64, 目前支持的选项有: x86│x86_64│ia64
# 安装源的唯一标示就是根据name参数来定义,本例导入成功后,安装源的唯一标示就是:CentOS7.7,如果重复,系统会提示导入失败。
  1. 查看导入后镜像信息
[root@idys ~] cobbler distro report --name=CentOS7.7-x86_64
Name                           : CentOS7.7-x86_64
Architecture                   : x86_64
TFTP Boot Files                : {
     }
Breed                          : redhat
Comment                        : 
Fetchable Files                : {
     }
Initrd                         : /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/initrd.img
Kernel                         : /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/vmlinuz
Kernel Options                 : {
     }
Kernel Options (Post Install)  : {
     }
Kickstart Metadata             : {
     'tree': 'http://@@http_server@@/cblr/links/CentOS7.7-x86_64'}
Management Classes             : []
OS Version                     : rhel7
Owners                         : ['admin']
Red Hat Management Key         : <<inherit>>
Red Hat Management Server      : <<inherit>>
Template Files                 : {
     }
  1. 查看profile信息
[root@idys ~] cobbler profile report --name=CentOS7.7-x86_64
Name                           : CentOS7.7-x86_64
TFTP Boot Files                : {
     }
Comment                        : 
DHCP Tag                       : default
Distribution                   : CentOS7.7-x86_64
Enable gPXE?                   : 0
Enable PXE Menu?               : 1
Fetchable Files                : {
     }
Kernel Options                 : {
     }
Kernel Options (Post Install)  : {
     }
Kickstart                      : /var/lib/cobbler/kickstarts/sample_end.ks
Kickstart Metadata             : {
     }
Management Classes             : []
Management Parameters          : <<inherit>>
Name Servers                   : []
Name Servers Search Path       : []
Owners                         : ['admin']
Parent Profile                 : 
Internal proxy                 : 
Red Hat Management Key         : <<inherit>>
Red Hat Management Server      : <<inherit>>
Repos                          : []
Server Override                : <<inherit>>
Template Files                 : {
     }
Virt Auto Boot                 : 1
Virt Bridge                    : xenbr0
Virt CPUs                      : 1
Virt Disk Driver Type          : raw
Virt File Size(GB)             : 5
Virt Path                      : 
Virt RAM (MB)                  : 512
Virt Type                      : kvm
  1. copy一份profile文件(ks),进行修改
[root@idys kickstarts] cp sample_end.ks CentOS7.ks
[root@idys kickstarts] ls
CentOS7.ks    install_profiles     sample_end.ks    sample_esxi6.ks  sample.seed.28
default.ks    legacy.ks            sample_esx4.ks   sample.ks
esxi4-ks.cfg  pxerescue.ks         sample_esxi4.ks  sample_old.seed
esxi5-ks.cfg  sample_autoyast.xml  sample_esxi5.ks  sample.seed
[root@idys kickstarts] vim CentOS7.ks 
# This kickstart file should only be used with EL > 5 and/or Fedora > 7.
# For older versions please use the sample.ks kickstart file.

#platform=x86, AMD64, or Intel EM64T
# System authorization information
auth  --useshadow  --enablemd5
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --all --initlabel
# Use text mode install
text
# Firewall configuration
firewall --enabled
# Run the Setup Agent on first boot
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# Use network installation
url --url=$tree
# If any cobbler repo definitions were referenced in the kickstart profile, include them here.
$yum_repo_stanza
# Network information
$SNIPPET('network_config')
# Reboot after installation
reboot

#Root password
rootpw --iscrypted $default_password_crypted
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# System timezone
timezone  America/New_York
# Install OS instead of upgrade
install
# Clear the Master Boot Record
zerombr
# Allow anaconda to partition the system as needed
part swap --fstype="swap" --ondisk=sda --size=2048
part /boot --fstype="xfs" --ondisk=sda --size=200
part / --fstype="xfs" --ondisk=sda --size=10240

%pre
$SNIPPET('log_ks_pre')
$SNIPPET('kickstart_start')
$SNIPPET('pre_install_network_config')
# Enable installation monitoring
$SNIPPET('pre_anamon')
%end

%packages
  1. 编辑CentOS7.7镜像所使用的kickstart文件
[root@idys kickstarts]  cobbler profile edit --name=CentOS7.7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS7.ks 
[root@idys kickstarts] cobbler profile report --name=CentOS7.7-x86_64 | grep kickstart
Kickstart                      : /var/lib/cobbler/kickstarts/CentOS7.ks
  1. 同步配置
[root@idys loaders] cobbler sync
task started: 2020-08-02_174040_sync
task started (id=Sync, time=Sun Aug  2 17:40:40 2020)
running pre-sync triggers
cleaning trees
removing: /var/www/cobbler/images/CentOS7.7-x86_64
removing: /var/lib/tftpboot/pxelinux.cfg/default
removing: /var/lib/tftpboot/grub/images
removing: /var/lib/tftpboot/grub/grub-x86.efi
removing: /var/lib/tftpboot/grub/grub-x86_64.efi
removing: /var/lib/tftpboot/grub/efidefault
removing: /var/lib/tftpboot/images/CentOS7.7-x86_64
removing: /var/lib/tftpboot/s390x/profile_list
copying bootloaders
copying: /var/lib/cobbler/loaders/pxelinux.0 -> /var/lib/tftpboot/pxelinux.0
copying: /var/lib/cobbler/loaders/menu.c32 -> /var/lib/tftpboot/menu.c32
copying: /var/lib/cobbler/loaders/yaboot -> /var/lib/tftpboot/yaboot
copying: /usr/share/syslinux/memdisk -> /var/lib/tftpboot/memdisk
copying: /var/lib/cobbler/loaders/grub-x86.efi -> /var/lib/tftpboot/grub/grub-x86.efi
copying: /var/lib/cobbler/loaders/grub-x86_64.efi -> /var/lib/tftpboot/grub/grub-x86_64.efi
copying distros to tftpboot
copying files for distro: CentOS7.7-x86_64
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/vmlinuz -> /var/lib/tftpboot/images/CentOS7.7-x86_64/vmlinuz
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/initrd.img -> /var/lib/tftpboot/images/CentOS7.7-x86_64/initrd.img
copying images
generating PXE configuration files
generating PXE menu structure
copying files for distro: CentOS7.7-x86_64
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/vmlinuz -> /var/www/cobbler/images/CentOS7.7-x86_64/vmlinuz
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/initrd.img -> /var/www/cobbler/images/CentOS7.7-x86_64/initrd.img
Writing template files for CentOS7.7-x86_64
rendering DHCP files
generating /etc/dhcp/dhcpd.conf
rendering TFTPD files
generating /etc/xinetd.d/tftp
processing boot_files for distro: CentOS7.7-x86_64
cleaning link caches
running post-sync triggers
running python triggers from /var/lib/cobbler/triggers/sync/post/*
running python trigger cobbler.modules.sync_post_restart_services
running: dhcpd -t -q
received on stdout: 
received on stderr: 
running: service dhcpd restart
received on stdout: 
received on stderr: Redirecting to /bin/systemctl restart dhcpd.service

running shell triggers from /var/lib/cobbler/triggers/sync/post/*
running python triggers from /var/lib/cobbler/triggers/change/*
running python trigger cobbler.modules.manage_genders
running python trigger cobbler.modules.scm_track
running shell triggers from /var/lib/cobbler/triggers/change/*
*** TASK COMPLETE ***

说明:在client端系统安装时,可以在cobbler服务端上查看日志/var/log/messages,观察安装的每一个流程

  1. 查看镜像列表
[root@idys loaders] cobbler distro list  # 查看镜像列表
   CentOS7.7-x86_64
  1. 镜像存放目录,cobbler会将镜像中的所有安装文件拷贝到本地一份,放在/var/www/cobbler/ks_mirror下的CentOS7.7-x86_64目录下。因此/var/www/cobbler目录必须具有足够容纳安装文件的空间。
[root@idys loaders] cd /var/www/cobbler/ks_mirror/
[root@idys ks_mirror] ls
CentOS7.7-x86_64  config
[root@idys ks_mirror] du -sh CentOS7.7-x86_64/
11G     CentOS7.7-x86_64/
  1. 修改安装系统的内核参数,在CentOS7系统有一个地方变了,就是网卡名变成eno16777736这种形式,但是为了运维标准化,我们需要将它变成我们常用的eth0,因此使用下面的参数。但要注意是CentOS7才需要下面的步骤,CentOS6不需要。
[root@idys ~] cobbler profile edit --name=CentOS7.7-x86_64 --kopts='net.ifnames=0 biosdevname=0

  1. 打开一台等待安装系统的机器,设置安装方式为网络,然后会看到这个界面

pxe+kickstart | cobbler 上百台服务器无人值守定制化、差异化安装操作系统环境 + kickstart配置文件详解(全文1万3千字,没有耐心不建议看!)_第5张图片

发现网址不是自己的可以修改

  1. 修改显示的网址
[root@idys ks_mirror] vim /etc/cobbler/pxe/pxedefault.template    # 修改网址显示的配置文件
DEFAULT menu
PROMPT 0
MENU TITLE Cobbler | http://www.idayuanshuai.com/   #修改的位置
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT $pxe_timeout_profile

LABEL local
        MENU LABEL (local)
        MENU DEFAULT
        LOCALBOOT -1

$pxe_menu_items

MENU end
~                                                                                     **********                                                                                             
"/etc/cobbler/pxe/pxedefault.template" 15L, 242C written                     
[root@idys ks_mirror] cobbler sync
task started: 2020-08-02_181832_sync
task started (id=Sync, time=Sun Aug  2 18:18:32 2020)
running pre-sync triggers
***************
  1. 再次查看,网址已经是自己的啦

pxe+kickstart | cobbler 上百台服务器无人值守定制化、差异化安装操作系统环境 + kickstart配置文件详解(全文1万3千字,没有耐心不建议看!)_第6张图片

  1. kickstart配置文件解析
kickstart自动应答文件选项非常多,以下只说明CentOS 6下几个常用的可能用到的选项。另外,CentOS 6和CentOS 7的选项有不小区别,所以请注意使用,可以查看官方安装文档。

以下是CentOS 6上kickstart选项说明:在最后还给出了一个kickstart文件的示例。

#文件由三部分组成
    #一是选项指令段,用于自动应答图形界面安装时除包选择外的所有手动操作
    #二是package选择段,使用%packages引导该功能
    #三是脚本段,该段可有可无,分为两种:
        # (1) %pre  预安装脚本段,在安装系统之前就执行的脚本,该段很少使用,因为可用的命令太少
        # (2) %post 后安装脚本段,在系统安装完成后执行的脚本

# kickstart选项指令段的说明:

【必须的选项】:

1.auth或者authconfig :验证选项
    --useshadow或者--enableshadow启用shadow文件来验证
    --passalgo=sha512使用sha512算法
2.bootloader: 指定如何安装引导程序,要求必须已选择分区、已选择引导程序、已选择软件包,如果没选择将会停止而不会询问
    --location=mbr 指定引导程序的位置,默认为mbr,还可以指定none或者包含bootloader的引导块所在分区
    --driveorder=sda 指定grub安装在哪个分区以及指定寻找顺序,--driverorder=sda sdc sdb
    --append="crashkernel=auto rhgb quiet" 指定内核参数
3.keyboard:指定键盘类型,一般使用美式键盘"keyboard us",新版的kickstart的格式有所变化,但也支持"keyboard us"这样的老格式
4.lang:指定语言,如"lang en_US.UTF-8"5.rootpw:设置root用户的密码
    --iscrypted:使用加密密码,可以使用MD5,SHA-256,sha-512等。
        如:rootpw  --iscrypted $6$kxEBpy0HqHiY2Tsx$FTAqbjHs6x0VruChfYKxVeKLlxPuY0LXK7RxAVdu3uUivGclMUEz.i4ARlsMpqe1bf379uEgWOSFqGtZxqrwg.
        其中SHA-512位的加密密码在CentOS 6上可以使用"grub-crypt --sha-512"生成,CentOS7上可以使用python等工具来生成,如下:
        python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

        
【可选的选项】:

1.selinux:设置selinux,值为enforcing,permissice,disable之一
2.autostep: 交互式,和interactive类似
3.interactive: 使用kickstart文件指定的参数交互式安装,但仍会给出每一步的选择项,如果直接下一步就使用kickstart参数
4.cmdline:在完全非交互的命令行模式下进行安装
5.driverdisk:指定驱动程序所在位置
    drvierdisk --source=
6.firewall:设置firewall
    --disable禁用防火墙
7.firstboot:
    --disable:安装后第一次启动默认会给出很多需要手动配置的界面,禁用它
8.graphical:在图形模式下根据kickstart执行安装,默认该选项
9.text:文本模式下根据kickstart执行安装(既然使用kickstart了,当然建议选择使用纯文本模式而不是图形模式了)
 9.1 skipx:不安装图形工具
10.halt/reboot:安装完成后关机还是reboot,默认是halt
11.ignoredisk:指定忽略的磁盘
12.install/upgrade:指定是安装还是升级系统
    对于install,还必须指定下面几种安装方式之一:
        cdrom:指定从第一个光盘驱动器安装
        harddrive:指定从本地硬盘安装,要求硬盘必须是vfat或者ext2文件系统格式
            --biospart:指定从bios类型的分区来安装,如82文件系统类型号的分区
            --partition:从某个分区安装
            --dir:指定从包含install-tree(安装树)的目录安装
                例如:harddrive --partition=hdb2 --dir=/tmp/install-tree
        nfs:指定从nfs路径安装
            --server:指定nfs服务器主机名或IP
            --dir:指定包含install-tree的目录
            --opts:指定挂载NFS的mount选项
            如:nfs --server=172.16.10.10 --dir=/export_path
        url:指定从ftp、http、https安装
             例如:url --url ftp://172.16.10.10
13.loggin:指定安装过程中的错误日志位置
    --host:指定日志将发送到那台主机上
    --port:如果远程主机的rsyslog使用非默认端口,则应该指定该端口选项
    --levle:指定日志级别
13.network:为系统配置网络信息,并在安装过程中激活该网络设备。可多次使用network指令,例如既设置网络,又设置主机名
    --bootproto:dhcp或static;对于static则必须指定IP地址、子网掩码、网关和DNS
    --device:网卡名,可以使用eth0类似的名称来指定
    --hostname:指定主机名
    --onboot:是否在引导系统时启用指定的设备
        如:
        network --bootproto=static --ip=192.168.100.2 --netmask=255.255.255.0 --gateway=192.168.100.254 --nameserver=8.8.8.8
        network --bootproto=dhcp --device=eth0 --noipv6
        network --hostname=node1.xuexi.com
15.autopart: 自动创建几个分区:大于1G的根分区,250M的boot分区和swap分区
16.zerombr:清除磁盘的mbr
  
17.clearpart: 在安装系统前清除分区,如果指定该选项则必须指定正确
    --all:清除所有分区
    --Linux:清除Linux分区
    --none:不清除分区
    --initlabel:创建标签,对于没有MBR或者GPT的新硬盘,该选项是必须的
    --drivers=sdb:清除指定的分区
    所以,clearpart --all --initlabel是常见的方式
18.part:创建分区
    --asprimary:强制指定为主分区
    --grow:使用所有可用空间,即为其分配所有剩余空间。对于根分区至少需要3G空间(即使是--grow,也还是需要指定--size)
    --ondisk:指定在哪块磁盘上创建分区。如果有多块磁盘,则需要指定在哪块磁盘上创建哪个分区,只有一块硬盘时可以省略该选项
        如:
            #part /boot --fstype=ext4 --asprimary --size=200     #boot分区200-250M足以
            #part swap --fstype=swap --asprimary --size=2048             
            #part / --fstype=ext4 --grow --asprimary  --size=2000
LVM的分区方法:
part /boot --fstype ext4 --size=100
part swap --fstype=swap --size=2048
part pv26 --size=100 --grow
volgroup VG00 --pesize=32768 pv26
logvol / --fstype ext4 --name=LVroot --vgname=VG00 --size=29984
logvol /data --fstype ext4 --name=LVdata --vgname=VG00 --size=100 --grow        
            
19.repo:指定除自带的yum源外的其他yum源,可以指定多行yum源(既然是第一次装系统,基本都不会去加这项)
    如:repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100
20.services:设置默认运行级别下开机自启动的服务
    --disable
    --enable
        disable先处理enable后处理
        如services --disable auditd,cups,atd
21.timezone:指定时区
    如:Asia/Shanghai
22.user:在系统中生成一个新用户
    --name:指定用户名
    --groups:指定辅助组,非默认组
    --homedir:用户家目录,如果不指定则默认为/home/<username>
    --password:该用户的密码,如果不指定或省略则创建后该用户处于锁定状态
    --shell:用户的shell,不指定则默认
    --uid:用户UID,不指定则自动分配一个非系统用户的UID
23.key:输入序列号,只在RedHat中有,CentOS系统没有该项
    --skip  跳过key选项

# kickstart软件包或包组选项:

使用"%packages"表示该段内容,@表示选择的包组,最前面使用横杠表示取反,即不选择的包或包组。
@base和@core两个包组总是被默认选择,所以不必在%packages中指定它们

%packages
@base
@core
@debugging
@development
@dial-up
@hardware-monitoring
@performance
@server-policy
@workstation-policy
sgpio
device-mapper-persistent-data
systemtap-client
lrzsz
tree
%end
 以下是CentOS 6.6下的ks文件示例。

install
text
nfs --server=192.168.100.100 --dir=/install
#url --url=http://192.168.100.100/centos6.6
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto quiet"
lang en_US.UTF-8
keyboard us
network --onboot=yes --device=eth0 --bootproto=dhcp --noipv6
rootpw  --iscrypted $6$x4u9sIfSQsO7ddk5$/.0Xe6tFBY0uUmFFtyvAeY9YVPtcn8zl21fFNgmAoYtepQHRYDthQ4T1ZE12kDfAT6O3oXfRb7uv214t3Bb3K1
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
reboot       #安装结束后重启

#make partitions
zerombr
clearpart --all --initlabel
part    /boot   --fstype=ext4   --asprimary     --size=250
part    /       --fstype=ext4   --asprimary     --grow     --size=2000
part    swap    --fstype=swap   --size=2000

%packages
@base
@core
@debugging
@development
@dial-up
@hardware-monitoring
@performance
@server-policy
@workstation-policy
sgpio
device-mapper-persistent-data
systemtap-client
%end

%post     #结束后做的事
cat >>/etc/yum.repos.d/base.repo<<eof
[base]
name=sohu
baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch/
gpgcheck=0
enable=1
[epel]
name=epel
baseurl=http://mirrors.sohu.com/Fedora-epel/6Server/x86_64/
enable=1
gpgcheck=0
eof
sed -i "s/ONBOOT.*$/ONBOOT=yes/" /etc/sysconfig/network-scripts/ifcfg-eth0   #设置网卡为启动
sed -i "s/rhgb //" /boot/grub/grub.conf    # 设置启动系统时不使用图形进度条方式
sed -i "s/HOSTNAME=.*$/HOSTNAME=xuexi.longshuai.com/" /etc/sysconfig/network   #设置主机名

%end

5.8 cobbler Web管理界面配置

  • web界面有很多功能,包括上传镜像、编辑kickstart、等等很多在命令行操作的都可以在web界面直接操作。
  • 在上面已经安装了cobbler-web软件,访问地址:https://IP/cobbler_web即可。默认账号为cobbler,密码也为cobbler
  1. 文件说明
/etc/cobbler/users.conf     #Web服务授权配置文件
/etc/cobbler/users.digest   #用于web访问的用户名密码
  1. 查看web的用户名密码
[root@idys loaders] cat /etc/cobbler/users.digest 
cobbler:Cobbler:a2d6bae81669d707b72c0bd9806e01f3
  1. 设置密码,在Cobbler组添加idys用户,输入2遍密码确认
[root@idys loaders] htdigest /etc/cobbler/users.digest "Cobbler" idys
Adding user idys in realm Cobbler
New password: 
Re-type new password: 
[root@idys loaders] cobbler sync    # 配置文件同步
task started: 2020-08-02_175359_sync
task started (id=Sync, time=Sun Aug  2 17:53:59 2020)
running pre-sync triggers
cleaning trees
removing: /var/www/cobbler/images/CentOS7.7-x86_64
removing: /var/lib/tftpboot/pxelinux.cfg/default
removing: /var/lib/tftpboot/grub/images
removing: /var/lib/tftpboot/grub/grub-x86.efi
removing: /var/lib/tftpboot/grub/grub-x86_64.efi
removing: /var/lib/tftpboot/grub/efidefault
removing: /var/lib/tftpboot/images/CentOS7.7-x86_64
removing: /var/lib/tftpboot/s390x/profile_list
copying bootloaders
copying: /var/lib/cobbler/loaders/pxelinux.0 -> /var/lib/tftpboot/pxelinux.0
copying: /var/lib/cobbler/loaders/menu.c32 -> /var/lib/tftpboot/menu.c32
copying: /var/lib/cobbler/loaders/yaboot -> /var/lib/tftpboot/yaboot
copying: /usr/share/syslinux/memdisk -> /var/lib/tftpboot/memdisk
copying: /var/lib/cobbler/loaders/grub-x86.efi -> /var/lib/tftpboot/grub/grub-x86.efi
copying: /var/lib/cobbler/loaders/grub-x86_64.efi -> /var/lib/tftpboot/grub/grub-x86_64.efi
copying distros to tftpboot
copying files for distro: CentOS7.7-x86_64
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/vmlinuz -> /var/lib/tftpboot/images/CentOS7.7-x86_64/vmlinuz
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/initrd.img -> /var/lib/tftpboot/images/CentOS7.7-x86_64/initrd.img
copying images
generating PXE configuration files
generating PXE menu structure
copying files for distro: CentOS7.7-x86_64
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/vmlinuz -> /var/www/cobbler/images/CentOS7.7-x86_64/vmlinuz
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/initrd.img -> /var/www/cobbler/images/CentOS7.7-x86_64/initrd.img
Writing template files for CentOS7.7-x86_64
rendering DHCP files
generating /etc/dhcp/dhcpd.conf
rendering TFTPD files
generating /etc/xinetd.d/tftp
processing boot_files for distro: CentOS7.7-x86_64
cleaning link caches
running post-sync triggers
running python triggers from /var/lib/cobbler/triggers/sync/post/*
running python trigger cobbler.modules.sync_post_restart_services
running: dhcpd -t -q
received on stdout: 
received on stderr: 
running: service dhcpd restart
received on stdout: 
received on stderr: Redirecting to /bin/systemctl restart dhcpd.service

running shell triggers from /var/lib/cobbler/triggers/sync/post/*
running python triggers from /var/lib/cobbler/triggers/change/*
running python trigger cobbler.modules.manage_genders
running python trigger cobbler.modules.scm_track
running shell triggers from /var/lib/cobbler/triggers/change/*
*** TASK COMPLETE ***
[root@idys loaders] systemctl restart httpd cobblerd  #重启httpd 服务和 cobbler 服务

现在你可以通过用户名为idys用户登录 cobbler-web界面了


5.9 定制化安装

  • 可能从学习kickstart开始就有人想怎样能够指定某台服务器使用指定ks文件,kickstart实现这功能可能比较复杂,但是Cobbler就很简单了。

  • 区分一台服务器的最简单的方法就是物理MAC地址。

  • 物理服务器的MAC地址在服务器上的标签上写了。

  • 虚拟机的MAC查看

  • 填上mac地址之后就可以,不用选择自动安装了

[root@idys ks_mirror] cobbler system add --name=CentOS7-test --mac=00:0C:29:06:7D:4D --profile=CentOS7.7-x86_64 --ip-address=192.168.200.200 --subnet=255.255.255.0 --gateway=192.168.200.2 --interface=eth0 --static=1 --hostname=idayuanshuai.com --name-servers="114.114.114.114 8.8.8.8"   # 指定网卡,mac地址,和网卡的各个选项
[root@idys ks_mirror] cobbler system list
   CentOS7-test
[root@idys ks_mirror] cobbler sync
task started: 2020-08-02_185019_sync
task started (id=Sync, time=Sun Aug  2 18:50:19 2020)
running pre-sync triggers
cleaning trees
removing: /var/www/cobbler/images/CentOS7.7-x86_64
removing: /var/lib/tftpboot/pxelinux.cfg/default
removing: /var/lib/tftpboot/pxelinux.cfg/01-00-0c-29-06-7d-4d
removing: /var/lib/tftpboot/grub/images
removing: /var/lib/tftpboot/grub/grub-x86.efi
removing: /var/lib/tftpboot/grub/grub-x86_64.efi
removing: /var/lib/tftpboot/grub/efidefault
removing: /var/lib/tftpboot/grub/01-00-0C-29-06-7D-4D
removing: /var/lib/tftpboot/images/CentOS7.7-x86_64
removing: /var/lib/tftpboot/s390x/profile_list
copying bootloaders
copying: /var/lib/cobbler/loaders/pxelinux.0 -> /var/lib/tftpboot/pxelinux.0
copying: /var/lib/cobbler/loaders/menu.c32 -> /var/lib/tftpboot/menu.c32
copying: /var/lib/cobbler/loaders/yaboot -> /var/lib/tftpboot/yaboot
copying: /usr/share/syslinux/memdisk -> /var/lib/tftpboot/memdisk
copying: /var/lib/cobbler/loaders/grub-x86.efi -> /var/lib/tftpboot/grub/grub-x86.efi
copying: /var/lib/cobbler/loaders/grub-x86_64.efi -> /var/lib/tftpboot/grub/grub-x86_64.efi
copying distros to tftpboot
copying files for distro: CentOS7.7-x86_64
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/vmlinuz -> /var/lib/tftpboot/images/CentOS7.7-x86_64/vmlinuz
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/initrd.img -> /var/lib/tftpboot/images/CentOS7.7-x86_64/initrd.img
copying images
generating PXE configuration files
generating: /var/lib/tftpboot/pxelinux.cfg/01-00-0c-29-06-7d-4d
generating: /var/lib/tftpboot/grub/01-00-0C-29-06-7D-4D
generating PXE menu structure
copying files for distro: CentOS7.7-x86_64
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/vmlinuz -> /var/www/cobbler/images/CentOS7.7-x86_64/vmlinuz
trying hardlink /var/www/cobbler/ks_mirror/CentOS7.7-x86_64/images/pxeboot/initrd.img -> /var/www/cobbler/images/CentOS7.7-x86_64/initrd.img
Writing template files for CentOS7.7-x86_64
rendering DHCP files
generating /etc/dhcp/dhcpd.conf
rendering TFTPD files
generating /etc/xinetd.d/tftp
processing boot_files for distro: CentOS7.7-x86_64
cleaning link caches
running post-sync triggers
running python triggers from /var/lib/cobbler/triggers/sync/post/*
running python trigger cobbler.modules.sync_post_restart_services
running: dhcpd -t -q
received on stdout: 
received on stderr: 
running: service dhcpd restart
received on stdout: 
received on stderr: Redirecting to /bin/systemctl restart dhcpd.service

running shell triggers from /var/lib/cobbler/triggers/sync/post/*
running python triggers from /var/lib/cobbler/triggers/change/*
running python trigger cobbler.modules.manage_genders
running python trigger cobbler.modules.scm_track
running shell triggers from /var/lib/cobbler/triggers/change/*
*** TASK COMPLETE ***

5.10 到此,自动化安装已经完成,现在测试

  • 查看安装的配置情况
[root@localhost ~]# df -h 
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        900M     0  900M   0% /dev
tmpfs           910M     0  910M   0% /dev/shm
tmpfs           910M  9.6M  901M   2% /run
tmpfs           910M     0  910M   0% /sys/fs/cgroup
/dev/sda2        10G  1.2G  8.9G  12% /
/dev/sda1       197M  120M   78M  61% /boot
tmpfs           182M     0  182M   0% /run/user/0
[root@localhost ~]# ping taobao.com
PING taobao.com (140.205.220.96) 56(84) bytes of data.
64 bytes from 140.205.220.96 (140.205.220.96): icmp_seq=1 ttl=128 time=47.7 ms
64 bytes from 140.205.220.96 (140.205.220.96): icmp_seq=2 ttl=128 time=46.1 ms
64 bytes from 140.205.220.96 (140.205.220.96): icmp_seq=3 ttl=128 time=51.1 ms
64 bytes from 140.205.220.96 (140.205.220.96): icmp_seq=4 ttl=128 time=51.1 ms
64 bytes from 140.205.220.96 (140.205.220.96): icmp_seq=5 ttl=128 time=47.8 ms
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:06:7d:4d brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.180/24 brd 192.168.200.255 scope global noprefixroute dynamic eth0
       valid_lft 14793sec preferred_lft 14793sec
    inet6 fe80::20c:29ff:fe06:7d4d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

写在最后的话:

  • 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
  • 欢迎关注我的CSDN博客,IDYS’BLOG
  • 持续更新内容
    linux基础 | 数据通信(路由交换,WLAN) | Python基础 | 云计算
  • 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
  • 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!

你可能感兴趣的:(运维笔记,linux,pxe,kickstart,cobbler,无人值守自动安装Linux)