避免 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
我尝试构建一个简单的 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