Как мне изменить файл спецификации rpm, чтобы установить архив в определенный каталог?

#rpm #rpm-spec

#rpm #rpm-spec

Вопрос:

Я хочу установить gstatus в /usr/local/gstatus/gstatus-0.66. Исходный архив устанавливает его в <current_path>/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
...
 

Комментарии:

1. Установка вещей в /usr/local противоречит многим рекомендациям по упаковке. В идеале установите его /usr/bin/ , если это двоичный файл, и если существует другой двоичный файл с тем же именем, используйте какой-нибудь суффикс версии и т. Д. Другим (но менее предпочтительным) вариантом является установка на /opt/<program>/bin

Ответ №1:

Нет. Внутри %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 упаковывается рекурсивно.

Комментарии:

1. Большое спасибо, Крис!! Это очень хорошее объяснение. Я отредактирую его и перестрою снова. (Я использую «mkrpm localbuild»)