Cobbler实现自动化安装操作系统
基本原理
PXE
- PXE(Pre-bootExecution Environment)预启动执行环境,通过网络接口启动计算机,支持Client通过网络从Server下载映像,并由此通过网络启动操作系统;在启动过程中,Client要求Server分配IP地址,再用TFTP下载一个启动软件包到本机内存中执行,由这个启动软件包完成Client基本的软件设置并安装操作系统。要达成PXE有两个必须的条件:
(1) Client的网卡必须要支持PXE功能,并且开机时选择从网卡启动;
(2) 完整的PXE Server必须要提供含有DHCP、TFTP服务,还要加上NFS/FTP/HTTP(选择一样即可)等提供安装文件(安 装镜像的 解压文件)。
KickStart
- KickStart是一种无人值守的安装方式,它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。
- 可以简单理解为一个自动安装应答配置管理程序。通过读取这个配置文件,系统知道怎么去分区,要安装什么包,配什么IP,优化怎样的内核参数等等。其主要组成部分包括:
- KickStart安装选项,包含语言的选择,防火墙,密码,网络,分区的设置等;
- %Pre部分,安装前解析的脚本,通常用来生成特殊的ks配置,比如由一段程序决定磁盘分区等;
- %Package部分,安装包的选择,可以是@core这样的group形式,也可以是vim-*这样的包形式;
- %Post部分,安装后执行的脚本,通常用来做系统的初始化设置,比如启动的服务,相关的设定等
PXE+KickStart的工作流程
1.PXE客户机发出DHCP请求,向服务器申请IP地址。
2.DHCP服务器响应PXE客户机的请求,自动从IP地址池中分配一个IP地址给PXE客户机,并且告知PXE客户机:TFTP(简单文件传输协议)服务器的IP地址和PXE引导程序文件pxelinux.0。
3.PXE客户机向TFTP服务器发起获取pxelinux.0引导程序文件的请求。
4.TFTP服务器响应PXE客户机的请求,将其共享的pxelinux.0文件传输给PXE客户机。
5.PXE客户机通过网络来启动到系统安装主界面。
6.PXE客户机向文件共享服务器发起获取centos或windows系统安装文件的请求。
7.文件共享服务响应PXE客户机的请求,将共享的系统安装文件传输给PXE客户机。
8.PXE客户机进入到安装提示向导界面,用户需要手动来完成系统的操作。
cobbler对应关系

Cobbler的配置结构基于一组注册的对象。每个对象表示一个与另一个实体相关联的实体。当一个对象指向另一个对象时,它就继承了被指向对象的数据,并可覆盖或添加更多特定信息。
- 发行版(
distros): 表示一个操作系统。它承载了内核和initrd的信息,以及内核参数等其他数据。 - 配置文件(
profiles):包含一个发行版、一个kickstart文件以及可能的存储库,还包括更多特定的内核参数等其他数据。 - 系统(
systems):表示要配给的机器。它包括一个配置文件或一个镜像、IP和MAC地址、电源管理(地址、凭据、类型)以及更为专业的数据等信息。 - 镜像(
images):可以替换一个保函不屑于此类别的文件的发行版对象(例如,无法分为内核和initrd的对象)。
cobbler集成的服务
- PXE服务支持
- DHCP服务管理
- DNS服务管理
- 电源管理
- Kickstart服务支持
- YUM仓库管理
- TFTP
- Apache
Cobbler工作原理

Server端
- 第一步:启动Cobbler服务
- 第二步:进行Cobbler错误检查,执行cobbler check命令
- 第三步:进行配置同步,执行cobbler sync命令
- 第四步:复制相关启动文件到TFTP目录中
- 第五步:启动DHCP服务,提供地址分配
- 第六步:DHCP服务分配IP地址
- 第七步:TFTP传输启动文件
- 第八步:Server端接收安装信息
- 第九步:Server端发送ISO镜像和Kickstart文件
Client端
- 第一步:客户端以PXE模式启动
- 第二步:客户端获取IP地址
- 第三步:通过TFTP服务器获取启动文件
- 第四步:进入Cobbler安装选择界面
- 第五步:客户端确定加载信息
- 第六步:根据配置信息准备安装系统
- 第七步:加载Kickstart文件
- 第八步:传输系统安装的其它文件
- 第九步:进行系统安装
cobbler安装
环境配置
网络环境
- 虚拟机网卡采用NAT模式或者仅主机模式,不要使用桥接模式,因为后面会搭建DHCP服务器,在同一个局域网多个DHCP服务会有冲突。
- VMware的NAT模式的dhcp服务也关闭,避免干扰。
linux虚拟机环境
- 关闭防火墙和selinux
[root@cobbler ~]# systemctl stop firewalld.service
[root@cobbler ~]# setenforce 0
[root@cobbler ~]# sed -i 's/^SELINUX=.*/^C
[root@cobbler ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
[root@cobbler ~]# cat /etc/selinux/config | grep "^SELINUX"
SELINUX=disabled
SELINUXTYPE=targeted
[root@cobbler ~]#安装cobbler
# 配置epel源
[root@cobbler ~]# yum -y install epel-release
# 更改hostname (方便辨认)
hostnamectl set-hostname cobbler
## 安装及dhcp httpd xinetd cobbler-web
cobbler-web 提供 web 界面
yum 安装 cobbler 时包含 httpd,tftp-server
yum install dhcp cobbler查看安装后相关文件
cobbler 目录说明
[root@cobbler ~]# 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日志启动服务
[root@cobbler ~]# systemctl enable httpd.service
[root@cobbler ~]# systemctl start httpd.service
[root@cobbler ~]# systemctl enable tftp.socket
[root@cobbler ~]# systemctl start tftp.socket
[root@cobbler ~]# systemctl enable cobblerd.service
[root@cobbler ~]# systemctl start cobblerd.service检测并排除错误
[root@cobbler ~]# cobbler check
1.配置服务IP
编辑/etc/cobbler/settings文件
scm_track_enabled:0
scm_track_mode:"git"
server: 192.168.134.136
2.配置下一个(还是他)
next_server:192.168.134.136
3.TFTP配置相关
4.下载 loaders
cobbler get-loadrs
5.执行数据同步
cobbler sync
systemctl restart coblerd.service
cobbler check
6.安装ks文件语法检查工具
yum install pykickstart
7.修改kickstart配置初始化密码
[root@cobbler ~]# openssl passwd -1 123456
$1$uT5GLcOh$13HvFB/laOna639EHwcdX1启动DHCP
vim /etc/cobbler/settings
manage_dhcp: 1 #设置为1 ,表示cobbler管理dhcp
改配置文件
/etc/cobbler/dhcp.templat
subnet 192.168.10.0 netmask 255.255.255.0 {
option routers 192.168.10.2; ##路由器
option domain-name-servers 192.168.10.2; ##域名服务器
option subnet-mask 255.255.255.0; ##子网掩码
range dynamic-bootp 192.168.10.100 192.168.10.250; ##地址池
default-lease-time 21600; #默认租期
max-lease-time 43200;#最大租期
next-server $next_server;
##
安装dhcp服务
yum install dhcp
启动
[root@cobbler ~]# systemctl enable dhcpd
[root@cobbler ~]# systemctl start dhcpd建立cobbler yum 源(安装系统的源)
[root@cobbler ~]# mount /dev/cdrom /mnt/ # 挂载CentOS7的系统镜像。
# 导入系统镜像
[root@cobbler ~]# cobbler import --path=/mnt/ --name=CentOS-7.1-x86_64 --arch=x86_64
# --path 镜像路径
# --name 为安装源定义一个名字
# --arch 指定安装源是32位、64位、ia64, 目前支持的选项有: x86│x86_64│ia64
# 安装源的唯一标示就是根据name参数来定义,本例导入成功后,安装源的唯一标示就是:CentOS-7.1-x86_64,如果重复,系统会提示导入失败。
[root@cobbler ~]# cobbler distro list # 查看镜像列表
CentOS-7.1-x86_64
# 镜像存放目录,cobbler会将镜像中的所有安装文件拷贝到本地一份,放在/var/www/cobbler/ks_mirror下的CentOS-7.1-x86_64目录下。因此/var/www/cobbler目录必须具有足够容纳安装文件的空间。
[root@cobbler ~]# cd /var/www/cobbler/ks_mirror/
[root@cobblerks_mirror]# ls
CentOS-7.1-x86_64 config
[root@cobbler ks_mirror]# ls CentOS-7.1-x86_64/
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBLcobbler常用命令
命令 | 作用 |
cobbler check | 核对当前设置是否有问题 |
cobbler list | 列出所有的cobbler元素 |
cobbler report | 列出元素的详细信息 |
cobbler sync | 同步配置到数据目录,更改配置最好都要执行下 |
cobbler reposync | 同步yum仓库 |
cobbler distro | 查看导入的发行版系统信息 |
cobbler system | 查看添加的系统信息 |
cobbler profile | 查看配置信息 |
cobbler | 重要的参数 |
cobbler import --path=/media/ --name=CentOS-7.7-x86_64 --arch=x86_64 | --path 镜像路径# --name 为安装源定义一个名字# --arch 指定安装源是32位、64位、ia64, 目前支持的选项有: x86│x86_64│ia64# 安装源的唯一标示就是根据name参数来定义,本例导入成功后,安装源的唯一标示就是:CentOS-7.7-x86_64,如果重复,系统会提示导入失败。 |
















