利用RubyGems的fpm製作zabbix_agent的rpm包,並使用ansible批量部署
阿新 • • 發佈:2018-12-24
一、 搭建rpm包製作環境
安裝gcc
[[email protected] ~]# yum install gcc
安裝make
[[email protected] ~]# yum install make
安裝ruby源(ruby版本必須要在1.9.3以上,centos自帶的是1.8的版本,需要自己編譯安裝)
[[email protected] ~]# yum install ruby rubygems ruby-devel
檢視ruby源
[[email protected] ~]# gem source list
新增國內源
[[email protected] ~]# gem sources -a https://ruby.taobao.org/
移除國外源
[[email protected] ~]# gem sources -r http://rubygems.org/
再次檢視ruby源
[[email protected] ~]# gem source list
升級ruby版本到最新
[[email protected] ~]# gem update --system
安裝fpm
[[email protected] zlib]# gem install fpm
二、編譯安裝到本地
編譯安裝到本地
[[email protected] ~]# tar -xzvf zabbix-3.0.4.gz [[email protected] zabbix-3.0.4]# cd zabbix-3.0.4 [[email protected] 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所以不用全部安裝 [[email protected] 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 #也可以直接修改配置檔案 [[email protected] ~]# 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
複製編譯包中對應系統的啟動指令碼到安裝目錄下
[[email protected] core]# cp -a /root/zabbix-3.0.4/misc/init.d/fedora/core/zabbix_agentd /opt/zabbix/
修改啟動指令碼中安裝目錄的位置
[[email protected] zabbix]# vim /opt/zabbix/zabbix_agentd BASEDIR=/opt/zabbix
三、建立安裝後腳本和解除安裝後腳本
建立安裝後執行指令碼,在檔案安裝到本地後會做一些初始化操作
[[email protected] ~]# 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
建立解除安裝後清理指令碼,會清理安裝目錄和前面安裝指令碼新增的一些設定
[[email protected] ~]# 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包
[[email protected] ~]# 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許可權,當然以下密碼都是我亂寫的。
[email protected]:~# vim /etc/ansible/hosts [lvs] 192.168.80.138 ansible_ssh_user=abc [email protected]#qwe [email protected]#qwe
用ifconfig命令測試下是否能正常使用,這裡解釋下-k命令,因為我公司sudo命令後是要輸密碼的,所以這裡加了-k
[email protected]:~# ansible lvs -s -m command -a 'ifconfig'
將製作好的rpm複製給lvs組所有成員主機
[email protected]:~# ansible lvs -s -m copy -a 'src=/root/zabbix_agentd-3.0.4-1.x86_64.rpm dest=/root/'
給所有主機上的rpm包執行許可權,其實不給也沒影響
[email protected]:~# ansible lvs -s -m command -a 'chmod +x /root/zabbix_agentd-3.0.4-1.x86_64.rpm'
安裝rpm包,因為我們設定的安裝完啟動,所以這部完成後就大功告成了
[email protected]:~# ansible lvs -s -m command -a 'rpm -ivh /root/zabbix_agentd-3.0.4-1.x86_64.rpm'