SaltStack RPM 二次打包步骤

在开源的自动化运维工具中,从开发语言受众度、社区活跃度和市场认可度等维度来综合比较,Ansible和SaltStack基本成为大家二选一的标配,两者特性各有千秋,具体特性对比如下:

Ansible

  • 基于python开发,易于二次开发

  • 基于SSH协议传输数据, 标准SSH连接的时候比较耗费时间,响应速度要比saltstack慢

  • 不需要安装agent(客户端),部署配置会简单一些

  • 安全性能最好

  • 支持服务器规模一般不超过200台

SaltStack

  • 于python开发,易于二次开发
  • master和minion主机是通过ZeroMQ传输数据, ZeroMQ传输的速度会很快,响应速度要比Ansible快很多
  • 般需要安装agent(也可以不安装)
  • 容易被攻击
  • 支持服务器规模过千台

从开发语言、传输速度、部署便利性、安全性和支持节点规模等多维度综合比较,个人比较偏好SaltStack。原生的SaltStack可以满足日常的批量分发文件、批量执行命令等场景,但是有些定制化需求还是需要对SaltStack的源码进行二次开发。为了便于部署和升级定制化的SaltStack,我们需要对二次开发后的SaltStack进行RPM打包。本文不解释过多冗长的理论和概念,只分享经过个人实践的SaltStack RPM 打包流程。具体打包流程如下:

1. 搭建编译环境

[root@openstack ~]# yum install -y rpm-build

2. 上传任意一个 .spec 到 /root 目录

[root@openstack ~]# cd /root[root@openstack ~]# ll-rw-------. 1 root root  1265 Jan 28  2018 anaconda-ks.cfg-rw-r--r--.1rootroot24062Jan282018openstack-glance.spec

3. 进入 /root 目录,执行命令

[root@openstack ~]# rpmbuild -ba openstack-glance.spec会报以下错误,无需理会,此时会在/root目录下生产rpmbuild文件夹。error:File/root/rpmbuild/SOURCES/python-keystone.tar.gz:Nosuchfileordirectory

4.下载包含源码的SaltStack RPM包salt-2018.3.2-1.el7.src.rpm(文件名包含src关键字),不要下载二进制的RPM包。

源地址:https://repo.saltstack.com/yum/redhat/7.4/x86_64/latest/SRPMS/

5. 解压 salt-2018.3.2-1.el7.src.rpm,如果要修改salt-2018.3.2.tar.gz源码,修改完后需要压缩包格式要和原来保持一致。

SaltStack RPM 二次打包步骤

6. 上传截图中所有的文件到/root/rpmbuild/SOURCES

[root@openstack ~]# cd /root/rpmbuild/SOURCES/[root@openstack SOURCES]# lltotal 12692-rw-r--r--. 1 root root      377 Aug  7 02:54 README.fedora-rw-r--r--. 1 root root 12847286 Aug  7 02:54 salt-2018.3.2.tar.gz-rw-r--r--. 1 root root     3636 Aug  7 02:54 salt-api-rw-r--r--. 1 root root      320 Aug  7 02:54 salt-api.service-rw-r--r--. 1 root root    11437 Aug  7 02:54 salt.bash-rw-r--r--. 1 root root     2078 Aug  7 02:54 salt-call.fish-rw-r--r--. 1 root root    18450 Aug  7 02:54 salt_common.fish-rw-r--r--. 1 root root      227 Aug  7 02:54 salt-common.logrotate-rw-r--r--. 1 root root      208 Aug  7 02:54 salt-cp.fish-rw-r--r--. 1 root root     3949 Aug  7 02:54 salt.fish-rw-r--r--. 1 root root     3914 Aug  7 02:54 salt-key.fish-rw-r--r--. 1 root root     3307 Aug  7 02:54 salt-master-rw-r--r--. 1 root root      208 Aug  7 02:54 salt-master.fish-rw-r--r--. 1 root root      321 Aug  7 02:54 salt-master.service-rw-r--r--. 1 root root     7829 Aug  7 02:54 salt-minion-rw-r--r--. 1 root root      208 Aug  7 02:54 salt-minion.fish-rw-r--r--. 1 root root      349 Aug  7 02:54 salt-minion.service-rw-r--r--. 1 root root      332 Aug  7 02:54 salt-proxy@.service-rw-r--r--. 1 root root      205 Aug  7 02:54 salt-run.fish-rw-r--r--. 1 root root    32388 Aug  7 02:54 salt.spec-rw-r--r--. 1 root root     3239 Aug  7 02:54 salt-syndic-rw-r--r--. 1 root root      201 Aug  7 02:54 salt-syndic.fish-rw-r--r--. 1 root root      319 Aug  7 02:54 salt-syndic.service

7. 上传解压包中的 salt.spec 到 /root/rpmbuild/SPECS

[root@openstack SPECS]# pwd/root/rpmbuild/SPECS[root@openstack SPECS]# ll-rw-r--r--.1rootroot32388Aug702:54salt.spec

8. 进入 /root/rpmbuild/SPECS 目录,执行打包命令

[root@openstack SPECS]# rpmbuild -ba salt.spec

9. 进入/root/rpmbuild/RPMS/noarch 目录,查看打好的二进制RPM包

[root@openstack noarch]# pwd/root/rpmbuild/RPMS/noarch[root@openstack noarch]# ll-rw-r--r--. 1 root root 9296184 Aug  7 03:08 salt-2018.3.2-1.el7.noarch.rpm-rw-r--r--. 1 root root   17100 Aug  7 03:08 salt-api-2018.3.2-1.el7.noarch.rpm-rw-r--r--. 1 root root   20208 Aug  7 03:08 salt-cloud-2018.3.2-1.el7.noarch.rpm-rw-r--r--. 1 root root 2412616 Aug  7 03:08 salt-master-2018.3.2-1.el7.noarch.rpm-rw-r--r--. 1 root root   36408 Aug  7 03:08 salt-minion-2018.3.2-1.el7.noarch.rpm-rw-r--r--. 1 root root   18748 Aug  7 03:08 salt-ssh-2018.3.2-1.el7.noarch.rpm-rw-r--r--.1rootroot17268Aug703:08salt-syndic-2018.3.2-1.el7.noarch.rpm

按照上述步骤“傻瓜式”的操作下去,即可完成自己定制的RPM包,然后拷贝定制的SaltStack RPM包到公司内部的本地源里,方便后续部署和升级。