Поиск по сайту:

Как создать RPM-пакет GNU Hello World в Fedora


RPM (рекурсивная аббревиатура от RPM Package Manager) — это бесплатная система управления пакетами с открытым исходным кодом для Linux. Хотя изначально он был создан для использования в Red Hat Linux, теперь он используется во многих дистрибутивах Linux, таких как CentOS, Fedora и . >OpenSuse. Важно отметить, что имя RPM относится к программе-менеджеру пакетов, а .rpm — это формат файла.

В этой статье мы объясним, как писать файлы RPM, покажем, как легко создавать простые исходные и двоичные пакеты программного обеспечения, например, GNU «Hello World» пакет RPM в Fedora Linux распределение. Мы предполагаем, что вы имеете базовое представление о готовых пакетах RPM и о процессе сборки бесплатного программного обеспечения с открытым исходным кодом.

Установите инструменты разработки в Fedora

Давайте начнем с настройки среды разработки в Fedora Linux, выполнив следующую команду для установки необходимых инструментов для создания RPM.

sudo dnf install fedora-packager @development-tools

Затем добавьте свою непривилегированную учетную запись в группу «mock» следующим образом (замените tecmint на свое фактическое имя пользователя). Это позволит вам протестировать процедуру сборки в чистом chroot.

sudo usermod -a -G mock tecmint

Теперь создайте сборку RPM в своем каталоге ~/rpmbuild и проверьте сборку с помощью следующих команд. Он покажет список подкаталогов, которые содержат исходный код проекта, файлы конфигурации RPM и бинарные пакеты.

rpmdev-setuptree
tree ~/rpmbuild/

Вот для чего предназначен каждый каталог:

  1. BUILD — сохраняет различные каталоги %buildroot при сборке пакетов.
  2. RPMS – будет содержать двоичные RPM в подкаталогах архитектуры.
  3. SOURCES – хранит сжатые исходные архивы и любые исправления, именно здесь командаpmbuild будет их искать.
  4. SPECS – хранит файлы SPEC.
  5. SRPMS – хранит исходный RPM вместо двоичного RPM.

Создание RPM-пакета «Hello World»

На этом этапе вам необходимо загрузить исходный код (также известный как исходный код) проекта Hello World, который мы упаковываем, в ~/rpmbuild/SOURCE. > с помощью следующей команды wget.

cd ~/rpmbuild/SOURCES
wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES

Далее давайте настроим пакет RPM, используя файл .spec (в данном случае назовем его hello.spec) в файле ~/rpmbuild/SPECS. >, используя программу rpmdev-newspec.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Затем откройте файл hello.spec в своем любимом редакторе.

vim hello.spec

Шаблон по умолчанию должен выглядеть так:

Name:           hello
Version:
Release:        1%{?dist}
Summary:

License:
URL:
Source0:

BuildRequires:
Requires:

%description

%prep
%autosetup

%build
%configure
%make_build

%install
rm -rf $RPM_BUILD_ROOT
%make_install

%files
%license add-license-file-here
%doc add-docs-here

%changelog
* Tue May 28 2019 Aaron Kili

Давайте кратко объясним параметры по умолчанию в файле .spec:

  • Имя – используется для установки имени пакета.
  • Версия – должна отражать исходную версию.
  • Выпуск — цифры, над которыми вы работаете в Fedora.
  • Сводка – краткое однострочное описание пакета, первая буква должна быть прописной, чтобы избежать жалоб на rpmlint.
  • Лицензия – проверьте статус лицензии программного обеспечения, проверив исходные файлы и/или их файлы ЛИЦЕНЗИИ и/или поговорив с авторами.
  • URL – указывает домашнюю страницу программного пакета.
  • Source0 – указывает исходные файлы. Это может быть прямой URL-адрес или путь к сжатому исходному коду программного обеспечения.
  • BuildRequires – указывает зависимости, необходимые для сборки программного обеспечения.
  • Требуется – указывает зависимости, необходимые для запуска программного обеспечения.
  • %prep – используется для создания среды для сборки пакета rpm.
  • %build – используется для компиляции и сборки исходных кодов.
  • %install – используется для установки программ. В нем перечислены команды, необходимые для копирования результирующего файла из процесса сборки в каталог BUILDROOT.
  • %files – в этом разделе перечислены файлы, предоставляемые пакетом, который будет установлен в системе.
  • %changelog – должен хранить информацию о работе по подготовке RPM, особенно если в исходный базовый исходный код включены исправления безопасности и исправления ошибок. Он генерируется автоматически при создании файла hello.spec. Данные журнала изменений обычно отображаются с помощью rpm --changelog -q .

Теперь отредактируйте файл .spec и внесите изменения, как показано.

Name:           hello
Version:        2.10
Release:        1%{?dist}
Summary:        The "Hello World" program from GNU

License:        GPLv3+
URL:            http://ftp.gnu.org/gnu/%{name}
Source0:        http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz

BuildRequires: gettext
      
Requires(post): info
Requires(preun): info

%description 
The "Hello World" program package 

%prep
%autosetup

%build
%configure
make %{make_build}

%install
%make_install
%find_lang %{name}
rm -f %{buildroot}/%{_infodir}/dir

%post
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :

%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
fi

%files -f %{name}.lang
%{_mandir}/man1/hello.1.*
%{_infodir}/hello.info.*
%{_bindir}/hello

%doc AUTHORS ChangeLog NEWS README THANKS TODO
%license COPYING

%changelog
* Tue May 28 2019 Aaron Kili

Вы заметите, что в приведенном выше файле мы использовали некоторые новые параметры, которые не были объяснены. Они называются макросами и используются для создания системных вызовов, определенных RPM, для задания путей установки пакетов. Поэтому обычно предпочтительнее не прописывать эти пути жестко в файлах спецификаций, а использовать одни и те же макросы для обеспечения согласованности.

Ниже приведены макросы сборки и каталога RPM вместе с их определениями и значениями по умолчанию:

  • %{make_build – используется в разделе %build файла спецификации, он запускает команду make.
  • %{name – определяет имя пакета или каталога.
  • %{buildroot – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, то же, что и $BUILDROOT
  • %{_infodir – %{_datarootdir}/info, по умолчанию: /usr/share/info
  • %{_mandir – %{_datarootdir}/man, по умолчанию: /usr/share/man
  • %{_bindir – %{_exec_prefix}/bin, по умолчанию: /usr/bin

Обратите внимание, что значения этих макросов можно найти в файле /usr/lib/rpm/platform/*/macros или обратиться к Руководству по упаковке: Макросы RPM.

Сборка пакета RPM

Чтобы собрать исходный, двоичный и отладочный пакеты, выполните следующую команду rpmbuild.

rpmbuild -ba hello.spec

После процесса сборки исходные и двоичные RPM-пакеты будут созданы в каталогах ../SRPMS/ и ../RPMS/ соответственно. Вы можете использовать программу rpmlint, чтобы проверить и убедиться, что файл спецификации и созданные файлы RPM соответствуют правилам проектирования RPM:

rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*

Если есть какие-либо ошибки, как показано на снимке экрана выше, исправьте их, прежде чем продолжить.

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

mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm

Для получения дополнительной информации обратитесь к документации Fedora: Создание пакетов RPM.

Вот и все! В этой статье мы объяснили, как усовершенствовать вашу систему Fedora, чтобы создать простой исходный и двоичный пакет программного обеспечения. Мы также показали, как создать RPM-пакет GUN Hello Word. Используйте форму обратной связи ниже, чтобы связаться с нами по любым вопросам или комментариям.