cobbler(补鞋匠)

一、介绍

Cobbler是一个使用Python开发的开源项目,通过将部署系统所涉及的所有服务集中在一起,来提供一个全自动批量快速建立linux系统的网络环境。


Cobbler提供了DHCP管理,YUM管理,电源管理等功能,除此之外还支持命令行管理,WEB界面管理,cobbler相关软件包由EPEL源提供,EPEL(Extra Pavkages for Enterprise Linux,企业版Linux的额外软件包)是Fedora小组维护的一个软件仓库项目。为RHEL/CentOS提供默认不提供的软件包,安装Cobbler除了EPEL源还需要CentOS自带的网络yum源以提供相关的依赖包。

image.png

二、实验环境

1、VMware Workstation虚拟机环境

2、CentOS7系统的虚拟PC作为Cobbler服务端,网卡使用NAT连接方式,IP为192.168.11.11

3、需要epel源,可去阿里镜像站下载基础源和epel源[https://opsx.alibaba.com/mirror]

4、修改主机名,建议按生产环境操作

[root@localhost ~]# hostnamectl --static set-hostname cobbler


三、实验部署

#安装相关的软件包

[root@cobbler ~]# yum install -y httpd tftp dhcp cobbler cobbler-web pykickstart xinetd

#查看cobbler配置文件,查出来很多,主要是下图两个

[root@cobbler ~]# rpm -qc cobbler

image.png


#启动apache服务

[root@cobbler ~]# systemctl start httpd.service

#查看httpd端口

[root@cobbler ~]# ss -anput | grep 80

image.png


#启动cobbler

[root@cobbler ~]# systemctl start cobblerd.service

#检查cobbler

[root@cobbler ~]# cobbler check

image.png

从上图可以看到,使用cobbler需要完成8个步骤


#编辑/etc/cobbler/settings文件

[root@cobbler ~]# vim /etc/cobbler/settings

1) 找到next_server这行,将ip地址修改,next_server参数的值为提供PXE服务的主机相应的IP地址

image.png

2) 找到server这行,将ip地址修改,server参数的值为提供cobbler服务的主机相应的IP地址或主机名

image.png

3)编辑/etc/xinetd/tftp文件,将文件中的disable字段的配置由yes改为no

[root@cobbler ~]# vim /etc/xinetd.d/tftp

image.png


4)执行“cobbler get-loaders”命令即可,即下载引导操作系统

[root@cobbler ~]# cobbler get-loaders

image.png


5) 启动rsyncd服务

[root@cobbler ~]# systemctl start rsyncd

6)设置新系统默认的root密码,执行“openssl passwd -1 -salt $(openssl rand -hex 4)”生成密码,并用其替换/etc/cobbler/settings文件中default_password_crypted参数的值

[root@cobbler ~]# openssl passwd -1 -salt 'hanjie' 'hanjie'

image.png

[root@cobbler ~]# vim /etc/cobbler/settings        将生成的密码写入default_password_crypted

image.png


7) 安装相应的程序包

[root@cobbler ~]# yum -y install cman fence-agents

8) 重启cobbler并同步检查

[root@cobbler ~]# systemctl restart cobblerd.service

[root@cobbler ~]# cobbler sync

image.png

image.png

上图发现还有两个错误,我们依次执行:

[root@cobbler ~]# systemctl  enable  rsyncd

[root@cobbler ~]# yum  -y  install  debmirror

image.png

重启之后我们发现debmirror有错误,我们需修改:

image.png

重启cobbler服务,再次cobbler  check

image.png

上图出现no configuration problens found  说明没有问题了


#设置cobbler管理DHCP服务

[root@cobbler ~]# vim /etc/cobbler/settings       将manage_dhcp的值改成1

image.png


#修改dhcp的模板文件

[root@cobbler ~]# vim /etc/cobbler/dhcp.template

image.png


#重新启动cobbler和tftp

[root@cobbler ~]# systemctl restart cobblerd.service

[root@cobbler ~]# systemctl start xinetd.service

#同步cobbler

[root@cobbler ~]# cobbler sync

#查看生成dhcp配置文件

[root@cobbler ~]# cat /etc/dhcp/dhcpd.conf

image.png


#挂载镜像;我直接将镜像传到了服务器上

#[root@cobbler ~]# mount /dev/sr0 /mnt/

[root@cobbler ~]# mount CentOS-7-x86_64-DVD-1810.iso /mnt/

#导入镜像

[root@cobbler ~]# cobbler import --path=/mnt/ --name=CentOS-7-x86_64 --arch=x86_64

使用cobbler的import命令从ISO安装镜像中导入安装所需要的程序包。数据文件较大,需等待。

命令格式;cobbler import --path=镜像路径 --name=安装引导名 --arch=32位或64位

--path表示镜像所挂载的目录

--name表示为安装源定义的名字

--arch表示指定安装源是32位还是64位,目前支持的选项:x86,x86_64,ia64

image.png


cobbler会将镜像中的所有安装文件拷贝到本地一份,放在/var/www/cobbler/ks_mirrors下。因此/var/www/cobbler目录必须具有足够容纳安装文件的空间,如果空间不够,可以对/var/www/cobbler目录进行移动,建软链接来修改文件存储位置。

导入镜像后可通过cobbler list来查看导入的结果

image.png

其中distro表示一个发行版

profile表示kickstart配置文件


此时tftp服务器的共享目录也有了启动linux所需的文件,因为从OS安装光盘导入时,同时会把内核vmlinuz和初始化镜像文件initrd.img复制到tftp共享目录下,

可以使用tree命令查看(系统默认没有这个命令,需要单独安装相应软件包)

[root@cobbler ~]# yum -y install tree

[root@cobbler ~]# tree /var/lib/tftpboot/

image.png


四、cobbler装机

vmware新建一台虚拟机PC进行验证,不使用镜像,网络连接方式选择NAT,注意内存选择2G以上(否则会因内存不够而安装失败)。然后开启新建的虚拟机会出现cobbler画面,选择第二种回车继续等待

image.png

image.png

等待一会系统就会自动安装好了,案后输入root用户和之前设好的密码进行登录

image.png


五、自定义kickstart文件

在上面的实验中,我们没有进行任何的安装配置,全部都是Cobbler帮助我们完成的。可是在实际生产中,我们对每台主机的硬盘分区,安装的软件都有相应的要求,所以我们需要自己来定制KickStart文件,这样我们就能够定制地批量安装操作系统了。我们就利用实验环境(CentOS 7.6)中的KickStart文件来定制我们自己的KickStart文件。

1)Cobbler的ks.cfg文件存放位置

[root@cobbler ~]# cd /var/lib/cobbler/kickstarts/

image.png


提供两种配置ks的方法:

方法1、 每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于/root/anaconda-ks.cfg)

方法2、Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。kickstart配置工具命令为redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL5/6/7)


# yum install system-config-kickstart #安装

# yum groupinstall "X Window System" #安装X Window图形界面

# system-config-kickstart #运行kickstart配置

#本人不喜欢使用Linux运行图形化界面,浪费资源,有兴趣的伙伴可以研究一下


实例:centos7.6 ks
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts='us'
# Root password
rootpw --iscrypted $1$ljohn$yBMDpKkntQ9jfV1ZAWKpU1
# Use network installation
url --url="http://192.168.11.11/cobbler/ks_mirror/CentOS-7.6-x86_64/"
# System language
lang en_US.UTF-8
# Firewall configuration
firewall --disabled
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# System services
services --disabled="chronyd"
ignoredisk --only-use=sda
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
#network  --bootproto=static --device=eth0 --gateway=192.168.11.1 --ip=192.168.11.11 --nameserver=8.8.8.8 --netmask=255.255.255.0  --activate
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --asprimary --fstype="xfs" --size=1024
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --grow --size=1
%packages
@^minimal
@core
%end

这个实例使用了core的最小化版本安装,可以大大缩短系统部署时间,毕竟时间就是金钱。如果有需要的,可以在packages后面添加一些常用的工具,这里不再赘述。


2)关联镜像与kickstart 文件,修改kickstart文件为自定义的CentOS-7.6-x86_64.cfg

[root@cobbler ~]# cobbler profile edit --name=CentOS-7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS-7.6-x86_64.cfg

 # --name 我们需要添加的启动菜单的名字

 # --distro  我们自定制的ks文件关联的yum库

 # --kickstart 我们自定制的ks文件的路径


[root@cobbler ~]# cobbler profile report --name CentOS-7-x86_64#查看镜像是否存在
image.png


#这里还原centos7网卡名为“eth0”

[root@cobbler ~]# cobbler  profile  edit  name=CentOS-7-x86_64  --kopts='net.ifnames=0 biosdevname=0'

#关联ks文件与对应的CentOS7.6镜像

[root@cobbler ~]# cobbler profile edit --name=CentOS-7-x86_64 --distro=CentOS-7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS-7.6-x86_64.cfg

#与cobbler sync作用相同,同步配置,每次对cobbler更改都要执行同步

 [root@cobbler ~]# cobbler  sync


六、cobbler的web管理

cobbler web支持多种认证方式,下面介绍两种用户认证登录cobbler web的方式

1)使用cobbler默认的authn_configfile模块认证方式

cobbler web界面的身份认证和授权配置位于文件/etc/cobbler/modules.conf中,cobbler默认这种方式的认证可以直接使用htdigest命令添加cobbler用户和密码

[root@cobbler ~]# htdigest -c /etc/cobbler/users.digest Cobbler han

image.png


#重启apache服务,重启cobbler服务

[root@cobbler ~]# systemctl restart cobblerd.service

[root@cobbler ~]# systemctl restart httpd.service


2)使用authn_pam模块认证方式

首先需要在配置文件/etc/cobbler/modules.conf里修改认证方式

[root@cobbler ~]# vim /etc/cobbler/modules.conf

image.png


#添加系统用户,并设密码

[root@cobbler ~]# useradd webuser

[root@cobbler ~]# passwd webuser

image.png


#在文件/etc/cobbler/users.conf中,将新添加的webuser用户添加到admins组中,该组具有完整访问权限

[root@cobbler ~]# vim /etc/cobbler/users.conf

image.png


#配置完成后重启cobbler,apache服务,就可以用webuser的身份登录到cobbler web页面了

[root@cobbler ~]# systemctl restart httpd.service

[root@cobbler ~]# systemctl restart cobblerd.service


#使用https://192.168.11.11/cobbler_web地址访问cobbler web页面,使用设定的用户和密码就可以进行登录,在web页面进行相关配置

#附录:

Cobbler 命令介绍:
cobbler get-loaders  #加载部分缺失的网络boot-loaders
cobbler check          #检查cobbler配置
cobbler sync            #同步配置到dhcp pxe和数据目录
cobbler list              #列出所有的cobbler元素
cobbler import          #导入安装的系统光盘镜像
cobbler report          #列出各元素的详细信息
cobbler distro          #查看导入的发行版系统信息
cobbler profile         #查看配置信息
cobbler system         #查看添加的系统信息
cobbler reposync       #同步yum仓库到本地
cobbler signature update
cobbler --help           #获得cobbler的帮助
cobbler distro --help  #获得cobbler子命令的帮助
获取帮助:
#cobbler import --help