一、 搭建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_pass=!@#qwe ansible_sudo_pass=!@#qwe
用ifconfig指令測試下是否能正常使用,這裡解釋下-k指令,因為我公司sudo指令後是要輸密碼的,是以這裡加了-k
root@lv:~# ansible lvs -s -m command -a 'ifconfig'
将制作好的rpm複制給lvs組所有成員主機
root@lv:~# ansible lvs -s -m copy -a 'src=/root/zabbix_agentd-3.0.4-1.x86_64.rpm dest=/root/'
root@lv:~# ansible lvs -s -m command -a 'chmod +x /root/zabbix_agentd-3.0.4-1.x86_64.rpm'
root@lv:~# ansible lvs -s -m command -a 'rpm -ivh /root/zabbix_agentd-3.0.4-1.x86_64.rpm'