現在、プログラム (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 <pwizard@gmail.com>.
- Version 0.4.1
rpmlint によると、SPEC ファイルにエラーはありません。これまで Fedora 用にパッケージ化したことがないので、何が間違っているのかわかりません。
#更新 (2013 年 5 月 12 日):
手動インストールが機能します!現在、私の SPEC ファイルの %install 部分は次のようになっています。
%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 がビルドされず、その理由がわかりません。ファイルが必要な場所に存在することを100%知っているにもかかわらず、Rpmbuildはファイルが見つからないと文句を言います:
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]$