1 安装rpmbuild,并配置环境
1.1 首先,你应该检查 rpmbuild 是否已经被安装在你的系统上。你将会利用这个工具从 spec 文件或 SRPM 组件创建 RPM。要检查它是否被安装了,请执行 rpmbuild --showrc 这个指令。它将会显示一大组数据,把 rpmbuild 所采用的创建环境的细节列明。假若系统输出:$ rpmbuild: command not found,便意味着 rpmbuild 未被安装。你可以用 root 身份执行下列指令,通过 yum 来安装它:
[root@host ~]# yum install rpm-build1.2要创建一个创建 RPM 的环境,这执行下列两个指令:
[user@hostname ~]$ mkdir -p /usr/src/redhat/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
2 RPM相关知识点说明
3 制作RPM源程序包tar.gz
需要:
免安装版tomcat7包;
JAVA WEB程序包(由WAR包解压成编译后的代码包,即如同WAR包在tomcat\webapps\运行后的代码包,如webPro);
将 JAVA WEB程序包webPro拷贝至tomcat\webapps\下;
执行命令:1> tar -zcf :tomcat-vbox-1.0.tar.gz tomcat ; 2 >cp -rf :tomcat-vbox-1.0.tar.gz /usr/src/redhat/SOURCES ; (即将tar.gz源代码包拷贝到/usr/src/redhat/SOURCES目录内)
4 制作.spec文件
需要:
制作.spec文件,例如:tomcat-webPro-1.0.spec ;(.spec,如何编写请参考 Inside the spec file )
执行命令:1 >cp -rf tomcat-webPro-1.0.spec /usr/src/redhat/SPECS; (即将tomcat-webPro-1.0.spec RPM制作控制文件拷贝到/usr/src/redhat/SPECS目录内)
5 运行rpmbuild命令,完成RPM包的制作
执行命令:1 > rpmbuild -ba /usr/src/redhat/SPECS/tomcat-webPro-1.0.spec
6 如果成功,则rpm包会存储在/usr/src/redhat/RPMS 子目录内
注意:
1 如果想在运行安装rpm时,即(rpm -ivh xxxxxxxxxxx.rpm)与用户进行提示交互,必须要在.spec文件的 ’ %post ‘ 阶段调用shell脚本,如:
2 如果想在运行删除rpm时,即(rpm -e xxxxxxxxxxx )与用户进行提示交互,必须要在.spec文件的 ’ %preun‘ 阶段调用shell脚本,如:
以下为一小实例.spec文件tomcat-webPro-1.0.spec (注preinst、prerm为shell脚本文件):
Summary:vbox
Name:tomcat-vbox
Version:1.0
Release:0
BuildRoot:%{_tmppath}/%{name}-%{version}-root
Source0:tomcat-vbox-1.0.tar.gz
License:GPL
Group:Applications/Productivity/vbox
%description
vrv vbox RPM package
%prep
rm -rf $RPM_BUILD_DIR/%{name}-%{version}
%setup -q
%build
%install
rm -fr $BuildRoot
mkdir -p $RPM_BUILD_ROOT/usr/local/vrv-vbox
cp -rf * $RPM_BUILD_ROOT/usr/local/vrv-vbox
if [ ! -d /usr/local/vrv-vbox ]
then
{
mkdir -p /usr/local/vrv-vbox
}
fi
chmod 755 /usr/local/vrv-vbox -R
cp -rf * /usr/local/vrv-vbox
%files
%defattr(-,root,root)
/usr/local/vrv-vbox
%pre
%post
if [ -d /usr/local/vrv-vbox/ ]
then
{
bash /usr/local/vrv-vbox/preinst
}
fi
%preun
if [ -d /usr/local/vrv-vbox/ ]
then
{
bash /usr/local/vrv-vbox/prerm
}
fi
%clean
rm -fr $BuildRoot
preinst:
#!/bin/bash
function write_log()
{
dateoftod=`date +%Y%m%d`
logfilename="log-vbox-$dateoftod"
if [ ! -d /usr/local/vrv-vbox/vbox-logs ]
then
{
mkdir -p /usr/local/vrv-vbox/vbox-logs
}
fi
if [ ! -f /usr/local/vrv-vbox/vbox-logs/$logfilename ]
then
{
touch /usr/local/vrv-vbox/vbox-logs/$logfilename
}
fi
if [ $# -eq 2 ]
then
echo "$(date "+%Y-%m-%d %H:%M:%S") [$0:$1] $2" >>/usr/local/vrv-vbox/vbox-logs/$logfilename
elif [ $# -eq 3 ]
then
echo "$(date "+%Y-%m-%d %H:%H:%S") [$0:$1] $2 : $3">>/usr/local/vrv-vbox/vbox-logs/$logfilename
else
echo "record log error."
fi
}
echo "-------------------------------------------------------------------------"
echo " Welcome install vbox software for cloud platform security system."
echo "-------------------------------------------------------------------------"
write_log $LINENO "INFO: install process start."
if [ $UID -ne 0 ]
then
{
write_log $LINENO "FATAL: user privilege error."
echo "Error:Superuser privilege are required to run this script."
exit -1
}
fi
write_log $LINENO "INFO: user privilege correct."
#1:check mysql installed
#3:check JDK 1.6 1.7
checkjre=$(java -version 2>&1|grep "java version")
if [ "$checkjre" = "" ]
then
{
write_log $LINENO "FATAL: Please install jre first."
echo "Please install jre first."
exit -1
}
else
{
jre_version=$(java -version 2>&1 | grep "java version" | awk '{print $3}' | tr -d \" | awk '{split($0, array, ".")} END{print array[1]"."array[2]}')
cmp_version="1.6"
result_cmp=$(expr $jre_version \>= $cmp_version)
if [ $result_cmp -eq 0 ]
then
{
write_log $LINENO "FATAL: Jre version too low! Please install version 1.6 or higher."
echo "Jre version too low! Please install version 1.6 or higher."
exit -1
}
fi
}
fi
prerm:
#!/bin/bash
function write_log()
{
dateoftod=`date +%Y%m%d`
logfilename="log-vbox-$dateoftod"
if [ ! -d /usr/local/vrv-vbox/vbox-logs ]
then
{
mkdir -p /usr/local/vrv-vbox/vbox-logs
}
fi
if [ ! -f /usr/local/vrv-vbox/vbox-logs/$logfilename ]
then
{
touch /usr/local/vrv-vbox/vbox-logs/$logfilename
}
fi
if [ $# -eq 2 ]
then
echo "$(date "+%Y-%m-%d %H:%M:%S") [$0:$1] $2" >>/usr/local/vrv-vbox/vbox-logs/$logfilename
else
echo "record log error."
fi
}
write_log $LINENO "INFO: start uninstall vbox process."
if [ $UID -ne 0 ]
then
{
write_log $LINENO "FATAL: user privilege error."
echo "Error:Superuser privilege are required to run this script."
echo "error">rmlog
exit -1
}
fi
#3 del /usr/local/vrv-vbox
if [ -d /usr/local/vrv-vbox ]
then
{
write_log $LINENO "delete vbox-tomcat."
rm -rf /usr/local/vrv-vbox
}
fi
源代码目录结构,即要打包成.tar.gz前的目录结构: