Сборка rpm
Почитал PPM HOWTO и возникли вопросы.
Для построения rpm мне необходимы две вещи: это исходники и spec-файл.
Из исходников я спокойно собираю программу и она работает на ура.
Так вот, что бы собрать rpm, куда нужно распаковать исходники? Куда-то в
/usr ? И где искать собранный rpm?
Насчёт spec-файла. Его нужно составлять самому и опять же куда
созданный spec-файл помещать?
И как его правильно составлять? Из примера в PPM HOWTO:
Summary: ejects ejectable media and controls auto ejection
Name: eject
Version: 1.4
Release: 3
Copyright: GPL
Group: Utilities/System
Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
Patch: eject-1.4-make.patch
Patch1: eject-1.4-jaz.patch
%description
This program allows the user to eject media that is autoejecting like
CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.
С Summary, Name, Version, Copyright, %description понятно.
Release: Это номер выпуска для пакета с той же самой версией (например,
если мы сделали пакет и обнаружили, что он незначительно неисправный и
нам необходимо сделать его заново, то следующий пакет будет номер
выпуска 2).
Т.е. это я сам для себя этот номер выбираю? И волен присваивать любой номер?
Icon: Это имя файла иконки, которое будет использоваться другими
высокоуровневыми утилитами установки (подобными ``glint'' из Red Hat).
Она должна быть в формате gif и располагаться в директории SOURCES.
Я так понимаю, что это иконка программы? И она при установке rpm,
копируется в /usr/share/icons ?
# Source: Эта строка указывает на расположение "ДОМА" файла исходных
текстов. Она используется если вы хотите получить исходные тексты снова
и проверить новые версии. Предостережение: Имя файла в этой строке
ДОЛЖНО соответствовать имени файла который вы имеете на своей
собственной системе (например не изменяйте имя загруженного файла
исходных текстов). Вы можете также указать больше чем один файл исходных
текстов используя следующие строки:
Source0: blah-0.tar.gz
Source1: blah-1.tar.gz
Source2: fooblah.tar.gz
Эти файлы должны находиться в директории SOURCES. (Структура директорий
обсуждается далее в разделе "Дерево директорий исходных текстов").
# Patch: Это место где вы можете найти заплатки, если вы захотите
загрузить их снова. Предостережение: Имя файла должно соответствовать
имени файла которое вы использовали когда делали вашу заплатку. Вы
можете также заметить, что вы можете иметь много файлов заплаток также
как вы можете иметь много файлов исходных текстов. У вас должно быть
что-то подобное:
Patch0: blah-0.patch
Patch1: blah-1.patch
Patch2: fooblah.patch
Эти файлы должны быть в директории SOURCES.
Я так понял, что в них нужно указывать ссылки на новые версии. Можно ли
эти Source и Patch не указывать?
# BuildRoot: Эта строка позволяет вам указать директорию как
``корневую'' для построения и установки нового пакета. Вы можете
использовать это для тестирования вашего пакета до установки его на
вашей машине.
BuildRoot - это необязательный параметр?
# Group: Эта строка используется чтобы указать высокоуровневым
программам установки (таким как ``glint'' Red Hat) где разместить эту
отдельную программу в их иерархических структурах. Дерево груп в
настоящее время выглядит примерно так:
Ну и приведено дерево. Но только вот вопрос. Разные дистрибутивы по
разному строят это дерево. Как узнать правильное дерево, если меню этого
дерева на русском?
И ещё просмотрел несколько spec файлов и обнаружил несколько неописанных
в PPM HOWTO заголовков: Vendor, Packager. Что они значат. Я так пониаю,
что Packager - это тот кто собирал пакет? И есть ли заголовок типа
автора программы?
А дальше вообще для меня смутно:
%prep
%setup
%patch -p1
%patch1 -p1
%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
%install
install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
install -m 644 -o 0 -g 0 eject.1 /usr/man/man1
%files
%doc README COPYING ChangeLog
/usr/bin/eject
/usr/man/man1/eject.1
Нашёл spec у себя:
%prep
%setup
%build
CFLAGS='-O2 -fomit-frame-pointer -s' ./configure --prefix=/usr
--disable-static
make
%install
make install-strip && rm -f /usr/lib/cooledit/*~
/usr/lib/cooledit/syntax/*~ /usr/lib/coolicon/*~
%post
%files
%doc ABOUT-NLS AUTHORS BUGS COPYING FAQ INSTALL INTERNATIONAL HINTS
%doc MAILING_LIST NEWS PROGRAMMING README TODO VERSION ChangeLog
%doc cooledit.lsm coolicon.lsm coolman.lsm cooledit.spec
%doc cooledit_16x16.xpm cooledit_32x32.xpm rxvt/README.rxvt
%config /usr/share/coolicon/coolicon.config
/usr/share/cooledit
/usr/share/coolicon
/usr/lib/libCw.so.1.0.0
/usr/lib/libCw.so.1
/usr/lib/libCw.so
/usr/lib/libCw.la
... и так далее...
%prep
%setup
%patch
%build
%install
%post
%files
%doc
%config
Что из этого обязательно для заполнения и кратко может кто скажет, что
здесь заполнять?
Запустил mdk'ашную управлялку пакетами, так там ещё в описании пакета
есть какой-то
Changelog:
* Tue Feb 24 2004 Olivier Thauvin <thauv***@a*****.fr> 1.0.2-2mdk
- fix DIRM
* Mon Jan 26 2004 Thierry Vignaud <tvigna***@m*****.com> 1.0.2-1mdk
- new release
......
Т.е. я так понимаю можно и его указать как %changelog ?
И ещё, 1.0.2-1mdk: 1.0.2 - это Version, а 1mdk - это Release?
И если я собираю пакет под себя, нужно ли где указывать i686 ?
Заранее благодарен тем, у кого хватило терпения всё это перечитать, а
тем более ответить. :)
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 12362; Возраст листа: 448; Участников: 1278
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/245928
-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.linux.discuss
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.discuss--unsub@subscribe.ru?subject=comp.soft.linux.discuss
http://subscribe.ru/ http://subscribe.ru/feedback
В сообщении от 1097928966 секунд после начала Эпохи Unix Вы написали:
И иногда заплатки (патчи).
Есть некий каталог topdir. В этом каталоге должны быть подкаталоги:
BUILD
RPMS
SOURCES
SPECS
SRPMS
В BUILD компилируются программы; в RPMS записываются собранные
RPM-пакеты; SOURCES предназначен для исходников (обычно упакованных в
архив); в SPECS содержатся spec-файлы; в SRPMS записываются SRPM-пакеты.
topdir определяется в файле макросов /usr/lib/rpm/macros или
~/.rpmmacros. Чтобы узнать как определен topdir можно набрать такую
команду
$ rpmbuild --showrc |grep ': _topdir
Его нужно создать (или списать откуда-то) и положить в topdir/SPECS .
Да. Можно еще и буквы, что бы видно было кто собирал пакет, например
Release: 3ig
Не знаю, иконками не занимался.
Source указывает какие исходники нужно компилировать (или делать с ними
что-то другое). Можно указывать URL, а можно указать просто имя файла. В
любом случаи этот файл должен находится в topdir/SOURCES . Patch тоже
самое, но для заплаток.
Обязательный, если в RPM-пакете должны быть какие-то файлы. Почти всегда
это:
BuildRoot: %{_tmppath}/%{name}-%{version}-root
Посмотреть его на английском. Если, конечно, вы правильно поняли о каком
дереве идет речь. Это не меню приложений в KDE или GNOME.
Да. А Vendor в переводе "продавец".
Нет. Неверно, потому что авторов может быть очень много.
Раздел %prep
Раздел %build
Раздел %install
Раздел %files
Разве в HOWTO про них не рассказывается?
Клавиатурой по башке нужно автору этого spec.
%prep - раздел для подготовки исходных текстов, обычно содержит только
макрос %setup, и иногда один или более %patch. %build - раздел для
построения (компиляции), обычно содержит макрос %configure. %install -
раздел для установки собранных файлов в buildroot, обычно содержит
макрос %makeinstall. %post - раздел для постустановочного скриплета
(команды которые будут выполнятся после установки RPM-пакета). %files -
раздел в котором перечисляются файлы. %doc - макрос указывает что файл
является документацией. %config - макрос указывает что файл является
конфигурационным.
Во все перечисленные выше разделы, кроме %files, нужно прописывать
команды оболочки (shell), или вызовы макросов, которые в последствии
замещаются на команды оболочки.
Да.
Да.
Если вы хотите собрать пакет для определенной аппаратной архитектуры, то
в аргументах программы rpmbuild указывайте опцию --target. Например
$ rpmbuild -bb --target=i686 /usr/src/mandrake/SPECS/package.spec