Сборка пакетов. Глава 1. RPM. Часть 2. Подготовка к сборке и обзор spec-файла

комментариев 14

  1. Аватар Дмитрий С.:

    Спасибо за цикл статей. Когда я в первый раз собирал свою первую rpm-ку (это был stardict :)), то такое howto очень бы пригодилось.

  2. Аватар GQ:

    >По умолчанию собирать пакеты можно только из-под root’а

    нет и еще раз нет. из под fakeroot надо собирать.

  3. Аватар Mosga:

    Отличная статья (правда, внимательно читал только начало, остальное быстро посмотрел – но верю, что и там все хорошо). Несколько дополнений.

    В федоре перед сборкой пакетов очень полезно поставить пакет rpmdevtools (extras). В составе его пачка скриптов, в частности fedora-newrpmspec для создания минимального “начального” spec (с нуля писать лень, а модифицировать первый попавшийся обычно куда дольше – пока весь мусор выкинешь…), fedora-buildrpmtree, одним махом создающая структуру, необходимую для создания rpm из под пользователя (каталоги и .rpmmacros). Причем .rpmmacros получается хитрый – там записан запуск двух проверяльщиков после сборки, check-rpaths и check-buildroot (из того же пакета) – они помогают отловить наличие нехорошего мусора в инсталлируемых файлах и способные доставить много проблем rpath’ы в бинарниках (последние лечаться chrpath из одноименного пакета, хотя на некоторые огрехи можно забить – rpm сообщает, что для этого нужно сделать). Ну и еще много полезного в этом пакете есть, но я использую только это 😉

    На досуге почитаю внимательнее, может еще чего добавлю 😉

  4. Аватар Tigro:

    GQ в Fedora это называется mock.

  5. Аватар Tigro:

    Mosga, мда, fedora-newrpmspec генерит совсем голый, я думаю намного толковей будет подправить какой-либо чужой. Причем для новичков будет гораздо полезней править существующий. А может вы напишите некую статью по rpmdevtools? Вывесим тут?

  6. Аватар GQ:

    Tigro mock – это аналог pbuilder
    а fakeroot – это wrapper системных вызовов, который заставляет приложение поверить, что оно выполняется от рута. это, в частности, позволяет создать архив, в котором будут файлы с владельцем, отличным от текущего, сетуидным битов и т.п.
    попробуй запустить fakeroot bash – поймешь о чем я.

  7. Аватар Tigro:

    Ну давай, рассказывай, я весь во внимании.

  8. Аватар GQ:

    Ээ… Это сарказм?

  9. Аватар Игорь:

    Подскажите, а как узнать какие файлы необходимо включать в %file секцию spec файла. У меня ситуация такая: мне необходимо получить rpm пакет gtk+-2.8.20.tar.bz2. Архив я скачал. Начал редактировать spec-файл и не знаю что писать в секции %file.
    Или эту секцию вообще можно пропустить – ошибки не будет?

  10. Аватар Tigro:

    Просто впишите в неё что-то. например просто %doc README, и соберите пакет. Когда дойдет дело до упаковки файлов rpm вывалится и скажет, что такие-то файлы не упакованы. Вот их и нужно добавить.

    А вообще, сперва лучше поискать пакет, вдруг он уже есть где-нибудь

  11. Аватар Melder:

    Всё можно сделать проще.
    Есть же Checkinstall
    http://asic-linux.com.mx/~izto/checkinstall/

  12. Аватар Tigro:

    checkinstall – кривая софтина, которая все сделает очень криво и кажется даже без src.rpm (хотя я не уверен). Уважающие себя программеры (а есть ли такие?) пользоваться ей не должны:)

  13. Аватар Deady:

    пытаюсь написать spec для fbreader. проблема с libaxpat.so.1 и libbz2.so.1.0 – таких в системе нет, есть libaxpat.so и libbz2.so.1, если создать симлинки – все работает. а как это для rpm описать?

    не могли бы вы добавить fbreader в репозитарий? вот spec для последней версии (подправлен spec из dries):
    ———————————————————————————-

    # $Id: fbreader.spec 5491 2007-06-08 13:25:04Z dag $

    # Authority: dries

    # Upstream: Nikolay Pultsin

    define desktop_vendor rpmforge

    Summary: E-book reader
    Name: fbreader
    Version: 0.8.5
    Release: 1
    License: GPL
    Group: Applications/Office
    URL: http://www.fbreader.org/

    Source: http://only.mawhrin.net/fbreader/fbreader-sources-{version}.tgz
    BuildRoot: tmppath}/{name}-%{version}-%{release}-root

    BuildRequires: gcc-c++, enca-devel, gtk2-devel

    %description
    FBReader is an e-book reader for Linux PDAs and desktop computers.
    FBReader supports several e-book formats: plucker, palmdoc, zTXT,
    HTML, fb2, and plain text.

    %prep
    %setup

    %build
    %{_make} {?_smp_mflags} TARGET_ARCH=”desktop” UI_TYPE=”gtk” INSTALLDIR=”{_prefix}” LIBDIR=”%libdir}”

    %install
    %{_rm} -rf %{buildroot}
    {__make} install TARGET_ARCH=”desktop” UI_TYPE=”gtk” DESTDIR=”{buildroot}” INSTALLDIR=”” LIBDIR=”{_libdir}”
    desktop-file-install—delete-original \

    —dir ${RPM_BUILD_ROOT}%{_datadir}/applications \
    —add-category Office \
    ${RPM_BUILD_ROOT}%datadir}/applications/*.desktop

    %clean
    %{

    _rm} rf %{buildroot}

    %files
    %defattr(

    , root, root, 0755)
    %doc fbreader/LICENSE
    %{_bindir}/FBReader
    %{_datadir}/FBReader/
    %{_libdir}/libzlcore.so.*
    %{_libdir}/libzltext.so.*
    %{_datadir}/zlibrary/ui/zlui-gtk.so
    %{_datadir}/applications/FBReader.desktop
    %{_datadir}/pixmaps/FBReader.png
    %{_datadir}/pixmaps/FBReader/
    %{_datadir}/zlibrary/

    %changelog

    * Thu Jul 14 2007 Dag Wieers – 0.8.5-1 – Updated to release 0.8.5.

    * Thu Jun 07 2007 Dag Wieers – 0.8.4-1 – Updated to release 0.8.4.

    * Wed May 09 2007 Dries Verachtert – 0.8.3-1 – Updated to release 0.8.3.

    * Mon Apr 16 2007 Dries Verachtert – 0.8.2-1 – Updated to release 0.8.2.

    * Fri May 26 2006 Dries Verachtert – 0.7.4-1 – Updated to release 0.7.4.

    * Sun Mar 26 2006 Dries Verachtert – 0.7.3-1 – Updated to release 0.7.3.

    * Fri Feb 17 2006 Dries Verachtert – 0.7.2-1 – Updated to release 0.7.2.

    * Wed Dec 07 2005 Dries Verachtert – 0.7.1-0.b – Initial package.
    ———————————————————————————-

    так же не осилил desktop файл – он копируется куда надо, но в меню не появляется

  14. Аватар Tigro:

    Добавил.