首页
登录 | 注册

cobbler原理

一.PXE说明
1.预启动执行环境(Preboot eXecution Environment,PXE,也被称为预执行环境)是让计算机通过网卡独立地使用数据设备(如硬盘)或者安装操作系统。
通过使用像网际协议(IP)、用户数据报协议(UDP)、动态主机设定协定(DHCP)、小型文件传输协议(TFTP)等几种网络协议和全局唯一标识符(GUID)、通用网络驱动接口(UNDI)、通用唯一识别码(UUID)的概念并通过对客户机(通过PXE自检的电脑)固件扩展预设的API来实现目的。
PXE客户机(PXEclient)这个术语是指机器在PXE启动过程中的角色。一个PXE客户机可以是一台服务器、桌面级电脑、笔记本电脑或者其他装有PXE启动代码的机器。


客户机的固件为接受到可用的PXE启动服务器,要在网络中尝试找出PXE重定向服务(DHCP代理)。在分析返回的包后,固件会向合适的启动服务器询问网络自检程序(NBP)的路径,并且通过TFTP协议下载到电脑的内存中,有可能会去校验它,最后执行它。当只有全部的PXE客户机只使用一个NBP时,全部的PXE客户机可能会被指定是用BOOTP协议,从而不需要DHCP代理,但是仍然需要TFTP启动服务。


PXE协议大致上结合了DHCP和TFTP,DHCP用于查找合适的启动服务器,TFTP用于下载初始引导程序和附加文件。为了开始一个PXE自检会话,PXE固件广播一个带有明确的PXE选项DHCPDISCOVER包(扩展DHCPDISCOVER)到67/UDP端口(DHCP服务器端口)。PXE选项是PXE固件有PXE能力的鉴定,但是会被一般的DHCP服务忽略。当固件受到从这样的服务受到DHCPOFFER包时,它会通过要求其提供配置信息来自我配置。


当PXE重定向服务(DHCP代理)收到一个扩展DHCPDISCOVER包时,它会通过发送一个带有明确的PXE选项DHCPDISCOVER包到PXE客户机的68/UDP端口(DHCP客户机端口)来回答。一个扩展DHCPDISCOVER包主要包含:
        一个PXE发现控制领域,以决定是使用多播,广播(网路)或单播来联系PXE启动服务器;

        一个列出可用的PXE启动服务器类型的地址表;

        一个代表每个一个PXE启动服务器类型的条目单;

        一个带有提示用户按下哪一个键来看到启动菜单的PXE启动菜单;

        一个超过多长时间就启动第一启动菜单的超时数值;

一个DHCP服务器可能在同一主机上运行两个DHCP代理服务,尽管两个服务不可以共享67/UDP端口。DHCP代理服务在4011/UDP端口上运行,要求从客户端来的DHCPDISCOVER包变成DHCPREQUEST包。DHCP服务器在其发送的DHCPOFFER包中加入特殊的PXE选项组合,这样PXE客户端知道可以在同一个主机的4011/UDP端口找到一个DHCP代理服务。


和一个正在启动系统的启动服务联系必须有一个IP地址(可能来自DHCP服务)。通过多播或单播一个带有特殊的PXE选项的DHCPREQUEST包(扩展DHCPREQUEST包)到4011/UDP端口,或者广播(网路)这种包到67/UDP端口。这种包包含有PXE启动服务类型和PXE启动层,一个守护进程允许运行多个启动服务类型。一个扩展DHCPREQUEST包可能是一个DHCPINFORM包。


PXE工作原理图:

简单总结就是:
PXE Client发送广播包请求DHCP分配IP地址;

DHCP Server回复请求,给出IP地址以及Boot Server的地址;

交给TFTP程序下载一个引导文件执行引导程序;

二.kickstart说明
KickStart是一种无人值守安装方式。它的工作原理是通过记录安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。
我们可以简单理解为一个自动安装应答配置管理程序。通过读取这个配置文件,系统知道怎么去分区,要安装什么包,配什么IP,优化什么内核参数等等。
 
其主要有以下部分组成:
        Kickstart安装选项:包含语言的选择,防火墙,密码,网络,分区的设置等;

        %Pre部分:安装前解析的脚本,通常用来生成特殊的ks配置,比如由一段程序决定磁盘分区等;

        %Package部分:安装包的选择,可以是@core这样的group的形式,也可以是这样vim-*包的形式;

        %Post部分:安装后执行的脚本,通常用来做系统的初始化设置。比如启动的服务,相关的设定等;


kickstart流程:
大体流程:DHCP(获取IP,寻找TFTP)>TFTP(交换获取开机启动文件)>HTTP(加载安装文件)>本地安装

详细流程:


ks.cfg文件参数详解:http://www.linuxidc.com/Linux/2013-07/87299.htm


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


2.安装方式的新旧对比
以前自动化安装系统得先设置一个网络环境,可是设置网络环境涉及到许多步骤,才能为开始安装系统做好准备。你必须:
        配置服务,比如 DHCP、TFTP、DNS、HTTP、FTP 和 NFS等;

        在DHCP和TFTP配置文件中填入各个客户端机器的信息;

        创建自动部署文件(比如 kickstart 和 autoinst);

        将安装媒介解压缩到 HTTP/FTP/NFS 存储库中;

这个过程并不简单,而且手动注册每个必须配置的客户端机器可能很麻烦。对配置一台机器的任何参数更改(比如要使用一个不同的操作系统),都需要对配置进行手动干预,并有可能对自动部署文件进行手动干预。当机器数量增加时,如果不高度重视文件组织的条理性,TFTP 目录等元素就可能变得混乱。


Cobbler通过为机器配置的所有方面创建一个中央管理点,从而解决了这些不足。Cobbler可重新配置服务,创建存储库,解压缩操作系统媒介,代理或集成一个配置管理系统,控制电源管理等。Cobbler 创建了一个抽象层,您可在其中运行 “add new repository” 或 “change client machine operating system” 等命令。Cobbler负责处理所有事情:创建或更新配置文件,重新启动服务,或者将媒介解压到新创建的目录中。它的目的是隐藏所有与系统相关的问题,以便您可专注于任务本身。


3.cobbler提供的功能
使用Cobbler,无需进行人工干预即可安装机器。Cobbler设置一个PXE引导环境(它还可使用yaboot支持PowerPC),并控制与安装相关的所有方面,比如网络引导服务(DHCP和TFTP)与存储库镜像。当希望安装一台新机器时,Cobbler可以:


3.1使用一个以前定义的模板来配置DHCP服务(如果启用了管理DHCP)将一个存储库(yum或rsync)建立镜像或解压缩一个媒介,以注册一个新操作系统在DHCP配置文件中为需要安装的机器创建一个条目,并使用您指定的参数(IP和MAC地址)在TFTFP服务目录下创建适当的PXE文件,重新启动DHCP服务以反映更改,重新启动机器以开始安装(如果电源管理已启用);


3.2Cobbler支持众多的发行版:RedHat、Fedora、CentOS、Debian、Ubuntu和SUSE。当添加一个操作系统(通常通过使用ISO文件)时,Cobbler知道如何解压缩合适的文件并调整网络服务,以正确引导机器。


3.3Cobbler可使用kickstart模板。基于RedHat或Fedora的系统使用kickstart文件来自动化安装流程。通过使用模板,您就会拥有基本的kickstart模板,然后定义如何针对一种配置文件或机器配置而替换其中的变量。
例如,一个模板可能包含两个变量$domain和$machine_name。在Cobbler配置中,一个配置文件指定domain=mydomain.com,并且每台使用该配置文件的机器在machine_name变量中指定其名称。该配置文件中的所有机器都使用相同的kickstart安装且针对domain=mydomain.com进行配置,但每台机器拥有其自己的机器名称。您仍然可以使用kickstart模板在不同的域中安装其他机器并使用不同的机器名称。
 
3.4为了协助管理系统,Cobbler可通过fencescripts连接到各种电源管理环境。Cobbler支持apc_snmp、bladecenter、bullpap、drac、ether_wake、ilo、integrity、ipmilan、ipmitool、lpar、rsa、virsh和wti。要重新安装一台机器,可运行reboot system foo 命令, 而且Cobbler会使用必要的凭据和信息 来为您运行恰当的fencescripts (比如机器插槽数);


3.5除了这些特性,还可使用一个配置管理系统(CMS)。您有两种选择:该工具内的一个内部系统,或者集成一个现有的外部 CMS,比如Chef或Puppet。
借助内部系统,您可以指定文件模板,这些模板会依据配置参数进行处理(与kickstart模板的处理方式一样),然后复制到您指定的位置。如果必须自动将配置文件部署到特定机器,那么此功能很有用。


3.6使用koan客户端,Cobbler可从客户端配置虚拟机并重新安装系;


4.cobbler的组成
Cobbler的配置结构基于一组注册的对象。每个对象表示一个与另一个实体相关联的实体(该对象指向另一个对象,或者另一个对象指向该对象)。当一个对象指向另一个对象时,它就继承了被指向对象的数据,并可覆盖或添加更多特定信息。
以下对象类型的定义为:
        发行版:表示一个操作系统。它承载了内核和 initrd 的信息,以及内核参数等其他数据;

        配置文件:包含一个发行版、一个kickstart文件以及可能的存储库,还包含更多特定的内核参数等其他数据;

        系统:表示要配给的机器。它包含一个配置文件或一个镜像,还包含IP和MAC ;
    
        地址、电源管理(地址、凭据、类型)以及更为专业的数据等信息;

        存储库:保存一个yum或rsync存储库的镜像信息;

        镜像:可替换一个包含不属于此类别的文件的发行版对象(例如,无法分为内核和 initrd 的对象);

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

cobbler各对象的关系:


5.cobbler的工作流程



简单说明:
Server端
第一步,启动Cobbler服务;

第二步,进行Cobbler错误检查——执行cobbler check命令;

第三步,进行配置同步——执行cobbler sync命令;

第四步,复制相关启动文件文件到TFTP目录中;

第五步,启动DHCP服务,提供地址分配;

第六步,DHCP服务分配IP地址;

第七步,TFTP传输启动文件;

第八步,Server端接收安装信息;

第九步,Server端发送ISO镜像与Kickstart文件;

Client端:
第一步,客户端以PXE模式启动;

第二步,客户端获取IP地址;

第三步,通过TFTP服务器获取启动文件;

第四步,进入Cobbler安装选择界面;

第五步,客户端确定加载信息;

第六步,根据配置信息准备安装系统;

第七步,加载Kickstart文件;

第八步,传输系统安装的其它文件;

第九步,进行安装系统;



参考文章:
http://www.linuxidc.com/Linux/2013-11/92302.htm

http://www.361way.com/cobbler-principle/4328.html

http://cwtea.blog.51cto.com/4500217/834991/


相关文章

  • PHP CLI应用的调试原理
    所谓CLI应用,是指这种脚本文件不需要任何Web服务器即可运行,当然, PHP运行时还是需要的. ; XDEBUG Extension ; xdebug.remote_enable = off xdebug.profiler_enable_ ...
  • 华为Easy IP和NAT Server实现原理
    本文继续介绍华为另两种NAT实现方式的工作原理. 6.1.3 Easy IP实现原理 Easy IP方式的实现原理与上节介绍的地址池NAPT转换原理类似,可以算是NAPT的一种特例,不同的是Easy IP方式可以实现自动根据路由器上WAN接 ...
  • 华为Basic NAT和NAPT实现原理
    NAT是路由器的一项非常重要,且应用非常广泛的技术,但许多读者对NAT的各种实现方式的工作功能原理一直没有搞清楚,其实很简单.本篇先介绍两种NAT实现方式的工作原理,下篇再介绍另两种实现方式的工作原理. 6.1.2 Basic NAT实现原 ...
  • http://blog.csdn.net/ilibaba/archive/2009/03/17/3996962.aspx连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对 ...
  • 学过Java的人都知道,Java是少数的集中支持多线程的语言之一,大多数的语言智能运行单独的一个程序块,无法同时运行不同的多个程序块,Java的多线程机制弥补了这个缺憾,他可以让不同的程序块一起运行,这样可以让程序运行更加顺畅,同时也达到了 ...
  • 李哲 - MAY 13, 2015 语言本身 Ruby语言支持语法级别的系统,框架,甚至语言本身的方法复写,一般叫做元编程(meta programming), 此基础之上还有一些术语为mixin,方法的动态定义,运行时类改写等等,这些技术 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.012 s.
京ICP备10005923号