Centos6.5利用RubyGems的fpm制作zabbix_agent的rpm包,并使用ansible批量部署

一、 搭建rpm包制作环境

安装gcc

[root@lvs1 ~]# yum install gcc

安装make

[root@lvs1 ~]# yum install make

安装ruby源(ruby版本必须要在1.9.3以上,centos自带的是1.8的版本,需要自己编译安装)

[root@lvs1 ~]# yum install ruby rubygems ruby-devel

查看ruby源

[root@lvs1 ~]# gem source list

添加国内源

[root@lvs1 ~]# gem sources -a https://ruby.taobao.org/

移除国外源

[root@lvs1 ~]# gem sources -r http://rubygems.org/

再次查看ruby源

[root@lvs1 ~]# gem source list

升级ruby版本到最新

[root@lvs1 ~]# gem update --system

安装fpm

[root@lvs1 zlib]# gem install fpm

二、编译安装到本地

编译安装到本地

[root@lvs1 ~]# tar -xzvf zabbix-3.0.4.gz
[root@lvs1 zabbix-3.0.4]# cd zabbix-3.0.4
[root@lvs1 zabbix-3.0.4]# ./configure --prefix=/opt/zabbix  --sysconfdir=/opt/zabbix  --enable-agent --disable-server --disable-proxy
#--prefix为安装目录
#--sysconfdir为配置文件目录
#--enable-agent --disable-server --disable-proxy    安装agent不安装server和proxy,因为zabbix官方提供的源码包包含了所有组件,这里我们只需要agent所以不用全部安装
[root@lvs1 zabbix-3.0.4]# make install

修改配置文件

#可以用命令修改
sed -i 's/^Server=.*$/Server=192.168.13.45/g' /opt/zabbix/zabbix_agentd.conf
sed -i 's/^ServerActive=.*$/ServerActive=192.168.13.45:10051/g' /opt/zabbix/zabbix_agentd.conf
sed -i 's/^LogFile=.*$/LogFile=\/opt\/zabbix\/logs\/zabbix_agentd.log/g' /opt/zabbix/zabbix_agentd.conf
sed -i "s%^#HostnameItem=.*$%HostnameItem=system.hostname%g" /opt/zabbix/zabbix_agentd.conf
sed -i "s%^#ListenIP=.*$%ListenIP=0.0.0.0%g" /opt/zabbix/zabbix_agentd.conf
sed -i "s%^#ListenPort=.*$%ListenPort=10050%g" /opt/zabbix/zabbix_agentd.conf

#也可以直接修改配置文件
[root@lvs1 ~]# vim /opt/zabbix/zabbix_agentd.conf
#zabbix_server的地址
Server=192.168.13.45
#主动上传给server的地址和端口
ServerActive=192.168.13.45:10051
#日志位置
LogFile=/opt/zabbix/logs/zabbix_agentd.log
#主机名取系统主机名
HostnameItem=system.hostname
#监听端口
ListenPort=10050
#监听地址
ListenIP=0.0.0.0

复制编译包中对应系统的启动脚本到安装目录下

[root@lvs1 core]# cp -a /root/zabbix-3.0.4/misc/init.d/fedora/core/zabbix_agentd /opt/zabbix/

修改启动脚本中安装目录的位置

[root@lvs1 zabbix]# vim /opt/zabbix/zabbix_agentd
    BASEDIR=/opt/zabbix

三、创建安装后脚本和卸载后脚本

创建安装后执行脚本,在文件安装到本地后会做一些初始化操作

[root@lvs1 ~]# vim /opt/install_after.sh
#!/bin/bash
#创建对应的用户和组以及日志目录,并给安装目录对应的权限
groupadd zabbix
useradd -g zabbix zabbix
chown zabbix:zabbix /opt/zabbix
mkdir -p /opt/zabbix/logs
chown zabbix:zabbix /opt/zabbix/logs
#这里把刚才复制的启动脚本链接到系统目录中
ln -s /opt/zabbix/zabbix_agentd /etc/init.d/zabbix_agentd
#判断是否有多个192.168网段的ip,因本人所在公司网络环境负责存在多网卡多ip情况,为防止出现问题,所以此脚本会把单网卡主机的监听ip改为本机,如果存在多个网卡是192.168网段则依然使用0.0.0.0
ifip=$(ifconfig|sed -n '/inet addr/s/^[^:]*:\([0-9.]\{7,15\}\).*/\1/p' | grep '192.168.')
ifwc=$(ifconfig|sed -n '/inet addr/s/^[^:]*:\([0-9.]\{7,15\}\).*/\1/p' | grep '192.168.'|wc -l)
if [ $ifwc -gt 1 ];then
    echo $ifip
elif [ $ifwc -eq 1 ];then
    sed -i "s%^ListenIP=0.0.0.0%ListenIP=$ifip%g" /opt/zabbix/zabbix_agentd.conf
fi
#启动agent
service zabbix_agentd start
#添加开机启动
chkconfig --add zabbix_agentd
chkconfig --level 35 zabbix_agentd on
#添加iptables规则,允许对应端口通信,并保存规则
iptables -I INPUT -m state --state new -m tcp -p tcp --dport 10050 -j ACCEPT
iptables -I INPUT -m state --state new -m tcp -p tcp --dport 10051 -j ACCEPT
/etc/init.d/iptables save
exit 0

创建卸载后清理脚本,会清理安装目录和前面安装脚本添加的一些设置

[root@lvs1 ~]# vim /opt/remove_after.sh
#!/bin/bash
service zabbix_agentd stop
rm -rf /opt/zabbix
rm -f /etc/init.d/zabbix_agentd
userdel -r zabbix
groupdel zabbix
chkconfig --del zabbix_agentd
chkconfig --level 35 zabbix_agentd off
exit 0

整个rpm包安装后的目录结构

opt
├── install_after.sh
├── remove_after.sh
└── zabbix
    ├── bin
    │   ├── zabbix_get
    │   └── zabbix_sender
    ├── lib
    ├── logs
    │   └── zabbix_agentd.log
    ├── sbin
    │   └── zabbix_agentd
    ├── share
    │   └── man
    │       ├── man1
    │       │   ├── zabbix_get.1
    │       │   └── zabbix_sender.1
    │       └── man8
    │           └── zabbix_agentd.8
    ├── zabbix_agentd
    ├── zabbix_agentd.conf
    └── zabbix_agentd.conf.d

四、制作RPM包

[root@lvs1 ~]# fpm -s dir -t rpm -n zabbix_agentd -v 3.0.4 -C / -p /root/ --post-install /opt/install_after.sh --post-uninstall /opt/remove_after.sh --no-rpm-sign /opt

-s:指定源类型
-t:指定目标类型,即想要制作为什么包
-n:指定包的名字
-v:指定包的版本号
-C:指定打包的相对路径
-d:指定依赖于哪些包
-f:第二次包时目录下如果有同名安装包存在,则覆盖它
-p:输出的安装包的目录,不想放在当前目录下就需要指定
--post-install:软件包安装完成之后所要运行的脚本;同--offer-install
--pre-install:软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall:软件包卸载完成之后所要运行的脚本;同--offer-remove
--pre-uninstall:软件包卸载完成之前所要运行的脚本;同—before-remove

注意:-C是相对目录,–no-rpm-sign才是安装目录

例如:-C / –no-rpm-sign /opt 则安装到/opt中, 再如:-C /tmp –no-rpm-sign /zabbix 则安装到/tmp/zabbix中

五、使用ansible批量部署

在hosts文件中加入分组和分组内主机,因为我公司没用密钥,所以这里我直接将账号密码写入了文件中,sudo的密码也写入了文件中,利用sudo切换到root权限,当然以下密码都是我乱写的。

root@lv:~# vim /etc/ansible/hosts 
[lvs]
192.168.80.138 ansible_ssh_user=abc ansible_ssh_password=!@#qwe ansible_sudo_pass=!@#qwe

用ifconfig命令测试下是否能正常使用,这里解释下-k命令,因为我公司sudo命令后是要输密码的,所以这里加了-k

root@lv:~# ansible lvs -s -k -m command -a 'ifconfig'

将制作好的rpm复制给lvs组所有成员主机

root@lv:~# ansible lvs -s -k -m copy -a 'src=/root/zabbix_agentd-3.0.4-1.x86_64.rpm dest=/root/'

给所有主机上的rpm包执行权限,其实不给也没影响

root@lv:~# ansible lvs -s -k -m command -a 'chmod +x /root/zabbix_agentd-3.0.4-1.x86_64.rpm'

安装rpm包,因为我们设置的安装完启动,所以这部完成后就大功告成了

root@lv:~# ansible lvs -s -k -m command -a 'rpm -ivh /root/zabbix_agentd-3.0.4-1.x86_64.rpm'

原创文章,作者:N17_信风,如若转载,请注明出处:http://www.178linux.com/38110

(0)
N17_信风N17_信风
上一篇 2016-08-20 16:24
下一篇 2016-08-21 12:37

相关推荐

  • 第八周作业(网络、bash脚本)

    1-3,计算机网络基础博客已总结,简要补充 协议的分层 为了使那些比较复杂的网络协议更加简单化。ISO根据各通信协议的功能将网络体系分成七层。 在这个分层中,下层为上一层提供服务。上下层之间进行交互时所遵循的约定叫做“接口”。同层之间的交互所遵循的约定叫做“协议” 说的更形象一点,两个中国人打电话这个通信。就可以分为两层,同层之间的叫协议,我说汉语,你也说汉…

    Linux干货 2016-12-18
  • Linux初认识

    1、计算机的五大部件 CUP: CUP中包含了两大部件分别是运算器、控制器。其中运算器主要是进行数学运算、逻辑运算等各种运算的。除了两大部件以外CUP内部还有寄存器、缓存,它们是提升CUP性能的辅助性工具。 存储器: 内存RAM(Random Access Memory)。 输入设备Input: 输入设备用来下指令,提供数据等。输入设备有键盘,鼠标,麦克风等…

    Linux干货 2017-07-09
  • 10月18日作业–hash,history

    1 生产环境发现一台服务器系统时间产生偏差,造成服务异常,请帮忙校正。 1、使用ntpdate对时间进行同步,然后hwclock -w;并再建立Crontab每小时进行一次时间同步。 2 生产有一个数据同步脚本需要执行很长时间,怎样做到无人值守,在管理工具退出的情况下,脚本依然能正常运行。 1、载光盘 2、进入/mnt/Packages 安装共享screen…

    Linux干货 2016-10-19
  • CentOS7口令破解

    一.rd.break方式修改  1.启动时任意键暂停启动      2.按e 键进入编辑模式 将光标移动linux16 开始的行,添加内核参数rd.break 按ctrl-x 启动 3.重新挂载可读可写根目录 :mount –o remount,rw /sysroot 切回根目录: chroot /sysroot 修改…

    Linux干货 2016-11-29
  • net25-第14周作业

    系统的INPUT和OUTPUT默认策略为DROP; ~]# iptables -P INPUT DROP ~]# iptables -P OUTPUT DROP 1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机; ~]#iptables -…

    Linux干货 2017-05-15
  • linux基础学习-(磁盘管理、分区挂载、SWAP)

    1、磁盘结构 2、分区类型 3、管理分区、文件系统以及挂载设备 4、管理虚拟内存SWAP 一、磁盘结构(机械硬盘) CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector)。 heads:磁头 tracks:磁道 cylinder: 柱面 sector: 扇区,512bytes(最小的存储单位) 1、其中:每个盘面…

    Linux干货 2016-09-01