目录
4.6 通过cobbler check 核对当前设置是否有问题
1.背景介绍
服务器系统的部署是一件单一且重复性较高的事,那么该怎样避免“重复造轮子”?本节主要介绍Cobbler及其部署实践,通过配置Kickstart的无人值守安装方式,服务器通过PXE启动方式,实现通过网络就可以在服务器上自动部署系统的目的。
2. PEX 原理介绍
2.1 PEX 原理与概念
PEX是预启动执行环境(preboot execution environment)的简称,也被称为预执行环境,是让计算机通过网卡独立地使用数据设备(如硬盘)或者安装操作系统的环境。它是基于TCP/IP、DHCP、TFTP等Internet协议之上的扩展网络协议,提供了一种从网络启动的新技术。严格来说,PXE并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是在要安装的计算机中必须包含一个PXE支持的网卡(NIC),即网卡中必须要有PXE client。PXE协议可以使计算机通过网络启动。此协议分为client端和server端,而PXE client则在网卡的ROM中。当计算机引导时,BIOS把PXE client调入内存中执行,然后由PXE client将放置在远端的文件通过网络下载到本地运行。运行PXE协议需要设置DHCP server和TFTP server。 DHCP server会给PXE client(将要安装系统的主机)分配一个IP地址,由于是给PXEclient分配IP地址,所以在配置DHCP server时需要增加相应的PXE设置。此外,在PXE client的ROM中,已经存在了TFTP client,那么它就可以通过TFTP协议到TFTPserver上下载所需的文件了。
2.2 PEX 工作原理示意图
3. Cobbler 简介
3.1 Cobbler 概述
Cobbler 由Python语言开发,是对PXE、Kickstart和DHCP的封装。它融合了很多特性,提供了CLI和Web的管理形式,更加方便地实行网络安装。同时,Cobbler也提供了API接法田甘他语言也很容易做护展。匕个仪可以女农物埋机,同时也支持KVM.XEN
和GuestOS的安装。
3.2 Cobbler
Cobbler的配置结构基于一组注册的对象,每个对象表示一个与另一个实体相关联的实体(该对象指向另一个对象,或者另一个对象指向该对象)。当一个对象指向另一个对象时,它就继承了被指向对象的数据,并可覆盖或添加更多特定信息。对象类型的定义如下。
发行版:表示一个操作系统。它承载了内核和initrd的信息,以及内核参数等其他数据。
配置文件:包含一个发行版、一个Kickstart文件以及可能的存储库,还包含更多特定的内核参数等其他数据。
系统:表示要配给的机器。它包含一个配置文件或一个镜像,还包含IP和MAC地址、电源管理(地址、凭据、类型)以及更为专业的数据等信息。
存储库:保存一个yum或Rsync存储库的镜像信息。
镜像:可替换一个包含不属于此类别的文件的发行版对象(例如,无法分为内核和initrd的对象)。
基于注册的对象以及各个对象之间的关联,Cobbler知道如何更改文件系统以反映具体配置。因为系统配置的内部是抽象的,所以我们可以仅关注想要执行的操作。Cobbler对象关系如下图所示。
3.3 Cobbler 工作原理
Cobbler 工作原理如下图所示:
图中server端的工作步骤如下:
第一步,启动Cobbler服务;
第二步,进行Cobbler错误检查,执行Cobbler check命令;
第三步,进行配置同步,执行Cobbler sync命令;
第四步,复制相关启动文件到TFTP目录中;
第五步,启动DHCP服务,提供地址分配;
第六步,DHCP服务分配IP地址;
第七步,TFTP传输启动文件;
第八步,server端接收安装信息;
第九步,server端发送ISO镜像与Kickstart 文件。
client端的工作步骤如下:
第一步,客户端以PXE模式启动;
第二步,客户端获取IP地址;
第三步,通过TFTP服务器获取启动文件;
第四步,进人Cobbler安装选择界面;
第五步,客户端确定加载信息;
第六步,根据配置信息准备安装系统;
第七步,加载Kickstart文件;
第八步,传输系统安装的其他文件;
第九步,进行安装系统。
3.4 Cobbler 相关目录说明
(1)Cobbler 配置文件目录 /etc/cobbler 说明:
/etc/cobbler/settings cobbler :主配置文件
/etc/cobbler/iso/ :iso模板配置文件
/etc/cobbler/pxe : PXE模板文件
/etc/cobbler/power : 电源配置文件
/etc/cobbler/user.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模块的配置文件
(2)Cobbler 数据目录 /var/lib/cobbler 说明:
/var/lib/cobbler/config/ : 用于存放 distros、system、profiles 等信息配置文件
/var/lib/cobbler/triggers/ : 用于存放用户定义的Cobbler命令
/var/lib/cobbler/kickstart/ : 默认存放Kickstart文件
/var/lib/cobbler/loaders/ : 存放各种引导程序
(3)镜像数据目录 /var/www/cobbler 说明:
/var/www/cobbler/ks_mirror/ : 导入的发行版系统的所有数据
/var/www/cobbler/images/ : 导入发行版的 kernel 和 initrd 镜像用于 远程网络启动
/var/www/cobbler/repo_mirror/ : yum 仓库存储目录
(4)日志目录 /var/log/cobbler/说明:
/var/log/cobbler/install.log : 客户端的安装系统日志
/var/log/cobbler/cobbler.log : Cobbler 日志
3.5 Cobbler 命令介绍
(1)查看 Cobbler 命令
[root@cobbler svr-]# cobbler
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>
[options|--help]
在上面的显示中,我们可以看到,Cobbler命令有很多的选项,想获得相关选项的帮助只需
要加--help即可:
[root@cobbler ~]# cobbler profile --help
(2)Cobbler常用命令
cobbler check 检查Cobbler配置
cobbler sync 同步配置到DHCP/PXE和数据目录
cobbler list 列出所有的Cobbler元素
cobbler import 导入安装的系统镜像
cobbler report 列出各元素的详细信息
cobbler distro 查看导入的发行版系统信息
cobbler profile 查看配置信息
cobbler system 查看添加的系统信息
cobbler reposync 同步yum仓库到本地
4. Cobbler 安装
4.1 系统信息
4.2 配置 yum 源
[root@localhost ~]# rpm -ql epel-release >> /dev/nul || yum install -y epel-release
4.3 关闭SELinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux setenforce 0
4.4 安装Cobbler
yum -y install cobbler cobbler-web tftp-server dhcp httpd xinetd
4.5 启动Cobbler
systemctl enable --now httpd cobblerd
4.6 通过cobbler check 核对当前设置是否有问题
[root@localhost ~]# 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 resol vable 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 : SELinux is enabled. Please review the following wiki page for details on en suring cobbler works correctly in your SELinux environment:
https://github.com/cobbler/cobbler/wiki/Selinux
4 : change 'disable' to 'no' in /etc/xinetd.d/tftp
5 : Some network boot-loaders are missing from /var/lib/cobbler/loaders. If you only want to handle x86/x86_64 netbooting, you may ensure that you have insta lled a *recent* version of the syslinux package installed and can ignore this message entirely. Files this directory, should you want to support all archi tectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot.
6 : enable and start rsyncd.service with systemctl
7 : debmirror package is not installed, it will be required to manage debian de ployments and repositories
8 : ksvalidator was not found, install pykickstart
9 : The default password used by the sample templates for newly installed machi nes (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
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.
从上面的执行结果来看,存在10处错误,下面我们来一一解决:
问题1:
#修改后面server的ip地址为本机ip
sed -i 's/^server: 127.0.0.1/server: 192.168.139.62/' /etc/cobbler/settings
问题2:
#修改next_erver为本机的IP
sed -i 's/^next_server: 127.0.0.1/next_server: 10.0.0.101/' /etc/cobbler/settings
问题3:
SELinux处于开启状态,前面已经临时关闭selinux并修改了selinux配置文件,只是没有重启,要消除这个提示重启下服务器即可,也可以直接忽略。
问题4:
#修改/etc/xinetd.d/tftp,把disable修改为no
sed -i 's#yes#no#g' /etc/xinetd.d/tftp
问题5:
cobbler get-loaders
#如果网太差导致下载失败,第二次下载会报python的错误。使用如下方法:
[root@cobbler ~]# yum -y install syslinux
[root@cobbler ~]# cp -r /usr/share/syslinux/pxelinux.0 /var/lib/cobbler/loaders/
[root@cobbler ~]# cp -r /usr/share/syslinux/menu.c32 /var/lib/cobbler/loaders/
[root@cobbler ~]# systemctl restart cobblerd
再次执行cobbler get-loaders,如果出现下图情况,原因是安装的cobbler版本中,压根就不支持使用该命令下载引导启动文件,只要保证安装了最新的syslinux软件包,然后忽略本条内容即可。
问题6:
#添加rsync到自启动并启动rsync
systemctl enable rsyncd
systemctl start rsyncd
问题7:
#与debain相关,如果不使用cobbler推送debain系统可以忽略不记
[root@cobbler ~]# yum -y install debmirror
[root@cobbler ~]# sed -i 's|@dists=.*|#@dists=|' /etc/debmirror.conf
[root@cobbler ~]# sed -i 's|@arches=.*|#@arches=|' /etc/debmirror.conf
问题8 :
#ksvalidator未找到,安装pykickstart软件包。
yum install pykickstart -y
问题9:
# 设置默认root密码(客户端安装之后,系统的root密码)。 首先,,生成你想要的密码的加密字符串,然后复制运行命令之后的加密代码:
#执行
openssl passwd -1 -salt 'abc' '123456'
#得到新密码
$1$abc$mJPQCTATLDV5aNzcHMYLr/
#再执行
vim /etc/cobbler/settings
#修改settings配置文件中下面位置,将双引号中的旧密码替换成新密码
default_password_crypted: "$1$123456$wOSEtcyiP2N/IfIl15W6Z0"
问题10:
#未找到防护工具,并且必须使用防护工具才能使用(可选)电源管理功能。 安装cman或fence-agents以使用它们。
yum -y install fence-agents
接着重启Cobbler服务
service cobblerd restart
最后再次执行cobbler check
#忽略这两条即可,第一条是修改了selinux配置文件后未重启服务器的原因,第二条与debian相关。
4.7 配置Cobbler-DHCP
(1)修改cobbler配置
vim /etc/cobbler/settings
#修改settings中参数,由cobbler控制dhcp
manage_dhcp: 1
(2)修改dhcp.templates配置文件
[root@localhost ~]# vim /etc/cobbler/dhcp.template
subnet 192.168.139.0 netmask 255.255.255.0 {
option routers 192.168.139.2; #修改成本机网关
option domain-name-servers 114.114.114.114; #修改成本机DNS
option subnet-mask 255.255.255.0; #修改成本机子网掩码
range dynamic-bootp 192.168.139.100 192.168.139.254; #可分配的IP范围
(3)重新启动Cobbler服务
systemctl restart cobblerd.service
(4)运行Cobbler sync命令使配置生效,让DHCP、HTTP被Cobbler接管
cobbler sync
效果图如下:
4.8 导入CentOs-7的镜像
(1)创建目录存放镜像
mkdir /mnt/CentOS7.1
(2)挂载光盘镜像
mount /dev/cdrom /mnt/CentOS7.1
如果报错mount: 在 /dev/sr0 上找不到媒体
解决办法:打开虚拟机设置,在镜像选项中将设备状态的已连接勾选上,然后点击确定即可。
再次执行 mount /dev/cdrom /mnt/CentOS7.1 成功
(3)使用cobbler import命令导入镜像
cobbler import --path=/mnt/CentOS7.1 --name=Centos-7.1 --arch=x86_64
#命令格式说明:
--path:镜像路径;
--name:安装引导名;
--arch:32位或64位。
#参数说明:
--name为安装源定义一个名字;
--arch指定安装源是32位还是64位、ia6,目前支持的选项有:x86| x86_64|ia64
#两点注意事项如下。
a.该安装源的唯一标示就是这两个参数。
本例导人成功后,安装源的唯一标示就是:CentOS-7.1-x86_64,如果重复,系统会提示导人
失败,其他命令可通过cobbler --help来进行查看。如果需要更多的参数定制,也可以查看官
方文档:man cobbler,然后查找import的配置,可以使用另外一个命令:cobbler distro。
导入时间需要那么两三分钟,静静等待即可,正常导完之后会给出如下提示:
(4)查看镜像列表
cobbler list
4.9 Ks文件配置
默认的kickstarts文件放在/var/lib/cobbler/kickstarts/目录下
(1)进入目录
cd /var/lib/cobbler/kickstarts
(2)自定义ks文件
执行vim CentOS-7.1-x86_64.ks进行编辑,将下方Ks文件粘贴进去
# kickstart template for Fedora 8 and later.
# (includes %end blocks)
# do not use with earlier distros
#platform=x86, AMD64, or Intel EM64T
# System authorization information
#auth --useshadow --enablemd5
authconfig --enableshadow --passalgo=sha512
# System bootloader configuration
bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhgb quiet"
# Partition clearing information
clearpart --all --initlabel
# Use text mode install
text
# Firewall configuration
firewall --disabled
# 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
logging --level=info
#Root password
rootpw --iscrypted $default_password_crypted
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# System timezone
timezone Asia/Shanghai
# Install OS instead of upgrade
install
# Clear the Master Boot Record
zerombr
# Allow anaconda to partition the system as needed
#autopart
part /boot --fstype=ext4 --asprimary --size=200
part swap --asprimary --size=1024
part / --fstype=ext4 --grow --asprimary --size=200
%pre
$SNIPPET('log_ks_pre')
$SNIPPET('kickstart_start')
$SNIPPET('pre_install_network_config')
# Enable installation monitoring
$SNIPPET('pre_anamon')
%end
%packages
@base
@compat-libraries
@core
@debugging
@development
@dial-up
@hardware-monitoring
@performance
@server-policy
sgpio
device-mapper-persistent-data
systemtap-client
tree
lrzsz
telnet
nmap
dos2unix
%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
%post
systemctl disable postfix.service
$yum_config_stanza
%end
(3)查看Kickstart配置
cobbler profile report --name=Centos-7.1-x86_64
(4)修改指定的Kickstart文件
[root@localhost kickstarts]# cobbler profile list
Centos-7.1-x86_64
[root@localhost kickstarts]# cobbler profile getks --name "Centos-7.1-x86_64"
[root@localhost kickstarts]# cobbler profile edit --name=Centos-7.1-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS-7.1-x86_64.ks
[root@localhost kickstarts]# cobbler profile edit --name Centos-7.1-x86_64 --kopts='net.ifnames=0 biosdevname=0'
(5)同步Cobbler
cobbler sync
5.验证
5.1 将服务端所有服务重启
systemctl restart xinetd.service
systemctl restart cobblerd.service
systemctl restart httpd.service
5.2 新建一台虚拟机
至此cobbler算是配置完成了,现在可以愉快的安装操作系统了,新建一台虚拟机,虚拟机指定用PXE网络启动,然后选择我们挂载的镜像安装即可。