Проблема установки при упаковке для Fedora

В настоящее время я упаковываю свою программу (roboJournal) для Fedora 18. Когда я запускаю rpmbuild, мое приложение компилируется правильно, но процесс всегда дает сбой на этапе установки, и пакеты RPM не создаются. Вот вывод терминала при возникновении ошибки:

+ strip robojournal
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.G9PU49
+ umask 022
+ cd /home/will/rpmbuild/BUILD
+ '[' /home/will/rpmbuild/BUILDROOT/robojournal-0.4.1-1.fc18.x86_64 '!=' / ']'
+ rm -rf /home/will/rpmbuild/BUILDROOT/robojournal-0.4.1-1.fc18.x86_64
++ dirname /home/will/rpmbuild/BUILDROOT/robojournal-0.4.1-1.fc18.x86_64
+ mkdir -p /home/will/rpmbuild/BUILDROOT
+ mkdir /home/will/rpmbuild/BUILDROOT/robojournal-0.4.1-1.fc18.x86_64
+ cd robojournal-0.4.1
+ make DESTDIR=/home/will/rpmbuild/BUILDROOT/robojournal-0.4.1-1.fc18.x86_64 install
install -m 755 -p "robojournal" "/usr/bin/robojournal"
install: cannot create regular file '/usr/bin/robojournal': Permission denied
make: [install_target] Error 1 (ignored)
install -m 644 -p /home/will/rpmbuild/BUILD/robojournal-0.4.1/menus/robojournal.desktop /usr/share/applications/
install: cannot create regular file '/usr/share/applications/robojournal.desktop': Permission denied
make: [install_shortcut] Error 1 (ignored)
install -m 644 -p /home/will/rpmbuild/BUILD/robojournal-0.4.1/robojournal64.png /usr/share/icons/
install: cannot create regular file '/usr/share/icons/robojournal64.png': Permission denied
make: [install_icon] Error 1 (ignored)
mkdir: cannot create directory '/usr/share/menu/': Permission denied
make: *** [install_shortcut-deb] Error 1
error: Bad exit status from /var/tmp/rpm-tmp.G9PU49 (%install)

Похоже, что инструкции по установке противоречат друг другу; предполагается, что приложение устанавливается в %_buildrootdir, но оно также пытается установить на системном уровне, как при обычной сборке. Я даже пытался запустить rpmbuild от имени fakeroot, но это не помогло (я знаю, что не должен собирать пакеты как настоящий суперпользователь, потому что это может загрязнить систему). Каталог ~/rpmbuild/BUILDROOT содержит папку «robojournal-0.4.1-1.fc18.x86_64» после каждой попытки сборки, но она всегда пуста.

Вот мой SPEC-файл:

Summary:         Free journal software for everyone
Name:               robojournal
Version:            0.4.1
Release:            1%{?dist}
License:            GPLv3
Group:              Applications/Productivity
Source:             http://sourceforge.net/projects/robojournal/files/Source/%{name}-%{version}.tar.gz
URL:                http://sourceforge.net/projects/robojournal
BuildRequires:      qt, qt-assistant, qt-mysql, qt-devel, qt-webkit, qt-webkit-devel, patch
Requires:           qt, qt-assistant, qt-mysql, qt-devel, qt-webkit, qt-webkit-devel

%description

RoboJournal is a cross-platform journal/diary tool written in Qt/C++.
Right now, RoboJournal only supports MySQL but support for SQLite 
(and possibly Postgres) will be added in future releases. RoboJournal 
runs on Windows and Linux.

%prep

%setup -q -n %{name}-%{version}

%build

qmake-qt4 CONFIG+=package robojournal.pro
patch Makefile < fedora_build.patch
make 
strip robojournal

%install
make DESTDIR=%{buildroot} install

%clean

make clean

%files

%{_bindir}/robojournal
%{_datadir}/applications/robojournal.destop
%{_datadir}/icons/robojournal64.png
%{_datadir}/pixmaps/robojournal.xpm
%{_datadir}/menu/robojournal


%changelog
* Thu Apr 25 2013 Will Kraft <[email protected]>.
- Version 0.4.1

Согласно rpmlint, файл SPEC не содержит ошибок. Я никогда раньше не упаковывал файлы для Fedora, поэтому не знаю, что я делаю не так.

#

ОБНОВЛЕНИЕ (12.05.13):

Ручная установка работает! Вот как в настоящее время выглядит часть %install моего файла SPEC:

%install

#install files manually because "make install" doesn't work with rpmbuild in this case.

# create directory tree in buildroot:
mkdir -p %{buildroot}%{_bindir}/
mkdir -p %{buildroot}%{_datadir}/
mkdir -p %{buildroot}%{_datadir}/applications
mkdir -p %{buildroot}%{_datadir}/icons
mkdir -p %{buildroot}%{_datadir}/menu
mkdir -p %{buildroot}%{_datadir}/pixmaps

# install the files where they need to go
cp -p robojournal %{buildroot}%{_bindir}/
cp -p robojournal64.png %{buildroot}%{_datadir}/icons
cp -p %{_builddir}/%{buildsubdir}/menus/robojournal.desktop %{buildroot}%{_datadir}/applications
cp -p %{_builddir}/%{buildsubdir}/menus/robojournal %{buildroot}%{_datadir}/menu
cp -p %{_builddir}/%{buildsubdir}/menus/robojournal.xpm %{buildroot}%{_datadir}/pixmaps

Несмотря на то, что файлы установлены правильно, rpm по-прежнему не собирается, и я не знаю, почему. Rpmbuild жалуется на отсутствие файлов, хотя я на 100% уверен, что файл существует в нужном месте:

Processing files: robojournal-0.4.1-1.fc18.x86_64
error: File not found: /home/will/rpmbuild/BUILDROOT/robojournal-0.4.1-1.fc18.x86_64/usr/share/applications/robojournal.destop


RPM build errors:
    File not found: /home/will/rpmbuild/BUILDROOT/robojournal-0.4.1-1.fc18.x86_64/usr/share/applications/robojournal.destop
[will@localhost SPECS]$ ls /home/will/rpmbuild/BUILDROOT/robojournal-0.4.1-1.fc18.x86_64/usr/share/applications/
robojournal.desktop
[will@localhost SPECS]$ 

person Will Kraft    schedule 11.05.2013    source источник
comment
Я подумал об этом еще немного и, возможно, мне просто нужно, чтобы файл спецификации установил файлы в% buildroot вручную? то есть используйте mkdir для создания правильной структуры каталогов, а затем копируйте все, что нужно, вместо использования make install.   -  person Will Kraft    schedule 12.05.2013


Ответы (1)


Я думаю, что наконец-то это заработало (по крайней мере, достаточно для создания жизнеспособной RPMS). Оказывается, в разделе %files были неправильные пути.

person Will Kraft    schedule 12.05.2013