RPM包制作(二)创建SPEC文件 -来自红帽原厂课件

创建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 --⑭

  • 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部分,用于打包器列出在此版本中更改的项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太极淘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值