SPEC脚本主体
%prep 预处理脚本
%setup -n %{name}-%{version}** 把源码包解压并放好通常是从/usr/src/asianux/SOURCES里的包解压到/usr/src/asianux/BUILD/%{name}-%{version}中。一般用%setup -c就可以了,但有两种情况:一就是同时编译多个源码包,二就是源码的tar包的名称与解压出来的目录不一致,此时,就需要使用-n参数指定一下了。
%patch 打补丁通常补丁都会一起在源码tar.gz包中,或放到SOURCES目录下。一般参数为:
%patch -p1 使用前面定义的Patch补丁进行,-p1是忽略patch的第一层目 %Patch2 -p1 -b xxx.patch 打上指定的补丁,-b是指生成备份文件补充
%setup 不加任何选项,仅将软件包打开。 %setup -n newdir 将软件包解压在newdir目录。 %setup -c 解压缩之前先产生目录。 %setup -b num 将第num个source文件解压缩。 %setup -T 不使用default的解压缩操作。 %setup -T -b 0 将第0个源代码文件解压缩。 %setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。 %patch 最简单的补丁方式,自动指定patch level。 %patch 0 使用第0个补丁文件,相当于%patch ?p 0。 %patch -s 不显示打补丁时的信息。 %patch -T 将所有打补丁时产生的输出文件删除。%configure 这个不是关键字,而是rpm定义的标准宏命令。意思是执行源代码的configure配置,在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行 ,使用标准写法,会引用/usr/lib/rpm/marcros中定义的参数。另一种不标准的写法是,可参考源码中的参数自定义,例如:
引用CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix}
%build 开始构建包,在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make的工作
%install 开始把软件安装到虚拟的根目录中.在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make install的操作。这个很重要,因为如果这里的路径不对的话,则下面%file中寻找文件的时候就会失败。 常见内容有:
%makeinstall 这不是关键字,而是rpm定义的标准宏命令。也可以使用非标准写法:make DESTDIR=$RPM_BUILD_ROOT install或引用make prefix=$RPM_BUILD_ROOT install 需要说明的是,这里的%install主要就是为了后面的%file服务的。所以,还可以使用常规的系统命令:引用install -d $RPM_BUILD_ROOT/和cp -a * $RPM_BUILD_ROOT/%clean 清理临时文件
%pre rpm安装前执行的脚本
%post rpm安装后执行的脚本
%preun rpm卸载前执行的脚本
%postun rpm卸载后执行的脚本
%files 定义那些文件或目录会放入rpm中
%defattr (-,root,root)** 指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755
%changelog 变更日志
实例:
%define zabbix_user zabbix #自定义宏,名字为zabbix_user值为zabbix,%{zabbix_user}引用
Name: zabbix #软件包的名字,后面可用%{name}引用
Version: 3.0.3 #软件的实际版本号,可使用%{version}引用
Release: 1%{?dist} #发布序列号,标明第几次打包
Summary: zabbix_agentd #软件包内容概要
Group: zabbix #软件包分组
License: GPL #授权许可方式
URL: www.yang.com #软件的主页
Source0: zabbix-3.0.3.tar.gz #源代码包,可以有Source0,Source1等源
BuildRequires: gcc, gcc-c++ #制作rpm包时,所依赖的基本库
Requires: gcc, gcc-c++, chkconfig #安装rpm包时,所依赖的软件包
%description #定义rpm包的描述信息
Zabbix agentd 3.0.3
%pre #rpm包安装前执行的脚本
grep zabbix /etc/passwd > /dev/null
if [ $? != 0 ]
then useradd zabbix -M -s /sbin/nologin
fi
[ -d /etc/zabbix ]||rm -rf /etc/zabbix*
%post #rpm包安装后执行的脚本
sed -i "/^ServerActive=/cServerActive=172.30.17.35" /etc/zabbix/etc/zabbix_agentd.conf
sed -i "/^Server=/cServer=172.30.17.35" /etc/zabbix/etc/zabbix_agentd.conf
sed -i "/Timeout=3/cTimeout=30" /etc/zabbix/etc/zabbix_agentd.conf
sed -i "/HostMetadata=/cHostMetadata=PostgreSQL" /etc/zabbix/etc/zabbix_agentd.conf
sed -i "/^Hostname=/cHostname=PostgreSQL" /etc/zabbix/etc/zabbix_agentd.conf
echo "UnsafeUserParameters=1" >>/etc/zabbix/etc/zabbix_agentd.conf
echo "EnableRemoteCommands=1" >>/etc/zabbix/etc/zabbix_agentd.conf
echo "Include=/etc/zabbix/etc/zabbix_agentd.conf.d/*.conf" >>/etc/zabbix/etc/zabbix_agentd.conf
chkconfig zabbix_agentd on
%preun #rpm卸载前执行的脚本
systemctl stop zabbix_agentd
%postun #rpm卸载后执行的脚本
userdel zabbix
rm -rf /etc/zabbix*
%prep #这个宏开始
%setup -q #解压并cd到相关目录
%build #定义编译软件包时的操作
./configure --prefix=/etc/%{name}-%{version} --enable-agent
make -j16 %{?_smp_mflags}
%install #定义安装软件包,使用默认值即可
test -L %{buildroot}/etc/%{name} && rm -f %{buildroot}/etc/%{name}
install -d %{buildroot}/etc/profile.d
install -d %{buildroot}/etc/init.d
make install DESTDIR=%{buildroot}
echo 'export PATH=/etc/zabbix/bin:/etc/zabbix/sbin:$PATH' > %{buildroot}/etc/profile.d/%{name}.sh
ln -sf /etc/%{name}-%{version} %{buildroot}/etc/%{name}
cp %{_buildrootdir}/postgresql.conf %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/postgresql.conf
cp %{_buildrootdir}/tcp_connections.sh %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/tcp_connections.sh
cp %{_buildrootdir}/iostat-collect.sh %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/iostat-collect.sh
cp %{_buildrootdir}/iostat-parse.sh %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/iostat-parse.sh
cp %{_buildrootdir}/iostat-zabbix.conf %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/iostat-zabbix.conf
cp %{_buildrootdir}/zabbix_agentd %{buildroot}/etc/init.d/zabbix_agentd
%files #定义rpm包安装时创建的相关目录及文件。在该选项中%defattr (-,root,root)一定要注意。它是指定安装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755。
/etc/%{name}
/etc/%{name}-%{version}/*
/etc/init.d/zabbix_agentd
/etc/profile.d/%{name}.sh
%changelog #主要用于软件的变更日志。该选项可有可无
%clean
rm -rf %{buildroot} #清理临时文件








