====== 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) можно воспользоваться скриптом [[http://wiki.mandriva.com/ru/uploads/3/3a/Rpmsetup.sh|Rpmsetup.sh]], а также полезно ознакомиться с информацией [[http://wiki.mandriva.com/ru/Development/Howto/RPM|отсюда]].
==== Шаг 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