经常需要把一些脚本打包到rpm包中去,安装rpm后能把脚本复制到指定位置。
这个东西写完就忘了,在这里记一下
在rhel5里SPECS和SOURCES目录在/usr/src/redhat/下,rhel6里需要自己创建。
yum -y install rpm-build
mkdir -p /root/rpmbuild/{SPECS,SOURCES}
把源码包放到SOURCES目录里,在SPECS里建立一个.spec文件。
例如:
Name: hpcweb
Version: 1.0
Release: 1
Summary:this is a hpcweb test rpm! #这些是这个rpm包的信息,rpm -qi hpcweb 可以查看到
Group: CSVT
License:GPL
URL: http://www.csvt.net
Source0: %{name}-%{version}.tar.gz #这里必须要源码包名字匹配,例如:hpcweb-1.0.tar.gz
BuildRoot: /var/tmp/%{name}-buildroot #安装或编译的临时目录
%description #rpm包描述信息
Installs /etc/init.d/
Installs /usr/sbin/
%prep #预处理脚本,建立软件所需要的目录
%setup -q -n %{name}-%{version}
%build #开始构建一个包
echo OK!
%install #类似make install的意思
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/hpcweb #建立/root/rpmbuild/BUILDROOT/hpcweb
install -m 755 %{SOURCE0} $RPM_BUILD_ROOT/hpcweb # %{SOURCE0}等于源码包,就是把源码包解压到/root/rpmbuild/BUILDROOT/hpcweb/下。
%clean #清理临时文件
[ "$PRM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
%post #定义安装完包所执行的命令
cd /hpcweb
tar zxvf hpcweb-1.0.tar.gz
cp hpcweb-1.0/init.d/* /etc/init.d/
cp hpcweb-1.0/sbin/* /usr/sbin/
mkdir /etc/hpcweb/
cp hpcweb-1.0/conf/* /etc/hpcweb/
for i in nodedatacollect nodedataredis pym_client pym_server webredis; do mkdir /var/run/$i > /dev/null 2>&1; mkdir /var/lock/$i > /dev/null 2>&1; done
%preun #卸载rpm包后相应的操作
for i in nodedatacollect nodedataredis pym_client pym_server webredis; do rm -fr /var/run/$i; rm -fr /var/lock/$i; rm -f /etc/init.d/$i; rm -f /usr/sbin/$i; rm -fr /etc/hpcweb/;done
%files #定义哪些文件或目录会放入rpm包中
%defattr(-,root,root,-)
%dir /hpcweb/* #把/hpcweb/放入到了rpm中
%doc
%changelog
生成rpm包
rpmbuild -ba /root/rpmbuild/SPECS/hpcweb.spec
生成的rpm包在/root/rpmbuild/RPMS/中