兩種姿勢教你如何定製RPM包(rpmbuild與fpm)

一、rpmbuild方式定製rpm包

rpmbuid是用於製作rpm格式包的工具。rpm 4.4.x版本之前,rpmbuid工具默認的工作車間爲/usr/src/redhat,所以造成普通用戶不能製作rpm包。rpm 4.5.x版本開始,將rpmbuid工具默認的工作車間爲$HOME/rpmbuild(用戶家目錄),並且推薦用戶儘量不用root賬號製作rpm包。

#rpm版本查看方法:
[root@localhost ~]# rpm -qa | grep rpm
perl-srpm-macros-1-8.el7.noarch
rpm-python-4.11.3-35.el7.x86_64
rpm-4.11.3-35.el7.x86_64
rpm-build-libs-4.11.3-35.el7.x86_64
redhat-rpm-config-9.1.0-87.el7.centos.noarch
rpm-build-4.11.3-35.el7.x86_64
rpm-libs-4.11.3-35.el7.x86_64

rpmbuild默認工作車間爲/usr/lib/rpm/macros這個文件,具體由%_topdir宏變量進行定義。官方不建議在/usr/lib/rpm/macros目錄中更改這個工作路徑。如果需要則可以在用戶家目錄下建立一個.rpmmacros隱藏文件,在裏面重新定義%_topdir,指向一個新的目錄名。內容一般爲:

[gxm@localhost ~]$ cat .rpmmacros
%_topdir    $HOME/新目錄

在%_topdir目錄下一般需要有6個目錄(實際操作的時候執行命令自動創建):
備註:執行rpmdev-setuptree命令會在當前用戶的家目錄下的rpmbuild目錄(如果該目錄不存在也會被自動創建)裏自動建立上述目錄。

目錄名

macros宏名

說明

BUILD

%_builddir

編譯rpm包的臨時目錄

BUILDROOT

%_buildrootdir

編譯後生成的軟件臨時安裝目錄

RPMS

%_rpmdir

最終生成的可安裝rpm包的所在目錄

SOURCES

%_sourcedir

所有源代碼和補丁文件的存放目錄

SPECS

%_specdir

存放SPEC文件的目錄(重要)

SRPMS

%_srcrpmdir

軟件最終的rpm源碼格式存放路徑(暫時忽略掉,別掛在心上)  

當上述目錄建立好之後,將所有用於生成rpm包的源代碼、shell腳本、配置文件都拷貝到SOURCES目錄裏,注意通常情況下源碼的壓縮格式都爲*.tar.gz格式。然後將編輯好的SPEC文件,命名爲“軟件名-版本.spec”,將其拷貝到SPECS目錄下。
最後切換SPEC目錄下執行命令製作rpm包:

[gxm@localhost ~]$ cd SPEC
[gxm@localhost SPEC]$ rpmbuild -bb 軟件名-版本.spec
#打包好的rpm包在RPMS目錄下

SPEC文件是最核心的,在它裏面定義了頭部信息和一些“階段”(%prep、%build、%install、%clean、%pre、%post、%preun和%postun),當rpmbuild執行時它首先會去解析SPEC文件,然後依次執行每個“階段”裏的指令。
參考:
http://blog.chinaunix.net/uid-23069658-id-3944462.html


1、安裝相關包和查看默認工作車間

[root@localhost ~]# yum -y install rpm-build rpmdevtools
[root@localhost ~]# rpmbuild --showrc | grep topdir
-14: _builddir    %{_topdir}/BUILD
-14: _buildrootdir    %{_topdir}/BUILDROOT
-14: _rpmdir    %{_topdir}/RPMS
-14: _sourcedir    %{_topdir}/SOURCES
-14: _specdir    %{_topdir}/SPECS
-14: _srcrpmdir    %{_topdir}/SRPMS
-14: _topdir    %{getenv:HOME}/rpmbuild

2、新增普通用戶

[root@localhost ~]# useradd gxm
[root@localhost ~]# passwd gxm
更改用戶 gxm 的密碼 。
新的 密碼:
無效的密碼: 密碼未通過字典檢查 - 它基於字典單詞
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
[root@localhost ~]# su - gxm
[gxm@localhost ~]$

3、自動生成rpm打包所需目錄

[gxm@localhost ~]$ rpmdev-setuptree
[gxm@localhost ~]$ ll
總用量 0
drwxrwxr-x 7 gxm gxm 67 4月  16 11:38 rpmbuild
[gxm@localhost ~]$ cd rpmbuild/
[gxm@localhost rpmbuild]$ ll
總用量 0
drwxrwxr-x 2 gxm gxm 6 4月  16 11:38 BUILD
drwxrwxr-x 2 gxm gxm 6 4月  16 11:38 RPMS
drwxrwxr-x 2 gxm gxm 6 4月  16 11:38 SOURCES
drwxrwxr-x 2 gxm gxm 6 4月  16 11:38 SPECS
drwxrwxr-x 2 gxm gxm 6 4月  16 11:38 SRPMS

4、將源碼、配置文件等放入SOURCES目錄下

[gxm@localhost rpmbuild]$ cd SOURCES/
[gxm@localhost SOURCES]$ wget https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/4.0.4/zabbix-4.0.4.tar.gz
[gxm@localhost SOURCES]$ 上傳其它文件

5、創建SPEC模板文件熟悉

[gxm@localhost rpmbuild]$ cd SPECS/
[gxm@localhost SPECS]$ rpmdev-newspec -o zabbix_agent-4.0.4.spec
zabbix_agent-4.0.4.spec created; type minimal, rpm version >= 4.11.
[gxm@localhost SPECS]$ cat zabbix_agent-4.0.4.spec
Name:           zabbix_agent-4.0.4
Version:        
Release:        1%{?dist}
Summary:        
License:        
URL:            

Source0:        
BuildRequires:  
Requires:       

%description

%prep

%setup -q
#這裏要特別注意,如果壓縮包和解壓出來的文件名不相同,則用%setup -n 解壓後目錄名

%build

%configure

make %{?_smp_mflags}

%install

rm -rf $RPM_BUILD_ROOT

%make_install

%files

%doc

%changelog

SPEC完整版如下:

%define zabbix_user zabbix
%define zabbix_dir /home/zabbix
Name:    zabbix_agent
Version:    4.0.4       
Release:    1%{?dist}
Summary:    zabbix agent
Group:    zabbix
License:    GPL
URL:    www.zabbix.com
Source0:    zabbix-4.0.4.tar.gz
Source1:    zabbix_agentd
Source2:    discovertcpport.sh
Source3:    portlist.txt
Source4:    discoveryproc.sh
Source5:    proclist.txt
Source6:    cmdline-jmxclient-0.10.3.jar
Source7:    jvm.py
Source8:    tomcat.py
Source9:    ca.crt
Source10:    client.crt
Source11:    client.key
Source12:    java
Source13:    monitor_port
Source14:    monitor_proc

BuildRequires:    gcc, gcc-c++, pcre, pcre-devel, openssl, openssl-devel
Requires:    gcc, gcc-c++, pcre, pcre-devel, openssl, openssl-devel

%description
Zabbix agentd 4.0.4

%pre
grep %zabbix_user /etc/passwd > /dev/null
if [ $? != 0 ]
    then useradd %zabbix_user -M -s /sbin/nologin
fi
[ -d %{zabbix_dir} ]||rm -rf %{zabbix_dir}

%post
mkdir -p %{zabbix_dir}/logs
chown -R %zabbix_user.%zabbix_user %{zabbix_dir}
chmod -R 755 %{zabbix_dir}
sed -i "s/LogFile=\/tmp\/zabbix_agentd\.log/LogFile=%{zabbix_dir}/logs\/zabbix_agentd.log/g" %{zabbix_dir}/etc/zabbix_agentd.conf
sed -i "s/ServerActive=127\.0\.0\.1/ServerActive=192\.168\.7\.10/g" %{zabbix_dir}/etc/zabbix_agentd.conf
ipaddr=`ip a | grep -w "inet" | egrep "eno16777736|eth0" |sed 's/^.*inet //g'|sed 's/\/[0-9][0-9].*$//g'`
sed -i "s/Hostname=Zabbix server/Hostname=$ipaddr/g" %{zabbix_dir}/etc/zabbix_agentd.conf
sed -i "s/Timeout=3/Timeout=30/g" %{zabbix_dir}/etc/zabbix_agentd.conf
echo "UnsafeUserParameters=1" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "EnableRemoteCommands=1" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "Include=%{zabbix_dir}/etc/zabbix_agentd.conf.d/" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "PidFile=%{zabbix_dir}/zabbix_agentd.pid" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "LogFileSize=0" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "StartAgents=0" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "HostMetadataItem=system.uname" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "User=zabbix" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "TLSConnect=cert" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "TLSAccept=cert" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "TLSCAFile=%{zabbix_dir}/zabbix_ssl/ca.crt" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "TLSCertFile=%{zabbix_dir}/zabbix_ssl/client.crt" >>%{zabbix_dir}/etc/zabbix_agentd.conf
echo "TLSKeyFile=%{zabbix_dir}/zabbix_ssl/client.key" >>%{zabbix_dir}/etc/zabbix_agentd.conf
sed -i "s/BASEDIR=\/usr\/local/BASEDIR=\/home\/zabbix/g" /etc/rc.d/init.d/zabbix_agentd
systemctl daemon-reload
/etc/init.d/zabbix_agentd start
systemctl enable zabbix_agentd

%preun
systemctl stop zabbix_agentd

%postun
userdel -r zabbix
rm -rf /etc/rc.d/init.d/zabbix_agentd
rm -rf %{zabbix_dir}

%prep
%setup -n zabbix-4.0.4

%build
./configure --prefix=%{zabbix_dir} --enable-agent --with-openssl
make %{?_smp_mflags}

%install
rm -rf %{buildroot}
install -d %{buildroot}/etc/profile.d
make install DESTDIR=%{buildroot}
install -p -D -m 0755 %{SOURCE1}    %{buildroot}/etc/rc.d/init.d/zabbix_agentd
install -p -D %{SOURCE2}        %{buildroot}%{zabbix_dir}/script/monitor_port/discovertcpport.sh
install -p -D %{SOURCE3}        %{buildroot}%{zabbix_dir}/script/monitor_port/portlist.txt
install -p -D %{SOURCE4}        %{buildroot}%{zabbix_dir}/script/monitor_proc/discoveryproc.sh
install -p -D %{SOURCE5}        %{buildroot}%{zabbix_dir}/script/monitor_proc/proclist.txt
install -p -D %{SOURCE6}        %{buildroot}%{zabbix_dir}/script/jvm/cmdline-jmxclient-0.10.3.jar
install -p -D %{SOURCE7}        %{buildroot}%{zabbix_dir}/script/jvm/jvm.py
install -p -D %{SOURCE8}        %{buildroot}%{zabbix_dir}/script/jvm/tomcat.py
install -p -D %{SOURCE9}        %{buildroot}%{zabbix_dir}/zabbix_ssl/ca.crt
install -p -D %{SOURCE10}       %{buildroot}%{zabbix_dir}/zabbix_ssl/client.crt
install -p -D %{SOURCE11}       %{buildroot}%{zabbix_dir}/zabbix_ssl/client.key
install -p -D %{SOURCE12}       %{buildroot}%{zabbix_dir}/etc/zabbix_agentd.conf.d/java
install -p -D %{SOURCE13}       %{buildroot}%{zabbix_dir}/etc/zabbix_agentd.conf.d/monitor_port
install -p -D %{SOURCE14}       %{buildroot}%{zabbix_dir}/etc/zabbix_agentd.conf.d/monitor_proc
echo 'export PATH=%{zabbix_dir}/bin:%{zabbix_dir}/sbin:$PATH' > %{buildroot}/etc/profile.d/%{name}.sh

%files
%defattr (-,root,root,0755)
%{zabbix_dir}
%{zabbix_dir}/*
/etc/profile.d/%{name}.sh
%attr(0755,root,root) /etc/rc.d/init.d/zabbix_agentd

%changelog

%clean
rm -rf %{buildroot}

6、打包編譯

[root@localhost ~]# yum install gcc, gcc-c++, pcre, pcre-devel, openssl, openssl-devel -y
[gxm@localhost SPECS]$ rpmbuild -ba zabbix_agent-4.0.4.spec
[gxm@localhost SPECS]$ rpmbuild -bb zabbix_agent-4.0.4.spec
#-ba和-bb二選一

7、下載安裝

[gxm@localhost SPECS]$ sz ../RPMS/x86_64/zabbix_agent-4.0.4-1.el7.centos.x86_64.rpm
[root@localhost ~]# yum localinstall zabbix_agent-4.0.4-1.el7.centos.x86_64.rpm -y
[root@localhost ~]# rpm -qpi zabbix_agent-4.0.4-1.el7.centos.x86_64.rpm
Name        : zabbix_agent
Version     : 4.0.4
Release     : 1.el7.centos
Architecture: x86_64
Install Date: (not installed)
Group       : zabbix
Size        : 813091
License     : GPL
Signature   : (none)
Source RPM  : zabbix_agent-4.0.4-1.el7.centos.src.rpm
Build Date  : 2019年04月20日 星期六 22時22分05秒
Build Host  : localhost
Relocations : (not relocatable)
URL         : www.zabbix.com
Summary     : zabbix agent
Description :
Zabbix agentd 4.0.4

[root@localhost ~]# rpm -qpl zabbix_agent-4.0.4-1.el7.centos.x86_64.rpm
/etc/profile.d/zabbix_agent.sh
/etc/rc.d/init.d/zabbix_agentd
/home/zabbix
/home/zabbix/bin
/home/zabbix/bin/zabbix_get
/home/zabbix/bin/zabbix_sender
/home/zabbix/etc
/home/zabbix/etc/zabbix_agentd.conf
/home/zabbix/etc/zabbix_agentd.conf.d
/home/zabbix/etc/zabbix_agentd.conf.d/java
/home/zabbix/etc/zabbix_agentd.conf.d/monitor_port
/home/zabbix/etc/zabbix_agentd.conf.d/monitor_proc
/home/zabbix/lib
/home/zabbix/lib/modules
/home/zabbix/sbin
/home/zabbix/sbin/zabbix_agentd
/home/zabbix/script
/home/zabbix/script/jvm
/home/zabbix/script/monitor_port
/home/zabbix/script/monitor_proc
/home/zabbix/share
/home/zabbix/share/man
/home/zabbix/share/man/man1
/home/zabbix/share/man/man1/zabbix_get.1
/home/zabbix/share/man/man1/zabbix_sender.1
/home/zabbix/share/man/man8
/home/zabbix/share/man/man8/zabbix_agentd.8
/home/zabbix/zabbix_ssl

[root@localhost ~]# rpm -qp --scripts zabbix_agent-4.0.4-1.el7.centos.x86_64.rpm
preinstall scriptlet (using /bin/sh):
grep zabbix /etc/passwd > /dev/null
if [ $? != 0 ]
    then useradd zabbix -M -s /sbin/nologin
fi
[ -d /home/zabbix ]||rm -rf /home/zabbix
postinstall scriptlet (using /bin/sh):
mkdir -p /home/zabbix/logs
chown -R zabbix.zabbix /home/zabbix
chmod -R 755 /home/zabbix
sed -i "s/LogFile=\/tmp\/zabbix_agentd\.log/LogFile=/home/zabbix/logs\/zabbix_agentd.log/g" /home/zabbix/etc/zabbix_agentd.conf
sed -i "s/ServerActive=127\.0\.0\.1/ServerActive=192\.168\.7\.10/g" /home/zabbix/etc/zabbix_agentd.conf
ipaddr=`ip a | grep -w "inet" | egrep "eno16777736|eth0" |sed 's/^.*inet //g'|sed 's/\/[0-9][0-9].*$//g'`
sed -i "s/Hostname=Zabbix server/Hostname=$ipaddr/g" /home/zabbix/etc/zabbix_agentd.conf
sed -i "s/Timeout=3/Timeout=30/g" /home/zabbix/etc/zabbix_agentd.conf
echo "UnsafeUserParameters=1" >>/home/zabbix/etc/zabbix_agentd.conf
echo "EnableRemoteCommands=1" >>/home/zabbix/etc/zabbix_agentd.conf
echo "Include=/home/zabbix/etc/zabbix_agentd.conf.d/" >>/home/zabbix/etc/zabbix_agentd.conf
echo "PidFile=/home/zabbix/zabbix_agentd.pid" >>/home/zabbix/etc/zabbix_agentd.conf
echo "LogFileSize=0" >>/home/zabbix/etc/zabbix_agentd.conf
echo "StartAgents=0" >>/home/zabbix/etc/zabbix_agentd.conf
echo "HostMetadataItem=system.uname" >>/home/zabbix/etc/zabbix_agentd.conf
echo "User=zabbix" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSConnect=cert" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSAccept=cert" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSCAFile=/home/zabbix/zabbix_ssl/ca.crt" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSCertFile=/home/zabbix/zabbix_ssl/client.crt" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSKeyFile=/home/zabbix/zabbix_ssl/client.key" >>/home/zabbix/etc/zabbix_agentd.conf
sed -i "s/BASEDIR=\/usr\/local/BASEDIR=\/home\/zabbix/g" /etc/rc.d/init.d/zabbix_agentd
systemctl daemon-reload
/etc/init.d/zabbix_agentd start
systemctl enable zabbix_agentd
preuninstall scriptlet (using /bin/sh):
systemctl stop zabbix_agentd
postuninstall scriptlet (using /bin/sh):
userdel -r zabbix
rm -rf /etc/rc.d/init.d/zabbix_agentd
rm -rf /home/zabbix



二、fpm方式定製rpm包

fpm工具其實是對rpmbuild進行封裝,目的是使打包變成容易。由於此工具是ruby語言編寫的,所以系統需要安裝ruby,且ruby版本號大於1.8.5。
fpm開源項目:
https://github.com/jordansissel/fpm


1、安裝ruby環境和gem命令(gem命令是從rubygem倉庫安裝軟件,類似yum從yum倉庫安裝軟件)

[root@localhost ~]# yum -y install ruby rubygems ruby-devel gcc

2、查看gem默認源

[root@localhost ~]# gem source list
*** CURRENT SOURCES ***
https://rubygems.org/

3、添加阿里雲rubygems倉庫

[root@localhost ~]# gem sources -a http://mirrors.aliyun.com/rubygems/
http://mirrors.aliyun.com/rubygems/ added to sources

4、移除默認的國外源

[root@localhost ~]# gem sources --remove https://rubygems.org/
https://rubygems.org/ removed from sources

5、查看gem源是否爲阿里雲

[root@localhost ~]# gem source list
*** CURRENT SOURCES ***
http://mirrors.aliyun.com/rubygems/

6、安裝fpm工具

[root@localhost ~]# gem install fpm
Fetching: cabin-0.9.0.gem (100%)
Successfully installed cabin-0.9.0
Fetching: backports-3.13.0.gem (100%)
Successfully installed backports-3.13.0
Fetching: arr-pm-0.0.10.gem (100%)
Successfully installed arr-pm-0.0.10
Fetching: clamp-1.0.1.gem (100%)
Successfully installed clamp-1.0.1
Fetching: ffi-1.10.0.gem (100%)
Building native extensions.  This could take a while...
Successfully installed ffi-1.10.0
Fetching: childprocess-0.9.0.gem (100%)
Successfully installed childprocess-0.9.0
Fetching: io-like-0.3.0.gem (100%)
Successfully installed io-like-0.3.0
Fetching: ruby-xz-0.2.3.gem (100%)
Successfully installed ruby-xz-0.2.3
Fetching: stud-0.0.23.gem (100%)
Successfully installed stud-0.0.23
Fetching: mustache-0.99.8.gem (100%)
Successfully installed mustache-0.99.8
Fetching: insist-1.0.0.gem (100%)
Successfully installed insist-1.0.0
Fetching: dotenv-2.7.2.gem (100%)
Successfully installed dotenv-2.7.2
Fetching: pleaserun-0.0.30.gem (100%)
Successfully installed pleaserun-0.0.30
Fetching: fpm-1.11.0.gem (100%)
Successfully installed fpm-1.11.0
Parsing documentation for cabin-0.9.0
Installing ri documentation for cabin-0.9.0
Parsing documentation for backports-3.13.0
Installing ri documentation for backports-3.13.0
Parsing documentation for arr-pm-0.0.10
Installing ri documentation for arr-pm-0.0.10
Parsing documentation for clamp-1.0.1
Installing ri documentation for clamp-1.0.1
Parsing documentation for ffi-1.10.0
Installing ri documentation for ffi-1.10.0
Parsing documentation for childprocess-0.9.0
Installing ri documentation for childprocess-0.9.0
Parsing documentation for io-like-0.3.0
Installing ri documentation for io-like-0.3.0
Parsing documentation for ruby-xz-0.2.3
Installing ri documentation for ruby-xz-0.2.3
Parsing documentation for stud-0.0.23
Installing ri documentation for stud-0.0.23
Parsing documentation for mustache-0.99.8
Installing ri documentation for mustache-0.99.8
Parsing documentation for insist-1.0.0
Installing ri documentation for insist-1.0.0
Parsing documentation for dotenv-2.7.2
Installing ri documentation for dotenv-2.7.2
Parsing documentation for pleaserun-0.0.30
Installing ri documentation for pleaserun-0.0.30
Parsing documentation for fpm-1.11.0
Installing ri documentation for fpm-1.11.0
14 gems installed

題外話:如果操作系統爲CentOS6,可能會提示ruby版本問題,這個時候我們指定安裝老版本(因爲升級到新版本很麻煩)

[root@localhost ~]# gem install fpm
Building native extensions.  This could take a while...
Building native extensions.  This could take a while...
ERROR:  Error installing fpm:
    ruby-xz requires Ruby version >= 1.9.3.
[root@localhost ~]# gem install fpm -v 1.4.0

7、查看版本:

[root@localhost ~]# gem -v
2.0.14.1

8、zabbix agent編輯安裝

參考官方cases:https://fpm.readthedocs.io/en/latest/use-cases/make-install.html

編輯安裝zabbix agent:

[root@localhost ~]# groupadd zabbix
[root@localhost ~]# useradd -g zabbix zabbix
[root@localhost ~]# mkdir -p /tmp/installdir
[root@localhost ~]# mkdir -p /tmp/installdir/etc/rc.d/init.d/
[root@localhost ~]# mkdir -p /root/soft/
[root@localhost ~]# cd /root/soft/
[root@localhost soft]# yum install pcre pcre-devel openssl openssl-devel -y
[root@localhost soft]# wget https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/4.0.4/zabbix-4.0.4.tar.gz
[root@localhost soft]# tar -zxvf zabbix-4.0.4.tar.gz
[root@localhost soft]# cd zabbix-4.0.4
[root@localhost zabbix-4.0.4]# ./configure --prefix=/home/zabbix --enable-agent --with-openssl

#將程序安裝在/tmp/installdir目錄,並拷貝定製文件
[root@localhost zabbix-4.0.4]# make install DESTDIR=/tmp/installdir
[root@localhost zabbix-4.0.4]# cp /root/soft/zabbix-4.0.4/misc/init.d/fedora/core/zabbix_agentd /tmp/installdir/etc/rc.d/init.d/
[root@localhost zabbix-4.0.4]# vim /tmp/installdir/etc/rc.d/init.d/zabbix_agentd
BASEDIR=/home/zabbix

#上傳LLD監控端口腳本和相關文件
[root@localhost zabbix-4.0.4]# mkdir -p /tmp/installdir/home/zabbix/script/monitor_port
[root@localhost zabbix-4.0.4]# cd /tmp/installdir/home/zabbix/script/monitor_port
[root@localhost monitor_port]# 上傳腳本和相關文件

#上傳LLD監控進程腳本和相關文件
[root@localhost zabbix-4.0.4]# mkdir -p /tmp/installdir/home/zabbix/script/monitor_proc
[root@localhost zabbix-4.0.4]# cd /tmp/installdir/home/zabbix/script/monitor_proc
[root@localhost monitor_proc]# 上傳腳本和相關文件

#上傳LLD監控jvm腳本和相關文件
[root@localhost zabbix-4.0.4]# mkdir -p /tmp/installdir/home/zabbix/script/jvm
[root@localhost zabbix-4.0.4]# cd /tmp/installdir/home/zabbix/script/jvm
[root@localhost jvm]# 上傳腳本和相關文件

#上傳ssl證書文件
[root@localhost zabbix-4.0.4]# mkdir -p /tmp/installdir/home/zabbix/zabbix_ssl
[root@localhost zabbix-4.0.4]# cd /tmp/installdir/home/zabbix/zabbix_ssl
[root@localhost zabbix_ssl]# 上傳ssl證書文件
[root@localhost zabbix-4.0.4]# cd /tmp/installdir/home/zabbix/etc/zabbix_agentd.conf.d/
[root@localhost zabbix_agentd.conf.d]# 上傳相關配置文件

9、zabbix agent腳本

#創建安裝前的腳本:
[root@localhost ~]# vim /root/soft/zabbix-4.0.4/pre_install.sh
#!/bin/bash
groupadd zabbix
useradd -g zabbix zabbix

#創建安裝後的腳本:
[root@localhost ~]# vim /root/soft/zabbix-4.0.4/post_install.sh
#!/bin/bash
mkdir -p /home/zabbix/logs
chown -R zabbix.zabbix /home/zabbix
chmod -R 755 /home/zabbix
sed -i "s/LogFile=\/tmp\/zabbix_agentd\.log/LogFile=\/home\/zabbix\/logs\/zabbix_agentd.log/g" /home/zabbix/etc/zabbix_agentd.conf
sed -i "s/ServerActive=127\.0\.0\.1/ServerActive=192\.168\.7\.10/g" /home/zabbix/etc/zabbix_agentd.conf
ipaddr=`ip a | grep -w "inet" | egrep "eno3|eth0" |sed 's/^.*inet //g'|sed 's/\/[0-9][0-9].*$//g'`
sed -i "s/Hostname=Zabbix server/Hostname=$ipaddr/g" /home/zabbix/etc/zabbix_agentd.conf
sed -i "s/Timeout=3/Timeout=30/g" /home/zabbix/etc/zabbix_agentd.conf
echo "UnsafeUserParameters=1" >>/home/zabbix/etc/zabbix_agentd.conf
echo "EnableRemoteCommands=1" >>/home/zabbix/etc/zabbix_agentd.conf
echo "Include=/home/zabbix/etc/zabbix_agentd.conf.d/" >>/home/zabbix/etc/zabbix_agentd.conf
echo "PidFile=/home/zabbix/zabbix_agentd.pid" >>/home/zabbix/etc/zabbix_agentd.conf
echo "LogFileSize=0" >>/home/zabbix/etc/zabbix_agentd.conf
echo "StartAgents=0" >>/home/zabbix/etc/zabbix_agentd.conf
echo "HostMetadataItem=system.uname" >>/home/zabbix/etc/zabbix_agentd.conf
echo "User=zabbix" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSConnect=cert" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSAccept=cert" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSCAFile=/home/zabbix/zabbix_ssl/ca.crt" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSCertFile=/home/zabbix/zabbix_ssl/client.crt" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSKeyFile=/home/zabbix/zabbix_ssl/client.key" >>/home/zabbix/etc/zabbix_agentd.conf
systemctl daemon-reload
/etc/init.d/zabbix_agentd start
systemctl enable zabbix_agentd

#創建卸載前的腳本:
[root@localhost ~]# vim /root/soft/zabbix-4.0.4/pre_uninstall.sh
#!/bin/bash
systemctl stop zabbix_agentd

#創建卸載後的腳本:
[root@localhost ~]# vim /root/soft/zabbix-4.0.4/post_uninstall.sh
#!/bin/bash
userdel -r zabbix
rm -rf /etc/rc.d/init.d/zabbix_agentd
rm -rf /home/zabbix

10、打包rpm

#fpm幫助:
[root@localhost installdir]# fpm -help

#安裝rpm-build工具(fpm依賴rpm-build):
[root@localhost ~]# yum -y install rpm-build

#fpm打包命令:
#el6:
[root@localhost ~]# fpm -f -s dir -t rpm -n zabbix-agent --epoch 0 -v 4.0.4 -C /tmp/installdir  -p /tmp/ -d 'pcre' -d 'pcre-devel' -d 'openssl' -d 'openssl-devel' --verbose --category 'Applications/Internet' --description 'Zabbix Agent' --url 'http://www.zabbix.com/' --license 'BSD' -m 'zabbix' --iteration '1.el7' --pre-install /root/soft/zabbix-4.0.4/pre_install.sh --post-install /root/soft/zabbix-4.0.4/post_install.sh --pre-uninstall /root/soft/zabbix-4.0.4/pre_uninstall.sh --post-uninstall /root/soft/zabbix-4.0.4/post_uninstall.sh --no-rpm-sign

#el7:
[root@localhost ~]# fpm -f -s dir -t rpm -n zabbix-agent --epoch 0 -v 4.0.4 -C /tmp/installdir  -p /tmp/ -d 'pcre' -d 'pcre-devel' -d 'openssl' -d 'openssl-devel' --verbose --category 'Applications/Internet' --description 'Zabbix Agent' --url 'http://www.zabbix.com/' --license 'BSD' -m 'zabbix' --iteration '1.el7' --pre-install /root/soft/zabbix-4.0.4/pre_install.sh --post-install /root/soft/zabbix-4.0.4/post_install.sh --pre-uninstall /root/soft/zabbix-4.0.4/pre_uninstall.sh --post-uninstall /root/soft/zabbix-4.0.4/post_uninstall.sh --no-rpm-sign
No args, but -s dir and -C are given, assuming '.' as input {:level=>:info}
Setting workdir {:workdir=>"/tmp", :level=>:info}
Setting from flags: category=Applications/Internet {:level=>:info}
Setting from flags: description=Zabbix Agent {:level=>:info}
Setting from flags: epoch=0 {:level=>:info}
Setting from flags: iteration=1.el7 {:level=>:info}
Setting from flags: license=BSD {:level=>:info}
Setting from flags: maintainer=zabbix {:level=>:info}
Setting from flags: name=zabbix-agent {:level=>:info}
Setting from flags: url=http://www.zabbix.com/ {:level=>:info}
Setting from flags: version=4.0.4 {:level=>:info}
Converting dir to rpm {:level=>:info}
Reading template {:path=>"/usr/local/share/gems/gems/fpm-1.11.0/templates/rpm.erb", :level=>:info}
Running rpmbuild {:args=>["rpmbuild", "-bb", "--define", "buildroot /tmp/package-rpm-build-517c280305ab2eae42f96b512d65d20358a8c8b3917d4073866670c3af72/BUILD", "--define", "_topdir /tmp/package-rpm-build-517c280305ab2eae42f96b512d65d20358a8c8b3917d4073866670c3af72", "--define", "_sourcedir /tmp/package-rpm-build-517c280305ab2eae42f96b512d65d20358a8c8b3917d4073866670c3af72", "--define", "_rpmdir /tmp/package-rpm-build-517c280305ab2eae42f96b512d65d20358a8c8b3917d4073866670c3af72/RPMS", "--define", "_tmppath /tmp", "/tmp/package-rpm-build-517c280305ab2eae42f96b512d65d20358a8c8b3917d4073866670c3af72/SPECS/zabbix-agent.spec"], :level=>:info}
執行(%prep): /bin/sh -e /tmp/rpm-tmp.hia3sU {:level=>:info}
執行(%build): /bin/sh -e /tmp/rpm-tmp.h3UqVw {:level=>:info}
執行(%install): /bin/sh -e /tmp/rpm-tmp.JwnQo9 {:level=>:info}
處理文件:zabbix-agent-4.0.4-1.el7.x86_64 {:level=>:info}
Provides: zabbix-agent = 0:4.0.4-1.el7 zabbix-agent(x86-64) = 0:4.0.4-1.el7 {:level=>:info}
Requires(interp): /bin/sh /bin/sh /bin/sh /bin/sh {:level=>:info}
Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1 {:level=>:info}
Requires(pre): /bin/sh {:level=>:info}
Requires(post): /bin/sh {:level=>:info}
Requires(preun): /bin/sh {:level=>:info}
Requires(postun): /bin/sh {:level=>:info}
寫道:/tmp/package-rpm-build-517c280305ab2eae42f96b512d65d20358a8c8b3917d4073866670c3af72/RPMS/x86_64/zabbix-agent-4.0.4-1.el7.x86_64.rpm {:level=>:info}
執行(%clean): /bin/sh -e /tmp/rpm-tmp.l34fPv {:level=>:info}
Created package {:path=>"/tmp/zabbix-agent-4.0.4-1.el7.x86_64.rpm"}

11、驗證rpm包

[root@localhost ~]# cd /tmp

[root@localhost tmp]# rpm -qpi zabbix-agent-4.0.4-1.el7.x86_64.rpm
Name        : zabbix-agent
Epoch       : 0
Version     : 4.0.4
Release     : 1.el7
Architecture: x86_64
Install Date: (not installed)
Group       : Applications/Internet
Size        : 2970841
License     : BSD
Signature   : (none)
Source RPM  : zabbix-agent-4.0.4-1.el7.src.rpm
Build Date  : 2019年04月18日 星期四 11時13分27秒
Build Host  : localhost
Relocations : /
Packager    : zabbix
Vendor      : [email protected]
URL         : http://www.zabbix.com/
Summary     : Zabbix Agent
Description :
Zabbix Agent

[root@localhost tmp]# rpm -qpl zabbix-agent-4.0.4-1.el7.x86_64.rpm
/etc/rc.d/init.d/zabbix_agentd
/home/zabbix/bin/zabbix_get
/home/zabbix/bin/zabbix_sender
/home/zabbix/etc/zabbix_agentd.conf
/home/zabbix/etc/zabbix_agentd.conf.d/java
/home/zabbix/etc/zabbix_agentd.conf.d/monitor_port
/home/zabbix/etc/zabbix_agentd.conf.d/monitor_proc
/home/zabbix/lib/modules
/home/zabbix/sbin/zabbix_agentd
/home/zabbix/script/jvm/cmdline-jmxclient-0.10.3.jar
/home/zabbix/script/jvm/jvm.py
/home/zabbix/script/jvm/tomcat.py
/home/zabbix/script/monitor_port/discovertcpport.sh
/home/zabbix/script/monitor_port/portlist.txt
/home/zabbix/script/monitor_proc/discoveryproc.sh
/home/zabbix/script/monitor_proc/proclist.txt
/home/zabbix/share/man/man1/zabbix_get.1
/home/zabbix/share/man/man1/zabbix_sender.1
/home/zabbix/share/man/man8/zabbix_agentd.8
/home/zabbix/zabbix_ssl/ca.crt
/home/zabbix/zabbix_ssl/client.crt
/home/zabbix/zabbix_ssl/client.key

[root@localhost tmp]# rpm -qp --scripts zabbix-agent-4.0.4-1.el7.x86_64.rpm
preinstall scriptlet (using /bin/sh):
#!/bin/bash
groupadd zabbix
useradd -g zabbix zabbix
postinstall scriptlet (using /bin/sh):
#!/bin/bash
mkdir -p /home/zabbix/logs
chown -R zabbix.zabbix /home/zabbix
chmod -R 755 /home/zabbix
sed -i "s/LogFile=\/tmp\/zabbix_agentd\.log/LogFile=\/home\/zabbix\/logs\/zabbix_agentd.log/g" /home/zabbix/etc/zabbix_agentd.conf
sed -i "s/ServerActive=127\.0\.0\.1/ServerActive=192\.168\.7\.10/g" /home/zabbix/etc/zabbix_agentd.conf
ipaddr=`ip a | grep -w "inet" | grep eno16777736 |sed 's/^.*inet //g'|sed 's/\/[0-9][0-9].*$//g'`
sed -i "s/Hostname=Zabbix server/Hostname=$ipaddr/g" /home/zabbix/etc/zabbix_agentd.conf
sed -i "s/Timeout=3/Timeout=30/g" /home/zabbix/etc/zabbix_agentd.conf
echo "UnsafeUserParameters=1" >>/home/zabbix/etc/zabbix_agentd.conf
echo "EnableRemoteCommands=1" >>/home/zabbix/etc/zabbix_agentd.conf
echo "Include=/home/zabbix/etc/zabbix_agentd.conf.d/" >>/home/zabbix/etc/zabbix_agentd.conf
echo "PidFile=/home/zabbix/zabbix_agentd.pid" >>/home/zabbix/etc/zabbix_agentd.conf
echo "LogFileSize=0" >>/home/zabbix/etc/zabbix_agentd.conf
echo "StartAgents=0" >>/home/zabbix/etc/zabbix_agentd.conf
echo "HostMetadataItem=system.uname" >>/home/zabbix/etc/zabbix_agentd.conf
echo "User=zabbix" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSConnect=cert" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSAccept=cert" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSCAFile=/home/zabbix/zabbix_ssl/ca.crt" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSCertFile=/home/zabbix/zabbix_ssl/client.crt" >>/home/zabbix/etc/zabbix_agentd.conf
echo "TLSKeyFile=/home/zabbix/zabbix_ssl/client.key" >>/home/zabbix/etc/zabbix_agentd.conf
systemctl daemon-reload
systemctl start zabbix_agentd
systemctl enable zabbix_agentd
preuninstall scriptlet (using /bin/sh):
#!/bin/bash
systemctl stop zabbix_agentd
pkill -9 zabbix_agentd
postuninstall scriptlet (using /bin/sh):
#!/bin/bash
userdel -r zabbix
rm -rf /etc/rc.d/init.d/zabbix_agentd
rm -rf /home/zabbix
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章