Используйте cpanspec для создания RPM, который устанавливает файл рабочего стола - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь преобразовать некоторый код Perl в RPM.cpanspec отлично справляется со своей задачей, принимая файл .tar.gz, содержащий код Perl, и генерируя файл .SPEC, который фактически генерирует рабочий RPM.

Однако я не могу понять, как изменитьФайл .SPEC, чтобы он установил файл рабочего стола.В принципе, это должно быть так же просто, как добавить эти строки:

Source1:        myapp.desktop

...

desktop-file-install                               \                         
--dir=${RPM_BUILD_ROOT}%{_datadir}/applications    \
%{SOURCE1}

xdg-desktop-icon install --novendor %{SOURCE1}

Это не работает, любой и никакой другой вариант.Обычно я получаю сообщение об ошибке, подобное следующему:

error: Installed (but unpackaged) file(s) found:
   /usr/share/applications/myapp.desktop

Я искал в Google исчерпывающе, и, очевидно, никто в истории вычислений не пытался выполнить эту операцию раньше.Либо это, либо я упускаю что-то действительно очевидное.

РЕДАКТИРОВАТЬ: Следуя приведенным ниже советам, этот минимальный файл .SPEC дает желаемые результаты.Я использовал rpmbuild и скопировал файл рабочего стола и соответствующий ему файл изображения в /rpm/SOURCES.

Name:           perl-MyApp
Version:        1.0
Release:        1%{?dist}
Summary:        MyApp Perl module
License:        Distributable, see COPYING COPYING.LESSER
Group:          Development/Libraries
URL:            http://search.cpan.org/dist/MyApp/
Source0:        http://www.cpan.org/modules/by-module/MyApp-%{version}.tar.gz
Source1:        myapp.desktop
Source2:        myapp.png
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch:      noarch
BuildRequires:  perl(ExtUtils::MakeMaker)
Requires:       perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))

%description
blah blah blah

%prep
%setup -q -n MyApp-%{version}

%build
%{__perl} Makefile.PL INSTALLDIRS=vendor
make %{?_smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT

make pure_install PERL_INSTALL_ROOT=$RPM_BUILD_ROOT

find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} \;
find $RPM_BUILD_ROOT -depth -type d -exec rmdir {} 2>/dev/null \;

%{_fixperms} $RPM_BUILD_ROOT/*

mkdir %{buildroot}/usr/share/pixmaps/
cp -a %{SOURCE2} %{buildroot}/usr/share/pixmaps/myapp.png

desktop-file-install                                    \
--dir=${RPM_BUILD_ROOT}%{_datadir}/applications         \
%{SOURCE1}

xdg-desktop-icon install --novendor %{SOURCE2}

%check
make test

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%doc CHANGES COPYING COPYING.LESSER README
%{perl_vendorlib}/*
%{_mandir}/man3/*
/usr/share/applications/myapp.desktop
/usr/share/pixmaps/myapp.xpm

1 Ответ

0 голосов
/ 29 сентября 2018

Вам нужно, чтобы этот файл рабочего стола был добавлен в раздел %files.Я не знаю, как автоматизировать это с помощью cpanspec, но в вашем примере с specfile его нет в списке, и это именно то, что rpmbuild сказал, что вы ошиблись.

...