Сборка пакетов SUSE

Перейти к: навигация, поиск

Введение

Данный документ описывает систему сборки SUSE и является пособием по сборке RPM пакетов для openSUSE. Эта информация поможет вам создать свое собственное окружение для сборки пакетов. Первые четыре части этого документа описывают как все работает после чего идут примеры которые вы можете попробовать сами.

Внимание, это руководство не о службе сборки openSUSE, учебное пособие по службе сборки находиться в Build Service/Tutorial.

Необходимые знания

Вы должны хорошо понимать процесс создания RPM пакетов. Целью данного документа не является стать заменой документации RPM. Существует много различных HOWTO Учебники и книги посвященные этому ищите в разделе Ресурсы ссылки которые относятся к RPM.

Вы должны так же иметь некоторый опыт работы с PGP утилитами, особенно с GNU Privacy Guard (gpg) как с наиболее широко используемой реализацией OpenPGP. Мы расскажем позже зачем необходим PGP, когда будем говорить о подписывании пакетов. Для подписывания пакетов вам будет необходим собственный PGP ключ перед тем как вы начнете использовать свое openSUSE окружение для сборки.

И, конечно, вам следует быть знакомыми со структурой исходного кода который ваш проект использует для построения пакета. Структура сборки openSUSE может решать некоторые частые ошибки которые совершают мэйтейнеры пакетов, но знание make, autoconf, imake или других механизмов конфигурации исходного кода может быть полезно при работе с пакетами.

Требования

Здесь все просто. Вам необходимы 3 Гб дискового пространства и наш инструмент сборки, build. Это все.

Вам необходимо 3 Гб потому что структура сборки SUSE использует отдельную инсталляцию Linux на вашем жестком диске как среду для сборки вашего пакета. Это изолированное окружение дает одно большое преимущество: Сборка пакета не затронет вашу текущую Linux инсталляцию. Единственный минус это то что вам необходимо (временно) 3 Гб дискового пространства для каждой отдельной среды сборки. Но с сегодняшними объемами жестких дисков это не должно стать проблемой.

Утилита сборки устанавливает среду сборки в заданное расположение и собирает пакет в этой среде. Среда сборки представляет собой базовую систему и любые дополнительные пакеты, которые вы укажете в RPM spec файле.


Процесс

Следующие шаги описывают нормальный процесс сборки пакета. Конечно, в реальном примере вы можете получить ошибку на каком-либо шаге и вам необходимо повторять его до тех пор пока ошибки не исчезнут. Данное руководство дает вам представление о том что вы должны получить.

Шаг Один - Установка зависимостей

Установите следующие пакеты из источника установки openSUSE используя YaST, если они еще не установлены:

  • build
  • gpg

Шаг Два - Конфигурация Сборки

Сконфигурируйте утилиту build. Вот несколько настроек которые вы должны изменить в соответствие с вашим локальным окружением. Например:

  • где находятся пакеты для установки среды сборки
  • имя директории используемой как корень сборки

и другие подобные настройки

Шаг Три - Создание исходной директории

Создайте директорию где-нибудь, чтобы она была доступна вам и суперпользователю. Это место где вы разместите файлы, которые будут использованы в процессе сборки пакета. Вы можете использовать любое расположение, какое захотите. Но все же оно должно быть доступно вам и суперпользователю, потому что только суперпользователь может начать установку среды сборки. Но если вы не хотите все время работать над пакетом суперпользователем вам необходимо общедоступное расположение.


Шаг Четыре - Получите исходные тексты проекта

Получение исходных текстов проекта необходимо для сборки пакета. Большинство проектов предоставляют исходные тексты в архивах.

Шаг Пять - Создайте spec файл

Теперь у вас есть исходные тексты и можно переходить к обычному процессу создания RPM пакета. Создайте spec файл для пакета.

Шаг Шесть - Соберите ваш пакет

После того как вы создали RPM spec Файл настало время попробовать собирается ли он. Переключитесь на аккаунт суперпользователя, перейдите в директорию, где находятся ваш spec файл, исходные тексты и патчи.Теперь начинайте сборку.

Шаг Семь - Протестируйте пакет

После того как сборка успешно завершится вы должны проверить работоспособность вашего пакета.


Спекфайлы

RPM спецификации должны быть написаны в соответствии с соглашением по стилю RPM-пакетов openSUSE. Так как эта тема очень широка сама по себе есть дополнительная документация описывающая ее. Пожалуйста, тщательно следуйте данным Документам, разрабатывая ваш спекфайл.

Вы можете найти несколько примеров спекфайлов для разных пакетов здесь the Build Service SVN.

Также, на сайте IBM developerWorks есть пара статей об этом: Part 1English flag.png и Part 2English flag.png.


Конфигурация

Переменные Среды сборки

  • BUILD_DIST

Дистрибутив для которого вы хотите собрать пакет.

  • BUILD_RPMS

Это могут быть openSUSE RPM пакеты расположенные: если смонтирован openSUSE DVD то эта переменная должна быть установлена в значение <точка_монтирования_DVD>/suse. Если DVD скопирован в директорию, эта переменная должна быть установлена в значение <эта_директория>/suse.

BUILD_RPMS значение по умолчанию - /media/dvd/suse

  • BUILD_ROOT

Изолированная chroot директория где будут собираться rpm пакеты.

BUILD_ROOT значение по умолчанию - /var/tmp/build-root

  • BUILD_RPM_BUILD_STAGE

Данные опции будут переданы утилите rpmbuild (смотрите ман страницу утилиты rpmbuild для полного списка этих опций)

BUILD_RPM_BUILD_STAGE значение по умолчанию - '-ba' (то есть Собрать бинарный и пакет с исходными текстами после выполнения  %prep, %build, и %install стадий).


Примеры

Здесь представлено несколько реальных примеров разных типов и особенностей пакетов.

Пакеты KDE

BuildRequires: kdelibs3-devel update-desktop-files
Name: kvpnc License: GPL Group: Productivity/Networking/System Summary: GUI frontend for openswan and vpnc Version: 0.7.2 Release: 1 URL: http://home.gna.org/kvpnc/ BuildRoot:  %{_tmppath}/%{name}-%{version}-build Source0:  %name-%{version}.tar.bz2
%description The application can create configurations for various kinds of VPN connections. You should install also the "vpnc" or "openswan" package.
%prep # extract the source and go into the kvpnc-0.7.2 directory %setup -q # source the standard build enviroment as defined in kdelibs3 package . /etc/opt/kde3/common_options # replace the admin/ folder with the version from kdelibs3 (will work for sure with # current autoconf and automake) and create Makefile.in and configure script. update_admin --no-unsermake
%build # source the standard build enviroment as defined in kdelibs3 package . /etc/opt/kde3/common_options ./configure $configkde --disable-final # do compile with the number of jobs given to the --jobs parameter of the build script. make %{?jobs:-j%jobs}
%install iconv -f iso8859-1 -t utf-8 src/kvpnc.desktop > w && mv w src/kvpnc.desktop # install all files into the BuildRoot make DESTDIR=$RPM_BUILD_ROOT install rm -rf $RPM_BUILD_ROOT/opt/kde3/share/doc/HTML/kvpnc # updates the .desktop file. It applys additional translations and Categories for a # proper position in the KDE menu %suse_update_desktop_file %name System Network # does find all localisation files and adds proper database attributes to them %find_lang %name
%clean # clean up the hard disc after build rm -rf $RPM_BUILD_ROOT
%files -f %name.lang %defattr(-,root,root) %dir /opt/kde3/share/icons/hicolor/16x16/apps %dir /opt/kde3/share/icons/hicolor/32x32/apps /opt/kde3/bin/kvpnc /opt/kde3/share/appl*/*/kvpnc.desktop /opt/kde3/share/apps/kvpnc /opt/kde3/share/icons/*/*/*/kvpnc*.png

Пакеты Gnome

Руководство по созданию GNOME-пакетов было перенесено сюда.

Perl пакеты

Пакеты Perl просты и схожи, так как многие были представлены для архива CPAN.

Name:         perl-Curses
Version:      1.12
Release:      1
# define the name from CPAN
%define cpan_name Curses
# do this package was known as "perl_cur" in old times. So we do need to Provide and Obsolete
# this package. YaST will install this package during update instead of the old one in this way.
Provides:     %cpan_name
# we better require the exact perl version, which was used to create this package
Requires:     perl = %{perl_version}
Group:        Development/Libraries/Perl
License:      Artistic License, Other License(s), see package
URL:          http://cpan.org/modules/by-module/Curses/
Summary:      A Dynamic Loadable Curses Module for Perl5
Source:       %cpan_name-%{version}.tar.bz2
BuildRoot:    %{_tmppath}/%{name}-%{version}-build
%description This is a dynamic loadable curses module for Perl5. This package can be found at any CPAN archive.
%prep %setup -q -n %cpan_name-%{version}
%build perl Makefile.PL OPTIMIZE="$RPM_OPT_FLAGS -Wall" make make test
%install make DESTDIR=$RPM_BUILD_ROOT install_vendor %perl_process_packlist
%clean # clean up the hard disc after build rm -rf $RPM_BUILD_ROOT
%files %defattr(-,root,root) %doc Artistic Copying README %doc %{_mandir}/man3/* %{perl_vendorarch}/%cpan_name.pm %{perl_vendorarch}/auto/%cpan_name /var/adm/perl-modules/%{name}

Ресурсы

На русском Russion flag.png

На английском English flag.png