如何修改 rpm spec 文件以将 tarball 安装到特定目录?

How do I modify rpm spec file to install a tarball to specific directory?

我想将 gstatus 安装到 /usr/local/gstatus/gstatus-0.66。原始 tarball 将它安装到 /gstatus-0.66。如何修改规范以使其安装到正确的位置? 原始规格:

Name:           gstatus
Version:        0.66
Release:        1%{?dist}
...
Source0:        %{name}-%{version}.tar.gz
BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
...
%prep
%setup -q -n %{name}
...
%install
rm -rf %{buildroot}
%{__python} setup.py install --skip-build --root %{buildroot} --install-scripts %{_bindir}
mkdir -p %{buildroot}%{_mandir}/man8
install -m 0644 gstatus.8 %{buildroot}%{_mandir}/man8/
gzip %{buildroot}%{_mandir}/man8/gstatus.8
...

/usr/local 确实存在,但我需要创建 /usr/local/gstatus。 我可以将 %install 部分修改为:

%install
rm -rf %{buildroot}
mkdir /usr/local/gstatus
%{__python} setup.py install --skip-build --root /usr/local/gstatus/%{buildroot} --install-scripts %{_bindir}
mkdir -p /usr/local/gstatus/%{buildroot}%{_mandir}/man8
install -m 0644 gstatus.8 /usr/local/gstatus/%{buildroot}%{_mandir}/man8/
gzip /usr/local/gstatus/%{buildroot}%{_mandir}/man8/gstatus.8
...

没有。在 %install 部分中,您需要将所有内容都放在 %{buildroot} 下。您可能应该这样做:

%install
mkdir -p %{buildroot}/usr/local/gstatus/
--root %{buildroot}/usr/local/gstatus/

%files
/usr/local/gstatus/

一些注意事项:

  • 是的,您需要在 %{buildroot}(/usr 等)下创建所有目录,但您应该只打包属于您的目录。包装发生在 %files
  • %files下指定目录默认是递归的。这里指定/usr/local/gstatus/,递归打包目录gstatus