====== 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