≈ Approximate Number
I`m writing useless blog

Как сделать бинарный RPM-пакет из готового набора файлов


Для примера мы возьмем файл (в данном случае пустой sh-скрипт) testapp.sh, который находится в каталоге /opt/testapp. Представим, что это программа, состоящая всего лишь из одного файла, и ее необходимо распространять в виде RPM-пакета.

Создаем директорию для Source-приложения и кладем туда наше приложение:

user@localhost mkdir -p testapp-1.0/testapp
user@localhost cp /opt/testapp.sh testapp-1.0/testapp/

Сделаем архив Source-приложения:

user@localhost tar -xzf testapp-1.0.tar.gz testapp-1.0

Настоятельно рекомендуется собирать RPM-пакеты НЕ под учетной записью root в целях безопасности. Я собираю пакеты под учетной записью rpmbuild. Все дальнейшие действия выполняются под ней.

Теперь необходимо создать дерево каталогов (окружение) для сборки rpm следующего содержания:

rpmbuild@localhost mkdir -p ~/RPMBUILD/{RPMS,SRPMS,SPECS,SOURCES,BUILD,BUILDROOT}

Переопределить макросы в файле ~/.rpmmacros:

%_topdir /home/rpmbuild/RPMBUILD
%_builddir %{_topdir}/BUILD
%_rpmdir %{_topdir}/RPMS
%_sourcedir %{_topdir}/SOURCES
%_specdir %{_topdir}/SPECS
%_srcrpmdir %{_topdir}/SRPMS

Архив Source-приложения testapp-1.0.tar.gz должен находиться в директории ~/RPMBUILD/SOURCES.

Самое главное - правильно заполнить файл спецификации ~/RPMBUILD/SPECS/testapp.spec:

Summary: Test App
Name: testapp
Version: 1.0
Release: 1
License: Commercial
Group: Misc/Applications
Source0: %{name}-%{version}.tar.gz
Vendor: Me
Packager: rpmbuild

%description
Just an application for testing.


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


%install

[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT

mkdir $RPM_BUILD_ROOT
install -d testapp $RPM_BUILD_ROOT/opt/testapp
install -m 755 testapp/testapp.sh $RPM_BUILD_ROOT/opt/testapp

%clean
rm -rf $RPM_BUILD_ROOT

%files

%defattr(755,root,root)

%dir /opt/testapp
/opt/testapp/testapp.sh

И запустить сборку RPM-пакета:

rpmbuild@localhost ~/RPMBUILD/SPECS $ rpmbuild -bb testapp.spec     

По умолчанию, rpmbuild собирает пакет под текущую архитектору. В данном случае, x86_64. В случае успешной сборки готовый rpm-пакет testapp-1.0-1.x86_64.rpm будет располагаться в каталоге ~/RPMBUILD/RPMS/x86_64.

Для другой архитектуры, например, i686, используйте опцию --target i686.

Теперь можно посмотреть информацию о нашем пакете и убедиться, что всё в порядке:

rpmbuild@localhost ~/RPMBUILD/RPMS/x86_64 $ rpm -qlip testapp-1.0-1.x86_64.rpm 
Name        : testapp
Version     : 1.0
Release     : 1
Architecture: x86_64
Install Date: (not installed)
Group       : Misc/Applications
Size        : 0
License     : Commercial
Signature   : (none)
Source RPM  : testapp-1.0-1.src.rpm
Build Date  : Пн 27 июн 2016 11:43:25
Build Host  : localhost
Relocations : (not relocatable)
Packager    : rpmbuild
Vendor      : Me
Summary     : Test App
Description :
Just an application for testing.

/opt/testapp
/opt/testapp/testapp.sh
comments powered by Disqus

© Maksim Melnikov, 2015-2019.
Made with Jekyll and GitHub.