Cobbler自动化批量安装Linux操作系统 - 运维总结

一、Cobbler简述

Cobbler是一个自动化和简化系统安装的工具,通过使用网络引导来控制和启动安装。Cobbler的特性包括存储库镜像、Kickstart模板和连接电源管理系统。Cobbler通过将设置和管理一个安装服务器所涉及的任务集中在一起,从而简化了系统配置。相当于Cobbler封装了DHCP、TFTP、XINTED等服务,结合了PXE、kickstart等安装方法,可以实现自动化安装操作系统,并且可以同时提供多种版本,以实现在线安装不同版本的系统。

Cobbler提供快速网络安装linux操作系统的服务,而且在经过调整也可以支持网络安装windows。Cobbler是用Python开发的,使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP、DNS、TFTP、RSYNC以及yum仓库、构造系统ISO镜像。Cobbler支持命令行管理,web界面管理,还提供了API接口,可以方便二次开发使用。Cobbler客户端Koan支持虚拟机安装和操作系统重新安装,使重装系统更便捷。使用Cobbler之前最好是先了解下PXE和Kickstart的基本原理。

1.1   Cobbler相关服务

DHCP
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有服务器作*管理的手段。DHCP有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口;546号端口用于DHCPv6 Client,而不用于DHCPv4,是为DHCP failover服务,这是需要特别开启的服务,DHCP failover是用来做"双机热备"的。

TFTP
TFTP是一种比较特殊的文件传输协议。相对于FTP和目前经常使用的SFTP,TFTP是基于TCP/IP协议簇,用于进行简单文件传输,提供简单、低开销的传输服务。TFTP的端口设置为69。
相对于常见的FTP,TFTP有两个比较好的优势: 1) TFTP基于UDP协议,如果环境中没有TCP协议,是比较合适的; 2) TFTP执行和代码占用内存量比较小;

PXE 
预启动执行环境(Preboot eXecution Environment,PXE,也被称为预执行环境)是让服务器通过网卡独立地使用数据设备(如硬盘)或者安装操作系统。PXE当初是作为Intel的有线管理体系的一部分,Intel 和 Systemsoft于1999年9月20日公布其规格(版本2.1)[1]。通过使用像网际协议(IP)、用户数据报协议(UDP)、动态主机设定协定(DHCP)、小型文件传输协议(TFTP)等几种网络协议和全局唯一标识符(GUID)、通用网络驱动接口(UNDI)、通用唯一识别码(UUID)的概念并通过对客户机(通过PXE自检的电脑)固件扩展预设的API来实现目的。至于更深层次的东西先不用去管,下面直接上个图,看下它的工作原理:

Cobbler自动化批量安装Linux操作系统 - 运维总结

-   PXE Client发送广播包请求DHCP分配IP地址DHCP
 Server回复请求,给出IP地址以及Boot
-   Server的地址PXE下载引导文件执行引导程序
总结来说,PXE主要是通过广播的方式发送一个包,并请注获取一个地址,而后交给TFTP程序下载一个引导文件。

PXE工作模式:基于C/S的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统。PXE 技术的实现流程概括如下:

-   客户端的网卡要支持网络引导机制;如果有操作系统的话,应该调整为第一引导设备;在主机被唤醒之后,开始加载网络引导应用时,此网卡会通过在本地局域网中广播一个rarp协议,第一步获得一个ip地址;

-   获得ip地址的同时还会从dhcp那里获得引导文件名称和文件服务器地址;随后会去找文件服务器主机,加载对应的文件,所需要的文件加载完成后,在内存中展开,而后基于此文件,可以实现去加载一个内核文件,此内核文件也一样通过tftp文件服务器获取,内核通常依赖于initrd虚根来完成对于真实根所在设备的驱动加载;

-   加载完成以后,这个内核文件通常是专用于为系统安装所设定的,因此,如果配置了网络属性,这个内核文件还需要基于网络配置在内核上的ip地址,基于网络把自己扮演成某种协议的客户端,加载一个能够启动安装程序的程序包,在本地完成安装并启动这个应用程序,而此程序在已经不再tftp文件服务器上面;

-   网络引导安装方式中,依赖于网络上应该存在一个基础程序包镜像仓库,因此,此时还依赖于外部有一个基于ftp或http再或者nfs服务所提供的yum仓库;还要通过这个yum仓库加载安装程序,以及安装程序启动完后,很可能要读取kickstart文件,可以根据kickstart文件内容,解决依赖关系以后,基于这个yum仓库,完成后续的所有安装过程;

因此,对于centos系列服务器而言,整个pxe技术大概要依赖以上所提到的服务: dhcp服务, tftp服务, 能够提供yum仓库的服务;还要提供:kickstart文件 (如果不想使用自动化可以不用提供此文件) 。

Kickstart
Kickstart 是Red红帽折腾出来的一个工具,可以简单理解为一个自动安装应答配置管理程序。通过读取这个配置文件,系统知道怎么去分区,要安装什么包,配什么IP,优化什么内核参数等等,其主要有以下部分组成:
-   Kickstart 安装选项,包含语言的选择,防火墙,密码,网络,分区的设置等;
-   %Pre 部分,安装前解析的脚本,通常用来生成特殊的ks配置,比如由一段程序决定磁盘分区等;
-   %Package 部分,安装包的选择,可以是 @core 这样的group的形式,也可以是这样 vim-* 包的形式;
-   %Post 部分,安装后执行的脚本,通常用来做系统的初始化设置。比如启动的服务,相关的设定等。

简单来说,就是将手动安装操作系统的所有详细步骤记录到一个文件中(ks 文件),然后kickstart工具通过读取这个文件就可以实现自动化安装系统。Cobbler是对kickstart的所有组件的封装,本质上就是网页版本的kickstart。

1.2   Cobbler设计方式

Cobbler 的配置结构基于一组注册的对象。每个对象表示一个与另一个实体相关联的实体(该对象指向另一个对象,或者另一个对象指向该对象)。当一个对象指向另一个对象时,它就继承了被指向对象的数据,并可覆盖或添加更多特定信息。以下对象类型的定义为:
 发行版:表示一个操作系统。它承载了内核和 initrd 的信息,以及内核参数等其他数据。
-   配置文件:包含一个发行版、一个 kickstart 文件以及可能的存储库,还包含更多特定的内核参数等其他数据。
-   系统:表示要配给的机器。它包含一个配置文件或一个镜像,还包含 IP 和 MAC 地址、电源管理(地址、凭据、类型)以及更为专业的数据等信息。
-   存储库:保存一个 yum 或 rsync 存储库的镜像信息。
 镜像:可替换一个包含不属于此类别的文件的发行版对象(例如,无法分为内核和 initrd 的对象)。

基于注册的对象以及各个对象之间的关联,Cobbler 知道如何更改文件系统以反映具体配置。因为系统配置的内部是抽象的,所以您可以仅关注想要执行的操作。Cobbler 对象关系图如下:

Cobbler自动化批量安装Linux操作系统 - 运维总结

1.3   Cobbler工作原理

Cobbler由python语言开发,小巧轻便(才15k行python代码),是对PXE和Kickstart以及DHCP的封装。融合很多特性,提供了CLI和Web的管理形式。更加方便的实行网络安装。同时,Cobbler也提供了API接口,使用其它语言也很容易做扩展。它不紧可以安装物理机,同时也支持kvm、xen虚拟化、Guest OS的安装。更多的是它还能结合Puppet等集中化管理软件,实现自动化的管理。

Cobbler 支持众多的发行版:Red Hat、Fedora、CentOS、Debian、Ubuntu 和 SuSE。当添加一个操作系统(通常通过使用 ISO 文件)时,Cobbler 知道如何解压缩合适的文件并调整网络服务,以正确引导机器。Cobbler 使用命令行方式管理,也提供了基于Web的图形化配置管理工具(cobbler-web)。通过配置cobbler自动部署DHCP、TFTP、HTTP,在安装过程中加载kiskstart无人值守安装应答文件实现无人值守。从客户端使用PXE引导启动安装。

Cobbler自动化批量安装Linux操作系统 - 运维总结

Server服务端工作流程:

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

Client客户端工程流程:

第一步,客户端以PXE模式启动
第二步,客户端获取IP地址
第三步,通过TFTP服务器获取启动文件
第四步,进入Cobbler安装选择界面
第五步,客户端确定加载信息
第六步,根据配置信息准备安装系统
第七步,加载Kickstart文件
第八步,传输系统安装的其它文件

Cobbler的Server服务端与Client客户端 (即裸机, PXE client) 交互过程分析

- 裸机配置了从网络启动后,开机后会广播包请求DHCP服务器(cobbler server)发送其分配好的一个IP;
- DHCP服务器(cobbler server)收到请求后发送responese,包括其ip地址;
- 裸机拿到ip后再向cobbler server发送请求OS引导文件的请求;
- cobbler server告诉裸机OS引导文件的名字和TFTP server的ip和port;
- 裸机通过上面告知的TFTP server地址和port通信,下载引导文件;
- 裸机执行执行该引导文件,确定加载信息,选择要安装的os,期间会再向cobbler server请求kickstart文件和os image;
- cobbler server发送请求的kickstart和os iamge;
- 裸机加载kickstart文件;
- 裸机接收os image,安装该os image;

之后,裸机就不"裸"了,有了自己的os和dhcp分配给其的ip;可以通过查看cobbler server所在机器的dhcp服务的相关文件,来查看分配出去的ip和对应的mac地址:

[root@Cobbler-node ~ ]# cat /var/lib/dhcpd/dhcpd.leases

1.4   Cobbler工作流程

Cobbler是PXE的二次封装,将多种参数封装到一个菜单,是用python语言编写。

Cobbler自动化批量安装Linux操作系统 - 运维总结

client裸机配置了从网络启动后,开机后会广播包请求DHCP服务器(cobbler server)发送其分配好的一个ip
DHCP收到请求后发送responese,包括其ip
client拿到ip后再向cobbler server发送请求OS引导文件的请求
-  cobbler server告诉client 裸机OS引导文件的名字和TFTP server的ip和port
client通过上面告知的tftp server地址通信,下载引导文件
client执行该引导文件,确定加载的信息,选择要按住的os,期间会在想cobbler server请求kickstart文件和 os image
cobbler server发送请求的kickstart 和 os image
-  celient加载kickstart文件
client接收os image,安装该os image

1.5   Cobbler功能

1)  使用Cobbler,可以做到无需进行人工干预即可安装机器;
2)  Cobbler设置一个PXE引导环境(它还可使用yaboot支持PowerPC),并控制与安装相关的所有方面,比如网络引导服务(DHCP和TFTP)与存储库镜像。
3)  当希望安装一台新机器时,Cobbler可以:
     -  使用一个以前定义的模板来配置DHCP服务(如果启用了管理 DHCP)将一个存储库(yum或rsync)建立镜像或解压缩一个媒介,以注册一个新操作系统
     -  在DHCP配置文件中为需要安装的机器创建一个条目,并使用您指定的参数(IP和MAC地址);
     -  在TFTFP服务目录下创建适当的PXE文件;
     -  重新启动DHCP服务以反映更改;
     -  重新启动机器以开始安装(如果电源管理已启用)。

二、Cobbler自动化部署

2.1   注意几个重要前提条件
-  Server服务端要和Client客户机在一个VLAN网络内 (即走的是同一个交换机网络口,网段是同一个);
-  Server服务端要准备iso系统镜像;
-  Client客户机网卡要支持PXE协议 (目前服务器的网卡基本都默认支持PXE协议);

2.2   Cobbler集成的服务
-  PXE服务支持
-  DHCP服务管理
-  DNS服务管理 (可选bind,dnsmasq)
-  电源管理
-  Kickstart服务支持
-  YUM仓库管理
-  TFTP (PXE启动时需要)
-  Apache (提供kickstart的安装源,并提供定制化的kickstart配置)

Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等。Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用。Cobbler是较早前的kickstart的升级版,优点是比较容易配置,还自带web界面比较易于管理。

2.3   Cobbler的各主要组件间的关系如下图所示

Cobbler自动化批量安装Linux操作系统 - 运维总结

2.4   Cobbler自动化安装操作系统 - 部署过程记录 (服务端为Centos7)

1) Cobbler安装前准备

系统版本
[root@cobbler-node ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

内核版本
[root@cobbler-node ~]# uname -r
3.10.0-862.el7.x86_64

主机名
[root@cobbler-node ~]# hostnamectl --static set-hostname cobbler-node
[root@cobbler-node ~]# hostname
cobbler-node

selinux必须要关闭
[root@cobbler-node ~]# setenforce 0
[root@cobbler-node ~]# getenforce
[root@cobbler-node ~]# vim /etc/sysconfig/selinux
SELINUX=disabled

关闭iptables防火墙
[root@cobbler-node ~]# iptables -F
[root@cobbler-node ~]# systemctl stop firewalld
[root@cobbler-node ~]# systemctl disable firewalld
[root@cobbler-node ~]# firewall-cmd --state
not running
[root@cobbler-node ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination       

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination       

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination       

Chain DOCKER (0 references)
target     prot opt source               destination       

Chain DOCKER-ISOLATION (0 references)
target     prot opt source               destination

====================================================================
温馨提示:
如果开启iptables防火墙,则需要开启TCP: 80端口、TCP: 25151端口、UDP: 69端口
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT             #http服务需要此端口
# iptables -A INPUT -m state --state NEW -m udp -p udp --dport 69 -j ACCEPT             #tftp服务需要此端口
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 25151 -j ACCEPT          #cobbler需要此端口

重启iptables服务
# systemctl restart firewalld
====================================================================

查看本机ip地址
[root@cobbler-node ~]# ifconfig |grep 172.16.60.222
        inet 172.16.60.222  netmask 255.255.255.0  broadcast 172.16.60.255

[root@cobbler-node ~]# hostname -I
172.16.60.222 

2) Cobbler安装

在线安装,则需要使用到epel源,yum源替换成阿里源或是网易源也比较快点。
[root@cobbler-node ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@cobbler-node ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@cobbler-node ~]# ll /etc/yum.repos.d/epel.repo
-rw-r--r-- 1 root root 664 Jan 20 23:33 /etc/yum.repos.d/epel.repo

[root@cobbler-node ~]# yum install -y httpd dhcp tftp python-ctypes cobbler xinetd cobbler-web

Cobbler的配置说明
===================================================================
cobbler                           #cobbler程序包
cobbler-web                       #cobbler的web服务包
pykickstart                       #cobbler检查kickstart语法错误
httpd                             #Apache web服务
dhcp                              #Dhcp服务
tftp                              #tftp服务
/etc/cobbler                      #配置文件目录
/etc/cobbler/settings             #cobbler主配置文件
/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日志

3) 检测Cobbler

先启动xinetd、apache和cobbler服务,且设为开机启动:
[root@cobbler-node ~]# systemctl enable xinetd
[root@cobbler-node ~]# systemctl start xinetd

[root@cobbler-node ~]# systemctl enable httpd.service
[root@cobbler-node ~]# systemctl start httpd.service

[root@cobbler-node ~]# systemctl enable cobblerd.service
[root@cobbler-node ~]# systemctl start cobblerd.service

查看xinetd、apache和cobbler服务是否正确启动 (如下查看status都为runing状态即可)
[root@cobbler-node ~]# systemctl status xinetd httpd.service cobblerd.service
.........
● xinetd.service - Xinetd A Powerful Replacement For Inetd
   Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-01-20 23:47:11 CST; 2min 29s ago
.........
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-01-20 23:47:50 CST; 1min 50s ago
.........
● cobblerd.service - Cobbler Helper Daemon
   Loaded: loaded (/usr/lib/systemd/system/cobblerd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-01-20 23:48:17 CST; 1min 23s ago
.........

[root@cobbler-node ~]# ps -ef|grep xinetd
root       794 27381  0 23:50 pts/1    00:00:00 grep --color=auto xinetd
root     32674     1  0 23:47 ?        00:00:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid

[root@cobbler-node ~]# ps -ef|grep httpd
root       321     1  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     324   321  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     326   321  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     327   321  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     328   321  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     329   321  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root       812 27381  0 23:50 pts/1    00:00:00 grep --color=auto httpd

[root@cobbler-node ~]# ps -ef|grep cobbler
apache     322   321  0 23:47 ?        00:00:00 (wsgi:cobbler_w -DFOREGROUND
root       450     1  0 23:48 ?        00:00:00 /usr/bin/python2 -s /usr/bin/cobblerd -F
root       823 27381  0 23:50 pts/1    00:00:00 grep --color=auto cobbler

确定都启动了,不存在假启动的话,下面可以进行cobbler检测:
[root@cobbler-node ~]# cobbler check
The following are potential configuration items that you may want to fix:

1 : The 'server' field in /etc/cobbler/settings must be set to something other than localhost, or kickstarting features will not work.  This should be a resolvable hostname or IP for the boot server as reachable by all machines that will use it.
2 : For PXE to be functional, the 'next_server' field in /etc/cobbler/settings must be set to something other than 127.0.0.1, and should match the IP of the boot server on the PXE network.
3 : change 'disable' to 'no' in /etc/xinetd.d/tftp
4 : Some network boot-loaders are missing from /var/lib/cobbler/loaders, you may run 'cobbler get-loaders' to download them, or, if you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a *recent* version of the syslinux package installed and can ignore this message entirely.  Files in this directory, should you want to support all architectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The 'cobbler get-loaders' command is the easiest way to resolve these requirements.
5 : enable and start rsyncd.service with systemctl
6 : debmirror package is not installed, it will be required to manage debian deployments and repositories
7 : ksvalidator was not found, install pykickstart
8 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one
9 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them

Restart cobblerd and then run 'cobbler sync' to apply changes.

针对以上检测出来的问题,解决如下:
1) The 'server' field in/etc/cobbler/settings must be set to something other than localhost, orkickstarting features will not work. This should be a resolvable hostname or IP for the boot server asreachable by all machines that will use it.

解决方法:修改/etc/cobbler/settings,将server对应的IP改为cobbler安装主机的IP,即将server: 127.0.0.1改成server: 172.16.60.222,
切记切记,server: 后面有空格!!
[root@cobbler-node ~]# cp /etc/cobbler/settings /etc/cobbler/settings.bak
[root@cobbler-node ~]# vim /etc/cobbler/settings
.........
server: 172.16.60.222

2) For PXE to be functional,the 'next_server' field in /etc/cobbler/settings must be set to something otherthan 127.0.0.1, and should match the IP of the boot server on the PXE network.

解决方法:修改/etc/cobbler/settings,将next_server对应的IP改为cobbler安装主机的IP,即将server: 127.0.0.1改成server: 172.16.60.222
[root@cobbler-node ~]# vim /etc/cobbler/settings
.........
next_server: 172.16.60.222

3) change 'disable' to 'no'in /etc/xinetd.d/tftp
解决方法:将/etc/xinetd.d/tftp中disable对应值改成no。
[root@cobbler-node ~]# vim /etc/xinetd.d/tftp
..........
disable   = no

4) some network boot-loadersare missing from /var/lib/cobbler/loaders, you may run 'cobbler get-loaders' todownload them, or, if you only want to handle x86/x86_64 netbooting, you mayensure that you have installed a *recent* version of the syslinux packageinstalled and can ignore this message entirely. Files in this directory, should you want to support all architectures,should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The 'cobblerget-loaders' command is the easiest way to resolve these requirements.
解决方法:
[root@cobbler-node ~]# cobbler get-loaders

5) enable and startrsyncd.service with systemctl
解决方法:
[root@cobbler-node ~]# systemctl enable rsyncd
[root@cobbler-node ~]# systemctl start rsyncd

6) debmirror package is notinstalled, it will be required to manage debian deployments and repositories
解决方法:debian的包,可以不下载,不影响使用cobbler。

7) ksvalidator was not found, install pykickstart
解决方法:
[root@cobbler-node ~]# yum install pykickstart -y

8) The default password usedby the sample templates for newly installed machines (default_password_cryptedin /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try:"openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'"to generate new one
解决方法:给密码加密,把生成的密码串添加到/etc/cobbler/settings里.

生成加密的密码, 这里设置了密码为"cobbler",此处就是按装系统完的密码
[root@cobbler-node ~]# openssl passwd -1 -salt 'cobbler' 'cobbler'
$1$cobbler$M6SE55xZodWc9.vAKLJs6.

将该加密的密码全复制拷贝到settings文件default_password_crypted处:
[root@cobbler-node ~]# vim /etc/cobbler/settings
.......
default_password_crypted: "$1$cobbler$M6SE55xZodWc9.vAKLJs6."

9) fencing tools were notfound, and are required to use the (optional) power management features.install cman or fence-agents to use them
解决办法:电源管理工具,下载fence-agents (这个就算暂时不安装,也不影响cobbler的使用)
[root@cobbler-node ~]# yum -y install fence-agents

以上检测出来的问题,除了第6和第9个问题不做处理,其他的问题都要如上进行解决。

接着继续修改Cobbler其他配置

[root@cobbler-node ~]# sed -i 's/manage_dhcp: 0/manage_dhcp: 1/' /etc/cobbler/settings         #管理dhcp
[root@cobbler-node ~]# sed -i 's/pxe_just_once: 0/pxe_just_once: 1/' /etc/cobbler/settings     #防止系统重装.即只针对新机器(空系统)情况下进行自动化安装

下面修改cobbler配置的dhcp模板
[root@cobbler-node ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.60.1     0.0.0.0         UG    100    0        0 ens192
172.16.60.0     0.0.0.0         255.255.255.0   U     100    0        0 ens192
...........
...........
[root@cobbler-node ~]# cp /etc/cobbler/dhcp.template /etc/cobbler/dhcp.template.bak
[root@cobbler-node ~]# vim /etc/cobbler/dhcp.template
...........
subnet 172.16.60.0 netmask 255.255.255.0 {
     option routers             172.16.60.1;
     option domain-name-servers 172.16.60.1;
     option subnet-mask         255.255.255.0;
     range dynamic-bootp        172.16.60.160 172.16.60.190;
     default-lease-time         21600;
     max-lease-time             43200;
     next-server                $next_server;

上面配置修改完成后,依次重启下面服务,然后再检测一次
[root@cobbler-node ~]# systemctl restart tftp.socket
[root@cobbler-node ~]# systemctl restart xinetd.service
[root@cobbler-node ~]# systemctl restart httpd.service
[root@cobbler-node ~]# systemctl restart cobblerd.service
[root@cobbler-node ~]# systemctl restart rsyncd

运行cobbler再次监测:
[root@cobbler-node ~]# cobbler check
The following are potential configuration items that you may want to fix:

1 : debmirror package is not installed, it will be required to manage debian deployments and repositories

Restart cobblerd and then run 'cobbler sync' to apply changes.

4) cobbler同步. 修改完成后,一定要镜像 "cobbler sync" 同步,否则不会生效!

[root@cobbler-node ~]# cobbler sync
task started: 2019-01-21_003507_sync
task started (id=Sync, time=Mon Jan 21 00:35:07 2019)
running pre-sync triggers
cleaning trees
removing: /var/lib/tftpboot/grub/images
copying bootloaders
trying hardlink /var/lib/cobbler/loaders/pxelinux.0 -> /var/lib/tftpboot/pxelinux.0
trying hardlink /var/lib/cobbler/loaders/menu.c32 -> /var/lib/tftpboot/menu.c32
trying hardlink /var/lib/cobbler/loaders/yaboot -> /var/lib/tftpboot/yaboot
trying hardlink /usr/share/syslinux/memdisk -> /var/lib/tftpboot/memdisk
trying hardlink /var/lib/cobbler/loaders/grub-x86.efi -> /var/lib/tftpboot/grub/grub-x86.efi
trying hardlink /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 ***

同步之后,无任何问题,最后显示"***TASK COMPLETE****"。

5) Cobbler的系统镜像文件的挂载和系统的导入

先将要安装的操作系统的镜像文件拷贝到Cobbler服务器上的/mnt目录下 (镜像的存放路径可以自己随意起)
这里我上传了centos6.9和centos7.5的系统镜像文件
[root@cobbler-node ~]# cd /mnt/
[root@cobbler-node mnt]# du -sh *
3.7G    CentOS-6.9-x86_64-bin-DVD1.iso
4.2G    CentOS-7.5-x86_64-DVD-1804.iso

然后将该镜像文件进行挂载,这里挂载目录为/iso
[root@cobbler-node ~]# mkdir /iso
[root@cobbler-node ~]# mount -t iso9660 -o loop /mnt/CentOS-7.5-x86_64-DVD-1804.iso /iso/
mount: /dev/loop0 is write-protected, mounting read-only

查看挂载
[root@cobbler-node ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G   12G   39G  24% /
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  385M  3.5G  10% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
/dev/mapper/centos-home   42G   33M   42G   1% /home
tmpfs                    783M     0  783M   0% /run/user/0
/dev/loop0               4.2G  4.2G     0 100% /iso

如上说明已经挂载成功了系统镜像

接着进行系统数据导入 (这个导入操作需要执行一段时间,耐心等待~)
[root@cobbler-node ~]# cobbler import --path=/iso/ --name=centos7.5 --arch=x86_64
task started: 2019-01-21_091946_import
task started (id=Media import, time=Mon Jan 21 09:19:46 2019)
Found a candidate signature: breed=redhat, version=rhel6
Found a candidate signature: breed=redhat, version=rhel7
Found a matching signature: breed=redhat, version=rhel7
Adding distros from path /var/www/cobbler/ks_mirror/centos7.5-x86_64:
creating new distro: centos7.5-x86_64
trying symlink: /var/www/cobbler/ks_mirror/centos7.5-x86_64 -> /var/www/cobbler/links/centos7.5-x86_64
creating new profile: centos7.5-x86_64
associating repos
checking for rsync repo(s)
checking for rhn repo(s)
checking for yum repo(s)
starting descent into /var/www/cobbler/ks_mirror/centos7.5-x86_64 for centos7.5-x86_64
processing repo at : /var/www/cobbler/ks_mirror/centos7.5-x86_64
need to process repo/comps: /var/www/cobbler/ks_mirror/centos7.5-x86_64
looking for /var/www/cobbler/ks_mirror/centos7.5-x86_64/repodata/*comps*.xml
Keeping repodata as-is :/var/www/cobbler/ks_mirror/centos7.5-x86_64/repodata
*** TASK COMPLETE ***

如上无报错,则说明系统数据导入成功。
可以查看"/var/www/cobbler/ks_mirror/centos7.5-x86_64/"下导入的数据是否存在
[root@cobbler-node ~]# ls /var/www/cobbler/ks_mirror/centos7.5-x86_64/
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL

列出导入后的信息配置 (或者"cobbler distro list"命令)
[root@cobbler-node ~]# cobbler list
distros:
   centos7.5-x86_64

profiles:
   centos7.5-x86_64

systems:

repos:

images:

mgmtclasses:

packages:

files:

可以查看更详细的配置信息
[root@cobbler-node ~]# cobbler profile report
Name                           : centos7.5-x86_64
TFTP Boot Files                : {}
Comment                        :
DHCP Tag                       : default
Distribution                   : centos7.5-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

从该信息看出,kickstart的启动是使用了sample_end.ks,进入目录下查看
[root@cobbler-node ~]# ll /var/lib/cobbler/kickstarts/
total 56
-rw-r--r-- 1 root root  115 Nov 17 23:10 default.ks
-rw-r--r-- 1 root root   22 Nov 17 23:10 esxi4-ks.cfg
-rw-r--r-- 1 root root   22 Nov 17 23:10 esxi5-ks.cfg
drwxr-xr-x 2 root root   56 Jan 20 23:36 install_profiles
-rw-r--r-- 1 root root 1424 Nov 17 23:10 legacy.ks
-rw-r--r-- 1 root root  292 Nov 17 23:10 pxerescue.ks
-rw-r--r-- 1 root root 2825 Nov 17 23:10 sample_autoyast.xml
-rw-r--r-- 1 root root 1856 Nov 17 23:10 sample_end.ks
-rw-r--r-- 1 root root    0 Nov 17 23:10 sample_esx4.ks
-rw-r--r-- 1 root root  324 Nov 17 23:10 sample_esxi4.ks
-rw-r--r-- 1 root root  386 Nov 17 23:10 sample_esxi5.ks
-rw-r--r-- 1 root root  386 Nov 17 23:10 sample_esxi6.ks
-rw-r--r-- 1 root root 1913 Nov 17 23:10 sample.ks
-rw-r--r-- 1 root root 3419 Nov 17 23:10 sample_old.seed
-rw-r--r-- 1 root root 6658 Nov 17 23:10 sample.seed

需要注意:如若想要定制化安装系统,则可以上传自己写的ks文件!!!!!

其实默认的"sample_end.ks" 已经满足系统安装的需求。本案例采用默认的ks文件。

下面将新安装完的系统的网卡名改为eth0
[root@cobbler-node ~]# cobbler profile edit --name=centos7.5-x86_64 --kopts='net.ifname=0 biosdevname=0'

下面是验证cobbler
[root@cobbler-node ~]# cobbler validateks
task started: 2019-01-21_093315_validateks
task started (id=Kickstart Validation, time=Mon Jan 21 09:33:15 2019)
----------------------------
osversion: rhel7
checking url: http://172.16.60.222/cblr/svc/op/ks/profile/centos7.5-x86_64
running: /usr/bin/ksvalidator -v "rhel7" "http://172.16.60.222/cblr/svc/op/ks/profile/centos7.5-x86_64"
received on stdout:
received on stderr:
*** all kickstarts seem to be ok ***
*** TASK COMPLETE ***

至此,Cobbler自动化系统安装配置、导入系统数据以及验证完成。

6) 在VMware上模拟测试Cobbler自动化安装系统

在VMware上创建一台新的虚拟机,步骤如下:

Cobbler自动化批量安装Linux操作系统 - 运维总结

设置vmware的如何安装系统时候,这里不选择镜像,选择"我以后再安装操作系统(S)。创建一个虚拟空白硬板",然后选择下一步!

Cobbler自动化批量安装Linux操作系统 - 运维总结

Cobbler自动化批量安装Linux操作系统 - 运维总结

创建完成之后开启此虚机。

Cobbler自动化批量安装Linux操作系统 - 运维总结

Cobbler自动化批量安装Linux操作系统 - 运维总结

Cobbler自动化批量安装Linux操作系统 - 运维总结

选择CentOS7.2这一项即可进行安装,安装过程与光盘安装一致,这里就不在复述。

7) PXE  默认启动项修改

默认的情况下PXE的启动项是Local(如下图)

Cobbler自动化批量安装Linux操作系统 - 运维总结

由于根据无人值守安装的需求,无需人工干预,需要自动安装,这时候就要需要将local从启动项删除即可。修改方法如下:

首先找到PXE加载的菜单选项在哪,路径"/var/lib/tftpboot/pxelinux.cfg"下找到"default"文件,内容如下:

[root@cobbler-node ~]# cd /var/lib/tftpboot/pxelinux.cfg/
[root@cobbler-node pxelinux.cfg]# cp default default.bak
[root@cobbler-node pxelinux.cfg]# cat default
DEFAULT menu
PROMPT 0
MENU TITLE Cobbler | http://cobbler.github.io/
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT local

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

LABEL centos7.2-Minimal-x86_64
        kernel /images/centos7.5-x86_64/vmlinuz
        MENU LABEL centos7.5-x86_64
        append initrd=/images/centos7.5-x86_64/initrd.img ksdevice=bootif lang=  text biosdevname=0 net.ifname=0 kssendmac  ks=http://172.16.60.222/cblr/svc/op/ks/profile/centos7.5-x86_64
        ipappend 2

MENU end

如上,可以看出MENU菜单有俩个选项。这里删除“LABEL local”的内容,并修改“ONTIMEOUT”值为我们想要的启动项即可,如下:
[root@cobbler-node pxelinux.cfg]# vim default
DEFAULT menu
PROMPT 0
MENU XXXXXXXX | Cloud Of XXXXXX
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT centos7.2-Minimal-x86_64

LABEL centos7.2-Minimal-x86_64
        kernel /images/centos7.5-x86_64/vmlinuz
        MENU LABEL centos7.5-x86_64
        append initrd=/images/centos7.5-x86_64/initrd.img ksdevice=bootif lang=  text biosdevname=0 net.ifname=0 kssendmac  ks=http://172.16.60.222/cblr/svc/op/ks/profile/centos7.5-x86_64
        ipappend 2

MENU end

如上图,只留下了"LABELcentos7.2-Minimal-x86_64"这一个启动项,"ONTIMEOUT "改为了"centos7.2-Minimal-x86_64","MENUTITLE"可以修改成自定义内容。修改后保存即可,不要重启cobblerd服务也不要执行"cobbler sync"同步。修改后的PXE启动页面如下:

Cobbler自动化批量安装Linux操作系统 - 运维总结

默认的20秒超时一过就可以进入该选项进行自动安装。这样就可以做到了无人工干预的自动无人值守安装需求。

8) Cobbler-web管理

访问https://172.16.60.222/cobbler_web, 注意是https不是http,用户名和密码就是之前在settings设置的"cobbler"和"cobbler"

Cobbler 登录web界面提示报错"Internal Server Error", 如下:
500 The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.

解决办法:
查看httpd日志/etc/httpd/logs/ssl_error_log
[root@cobbler-node ~]# tail -f /etc/httpd/logs/ssl_error_log
[Mon Jan 21 12:13:36.341044 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]     self._setup(name)
[Mon Jan 21 12:13:36.341051 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]   File "/usr/lib/python2.7/site-packages/django/conf/__init__.py", line 41, in _setup
[Mon Jan 21 12:13:36.341061 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]     self._wrapped = Settings(settings_module)
[Mon Jan 21 12:13:36.341067 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]   File "/usr/lib/python2.7/site-packages/django/conf/__init__.py", line 110, in __init__
[Mon Jan 21 12:13:36.341077 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]     mod = importlib.import_module(self.SETTINGS_MODULE)
[Mon Jan 21 12:13:36.341083 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]   File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
[Mon Jan 21 12:13:36.341127 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]     __import__(name)
[Mon Jan 21 12:13:36.341139 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]   File "/usr/share/cobbler/web/settings.py", line 89, in <module>
[Mon Jan 21 12:13:36.341152 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]     from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
[Mon Jan 21 12:13:36.341176 2019] [:error] [pid 7210] [remote 172.16.42.183:27072] ImportError: cannot import name TEMPLATE_CONTEXT_PROCESSORS

查看cobbler的py配置文件
[root@cobbler-node ~]# sed -n '38,41p' /usr/share/cobbler/web/settings.py
if django.VERSION[0] == 1 and django.VERSION[1] < 4:
    ADMIN_MEDIA_PREFIX = '/media/'
else:
    STATIC_URL = '/media/'

初步判断应该是pythone-django版本问题. 解决办法如下:
下载pip.py
[root@cobbler-node ~]# wget https://bootstrap.pypa.io/get-pip.py

调用本地python运行pip.py脚本
[root@cobbler-node ~]# python get-pip.py

安装pip
[root@cobbler-node ~]# pip install Django==1.8.9

查看pip版本号
[root@cobbler-node ~]# python -c "import django; print(django.get_version())"

重启httpd
[root@cobbler-node ~]# systemctl restart httpd

如上操作后,再次访问https://172.16.60.222/cobbler_web就正常了!!

Cobbler自动化批量安装Linux操作系统 - 运维总结

Cobbler自动化批量安装Linux操作系统 - 运维总结

Cobbler-web页面说明

Cobbler自动化批量安装Linux操作系统 - 运维总结

可以在Cobbler-web可视化界面里进行配置修改的操作,便于维护和管理。

9) 定制化安装操作系统

添加内核参数
查看导入的镜像,点击edit

Cobbler自动化批量安装Linux操作系统 - 运维总结

在内核参数中添加net.ifnames=0 biosdevname=0
能够让显示的网卡变为eth0 ,而不是CentOS7中的ens33, 修改完成后点击保存

Cobbler自动化批量安装Linux操作系统 - 运维总结

查看镜像属性

Cobbler自动化批量安装Linux操作系统 - 运维总结

10) 编写ks文件

创建新的ks文件

Cobbler自动化批量安装Linux操作系统 - 运维总结

添加ks文件,并配置文件名, 创建完成后点击Save进行保存

Cobbler自动化批量安装Linux操作系统 - 运维总结

CentOS7系统安装的ks配置文件内容参考 (安装的虚拟机的用户名是root,密码是$default_password_crypted的设置值,即密码为前面设置的cobbler):

# Cobbler for Kickstart Configurator for CentOS 7 by clsn
install
url --url=$tree
text
lang en_US.UTF-8
keyboard us
zerombr
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
#Network information
$SNIPPET('network_config')
#network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS7
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
rootpw  --iscrypted $default_password_crypted
clearpart --all --initlabel
part /boot --fstype xfs --size 1024
part swap --size 1024
part / --fstype xfs --size 1 --grow
firstboot --disable
selinux --disabled
firewall --disabled
logging --level=info
reboot

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

%packages
@^minimal
@compat-libraries
@core
@debugging
@development
bash-completion
chrony
dos2unix
kexec-tools
lrzsz
nmap
sysstat
telnet
tree
vim
wget
%end

%post
systemctl disable postfix.service
%end

11) 自定义安装系统

选择systems 创建一个新的系统

Cobbler自动化批量安装Linux操作系统 - 运维总结

定义系统信息

Cobbler自动化批量安装Linux操作系统 - 运维总结

配置全局网络信息: 主机名、网关、DNS

Cobbler自动化批量安装Linux操作系统 - 运维总结

配置网卡信息,eth0,eth1.   需要注意,选择static静态,

Cobbler自动化批量安装Linux操作系统 - 运维总结

以上的所有配置完成后,点击Save进行保存即可!!

VMware workstation中查看虚拟机mac地址的方法。在虚拟机设置中。

Cobbler自动化批量安装Linux操作系统 - 运维总结

cobbler安装配置过程的的常见问题汇总

1) cobbler check报错

[root@cobbler-node ~]# cobbler sync
Traceback (most recent call last):
  File "/usr/bin/cobbler", line 36, in <module>
    sys.exit(app.main())
  File "/usr/lib/python2.7/site-packages/cobbler/cli.py", line 662, in main
    rc = cli.run(sys.argv)
  File "/usr/lib/python2.7/site-packages/cobbler/cli.py", line 269, in run
    self.token         = self.remote.login("", self.shared_secret)
  File "/usr/lib64/python2.7/xmlrpclib.py", line 1233, in __call__
    return self.__send(self.__name, args)
  File "/usr/lib64/python2.7/xmlrpclib.py", line 1587, in __request
    verbose=self.__verbose
  File "/usr/lib64/python2.7/xmlrpclib.py", line 1273, in request
    return self.single_request(host, handler, request_body, verbose)
  File "/usr/lib64/python2.7/xmlrpclib.py", line 1306, in single_request
    return self.parse_response(response)
  File "/usr/lib64/python2.7/xmlrpclib.py", line 1482, in parse_response
    return u.close()
  File "/usr/lib64/python2.7/xmlrpclib.py", line 794, in close
    raise Fault(**self._stack[0])
xmlrpclib.Fault: <Fault 1: "<class 'cobbler.cexceptions.CX'>:'login failed'">

解决办法
[root@cobbler-node ~]# systemctl restart httpd.service
[root@cobbler-node ~]# [root@cobbler-node ~]# systemctl restart cobblerd.service
[root@cobbler-node ~]# cobbler check

2) No space left on device

Cobbler自动化批量安装Linux操作系统 - 运维总结

出现这个错误的原因是虚拟机的内存不足2G,将内存调为2G即可(这个错误只会出现在CentOS7.3之上)

3) 访问cobbler_web页面,不成功。“Forbidden You don't have permission to access /cobbler_web/on this server.”

原因是"SSL connection required",是访问的不对,应该使用https头!

4) 新建虚机开启时候,出现TFTP open timeout!

Cobbler自动化批量安装Linux操作系统 - 运维总结

这时候是cobbler的服务器的防火墙没关闭。关闭防火墙即可!
# systemctl stop firewalld.service

5) 运行"cobbler sync"时候报错如下:

Cobbler自动化批量安装Linux操作系统 - 运维总结

此时查看message,找出具体的原因:
# tailf -100 /var/log/messages

Cobbler自动化批量安装Linux操作系统 - 运维总结

这是IP分配的范围错误,该范围不在所属的同一网段,这就是dhcp模板配置错误,重新修改:
# vim /etc/cobbler/dhcp.template

Cobbler自动化批量安装Linux操作系统 - 运维总结

改成如上图所示同一网段即可。

6) 新机器启动之后会报错如下图所示

Cobbler自动化批量安装Linux操作系统 - 运维总结

由于本次安装的是IBM X服务器,参考IBM官方论坛给出的意见:
A. Press F12 key when the IBM splash screen is shown duringsystem boot.
B. Select Legacy Only option and press Enter.
C. The operating system will boot and install in traditionallegacy boot mode.

意思就是:
从新启动机器,出现选择提示时,按F12键,进入boot启动选择。将Legacy Only 选项选中,再选择启动选项ok。然后重新启动服务器就可以实现Linux系统自动安装了。

7) 新机器启动后找不到操作系统,“Operating System not found”,如下图所示:

Cobbler自动化批量安装Linux操作系统 - 运维总结

系统找寻不到,这时候到cobbler服务器上查看挂载的系统还在么, 基本就是之前挂载的镜像不在了导致的

[root@cobbler-node ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G   17G   34G  33% /
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  385M  3.5G  10% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
/dev/mapper/centos-home   42G   33M   42G   1% /home
tmpfs                    783M     0  783M   0% /run/user/0

之前挂载的系统不见了。只要重现挂载镜像系统就可以了:

[root@cobbler-node ~]# mount -t iso9660 -o loop /mnt/CentOS-7.5-x86_64-DVD-1804.iso /iso/

[root@cobbler-node ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G   17G   34G  33% /
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  385M  3.5G  10% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
/dev/mapper/centos-home   42G   33M   42G   1% /home
tmpfs                    783M     0  783M   0% /run/user/0
/dev/loop0               4.2G  4.2G     0 100% /iso

上面提到了cobbler_CentOS7.x_ks配置文件的内容参考,下面贴出一个cobbler_CentOS6.x_ks配置文件内容参考:

# Cobbler for Kickstart Configurator for CentOS 6  by clsn
install
url --url=$tree
text
lang en_US.UTF-8
keyboard us
zerombr
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
$SNIPPET('network_config')
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
rootpw  --iscrypted $default_password_crypted
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

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

%packages
@base
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet
%end

%post --nochroot
$SNIPPET('log_ks_post_nochroot')
%end

%post
$SNIPPET('log_ks_post')
# Start yum configuration
$yum_config_stanza
# End yum configuration
$SNIPPET('post_install_kernel_options')
$SNIPPET('post_install_network_config')
$SNIPPET('func_register_if_enabled')
$SNIPPET('download_config_files')
$SNIPPET('koan_environment')
$SNIPPET('redhat_register')
$SNIPPET('cobbler_register')
# Enable post-install boot notification
$SNIPPET('post_anamon')
# Start final steps
$SNIPPET('kickstart_done')
# End final steps
%end

上面介绍的是基于centos7.5镜像的操作,现在介绍下另追加centos6.9镜像进行的操作

[root@cobbler-node mnt]# du -sh *
3.7G    CentOS-6.9-x86_64-bin-DVD1.iso
4.2G    CentOS-7.5-x86_64-DVD-1804.iso

[root@cobbler-node mnt]# mkdir /iso2
[root@cobbler-node mnt]# mount -t iso9660 -o loop /mnt/CentOS-6.9-x86_64-bin-DVD1.iso /iso2

导入centos6.9的镜像数据
[root@cobbler-node mnt]# cobbler import --path=/iso2/ --name=centos6.9 --arch=x86_64

镜像数据导入后存放在/var/www/cobbler/ks_mirror目录下
[root@cobbler-node mnt]# ll /var/www/cobbler/ks_mirror
total 4
dr-xr-xr-x 7 root root 4096 Mar 29  2017 centos6.9-x86_64
drwxr-xr-x 8 root root  254 May  4  2018 centos7.5-x86_64
drwxr-xr-x 2 root root   64 Jan 22 17:47 config
drwxr-xr-x 2 root root    6 Jan 21 22:32 dtk5.3

查看导入镜像
[root@cobbler-node mnt]# cobbler distro list
   centos6.9-x86_64
   centos7.5-x86_64

查看更详细信息
[root@cobbler-node mnt]# cobbler profile report

配置centos6.9系统安装时的ks文件 (上面已经有了一个centls7.5系统安装的ks文件)

将上面贴出来的cobbler_CentOS6.x_ks配置文件的参考内容复制到下面这个文件
[root@cobbler-node ~]# vim /var/lib/cobbler/kickstarts/centos6_install.ks

[root@cobbler-node ~]# ll /var/lib/cobbler/kickstarts/centos*
-rw-r--r-- 1 root root 1381 Jan 22 17:53 /var/lib/cobbler/kickstarts/centos6_install.ks
-rw-r--r-- 1 root root 1027 Jan 22 10:17 /var/lib/cobbler/kickstarts/centos7_install.ks

指定centos6.9系统安装时的kickstarts配置文件
[root@cobbler-node ~]# cobbler profile edit --name=centos6.9-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos6_install.ks --kopts='net.ifname=0 biosdevname=0'

现在进行虚拟机安装时,启动界面会有三个选项,即local、centos6.9-x86_64、centos7.5-x86_64

如果要实现无人值守安装,就需要提前对/var/lib/tftpboot/pxelinux.cfg/default文件进行修改
将local和centos7.5-x86_64的配置删除,只保留centos6.9-x86_64部分的配置,修改如下:
[root@cobbler-node pxelinux.cfg]# vim default
DEFAULT menu
PROMPT 0
MENU TITLE kevin | come on!
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT centos6.9-x86_64

LABEL centos6.9-x86_64
        kernel /images/centos6.9-x86_64/vmlinuz
        MENU LABEL centos6.9-x86_64
        append initrd=/images/centos6.9-x86_64/initrd.img ksdevice=bootif lang=  text biosdevname=0 net.ifname=0 kssendmac  ks=http://172.16.60.222/cblr/svc/op/ks/profile/centos6.9-x86_64
        ipappend 2

MENU end

这样,在虚拟机安装时,启动界面就只保留了centos6.9-x86_64这一个选项,默认的20秒超时一过就可以进入该选项进行自动安装。
这样就可以做到了无人工干预的自动无人值守安装需求。

以上就挂载并导入了centos6.9和centos7.5两个系统镜像,在安装不同版本的系统时,就提前对/var/lib/tftpboot/pxelinux.cfg/default文件进行修改即可! 

其他cobbler相关维护知识

===================================================================
Cobbler管理

cobbler使用profile来为特定的需求类别提供锁需要安装的配置,即在distro的基础上通过提供kiskstart文件来生成一个特定的系统安装配置。
distro的profile可以出现在pxe的引导菜单中作为安装的选择之一:

指定kickstarts配置文件
# cobbler profile edit --name=centos7.5-x86_64 --kickstart=/var/lib/cobbler/kickstarts/sample_end.ks

修改centos7内核,将新安装完的系统的网卡名改为eth0
# cobbler profile edit --name=centos7.5-x86_64 --kopts='net.ifname=0 biosdevname=0'

新部署机器安装yum源,并同步。建议使用内网yum源,在这里使用阿里云yum源
# cobbler repo add --name=base --mirror=http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/ --arch=x86_64 --breed=yum 

同步yum源
# cobbler reposync

每次修改profile都需要同步
# cobbler sync 

===================================================================
自定义安装

system主要目的配置网络接口,通过system来固定机器的IP、掩码、网关、DNS、主机名、等等实现基础环境标准化。
根据机器的MAC地址,自动绑定IP,网关,dns等。

# cobbler system add --name=kevin-test --mac=00:0C:29:6E:41:CB --profile=centos7.5-x86_64
--ip-address=10.0.0.110 --subnet=255.255.255.0 --gateway=10.0.0.2 --interface=eth0
--static=1 --hostname=kevin-test --name-servers="114.114.114.114 8.8.8.8"

# cobbler sync
# cobbler system list

===================================================================
自定义登录界面

自定义装机页面 (修改下面文件中的如下内容)
# grep "wangshibo" /etc/cobbler/pxe/pxedefault.template
MENU TITLE wangshibo | http://wangshibo

同步
# cobbler sync 

===================================================================
使用Cobbler_web管理Cobbler

新版cobbler的web界面使用的是https,登录https://172.16.60.222/cobbler_web

配置cobbler_web的认证功能
cobbler_web支持多种认证方式,如authn_configfil、authn_ldap或authn_pam等,默认为authn_denyall,即拒绝所有用户登陆。

下面说明三种能认证用户登录cobbler_web的方式
1) 使用authn_pam模块认证cobbler_web用户
首先修改modules中[authentication]段的module参数的值为authn_pam。
接着添加系统用户,用户名和密码按需设定即可.

例如下面的命令所示,设置用户名为cblradmin, 密码为cblrpass
# useradd cblradmin
# echo 'cblrpass' | passwd --stdin cblradmin

而后将cblradmin用户添加至cobbler_web的admin组中。
修改/etc/cobbler/users.conf文件,将cblradmin用户名添加为admin参数的值即可,如下所示。
[admins] admin = "cblradmin"

最后重启cobblerd服务,通过http://YOUR_COBBLERD_IP/cobbler_web访问即可。
# systemctl restart cobblerd.service

2) 使用authn_configfile模块认证cobbler_web用户
首先修改modules.conf中[authentication]段的module参数的值为authn_configfile。
接着创建其认证文件/etc/cobbler/users.digest,并添加所需的用户即可。
需要注意的是,添加第一个用户时,需要为htdigest命令使用“-c”选项,后续添加其他用户时不能再使用;
另外,cobbler_web的realm只能为Cobbler。
如下所示, 用户名为cobbler,密码为cobbler@123
# htdigest -c /etc/cobbler/users.digest "Cobbler" cobbler
New password:                             #输入密码cobbler@123
Re-type new password:                     #再次输入密码cobbler@123

最后重启cobblerd服务,通过http://YOUR_COBBLERD_IP/cobbler_web访问即可。
# systemctl restart cobblerd.service

3) 使用cobbler默认的web账号密码认证
user:cobbler
pass:cobbler

===================================================================
查看cobbler版本
[root@cobbler-node ~]# cobbler --version
Cobbler 2.8.4

设置Web登录,cobbler 2.6以上版本已经无需修改
# sed -i 's/module = authn_denyall/module = authn_configfile/g' /etc/cobbler/modules.conf

设置Cobbler Web登录用户登录密码. 千万注意: cobbler_web的realm只能为Cobbler !!!
比如cobbler web登录的用户名为kevin, 密码为123456

[root@cobbler-node ~]# htdigest -c /etc/cobbler/users.digest "Cobbler" kevin
Adding password for kevin in realm Cobbler.
New password:                          #输入密码123456
Re-type new password:                  #再次输入密码123456
[root@cobbler-node ~]# systemctl restart cobblerd.service  

===================================================================
Cobbler相关选项说明
cobbler check          #检查cobbler配置
cobbler sync           #同步配置到dhcp/pxe和数据目录
cobbler list           #列出所有的cobbler元素
cobbler import         #导入安装的系统镜像
cobbler report         #列出各元素的详细信息
cobbler distro         #查看导入的发行版系统信息
cobbler profile        #查看配置信息
cobbler system         #查看添加的系统信息
cobbler reposync       #同步yum仓库到本地

导入镜像文件
命令:cobbler import --path=镜像路径 -- name=安装引导名 --arch=32位或64位
参数:
path 是镜像所挂载的目录
name 是导入到cobbler里面显示的名字
arch 是32位系统还是64位系统

导入kickstart文件
命令:cobbler profile add --name=list名 --distro=镜像 --kickstart=路径
参数:
name是表示添加的ks 的名字,用cobbler report可以看到这个名字
distro 是用哪个镜像,list的distros里面选择一个,需要版本相对应
kickstart 是具体的 ks 文件路径

同步DHCP、HTTPD
命令:cobbler sync
注,每次修改完dhcp.template之类的配置文件需要执行一次使其生效。

查看Cobbler列表
命令:cobbler list
注,列出Cobbler所有的元素。

删除相关列表
命令:cobbler distro/profile remove --name=要删除的引导文件名
删除指定 distro , 也就是镜像
删除指定的 profile 文件,也就是 ks

Cobbler安装后目录说明
cobbler配置文件目录/etc/cobbler:
/etc/cobbler/settings                #cobbler主配置文件
/etc/cobbler/iso/                    #iso模板配置文件
/etc/cobbler/pxe                     #pxe模板文件
/etc/cobbler/power                   #电源的配置文件
/etc/cobbler/users.conf              #Web 服务授权配置文件
/etc/cobbler/users.digest            #用于web访问的用户名密码配置文件
/etc/cobbler/dhcp.template           #DHCP服务的配置模板
/etc/cobbler/dnsmasq.template        #DNS服务的配置模板
/etc/cobbler/tftpd.template          #tftp服务的配置模板
/etc/cobbler/modules.conf            #Cobbler模块配置文件

cobbler数据目录/var/lib/cobbler:
/var/lib/cobbler/config/          #用于存放distros、systems、profiles等信息配置文件
/var/lib/cobbler/triggers         #用于存放用户定义的cobbler 命令
/var/lib/cobbler/kickstarts/      #默认存放kickstart文件
/var/lib/cobbler/loaders          #存放的各种引导程序

镜像数据目录/var/www/cobbler:
/var/www/cobbler/ks_mirror/       #导入的发行版系统的所有数据
/var/www/cobbler/images/          #导入发行版的Kernel和initrd镜像用于远程网络启动
/var/www/cobbler/repo_mirror/     #yum仓库存储目录

日志目录 /var/log/cobbler/:
/var/log/cobbler/install.log      #客户端的安装系统日志
/var/log/cobbler/cobbler.log      #cobbler日志

===================================================================
多查看错误日志
# less /var/log/cobbler/cobbler.log

为cobbler-web的用户cobbler重置密码 (重启cobbler服务才会生效)
# htdigest -c /etc/cobbler/users.digest "Cobbler" cobbler
# systemctl restart cobblerd.service

添加新用户usernam
# htdigest -c /etc/cobbler/users.digest "Cobbler"  usernam
# systemctl restart cobblerd.service

DHCP多网卡环境可以指定网卡
# vim /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=eth0

Cobbler + DTK 自动批量建立 RAID的操作记录

DTK (dell openmanage deployment toolkit) 套件,它包含了raidcfg 这个工具,使用他就可以自动化的完成 RAID 卡的设置,以及 syscfg 这个用来修改 BIOS 的工具。传统运维阶段,几十台甚至是上百台机器上的 raid 全部是人肉操作,一台机器从启动到配置完成关机最少 10min,非常的耗时低效。但是使用了DTK 之后,效率大大的提升。raidcfg 可以对机器上的磁盘的 raid 做增删,非常方便,适合大规模的机器部署,减少人肉操作出错的概率。

dtk_5.3.0_1908_Linux64_A00.iso 下载地址: https://pan.baidu.com/s/1vtBGnQiZ5G2BMaOzZuY_9w
提取密码: x59s

1) 挂载光盘文件
[root@cobbler-node ~]# mkdir /media
[root@cobbler-node ~]# mount -o loop dtk_5.3.0_1908_Linux64_A00.iso /media

2) 添加dtk5.3到cobbler中
[root@cobbler-node ~]# mkdir /var/www/cobbler/ks_mirror/dtk5.3
[root@cobbler-node ~]# cp -r /media/* /var/www/cobbler/ks_mirror/dtk5.3
[root@cobbler-node ~]# cobbler distro add --name=dtk5.3 --kernel=/var/www/cobbler/ks_mirror/dtk5.3/isolinux/SA.1 --initrd=/var/www/cobbler/ks_mirror/dtk5.3/isolinux/SA.2
[root@cobbler-node ~]# cobbler profile add --name=dtk5.3 --distro=dtk5.3

到上面为止都比较顺利,接下来添加 system 需要做一些改进,跟之前一样,--name, --profile, --mac-address 等这些肯定是要添加的,
--hostname, --dns-name 可以选择性的添加。最重要的是要在 –kopts 后面添加上 tftp 的相关脚本,否则需要做 raid 的机器获取不到配置文件:

3) 添加system的kopts参数
[root@cobbler-node ~]# cobbler system edit --name=Dell-R720 --kopts="share_type=tftp share_location=/raidcfg share_script=raid1.sh tftp_ip=172.16.60.222"

4) 在 /vat/lib/tftpboot/raidcfg 里面加上 raid1.sh 的脚本
[root@cobbler-node ~]# mkdir -p /vat/lib/tftpboot/raidcfg
[root@cobbler-node ~]# cat /var/lib/tftpboot/raidcfg/raid1.sh
cat > /tmp/raid10_6 <<EOF
[vdisk0]
controllerid=1
raid=10
readpolicy=ara
writepolicy=wt
stripesize=64
cachepolicy=e
adisk=0:0:1,0:1:1,0:2:1,0:3:1,0:4:1,0:5:1
EOF

echo "…………. rst all disks …………."
raidcfg -ctrl -c=1 -ac=rst
echo "………. 6 disks for raid10  ………."
raidcfg -i=/tmp/raid10_6
echo "…………… fast init ……………"
raidcfg -vd -c=1 -vd=0 -ac=fi
shutdown

如果在制作raid的时候会提示磁盘没有初始化,所以我把需要做raid1的两个硬盘手动初始化了下,如下:
[root@cobbler-node ~]# cat /var/lib/tftpboot/raidcfg/raid1.sh
echo "------ rst all disks ------"
raidcfg -ctrl -c=0 -ac=rst
echo "------non-raid to raid ------"
raidcfg -ad -ac=ctr -ad=0:0:1 -c=0
echo "------non-raid to raid ------"
raidcfg -ad -ac=ctr -ad=0:1:1 -c=0
echo "------ 2 disks for raid1  ------"
raidcfg -ctrl -ac=cvd -c=0 -ad=0:0:1,0:1:1 -r=1
echo "------ fast init ------"
raidcfg -vd -c=0 -vd=0 -ac=fi
poweroff

上面脚本中的raid10_6 这个文件里面的指令是怎么来的了?
直接输入 raidcfg 就可以看到所有的 help 选项了,看上去很多,其实整理一下非常的简单,熟悉几个常见缩写就知道是干嘛的了:
controller -> -ctrl
action -> -ac
controllerid -> -c
adisk, pdisk -> -ad, -pd
raid -> -r
size -> -sz
stripsize -> -ssz
cachepolicy -> -cp
writepolicy -> -wp
readpolicy -rp
vdisk -> -vd

其他的直接看 help 好了。

上面的全部操作完,执行"cobbler sync"重启即可。
[root@cobbler-node ~]# cobbler sync

以上是通过方式获取到脚本。除了使用tftp获取之外,应该还可以通过 nfs, http 等方式获取到,这个没有亲自实验过,可以后续尝试验证下~
上一篇:内存级别/栅栏 ( Memory Barriers / Fences ) – 翻译


下一篇:利用Python爬取豆瓣电影