一、 批量部署操作系统的前提 要想批量部署操作系统,得具备以下条件: 客户机支持pxe网络引导 服务器端和客户端建立网络通信(DHCP) 服务器端要有可供客户机开机引导的引导文件 服务器端的可引导文件还必须能传递到客户机(TFTP) 客户机无人值守安装包括安装定制的软件或服务(KICKSTART文件)
1. 认识一下PXE 预启动执行环境(PrebooteXecution Environment,PXE,也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统 PXE:支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicasttrivialfile transfer pro日 tocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成Client端自动化基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux等。 PXE是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行,无盘工作站就是通过PXE来进行启动的。PXE协议的成功运行需要解决以下两个问题:IP地址的分配,下载Linux内核和根文件系统。 IP地址的分配 可以用DHCPserver来给PXE client分配一个IP地址,DHCP Server是用来给DHCP Client动态分配IP地址的协议,不过由于这里是给PXE Client分配IP地址,所以在配置DHCP Server时,需要增加相应的PXE特有配置。 下载Linux内核和根文件系统 PXE client所在的ROM中,已经存在了TFTP Client。PXE Client使用TFTP Client,通过TFTP协议到TFTP Server上下载所需的文件。 2. PXE的工作原理 PXE client是需要安装操作系统的计算机,TFTP Server和DHCP Server运行在另外一台Server上。Bootstrap文件、配置文件、Linux内核以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下。PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及 Linux根文件系统。下图就是PXE工作的原理图:
简单总结一下: PXE Client发送广播包请求DHCP分配IP地址DHCP Server回复请求,给出IP地址以及Boot PXE Client从Server下载引导文件执行引导程序 3. PXE应用 PXE最直接的表现是,在网络环境下工作站可以省去硬盘,但又不是通常所说的无盘站的概念,因为使用该技术的PC在网络方式下的运行速度要比有盘PC快3倍以上。当然使用PXE的PC也不是传统意义上的TERMINAL终端,因为使用了PXE的PC并不消耗服务器的CPU,RAM等资源,故服务器的硬件要求极低。 网络克隆 PXE 现在最为广泛的应用一个是网吧的无盘技术。在有盘领域的网络维护和安装中PXE可以是最好用的网吧系统统一安装和维护的引导技术,PXE的引导速度和稳定性都是一流的! 4. 什么是Kickstart KickStart是一种无人职守安装方式,是由redhat公司为了解决无人值守安装操作系统而设计的。系统管理员通过创建一个单一的kickstart配置文件就可以实现自动化安装操作系统。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。
二. Cobbler介绍 1. 什么是Cobbler Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows。该工具使用python开发,小巧轻便(才15k行代码),使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP,DNS,以及yum包镜像。 Cobbler是一个应用程序,可以大批量的部署操作系统,可以同时部署多个不同的操作系统,配合kickstart文件可以定制和无人值守的方式部署操作系统。它对PXE进行二次开发和封装,同时提供二次开发接口。 Cobbler 的配置结构基于一组注册的对象。每个对象表示一个与另一个实体相关联的实体(该对象指向另一个对象,或者另一个对象指向该对象)。当一个对象指向另一个对象时,它就继承了被指向对象的数据,并可覆盖或添加更多特定信息。以下对象类型的定义为:
发行版(Distro): 表示一个操作系统。它承载了内核和initrd 的信息,以及内核参数等其他数据。 配置文件(Profile): 包含一个发行版、一个kickstart 文件以及可能的存储库,还包含更多特定的内核参数等其他数据。 系统(System): 表示要配给的机器。它包含一个配置文件或一个镜像,还包含 IP 和 MAC 地址、电源管理(地址、凭据、类型)以及更为专业的数据等信息。 存储库(Repo): 保存一个 yum 或 rsync 存储库的镜像信息。 镜像(Image): 可替换一个包含不属于此类别的文件的发行版对象(例如,无法分为内核和 initrd 的对象)。 基于注册的对象以及各个对象之间的关联,Cobbler 知道如何更改文件系统以反映具体配置。因为系统配置的内部是抽象的,所以您可以仅关注想要执行的操作。
2. Cobbler原理 Cobbler由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引导启动安装。
Server端 第一步,启动Cobbler服务 第二步,进行Cobbler错误检查,执行cobblercheck命令 第三步,进行配置同步,执行cobblersync命令 第四步,复制相关启动文件文件到TFTP目录中 第五步,启动DHCP服务,提供地址分配 第六步,DHCP服务分配IP地址 第七步,TFTP传输启动文件 第八步,Server端接收安装信息 第九步,Server端发送ISO镜像与Kickstart文件 Client端 第一步,客户端以PXE模式启动 第二步,客户端获取IP地址 第三步,通过TFTP服务器获取启动文件 第四步,进入Cobbler安装选择界面 第五步,客户端确定加载信息 第六步,根据配置信息准备安装系统 第七步,加载Kickstart文件 第八步,传输系统安装的其它文件 第九步,进行安装系统 三、 Cobbler安装与初始配置 1. 添加EPEL源 Cobbler位于EPEL源中,如果系统没有EPEL源,需要配置epel 2. Cobbler支撑服务安装 Cobbler虽然可以接管DHCP服务,但本身并不提供DHCP服务,而且yum安装 cobbler的时候也不会自动安装DHCP,但是会安装TFTP,HTTP及一些python的包。 # yum -y install dhcp 3. Yum安装cobbler # yum -y install cobbler 下面是安装完后系统中一些重要的文件位置及说明: #rpm-ql cobbler /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日志 |
4. Cobbler初始配置cobblercheck 将cobbler所依赖的服务设置为开机自启动,并开启服务,主要有httpd,dhcpd,tftp及cobbler本身。 #systemctl start httpd #systemctl enable httpd #systemctl start tftp #systemctl enable tftp #systemctl start dhcpd #systemctl enable dhcpd # systemctl start cobbler # systemctl enable cobbler Cobbler check命令主要是用来检查当前系统是否满足cobbler的运行要求,下面是第一次运行cobbler check命令的提示,按照提示一个一个修改即可。 # cobbler check The following are potential configuration items that you may wantto fix: 1 : The 'server' field in /etc/cobbler/settingsmust be set to something other than localhost, or kickstarting features willnot work. This should be a resolvable hostname or IP for theboot 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 shouldmatch the IP of the boot server on the PXE network. 3 : SELinux is enabled. Please review the following wiki page fordetails on ensuring cobbler works correctly in your SELinux environment: 4 : change 'disable' to 'no' in /etc/xinetd.d/tftp 5 : 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 youhave installed a *recent* version of the syslinux package installed and canignore this message entirely. Files in this directory, should you want tosupport all architectures, should include pxelinux.0, menu.c32, elilo.efi, andyaboot. The 'cobbler get-loaders' command is the easiest way to resolve theserequirements. 6 : enable and start rsyncd.service with systemctl 7 : debmirror package is not installed, it will be required tomanage debian deployments and repositories 8 : ksvalidator was not found, install pykickstart 9 : The default password used by the sample templates for newlyinstalled machines (default_password_crypted in /etc/cobbler/settings) is stillset to 'cobbler' and should be changed, try:default_password_crypted"openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'"to generate new one 10 : 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#这个提示是需要修改/etc/cobbler/settings 文件中server: 后面的IP地址,这个地址默认是127.0.0.1需要修改成可以通信的cobbler服务器本机真实的网卡地址。 #vi /etc/cobbler/settings server: 192.168.100.10 2#这个提示是说要想让PXE工作起来,需要设置/etc/cobbler/settings中next_server的ip地址,如果启用cobbler来管理DHCP就要修改,这个是dhcp服务器的地址,如果没有正确设置这个地址则会显示TFTP超时。 #vi /etc/cobbler/settings next_server: 192.168.100.10 3#这个提示要求关闭selinux #vi /etc/sysconfig/selinux SELINUX=disabled 4#提示要求启用tftp #vi /etc/xinetd.d/tftp service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 5#提示要求使用cobbler get-loaders从网上下载引导程序 # cobbler get-loaders 6#提示要求启动 rsyncd服务 # systemctl start rsyncd 7#提示deb的包没有被安装,如果不打算部署debian系统可以忽略 8#提示要求安装pykickstart #yum –y pykickstart 9#提示要求修改默认密码"openssl passwd -1 -salt 'random-phrase-here''your-password-here'"并替换settings中default_password_crypted引号中的内容 # openssl passwd -1 -salt 'frank' 'frank' 1frank$.XItdMFNYz07ISKS9q9Jx0 #vi /etc/cobbler/settings default_password_crypted: " 1frank$.XItdMFNYz07ISKS9q9Jx0" 10#提示如果使用电源管理模块,需要安装cman 或者 fence-agents # yum install fence-agents-all 以上步骤全部执行完成后,重启cobbler服务,并使用cobbler sync保存修改,也可以每修改一个提示执行一下。直到没有提示,或可以忽略某些提示为止。 Cobbler常用命令 查看cobbler帮助 # cobbler --help usage ===== cobbler<distro|profile|system|repo|image|mgmtclass|package|file> ... [add|edit|copy|getks*|list|remove|rename|report] [options|--help] cobbler<aclsetup|buildiso|import|list|replicate|report|reposync|sync|validateks|version|signature|get-loaders|hardlink>[options|--help] distro,profile,system是cobbler三大核心组件, 一 般情况下这三个部分配置好就可以实现自动化部署了。 Distro 主要用来定义和设置系统发行版本,里包含了系统的内核,引导文件,以及安装包等内容,就相当于一个LINUX系统的ISO镜像。如:多个发行版本,同一发行版不同版本号。 Profile 主要用来定义kickstart配置文件,安装时依据配置文件进行定制化安装,配置此项时要和distro进行关联。 System 主要用来定义内核参数,电源管理,计算机名,网络接口参数等(客户机),如:根据mac地址配置IP地址,通过和profile,distro关联实现自动化安装。 Repo 主要用来配置yum镜像信息。 Cobbler的帮助信息查看都是这个格式:cobbler 子命令 –help 如: 查看 distro的帮助信息
# cobbler distro --help
usage
=====
cobbler distro add
cobbler distro copy
cobbler distro edit
cobbler distro find
cobbler distro list
cobbler distro remove
cobbler distro rename
cobbler distro report Cobbler distro命令 该命令主要用于对distro进行增加,编辑,拷贝,查找,移除,重命名操作。 使用格式为(以add为例): cobbler distro add --name=string --kernel=path --initrd=path [--kopts=string] [--kopts-post=string] [--ksmeta=string] [--arch=x86|x86_64|ia64] [--breed=redhat|debian|suse] [--template-files=string] 其中: Name | 用来指定系统的版本。如:RHEL7 | Kernel | 用来指定一个内核镜像文件的绝对路径。 | Initrd | 用来指定一个RAM镜像文件的绝对路径。 | Kopts | 用来指定内核命令行参数 | Kopts-post | 同上 | Arch | 用来指定操作系统版本平台,如:X86_64 | Ksmeta | 是用来替代kickstart变量的高级特性 | Breed | 用来指定操作系统厂家,如:redhat Ubuntu,centos等 |
举例:
# cobbler distro add --name=Centos6.6-x86_64 --kernel=/mnt/isolinux--initrd=/mnt/isolinux --arch=x86_64 --breed=redhat
# cobbler distro list
Centos6.6-x86_64
Centos7-dvd-x86_64
# cobbler distro rename –name=Centos6.6-x86_64 –newname=Centos6.9-x86_64
#cobbler distro list
Centos6.9-x86_64
Centos7-dvd-x86_64 Cobbler profile命令 该命令主要用于对profile进行增加,编辑,拷贝,查找,移除,重命名等操作。 使用格式为(以add为例): cobbler profile add --name=string --distro=string[--kickstart=path] [--kopts=string] [--ksmeta=string] [--virt-file-size=gigabytes] [--virt-ram=megabytes] [--virt-type=string] [--virt-cpus=integer] [--virt-path=string] [--virt-bridge=string] [--server] [--parent=profile] Name | 用来指定一个配置文件的描述名称 | Distro | 用来关联distro | Kickstart | 用来指定kickstart文件路径 | Virt-* | 与虚拟化有关的设置 | Server | 当客户机所在子网无法访问cobbler服务器的时候,这个设置才用得着。 | Parent | 这是一个高级特性,用来指定上一级的配置文件,可以继承父级指定的参数 |
举例:
# cobbler profile add --name=Centos6.9-x86_64 --distro=Centos6.9-x86_64--kickstart=/var/lib/cobbler/kickstarts/centos6.9-x86_64.cfg
# cobbler profile list
Centos6.9-x86_64
Centos7-dvd-x86_64 Cobbler system命令 此命令主要用于定义客户机的网络接口参数,如指定IP MASK GATEWAY等。 cobbler system add --name=string --profile=string[--mac=macaddress] [--ip-address=ipaddress] [--hostname=hostname] [--kopts=string] [--ksmeta=string] [--kickstart=path] [--netboot-enabled=Y/N] [--server=string] [--gateway=string] [--dns-name=string] [--static-routes=string] [--power-address=string] [--power-type=string] [--power-user=string] [--power-pass=string] [--power-id=string] Name | 指定一个名字 | Profile | 指定一个profile | Mac | 指定客户机的MAC地址,这是实现自动化安装的必要参数,否则客户机通过网络引导后会停留在引导菜单那一步。 | Ip-address | 配置客户机的IP地址 | Hostname | 配置客户机的计算机名 | Kickstart | 指定kickstart配置文件的路径 | Netboot-enable | 是否开启网络启动 | Server | 指定cobbler服务器的地址 | Gateway | 指定客户机的网关 | Dns-name | 指定客户机的DNS域名 |
Static-routers 无需关心,大部分机器不需设置此项 [--power-address=string] [--power-type=string][--power-user=string] [--power-pass=string] [--power-id=string]这些参数与电源管理相关。 举例:
# cobbler system add --name=Centos6.9-x86_64--kickstart=/var/lib/cobbler/kickstarts/centos6.9-x86_64.cfg--mac=00:0C:29:41:FC:6C --hostname=backup --profile=Centos6.9-x86_64--interface ens33
# cobbler list
distros:
Centos6.9-x86_64
Centos7-dvd-x86_64
profiles:
Centos6.9-x86_64
Centos7-dvd-x86_64
systems:
Centos6.9-x86_64
repos:
images:
mgmtclasses:
packages:
files:
# cobbler system edit --name=Centos6.9-x86_64--kickstart=/var/lib/cobbler/kickstarts/centos6.9-x86_64.cfg--mac=00:0C:29:41:FC:6C --hostname=backup --profile=Centos6.9-x86_64--interface eth0 Cobbler repo命令 此命令主要用于指定一个仓库源镜像,不仅仅用import方式导入的安装树中的源,还可以是rsync://URL,SSH 本地源,http://URL,FTP://URL,或者是本地源。 命令格式: cobbler repo add --mirror=url --name=string [--rpmlist=list] [--creatrepo-flags=string] [--keep-updated=Y/N][--priority=number] [--arch=string] [--mirror-locally=Y/N] [--breed=yum|rsync|rhn] Mirror | 指定镜像仓库源的地址 | Name | 定义名称 | Rpmlist | 后面跟的是以空格分隔的软件包的名称列表,仅在http://url,ftp://url模式下生效。这种方式可以节省时间,空间和带宽。因为在这个列表中的包会被安装,其它的都不安装。 | Createrepo-flags | 当cobbler reposync运行时向其传递一个特殊的参数,默认为“-c cache” | Keep-updated | 是否时刻保持repo的更新 | Priority | 优先级,数字越小优先级越高,默认99.作用于所有cobbler镜像源。 | Arch | 定义仓库使用什么样的架构,默认使用当前系统架构 | Mirror-locally | 定义使用本地源还是互联网源 | Breed | 通常无需定义,系统就知道我们想干什么,当然你也以指定特殊的。 |
举例:
# cobbler repo add--mirror=https://mirrors.aliyun.com/centos/7.3.1611/os/x86_64/--name=centos7.3-x86_64
# cobbler repo list
centos7.3-x86_64
# cobbler reposync #同步repo,会从网上下载centos7.3.1611的安装树到这个位置/var/www/cobbler/repo_mirror
看看最终的配置:
# cobbler list
distros:
Centos6.9-x86_64
Centos7-dvd-x86_64
profiles:
Centos6.9-x86_64
Centos7-dvd-x86_64
systems:
Centos6.9-x86_64
repos:
centos7.3-x86_64
images:
mgmtclasses:
packages:
files:
|