|
|
(19 промежуточных версий не показаны.) |
Строка 1: |
Строка 1: |
- | [[Category:Devel]] | + | [[Category:RPM spec]] |
- | {{Викифицировать}}
| + | |
- | {{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/spectips}}
| + | |
| | | |
| == Как писать спеки? == | | == Как писать спеки? == |
- |
| |
| * [[Spec|Отличия спеков ALT Linux / Sisyphus от «обычного» RPM]] | | * [[Spec|Отличия спеков ALT Linux / Sisyphus от «обычного» RPM]] |
| + | * [[SampleSpecs|Примеры спек-файлов]] |
| + | |
| + | === Документы === |
| + | * [[ALT_Packaging_HOWTO|Howto по упаковке пакетов в ALT]] |
| + | * [http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/doc/old/rpm_packaging_howto.html ALT Packaging] (html версия) |
| + | * [[Policy|ALT policy]] |
| + | * [http://www.lexpr.ru/node/11 Русский перевод Red Hat RPM Guide] (актуально) |
| + | * [http://ftp.rpm.org/max-rpm Maximum RPM] (snapshot), [http://rpm.org/max-rpm/s1-rpm-specref-macros.html макросы] |
| + | * [http://fedora.redhat.com/docs/drafts/rpm-guide-en/ Fedora RPM Guide], [http://fedoraproject.org/wiki/Packaging/Guidelines Fedora Packaging Guidelines] |
| + | * [http://qa.mandriva.com/twiki/bin/view/Main/RpmHowTo Mandriva RPM Howto] |
| + | * [http://bog.pp.ru/work/rpm.html Краткий курс по RPM] (старо) |
| + | |
| + | === Взаимодействие === |
| + | * [[OtherDistros|С другими дистрибутивами]] |
| + | * [[SpecTips/Compatibility|Совместимость с «чужими» спеками]] |
| + | |
| + | === Макросы === |
| + | * [[SpecTips/triggers|%trigger*]] |
| + | * [[SpecTips/optflags|%optflags]] |
| + | * [[spectips/VersionHacks|Использование конкретных версий инструментов сборки]] |
| | | |
| === Инструменты === | | === Инструменты === |
Строка 11: |
Строка 28: |
| * [[add_changelog|add_changelog]] | | * [[add_changelog|add_changelog]] |
| * [[rpmcs|rpmcs]] | | * [[rpmcs|rpmcs]] |
- |
| |
- | === [http://rpm.org/max-rpm/s1-rpm-specref-macros.html Макросы] ===
| |
- | * [[SpecTips/triggers|%trigger*]]
| |
- | * [[SpecTips/optflags|%optflags]]
| |
- | * [[spectips/VersionHacks|Использование конкретных версий инструментов сборки]]
| |
| | | |
| === Разное === | | === Разное === |
- | * [[spectips/ReturnCodes|Скрипты и коды возврата]] | + | * [[TypicalPackagingErrors|Типичные ошибки]] при написании spec-файлов |
- | * [[SpecTips/FiltrProvides|Фильтрация Provides/Requires]] | + | ** e.g. использование [[TypicalPackagingErrors/InternalMacros|внутренних макросов RPM]] (%__macro) |
| + | * [[PackageSplitting|Рекомендации по размещению файлов в пакетах]] |
| + | * [[SpecTips/Requires|Генерируемые зависимости]] |
| + | * [[SpecTips/ReturnCodes|Скрипты и коды возврата]] |
| + | * [[SpecTips/ReqProvFilter|Фильтрация Provides/Requires]] |
| * [[SpecTips/autoreconf|autoreconf]] | | * [[SpecTips/autoreconf|autoreconf]] |
- | * [[spectips/l10n|Локализация]] | + | * [[SpecTips/l10n|Локализация]] |
- | * [[spectips/ClashLinks|Одинаковые симлинки в пакетах]] | + | * [[SpecTips/ClashLinks|Одинаковые симлинки в пакетах]] |
- | * [https://lists.altlinux.ru/pipermail/devel/2005-September/024045.html «Странные» зависимости вида rpmlib(CompressedFileNames)] | + | * [[PerlManPages|Perl man3 pages]] |
- | * [[spectips/perlman3pages|Perl man3 pages]]
| + | |
| * [[TextRel|TEXTREL]] | | * [[TextRel|TEXTREL]] |
- | * [[SpecTips/triggers|Пакетные скрипты, в том числе триггеры]] | + | * [[SpecTips/triggers|Пакетные скрипты, в том числе триггеры]] <!-- дубль ссылки --> |
| * [[qmakeCFLAGS|CFLAGS в qmake]] | | * [[qmakeCFLAGS|CFLAGS в qmake]] |
| * [[SpecTips/FileDirs|Упаковка %files]] | | * [[SpecTips/FileDirs|Упаковка %files]] |
| * [[TextRel|Борьба с TEXTREL]] | | * [[TextRel|Борьба с TEXTREL]] |
| * [[LaWars|Борьба с .la]] | | * [[LaWars|Борьба с .la]] |
| + | * [[SpecTips/ToolChain|Выбор версии компилятора/auto*]] |
| + | * [[ServiceMaint|Работа со службами]] |
| + | * [[MassRebuild|Массовая пересборка]] |
| + | * [http://uneex.ru/LecturesCMC/PackageMaintaining2009 Курс на ВМК МГУ] |
| + | * [http://www-uxsup.csx.cam.ac.uk/~jw35/docs/rpm_config.html <tt>%config</tt> в деталях] (англ.) |
| | | |
- | | + | {{Category navigation|title=RPM spec|category=RPM spec}} |
- | === Примеры ===
| + | |
- | …[[SampleSpecs|здесь]]
| + | |
- | | + | |
- | === Взаимодействие === | + | |
- | …[[OtherDistros|здесь]]
| + | |
- | | + | |
- | === Совместимость ===
| + | |
- | | + | |
- | ''Тут нужно написать о том, как *нужно* делать спеки, как их делать *не* нужно, и все такое.''
| + | |
- | | + | |
- | В частности, многие спрашивают: будет ли спек со стороны работать в альте?
| + | |
- | Отвечаем: да, скорее всего, но:
| + | |
- | : а) не обещаем
| + | |
- | : б) наверняка он не соответствует альтовским правилам, а потому в сизиф не пройдет
| + | |
- | | + | |
- | Зато на другой вопрос: «будет ли альтовский спек работать где либо еще?», ответ вполне однозначный: в большинстве случаев нет.
| + | |
- | | + | |
- | Дело это поправимо. Для того, чтобы спек из другого дистрибутива сделать максимально подходящим для ALT, можно использовать команду rpmcs из пакета etersoft-build-utils. Для того, чтобы спек из ALT работал в другом дистрибутиве, там следует установить [http://freesource.info/wiki//devel/rpmbuildaltlinuxcompat пакет rpm-build-altlinux-compat]. Так же и [http://sisyphus.ru/srpm/etersoft-build-utils etersoft-build-utils] переносим на другие платформы с помощью этого пакета.
| + | |
- | | + | |
- | <pre>$ fortune ALT -m "наши spec-файлы"
| + | |
- | (ALT)
| + | |
- | %
| + | |
- | На основании этого можно сделать очевидные выводы:
| + | |
- | + нам удобно, чтобы чужие spec-файлы у нас работали (хотя бы для удобства
| + | |
- | подготовки своего spec-файла);
| + | |
- | + нам все равно, будут ли наши spec-файлы работать где-либо еще.
| + | |
- | -- ldv in sisyphus@
| + | |
- | %</pre>
| + | |
- | | + | |
- | Обоснование — у нас «слишком» богатый набор макросов, сопоставимый (по мнению mike@) — с макросами в [http://cvs.pld-linux.org/cgi-bin/cvsweb/SPECS/ PLD] и Conectiva. В RedHat и SuSE наборы макросов удивительно бедные, а сами спеки — очень часто (по всё тому же мнению mike@) жутко кривые. Видимо, это не в последнюю очередь по причине специфической организации сборочных систем и работе майнтейнеров не напрямую со спеками, а с их прообразами?
| + | |
- | | + | |
- | <pre>так как spec-файлы все ещё пишут люди, то их работу нужно свести к тому минимуму,
| + | |
- | который, собственно, и требует участия человека. Разработчик не должен копировать
| + | |
- | блоки кода из файла в файл, ибо эта неинтеллектуальная работа отнимает массу сил
| + | |
- | и чревата ошибками. Для этого есть макросы. Если какой-то код появляется в разных
| + | |
- | spec-файлах более одного раза, то надо написать макрос(ы).</pre>
| + | |
- | (ldv@ в [http://docs.altlinux.ru/alt/devel/ch01.html#id2816423 ALT specfile conventions])
| + | |
- | | + | |
- | <pre>Если нужно просто собрать чужой srpm-пакет, то можно просто взять и
| + | |
- | собрать. FC'шные и MDK'шные пакеты с высокой вероятностью могут собраться
| + | |
- | без внесения изменений в spec-файл. Пакеты из SuSE и PLD более широко
| + | |
- | используют свои макросы, возможно, потребуется адаптация.
| + | |
- | | + | |
- | Если нужно собрать пакет в Сизиф, придётся поработать головой, поскольку
| + | |
- | качество чужих spec-файлов в среднем довольно невысокое.</pre>
| + | |
- | ''(тоже [http://lists.altlinux.org/pipermail/community/2006-October/185248.html ldv@])''
| + | |
- | | + | |
- | При этом недавно [http://lists.altlinux.ru/pipermail/devel/2005-December/027129.html выяснилось], что ''не'' следует использовать в спеках ''внутренние'' макросы RPM, которые начинаются с двух подчёркиваний (например, <tt>%__install</tt> или <tt>%__mkdir_p</tt>). «А мы и не знали» :-) [[rpmcs]] почистит такие косяки.
| + | |
- | | + | |
- | === Requires: ===
| + | |
- | <pre>> > Если в 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.</pre>
| + | |
- | ''[http://lists.altlinux.org/pipermail/devel/2007-March/042883.html at@]''
| + | |
- | | + | |
- | === Rebuild === | + | |
- | <pre>> Если все нежелающие править эту багу у себя дадут мне 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</pre>
| + | |
- | ''ldv@''
| + | |
- | | + | |
- | === Книжки ===
| + | |
- | * [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]
| + | |