SpecTips: различия между версиями
м (added category navigation) |
м (dropped freesource tag) |
||
Строка 1: | Строка 1: | ||
[[Category:RPM spec]] | [[Category:RPM spec]] | ||
{{Викифицировать}} | {{Викифицировать}} | ||
== Как писать спеки? == | == Как писать спеки? == | ||
Строка 15: | Строка 14: | ||
* [[SpecTips/optflags|%optflags]] | * [[SpecTips/optflags|%optflags]] | ||
* [[spectips/VersionHacks|Использование конкретных версий инструментов сборки]] | * [[spectips/VersionHacks|Использование конкретных версий инструментов сборки]] | ||
=== Книжки === | |||
* [http://www.lexpr.ru/node/11 Русский перевод Red Hat RPM Guide] | |||
* [http://docs.altlinux.ru/alt/devel/ch01.html ALT Packaging] | |||
* [http://www.rpm.org/max-rpm-snapshot/p5206.html Maximum RPM] (snapshot) | |||
* [http://bog.pp.ru/work/rpm.html http://bog.pp.ru/work/rpm.html] | |||
* [[Policy]] | |||
=== Ссылки === | |||
* [[TypicalPackagingErrors|Типичные ошибки]] при написании spec-файлов | |||
* [[PackageSplitting|Рекомендации по размещению файлов в пакетах]] | |||
* [http://fedora.redhat.com/docs/drafts/rpm-guide-en/ http://fedora.redhat.com/docs/drafts/rpm-guide-en/] | |||
* [http://fedoraproject.org/wiki/Packaging/Guidelines http://fedoraproject.org/wiki/Packaging/Guidelines] | |||
* [http://qa.mandriva.com/twiki/bin/view/Main/RpmHowTo http://qa.mandriva.com/twiki/bin/view/Main/RpmHowTo] | |||
=== Разное === | === Разное === | ||
Строка 123: | Строка 137: | ||
fi</pre> | fi</pre> | ||
''ldv@'' | ''ldv@'' | ||
{{Category navigation|title=RPM spec|category=RPM spec}} | {{Category navigation|title=RPM spec|category=RPM spec}} |
Версия от 17:28, 12 сентября 2009
Как писать спеки?
Инструменты
Макросы
Книжки
- Русский перевод Red Hat RPM Guide
- ALT Packaging
- Maximum RPM (snapshot)
- http://bog.pp.ru/work/rpm.html
- Policy
Ссылки
- Типичные ошибки при написании spec-файлов
- Рекомендации по размещению файлов в пакетах
- http://fedora.redhat.com/docs/drafts/rpm-guide-en/
- http://fedoraproject.org/wiki/Packaging/Guidelines
- http://qa.mandriva.com/twiki/bin/view/Main/RpmHowTo
Разное
- Скрипты и коды возврата
- Фильтрация Provides/Requires
- autoreconf
- Локализация
- Одинаковые симлинки в пакетах
- «Странные» зависимости вида rpmlib(CompressedFileNames)
- Perl man3 pages
- TEXTREL
- Пакетные скрипты, в том числе триггеры
- CFLAGS в qmake
- Упаковка %files
- Борьба с TEXTREL
- Борьба с .la
- Выбор версии компилятора/auto*
- Работа со службами
Примеры
Взаимодействие
Совместимость
Тут нужно написать о том, как *нужно* делать спеки, как их делать *не* нужно, и все такое.
В частности, многие спрашивают: будет ли спек со стороны работать в альте? Отвечаем: да, скорее всего, но:
- а) не обещаем
- б) наверняка он не соответствует альтовским правилам, а потому в сизиф не пройдет
Зато на другой вопрос: «будет ли альтовский спек работать где либо еще?», ответ вполне однозначный: в большинстве случаев нет.
Дело это поправимо. Для того, чтобы спек из другого дистрибутива сделать максимально подходящим для ALT, можно использовать команду rpmcs из пакета etersoft-build-utils. Для того, чтобы спек из ALT работал в другом дистрибутиве, там следует установить пакет rpm-build-altlinux-compat. Так же и etersoft-build-utils переносим на другие платформы с помощью этого пакета.
$ fortune ALT -m "наши spec-файлы" (ALT) % На основании этого можно сделать очевидные выводы: + нам удобно, чтобы чужие spec-файлы у нас работали (хотя бы для удобства подготовки своего spec-файла); + нам все равно, будут ли наши spec-файлы работать где-либо еще. -- ldv in sisyphus@ %
Обоснование — у нас «слишком» богатый набор макросов, сопоставимый (по мнению mike@) — с макросами в PLD и Conectiva. В RedHat и SuSE наборы макросов удивительно бедные, а сами спеки — очень часто (по всё тому же мнению mike@) жутко кривые. Видимо, это не в последнюю очередь по причине специфической организации сборочных систем и работе майнтейнеров не напрямую со спеками, а с их прообразами?
так как spec-файлы все ещё пишут люди, то их работу нужно свести к тому минимуму, который, собственно, и требует участия человека. Разработчик не должен копировать блоки кода из файла в файл, ибо эта неинтеллектуальная работа отнимает массу сил и чревата ошибками. Для этого есть макросы. Если какой-то код появляется в разных spec-файлах более одного раза, то надо написать макрос(ы).
(ldv@ в ALT specfile conventions)
Если нужно просто собрать чужой srpm-пакет, то можно просто взять и собрать. FC'шные и MDK'шные пакеты с высокой вероятностью могут собраться без внесения изменений в spec-файл. Пакеты из SuSE и PLD более широко используют свои макросы, возможно, потребуется адаптация. Если нужно собрать пакет в Сизиф, придётся поработать головой, поскольку качество чужих spec-файлов в среднем довольно невысокое.
(тоже ldv@)
Не следует использовать в спеках внутренние макросы RPM, которые начинаются с двух подчёркиваний.
Requires:
> > Если в req/prov скриптах использовать опцию --verbose, то можно > > узнать что-нибудь интересное. > > $ rpm -ql rpm-utils |file -NF$'\t' -f - |/usr/lib/rpm/shell.req.files |/usr/lib/rpm/shell.req -v 2>&1| head > > shell.req: /usr/bin/add_changelog: cat -> /bin/cat -> ... (via which) > > shell.req: /usr/bin/add_changelog: /bin/cat -> coreutils (via rpmdb) > > Ой хорошо, сегодня только грепал recoll -- где ж он lyx зацепил. > Кстати, куда кто смотрит, что умудряется вытащить (правильную) > зависимость на отсутствующий в чруте пакет lyx-qt? Если собирается хешером, то он смотрит в $build/cache/contents/contents_index_bin. Этот contents index как раз нужен, чтобы лучше искать зависимости вопреки минимальной сборочной среде и в ряде случаев давать более точные зависимости, напр. зависимость на mutt должна разрешиться в /usr/bin/mutt, а не в mutt или mutt1.5, т.к. любой из них сгодится. Кстати я внес много исправлений в find-package (это типа диспетчер, как искать такого рода зависимости), теперь в ряде "сложных" случаев результат будет более корректным. См. commit messages, там есть примеры с /sbin/ifup, openssl-config, arpsend и vim.
Rebuild
> Если все нежелающие править эту багу у себя дадут мне NMU -- я это сделаю. > Сейчас несколько человек заявили что пересоберут свои пакеты. Оставшиеся я > починю сам, если их пропустят. Пусть лучше скрипты работают. В терминологии /usr/share/doc/hasher-*/rebuild-prog.sh, if egrep -qs '^Build(Requires|PreReq):.*(libpq4|postgresql8)[^-]*-devel' "$specfile"; then sed -i -e '/^Build\(Requires\|PreReq\):/ s/libpq4[^-]*-devel/libpq-devel/g;s/postgresql8[^-]*-devel/postgresql-devel/g' "$specfile" e='- Fixed postgresql build dependencies. - Rebuilt due to libpq.so.4 -> libpq.so.5 soname change.' else e='- Rebuilt due to libpq.so.4 -> libpq.so.5 soname change.' fi
ldv@