Table of Contents

RPM-build HOWTO with rpm-based Linux

Сборка RPM-пакета для RPM-based дистрибутивов (HOWTO)

Примечание: Пример сборки приведён на базе дистрибутива Mandriva Linux 2008.1 поэтому названия некоторых пакетов могут отличаться в вашем дистрибутиве. Также предполагается, что пакет будет собираться на чистой системе, т.е. без установленного необходимого ПО для этого.

Шаг 1. Подготовка системы для сборки пакета

Прежде всего надо установить необходимое программное обеспечение. Для этого необходимо ввести следующие команды:

su
//ввести логин от учетной записи root
urpmi gcc-c++ libqt4-devel libopenssl-devel libaspell-devel rpm-build checkinstall git-core subversion qconf

Шаг 2. После установки ПО необходимо подготовить среду для работы программы rpm-build

Примечание: Замените выражение $USER на имя вашего пользователя в системе

В каталоге /home/$USER/ создаём файл .rpmmacros со следующим содержимым:

%_topdir /home/$USER/BUILD_ROOT
%_sourcedir %{_topdir}/SOURCES
%_specdir %{_topdir}/SPECS
%_builddir %{_topdir}/BUILD
%dist .mdv2008.1 //приведён как пример, и может меняться в зависимости от вашего дистрибутива; для Fedora Core это значение может быть .fc8
%packager YOUR_NAME 
%vendor VENDOR_NAME
%_signature gpg
%_gpg_path /home/$USER/.gnupg
%_gpg_name идентификатор_ключа
%_gpgbin /usr/bin/gpg

Примечание: Создать персональный ключ можно командой gpg –gen-key. Посмотреть идентификатор ключа можно командой gpg –list-key в секции pub после слэша (“/”).

Далее создаём необходимые директории:

cd /home/$USER
mkdir BUILD_ROOT
cd BUILD_ROOT
mkdir BUILD
mkdir RPMS
mkdir SOURCES
mkdir SPECS
mkdir SRPMS

Теперь ваша система готова для сборки RPM-пакета.

P.S. Для создания необходимых файлов и папок (применительно к Mandriva) можно воспользоваться скриптом Rpmsetup.sh, а также полезно ознакомиться с информацией отсюда.

Шаг 3. Подготовка исходных кодов для сборки пакета

Теперь нам необходимо получить исходные коды и патчи.

cd /home/$USER
mkdir psi_dev
cd psi_dev
git clone git://git.psi-im.org/psi.git
cd psi
git submodule init
git submodule update
git pull
git submodule update
cd iris
git clone git://git.psi-im.org/iris.git
cd /home/$USER/psi_dev
svn co http://psi-dev.googlecode.com/svn/trunk/patches/
cp /home/$USER/psi_dev/patches/*diff /home/$USER/psi_dev/psi
cp /home/$USER/psi_dev/patches/series.txt /home/$USER/psi_dev/psi
cd /home/$USER/psi_dev/psi
for f in *diff; do patch -p1 -i "${f}"; done

Далее нам нужно исправить в файле applicationinfo.cpp текущую ревизию, заменить ХХХ на значение текущей ревизии из svn.

Для этого нужно создать следующий файл rev.sh в каталоге psi_dev.

#!/bin/sh
pkgrel=`svnversion "/home/$USER/psi_dev/patches"`
cd psi/src
sed "s/\(.xxx\)/.${pkgrel}/" -i "applicationinfo.cpp"

и запустить его командой

sh rev.sh

Теперь исходный код Psi+ готов для сборки.

Шаг 4. Сборка пакета

Способ 1. С помощью утилиты checkinstall

Переходим в каталог с исходными кодами программы и выполняем команды конфигурирования и сборки

cd /home/$USER/psi_dev/psi
./configure && make && checkinstall

Здесь вместо команды make install вводим команду checkinstall, которая соберёт пакет и поместит его в каталог BUILD_ROOT/RPMS, однако придётся ответить на некоторые вопросы.

Способ 2. С помощью утилиты rpm-build и spec-файла

После того, как были наложены патчи, необходимо запаковать папку psi в архив и скопировать её в BUILD_ROOT/SOURCES

mv psi psi-0.14_dev
tar -pczf psi-0.14_dev.tar.gz psi-0.14_dev
cp psi-0.14_dev.tar.gz /home/$USER/BUILD_ROOT/SOURCES

Далее в каталоге BUILD_ROOT/SPECS создаём файл psi.spec следующего содержания:

Summary: Client application for the XMPP network
Name: psi
Version: 0.14_dev
Release: 3%{dist}
License: GPL
Group: Applications/Internet
URL: http://code.google.com/p/psi-dev/
Source0: %{name}-%{version}.tar.gz


BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root


BuildRequires: openssl-devel, gcc-c++, zlib-devel
%{!?_without_freedesktop:BuildRequires: desktop-file-utils}


%description
Psi is the premiere Instant Messaging application designed for Microsoft Windows, 
Apple Mac OS X and GNU/Linux. Built upon an open protocol named XMPP, 
si is a fast and lightweight messaging client that utilises the best in open 
source technologies. The goal of the Psi project is to create a powerful, yet 
easy-to-use XMPP client that tries to strictly adhere to the XMPP drafts.
and XMPP JEPs. This means that in most cases, Psi will not implement a feature 
unless there is an accepted standard for it in the XMPP community. Doing so 
ensures that Psi will be compatible, stable, and predictable, both from an end-user 
and developer standpoint.


%prep
%setup


%build
qconf
./configure \
        --prefix="%{_prefix}" \
        --bindir="%{_bindir}" \
        --datadir="%{_datadir}"\
        --release\
        --no-separate-debug-info\
	--enable-plugins \ /*эта строчка включает компиляцию с интерфесом подключения плагинов*/
	--enable-qtwebkit\ /*эта строчка включает компиляцию с webkit*/
        --qtdir="$QTDIR"
%{__make} %{?_smp_mflags}


%install
%{__rm} -rf %{buildroot}


%{__make} install INSTALL_ROOT="%{buildroot}"


# Install the pixmap for the menu entry
%{__install} -Dp -m0644 iconsets/system/default/logo_128.png}} \
    %{buildroot}%{_datadir}/pixmaps/psi.png}} ||:


%post
touch --no-create %{_datadir}/icons/hicolor || :
%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :

%postun
touch --no-create %{_datadir}/icons/hicolor || :
%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :


%clean
%{__rm} -rf %{buildroot}


%files
%defattr(-, root, root, 0755)
%doc COPYING README TODO
%{_bindir}/psi
%{_datadir}/psi/
%{_datadir}/pixmaps/psi.png
%{_datadir}/applications/psi.desktop
%{_datadir}/icons/hicolor/*/apps/psi.png
%exclude %{_datadir}/psi/COPYING
%exclude %{_datadir}/psi/README

Переходим в каталог BUILD_ROOT/SPECS и запускаем сборку пакета

cd /home/$USER/BUILD_ROOT/SPECS
rpmbuild -bb psi.spec

Опция -bb указывает программе на сборку бинарного пакета. После удачной сборки пакет можно забрать из директории BUILD_ROOT/RPMS/iXXX (в зависимости от архитектуры) и установить командой:

rpm -ihv psi-0.14_dev-3.mdv2008.1.i586.rpm 

Примечание: Имя пакета приведено для примера.

Также можно добавить цифровую подпись для пакета, сделать это можно с помощью следующей команды:

rpm --addsign psi-0.13_dev-3.mdv2008.1.i586.rpm