避免 RPM 规范文件中的冗余

Avoid redundancy in RPM spec file

我尝试构建一个简单的 noarch 包。我用以下方法构建包:

rpmbuild -bb --build-in-place --define "_topdir $(pwd)/rpm" typeset-pdf.spec

这是规格:

Name:       typeset-pdf
Version:    1.0
Release:    1%{?dist}
Summary:    Typeset PDF
License:    Proprietary
BuildArch:  noarch

%description
Use TeX templates to typeset PDF files.

%prep

%build

%install
install -D -t %{buildroot}/%{_bindir} %{name}
install -D -t %{buildroot}/%{_datadir}/%{name}/lieferschein \
        lieferschein/lieferschein.tex.tt \
        lieferschein/logo.eps

%files
%{_bindir}/%{name}
%{_datadir}/%{name}/lieferschein/lieferschein.tex.tt
%{_datadir}/%{name}/lieferschein/logo.eps

%changelog

%install%files 部分的内容几乎相同。是否有可能避免这种冗余?我可以在 %install 部分中使用 %files 部分的内容吗?

Is it possible to avoid this redundancy

是的,做类似的事情(非常近似的代码!):

%install
<your install commands>
find %{buildroot} > installed-files

%files -f installed-files

但这很微妙,您将 运行 打包 /usr/bin/ 和其他系统目录时遇到麻烦。

为什么不呢?

我建议您不要回避这些重复项。这就是 rpm 的工作方式并且它有其价值(尤其是在使用相同的规范文件创建多个包时)。请注意,在 %install 部分中,您需要创建 /usr/bin/ 等,而您应该 而不是 将它们打包在 %files.

另请注意,在 %files 下,您可以指定一个目录,该目录将递归打包目录:

%files
%{_bindir}/%{name}
%{_datadir}/%{name}

满足你的情况。

再次:确保打包 所有 属于您的包的文件和目录,但仅此而已。每个文件和目录只能属于一个 rpm 包。例如,忘记打包您的顶级目录会在您卸载 rpm.

时留下它

选项 投了反对票:

Name:       typeset-pdf
Version:    1.0
Release:    1%{?dist}
Summary:    Typeset PDF
License:    Proprietary
BuildArch:  noarch

%description
Use TeX templates to typeset PDF files.

%prep

%build

%install
> FILES
file ()
{
  install -m 0644 -D -t "%{buildroot}/$(dirname "/")" ""
  echo "/" >> FILES
}
dir ()
{
  mkdir -p -m 0755 "%{buildroot}//"
  echo "%dir /" >> FILES
}
file %{_bindir}              typeset-pdf
dir  %{_datadir}             typeset-pdf
dir  %{_datadir}/typeset-pdf lieferschein
file %{_datadir}/typeset-pdf lieferschein/lieferschein.tex.tt
file %{_datadir}/typeset-pdf lieferschein/logo.eps

%files -f FILES

%changelog