本章章节 (1) Cobble介绍 (2) Cobbler安装配置 (3) Cobbler安装系统 (4) 定制化安装 (5) Cobbler的Web管理界面的安装与配置 (6) 入坑记
0x01 Cobbler 介绍
Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等;可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用。
Cobbler是较早前的kickstart的升级版,优点是比较容易配置,还自带web界面比较易于管理,Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成,该工具使用python开发,小巧轻便(才15k行代码)
官网:http:#cobbler.github.io/
1.1 Cobbler集成的服务
- PXE服务支持
- DHCP服务管理
- DNS服务管理(可选bind,dnsmasq)
- 电源管理
- Kickstart服务支持
- YUM仓库管理
- TFTP(PXE启动时需要)
- Apache(提供kickstart的安装源,并提供定制化的kickstart配置)
Cobbler组件:
- 发行版(distro) :表示一个操作系统,它承载了内核和initrd的信息,以及内核等其他数据。
- 仓库 (repository):保存了一个yum或者rsync仓库的镜像信息。
- 配置文件(profile):包含了一个发行版(distro),一个kickstart文件以及可能的仓库(repository),还包含了更多的内核参数等其他数据。
- 系统(system):表示要定制的具体客户机器,它包含了一个配置文件或一个镜像,还包含了ip和mac地址,电源管理(地址,凭据,类型)以及更为专业的数据信息。
- 镜像(image):可替换一个包含不属于此类别的文件的发行版对象(eg: 无法作为内核和initrd的对象)。
注意:发行版和配置文件为必须配置项
- 发行版 distro 表示具体要导入安装的系统
- 配置文件 profile 表示对应系统的配置
- 系统 system 则可以定制某一台具体的机器安装,相当于一条数据库记录,可以省略
1.2 cobbler工作流程
Server端 :
- 第一步,启动Cobbler服务
- 第二步,进行Cobbler错误检查,执行cobbler check命令
- 第三步,进行配置同步,执行cobbler sync命令
- 第四步,复制相关启动文件文件到TFTP目录中
- 第五步,启动DHCP服务,提供地址分配
- 第六步,DHCP服务分配IP地址
- 第七步,TFTP传输启动文件
- 第八步,Server端接收安装信息
- 第九步,Server端发送ISO镜像与Kickstart文件
Client端 :
- 第一步,客户端以PXE模式启动
- 第二步,客户端获取IP地址
- 第三步,通过TFTP服务器获取启动文件
- 第四步,进入Cobbler安装选择界面
- 第五步,客户端确定加载信息
- 第六步,根据配置信息准备安装系统
- 第七步,加载Kickstart文件
- 第八步,传输系统安装的其它文件
- 第九步,进行安装系统
1.3 系统环境准备
使用的是CentOS7.x 和 VirtualBox(配置上网和NAT关闭DHCP服务);
代码语言:javascript复制CentOS Linux release 7.6.1810 (Core) 3.10.0-957.1.3.el7.x86_64
[[email protected] ~]# vi /etc/sysconfig/selinux #强制访问关闭
SELINUX=disabled
[[email protected] ~]# reboot #修改后需要重启
[[email protected] ~]# getenforce
Disabled
0x02 Cobbler安装配置
2.1 安装Cobbler
代码语言:javascript复制#author:WeiyiGeek
#配置阿里云的epel、yum源
#$ mv /etc/yum.repos.d/CentOS-Base.repo{,.bak}
#$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/epel-7.repo
[[email protected] yum.repos.d]# yum -y install epel*
[[email protected] yum.repos.d]# yum makecache
#有想利用rsync安装的也可以安装好(使用于tftp类似)
#cobbler检查kickstart语法错误
$yum -y install xinetd syslinux dhcp tftp-server httpd rsync
$yum install -y python-pip #安装cobbler依赖
$pip install -U pip
$yum -y install cobbler cobbler-web pykickstart
-----------------------------------------------------------------------------------------------
$ rpm -ql cobbler # 查看安装的文件,下面列出部分
/etc/cobbler # 配置文件目录
/etc/cobbler/settings # cobbler主配置文件,这个文件是YAML格式
/etc/cobbler/dhcp.template # DHCP服务的配置模板
/etc/cobbler/tftpd.template # tftp服务的配置模板
/etc/cobbler/rsync.template # rsync服务的配置模板
/etc/cobbler/dnsmasq.template # DNS服务的配置模板
/etc/cobbler/iso # iso模板配置文件目录
/etc/cobbler/pxe # pxe模板文件目录
/etc/cobbler/power # 电源的配置文件目录
/etc/cobbler/users.conf # Web服务授权配置文件
/etc/cobbler/users.digest # 用于web访问的用户名密码配置文件
/etc/cobbler/modules.conf # Cobbler模块配置文件
/var/lib/cobbler # Cobbler数据目录
/var/lib/cobbler/config # 配置文件
/var/lib/cobbler/kickstarts # 默认存放kickstart文件
/var/lib/cobbler/loaders # 存放的各种引导程序
/var/lib/cobbler/triggers/ 用于存放用户定义的cobbler命令
/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日志
2.2 命令详解 cobbler
代码语言:javascript复制cobbler <distro|profile|system|repo|image|mgmtclass|package|file> ...
[add|edit|copy|getks*|list|remove|rename|report] [options|--help]
<aclsetup|buildiso|import|list|replicate|report|reposync|sync|validateks|version|signature|get-loaders|hardlink> [options|--help]
cobbler import --help # 导入镜像
cobbler check #核对当前设置是否有问题
cobbler list #列出所有的cobbler元素
cobbler report #列出元素的详细信息
cobbler sync #同步配置到数据目录,更改配置最好都要执行下
cobbler reposync #同步yum仓库
cobbler distro #查看导入的发行版系统信息
cobbler system #查看添加的系统信息
cobbler profile #查看配置信息
2.3 配置Cobbler环境(重要)
代码语言:javascript复制[[email protected] yum.repos.d]# getenforce
Disabled
$ /etc/init.d/iptables stop #关闭防火墙重要
$ /etc/init.d/httpd restart
$ /etc/init.d/cobblerd start
$ cobbler check #检查Cobbler的配置,如果看不到下面的结果,再次执行/etc/init.d/cobblerd restart
看着上面的结果,一个一个解决;第1、2、6个问题,顺便修改其他功能
代码语言:javascript复制#author;WeiyiGeek
cp /etc/cobbler/settings{,.bak} # 备份
#server,Cobbler服务器的IP 【提示1】
sed -i 's/^server: 127.0.0.1/server: 192.168.1.99/' /etc/cobbler/settings
# next_server,如果用Cobbler管理DHCP,修改本项,作用不解释,看kickstart【提示2】
sed -i 's/^next_server: 127.0.0.1/next_server: 192.168.1.99/' /etc/cobbler/settings
# 用Cobbler管理DHCP
sed -i 's/^manage_dhcp: 0/manage_dhcp: 1/' /etc/cobbler/settings
# 防止循环装系统,适用于服务器第一启动项是PXE启动。
sed -i 's/^pxe_just_once: 0/pxe_just_once: 1/' /etc/cobbler/settings
# 设置新装系统的默认root密码123456,下面的命令来源于【提示7】。
# random-phrase-here为干扰码,可以自行设定。
# openssl passwd -1 -salt 'weiyigeek' '123456'
$1$weiyigee$Kl6liFVRLuWROHNbd37Zm1
# vim /etc/cobbler/settings
default_password_crypted: "$1$weiyigee$Kl6liFVRLuWROHNbd37Zm1"
# [第3个问题]
[root ~]# vim /etc/xinetd.d/tftp
disable = no
[root ~]# /etc/init.d/xinetd restart
停止 xinetd: [确定]
正在启动 xinetd: [确定]
# [第5个问题]
$ systemctl enable rsyncd.service
$ systemctl start rsyncd
$ systemctl restart cobblerd [重启即可]
# [第4个问题]
$ cobbler get-loaders # 会自动从官网下载bootloaders
task started: 2019-05-29_105819_get_loaders
task started (id=Download Bootloader Content, time=Wed May 29 10:58:19 2019)
downloading https://cobbler.github.io/loaders/README to /var/lib/cobbler/loaders/README
downloading https://cobbler.github.io/loaders/COPYING.elilo to /var/lib/cobbler/loaders/COPYING.elilo
downloading https://cobbler.github.io/loaders/COPYING.yaboot to /var/lib/cobbler/loaders/COPYING.yaboot
downloading https://cobbler.github.io/loaders/COPYING.syslinux to /var/lib/cobbler/loaders/COPYING.syslinux
downloading https://cobbler.github.io/loaders/elilo-3.8-ia64.efi to /var/lib/cobbler/loaders/elilo-ia64.efi
downloading https://cobbler.github.io/loaders/yaboot-1.3.17 to /var/lib/cobbler/loaders/yaboot
downloading https://cobbler.github.io/loaders/pxelinux.0-3.86 to /var/lib/cobbler/loaders/pxelinux.0
downloading https://cobbler.github.io/loaders/menu.c32-3.86 to /var/lib/cobbler/loaders/menu.c32
downloading https://cobbler.github.io/loaders/grub-0.97-x86.efi to /var/lib/cobbler/loaders/grub-x86.efi
downloading https://cobbler.github.io/loaders/grub-0.97-x86_64.efi to /var/lib/cobbler/loaders/grub-x86_64.efi
$ cd /var/lib/cobbler/loaders/ && ls # 下载的内容
2.4 配置DHCP
修改cobbler的dhcp模版,不要直接修改dhcp本身的配置文件,因为cobbler会覆盖。 /etc/cobbler/dhcp.template # DHCP服务的配置模板 (注意这里可能需要新建网卡)
代码语言:javascript复制3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:b3:69:06 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.99/24 brd 192.168.1.255 scope global noprefixroute ens34
valid_lft forever preferred_lft forever
inet6 fe80::dfc:592e:b4a4:9877/64 scope link noprefixroute
valid_lft forever preferred_lft forever
2.5 同步COBBLER配置(重要)
代码语言:javascript复制# 同步最新cobbler配置,它会根据配置自动修改dhcp等服务。
$ cobbler sync # 同步所有配置,可以仔细看一下sync做了什么。
task started: 2019-03-13_160834_sync
task started (id=Sync, time=Wed Mar 13 16:08:34 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
# 再看一下dhcp的配置文件。
$ less /etc/dhcp/dhcpd.conf
2.6 服务自启动
代码语言:javascript复制# 方法1
systemctl enable httpd.service
systemctl enable xinetd .service
systemctl enable cobblerd
systemctl enable dhcpd
systemctl start httpd
systemctl start xinetd
systemctl start cobblerd
systemctl start dhcpd
# 方法2 编写Cobbler相关服务启动脚本(可选)
cat >> /etc/init.d/cobbler<<EOF
#!/bin/bash
# chkconfig: 345 80 90
# description:cobbler
case $1 in
start)
service httpd start
service xinetd start
service dhcpd start
service cobblerd start
;;
stop)
service httpd stop
service xinetd stop
service dhcpd stop
service cobblerd stop
;;
restart)
service httpd restart
service xinetd restart
service dhcpd restart
service cobblerd restart
;;
status)
service httpd status
service xinetd status
service dhcpd status
service cobblerd status
;;
sync)
cobbler sync
;;
*)
echo "Input error,please in put 'start|stop|restart|status|sync'!"
exit 2
;;
esac
EOF
# chmod x /etc/init.d/cobbler
# chkconfig cobbler on
3 Cobbler安装系统
3.1 导入镜像
代码语言:javascript复制$ mkdir /mnt/cdrom
$ mount /dev/cdrom /mnt/cdrom # 挂载CentOS7的系统镜像
mount: /dev/sr0 is write-protected, mounting read-only
$ 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,如果重复,系统会提示导入失败。
$ cobbler distro list # 查看镜像列表
CentOS-7.1-x86_64
# 镜像存放目录,cobbler会将镜像中的所有安装文件拷贝到本地一份,放在/var/www/cobbler/ks_mirror下的CentOS-7.1-x86_64目录下。
因此/var/www/cobbler目录必须具有足够容纳安装文件的空间。
$ cd /var/www/cobbler/ks_mirror/ && ls
Centos-7-X84_64-x86_64 config
[[email protected] ks_mirror]# ls /var/www/cobbler/ks_mirror/Centos-7-X84_64-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
3.2 指定ks.cfg文件及调整内核参数
代码语言:javascript复制# Cobbler的ks.cfg文件存放位置
$ cd /var/lib/cobbler/kickstarts/ && ls
sample_end.ks(默认使用的ks文件)
# 在第一次导入系统镜像后,Cobbler会给镜像指定一个默认的kickstart自动安装文件在/var/lib/cobbler/kickstarts下的sample_end.ks。
rz # 上传准备好的ks文件
$ mv Cobbler-CentOS-7-x86_64.cfg Centos-7-X84_64-x86_64.cfg
# 查看安装镜像文件信息
cobbler distro report --name=Centos-7-X84_64-x86_64
## 查看所有的profile设置
cobbler profile report
cobbler profile report --name=Centos-7-X84_64-x86_64
# 编辑profile,修改关联的ks文件
$cobbler profile edit --name=Centos-7-X84_64-x86_64 --kickstart=/var/lib/cobbler/kickstarts/Centos-7-X84_64-x86_64.cfg
# 修改安装系统的内核参数,在CentOS7系统有一个地方变了,就是网卡名变成eno16777736这种形式,但是为了运维标准化,我们需要将它变成我们常用的eth0,因此使用下面的参数。但要注意是CentOS7才需要下面的步骤,CentOS6不需要。
cobbler profile edit --name=Centos-7-X84_64-x86_64 --kopts='net.ifnames=0 biosdevname=0'
# 每次修改完都要同步一次
$ cobbler sync
3.3 安装系统
到此就可以进行安装系统了,安装系统前可以修改文字
代码语言:javascript复制#修改Cobbler提示
$ vim /etc/cobbler/pxe/pxedefault.template
menu vesamenu.c32
MENU TITLE Cobbler | ccccccc
$ cobbler sync # 修改配置都要同步
#新建立一台虚拟机网络启动即可,效果如下:
进入PXE选择界面进行安装系统;
然后就进行系统的安装
3.4 完善ks.cfg文件
文件大部分参数含义见kickstart文章,此处只讲一些不同的地方,同时可以参考模板文件。
代码语言:javascript复制$ cat CentOS-7.1-x86_64.cfg
# Cobbler for Kickstart Configurator for CentOS 7.1 by yao zhang
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')
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
rootpw --iscrypted $default_password_crypted
clearpart --all --initlabel
part /boot --fstype xfs --size 1024 #CentOS7系统磁盘默认格式xfs
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
@base
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet
iptraf
ncurses-devel
openssl-devel
zlib-devel
OpenIPMI-tools
screen
%end
%post
systemctl disable postfix.service
%end
0x04 定制化安装
指定某台服务器使用指定ks文件,kickstart实现这功能可能比较复杂,但是Cobbler就很简单了。 区分一台服务器的最简单的方法就是物理MAC地址,物理服务器的MAC地址在服务器上的标签上写了或者虚拟机的MAC查看。
代码语言:javascript复制cobbler system add --name=oldboy --mac=00:0C:29:7F:2F:A1 --profile=CentOS-7.1-x86_64 --ip-address=10.0.0.111 --subnet=255.255.255.0 --gateway=10.0.0.2 --interface=eth0 --static=1 --hostname=oldboy.example.com --name-servers="114.114.114.114 8.8.8.8"
# --name 自定义,但不能重复
# 查看定义的列表
$ cobbler system list
oldboy
$ cobbler sync
0x05 Cobbler的Web管理界面的安装与配置
我们上面已经安装cobbler-web软件,我们访问网站https://10.22.53.12/cobbler_web即可;
可以直接利用网页上进行import 设置 profiles 内核参数 biosdevname=0 net.ifnames=0
5.1 配置Cobbler Web 文件
网站路径:/usr/share/cobbler/web/ 网站配置文件路径:/etc/httpd/conf.d/cobbler_web.conf Web服务授权配置文件: /etc/cobbler/users.conf 用于web访问的用户名密码配置文件: /etc/cobbler/users.digest
代码语言:javascript复制[[email protected] ~]# cat /etc/cobbler/users.digest
cobbler:Cobbler:a2d6bae81669d707b72c0bd9806e01f3
# 设置Cobbler web用户登陆密码
# 在Cobbler组添加cobbler用户,提示输入2遍密码确认
[[email protected] ~]# htdigest /etc/cobbler/users.digest "Cobbler" cobbler
Changing password for user cobbler in realm Cobbler
New password: 123456
Re-type new password:123456
# 同步重启服务即可
$ cobbler sync
$ /etc/init.d/httpd restart
$ /etc/init.d/cobblerd restart
0x06 入坑记
问题1:安装源中无Cobbler的包? 原因:#可以看到cobbler、cobbler_web没有安装成功,那是因为常规yum源中没有关于cobbler的包,不过不用着急,我们需要在配置一个epel源,就可以了。 解决方法:
代码语言:javascript复制#配置epel源
[[email protected] yum.repos.d]# yum -y install epel*
[[email protected] yum.repos.d]# yum makecache
问题2:安装cobbler-web未能成功提示Django依赖问题 解决方法:
代码语言:javascript复制Error: Package: cobbler-web-2.6.11-7.git95749a6.el6.noarch (epel)
Requires: Django >= 1.4
$ wget https:#raw.githubusercontent.com/pypa/get-pip/master/2.6/get-pip.py
$ python2.6 get-pip.py
$ pip install --upgrade pip
[[email protected] yum.repos.d]# pip install Django==1.5.8
问题3:提示没有找到内核镜像,其实就是 没有加载一个菜单问题 在cobbler sync后修改了tftp数据目录中pxeliunx.cfg/default 的memu 却没有把我们ISO项目中的vesamenu.c32赋值到该目录中。
代码语言:javascript复制$ cp /mnt/cdrom/isolinux/vesamenu.c32 /var/lib/tftpboot/ #运行此句就OK
[[email protected] tftpboot]# ls
boot etc grub images images2 memdisk ppc pxelinux.0 pxelinux.cfg s390x vesamenu.c32 vesamenu.c32.bak yaboot
问题4:我们在访问CobblerWeb的时候,发现服务器报500错误,经过检查httpd的日志发现报错如下
错误原因:(没有采用https),这个报错是由于centos 7默认安装的python-django版本过高,cobbler还存在一些bug未修复,因此,我们需要将djaogo框架降到低版本。
解决办法:
代码语言:javascript复制#首先,查询当前系统安装的django版本,然后卸载
rpm -qa |grep django
rpm -e python2-django-*.el7.noarch --nodeps
#安装较低版本的django
yum -y install python2-django16
#重启httpd服务
systemctl restart httpd
需要访问 https 的网站
问题5:debmirror package is not installed, it will be required to manage debian deployments and repositories 解决办法 : debian 安装用,暂时可以不管;如果需要安装,下载地址为:http://rpmfind.net/linux/rpm2html/search.php?query=debmirror
问题6:fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them 解决办法 : 关于电源管理(跟DELl 远程控制协议类似东西?),也暂时不管。
问题7:补充脚本
代码语言:javascript复制echo -e "n############################n#安装COBBLER及其依赖n####################################n"
# yum -y install xinetd syslinux dhcp tftp-server httpd rsync
# install -y python-pip && pip install -U pip
# yum -y install cobbler cobbler-web pykickstart
# wget https://weiyigeek-1251733653.cos.ap-chengdu.myzijiebao.com/file/2019/Cobbler_init.sh -O /tmp/
# chmod x /tmp/Cobbler_init.sh && /tmp/Cobbler_init.sh
echo "--[安装完毕]--"