创建Spec 文件
在Red Hat EnterpriseLinux 6上,vim有一个帮助创建规范文件的宏。只需传入一个以.spec结尾的文件名:
[user@host ~]$ vimsample.spec
Red Hat Enterprise Linux 6版本的vim将使用spec模板为RPM构建提供一些常见的条目。
Spec举例
下面是一个带注释的spec文件示例
%define debug一package %{nil} --①
%define product一family Red HatEnterprise Linux
%define release_name Santiago
%define base_release_version6
%define full_release_version6.0
%define beta Beta
Name: redhat-release --②
Version: ${base_release_version} --③
Release: 6.0.0.24%{?dist} --④
Summary: %{product_family}release file --⑤
Group: SystemEnvironment/Base
License:GPLV2
Obsoletes: rawhide-releaseredhat-release-as redhat-release-es redhat-release-ws --⑥
Source0: redhat-release-6-4.tar.gz --⑦
%description --⑧
%{product_family} releasefiles
%prep --⑨
%setup -q
%build --⑩
echo OK
%install --⑪
rm -rf $RPM_BUILD_ROOT
create /etc
mkdir -p $RPM_BUILD_ROOT/etc
create /etc/system-releaseand /etc/redhat/release
echo "%{product_family}release %{full_release_version}%{?beta: %{beta}}
(%{release—name})’’ >$RPM_BUILD_ROOT/etc/redhat-release
In -s redhat-release$RPM_BUILD_ROOT/etc/system-release
write cpe to/etc/system/release-cpe
echo"cpe:/o:redhat:enterprise_linux:%{version}:%{?beta:%{beta}}%{!?beta:GA}">
$RPM_BUILD—ROOT/etc/system-release-cpe
create /etc/issue and/etc/issue.net
cp $RPM_BUILD_ROOT/etc/redhat-release $RPM_BUILD_ROOT/etc/issue
echo “Kernel \r on an\m” >> $RPM_BUILD_ROOT/etc/issue
cp R P M B U I L D R O O T / e t c / i s s u e RPM_BUILD_ROOT/etc/issue RPMBUILDROOT/etc/issueRPM_BUILD_ROOT/etc/issue.net
echo >>$RPM_BUILD_ROOT/etc/issue
copy yum repos to/etc/yum.repos.d
mkdir -p$RPM_BUILD_ROOT/etc/yum.repos.d
for file in *.repo; do
install -m 644$file $RPM_BU1LD_ROOT/etc/yum.repos.d
done
copy GPG keys
mkdir -p -m 755 $RPM_BUILD_ROOT/etc/pki/rpm-gpg
for file in RPM-GPG-KEY* ; do
install -m 644$file $RPM_BUILD_ROOT/etc/pki/rpm-gpg
done
set up the dist tag macros
install -d -m 755 $RPM_BUILD_ROOT/etc/rpm
cat >> $RPM_BUILD_ROOT/etc/rpm/macros.dist<< EOF
dist macros.
%%rhel %{base_release_version}
%%dist.el%{base_release_version}
%%el%{base_release_version}1
EOF
%clean --⑫
rm -rf $RPM_BUILD_ROOT
%files --⑬
%defattr(-, root,root)
%doc EULA GPLautorun-template
%attr(0644,root,root)/etc/redhat-release
/etc/system -release
%config%attr(0644,root,root)/etc/system -release-cpe
%config(noreplace)%attr(0644,root,root)/etc/issue
%config(noreplace)%attr(0644,root,root)/etc/issue.net
%config%attr(0644,root,root)/etc/yum.repos.d/*
%dir /etc/pki/rpm-gpg
/etc/pki/rpm-gpg/*
/etc/rpm/macros.dist
%changelog --⑭
- Mon Mar 29 2010 DennisGregorovic dgregor@redhat.com - 6-6.0.0.24
-
Add beta debuginfo repos
-
Resolves: rhbz#572308
① 可以在spec文件中使用的宏(如变量)
② 包的名称
③ 包的版本。注意,它使用了上面定义的%{base_release_version}宏。
④ 包的release(发布版本)
⑤ 一个简短的摘要
⑥ 此包过时的包名列表。如果您的机器上安装了其中一个包,那么更新此包将删除该包。
⑦ 一个源文件
⑧ 详细描述
⑨%prep部分。RPM spec文件将%用于节和宏。%prep是一个部分,%setup是一个宏,用于解压包。%patch1、%patch2、%patch3打补丁包1、2、3
⑩ %build 部分
⑪%install部分。RPM_BUILD_ROOT是扩展到“build root”的变量。文件从构建目录复制到$ RPM_BUILD_ROOT,如$ RPM_BUILD_ROOT软件将被安装在 /文件系统中。然后,在%file中列出的$ RPM_BUILD_ROOT的内容将被打包到最终RPM文件中。在将文件复制到该位置之前,必须在$ RPM_BUILD_ROOT中创建所有必要的目录。源文件可以从最高级的% {version }源目录中使用相对路径引用。例如,如果您想要在/root/bin/(在% { name }-%{version}/ bin目录中找到),您需要做如下的操作:
mkdir -p$RPM_BUILD_ROOT/root/bin
cp bin/my-script $RPM_BUILD_ROOT/root/bin
⑫ %clean部分。通常clean只有上面的rm命令
⑬ %file部分。要包含在这个包中的文件列表。注意,% defattr设置文件将拥有的默认权限,%attr可以逐个文件覆盖该权限。
%config和%doc分别标记配置文件和文档。
%dir标记包所拥有的目录。
⑭ %changelog部分,用于打包器列出在此版本中更改的项目。