#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»)