From: Igor Vlasenko <vlasenko@imath.kiev.ua> To: devel@lists.altlinux.org Subject: [devel] I: embedded language for src.rpm/spec file editing (part I). Date: Sat, 5 Nov 2011 18:58:46 +0200 Message-ID: <20111105165846.GA13658@dad.imath.kiev.ua> (raw) Уважаемые коллеги, прошу ознакомиться со вводной документацией. ------------------------------------------------------ Утилиты для манипуляции spec-файлами и src.rpm пакетами. Введение во встроенный язык редактирования spec-файлов и src.rpm пакетов. При работе со специализированной предметной областью хорошей стратегией является начать с создания специализированного языка, и далее продолжать работать с предметной областью на этом специализированном языке. Эта стратегия была использована при создании различных утилит для манипуляции spec-файлами и src.rpm пакетами, таких как srpmnmu, srpmbackport, srpmconvert, набора утилит для массовых операций с пакетами girar-nmu, утилит repocop-nmu, автономных сервисов, таких как cronbuild, croncopy, cronbackports, autoports, fedoraimport и других. В основе этих программ лежит библиотека perl-RPM-Source-Editor. Это библиотека perl, и при желании с ней можно работать как с любым другим perl'овым модулем. Однако все вышеперечисленные программы позволяют "на лету" изменять и дополнять свое поведение, подгружая с помощью опций --hook куски кода на perl, в котором можно напрямую работать с уже готовым инициализированным объектом, соответствующим spec-файлу или src.rpm пакету. Поэтому не зря этот текст и назван введением во встроенный язык редактирования spec-файлов и src.rpm пакетов. На кого рассчитано это введение? На всех, кто сопровождает более десятка пакетов. Мы же free people using free software, нам не пристало бесконечно повторять руками монотонные операции, когда возможен unix-way: пишем небольшой скрипт и за 5 минут обрабатываем все 100 своих пакетов или вообще все 12.000 пакетов Сизифа. В дальнейшем я попытаюсь проиллюстрировать этот текст примерами так, чтобы много простых повседневных задач можно было выполнить с помощью копипаста из приведенных примеров, не требуя знания perl. ==Утилиты.== Сначала познакомимся, как пользоваться вышеупомянутыми утилитами, поскольку загружаемые через --hook расширения работают не самостоятельно, а с помощью этих утилит. Утилиты выполняют начальную распаковку src.rpm пакета, чтение spec-файла, инициализируют необходимые объекты, выполняют свои действия и код, указанный пользователем в опциях --hook, и записывают новый измененный src.srm либо spec-файл. Эти утилиты обладают достаточно богатой встроенной функциональностью, и разделяют ряд общих опций, унаследованных от модуля RPM::Source::Transform. Рассмотрим их на примере утилит srpmnmu и srpmtool. Вызов srpmnmu: srpmnmu --changelog '- Yes! We can!' /path/to/foo-<oldversion>-alt<release>.src.rpm или srpmnmu --changelog '- Yes! We can!' -i foo.spec Опция --changelog может быть сокращена до --ch, а в некоторых утилитах --- и до -c. Действие srpmnmu по умолчанию - инкрементировать релиз в соответствии со политикой nmuadd (добавить .1 к релизу, если нет точки в релизе; иначе увеличить число после точки; примеры: alt2 -> alt2.1, alt2.1 -> alt2.2 и т.д.) и добавить changelog. Есть и другие политики увеличения релиза, которые выбираются опцией --next-release-policy (также, --nextrel). Например, srpmnmu --nextrel=incr -- обычное увеличение релиза (alt2 -> alt3 и т.д.) srpmnmu --nextrel=nmuappend -- "классический" nmu c расческой из единиц (alt2.1 -> alt2.1.1, alt2.1.1 -> alt2.1.1.1 и т.д.) Отключается увеличение релиза srpmnmu --nextrel=none (это то же самое, что вызвать srpmtool; srpmtool -- это srpmnmu с политикой увеличения релиза none по умолчанию. Можно явно указать Release: srpmnmu --release alt1.rc4_final Можно явно указать Version: srpmnmu --version <newversion> При этом, если "<newversion>" > "<oldversion>", то релиз, если не указан, будет сброшен в alt1. Если же у нас downgrade, "<newversion>" < "<oldversion>", то, если другое не указано, будет увеличен и Serial, и Release (В присутствии Provides/Obsoletes это наиболее разумное поведение). Явно указать Serial: можно опциями --serial и --epoch, в зависимости от того, какой тег мы хотим получить в spec-файле. С опцией --version, если редактируется src.rpm, а не spec-файл, обычно нужно еще указать архив исходных текстов новой версии. Т.е. набор опций для обновления src.rpm пакета до новой версии выглядит так: srpmnmu --version <newversion> --copy_to_sources=foo-<newversion>.tar.gz /path/to/foo-<oldversion>-alt<release>.src.rpm (Здесь без разницы, srpmnmu или srpmtool.) Для библиотеки вместе с обновлением исходных текстов до новой версии можно выпустить и compat-версию: srpmnmu --rename foo4 \ --changelog '- compat library' \ --group-translate 'Development/C|System/Legacy libraries,Development/C++|System/Legacy libraries' \ /path/to/foo-<oldversion>-alt<release>.src.rpm Есть еще опция --uupdate, автоматически обновляющая src.rpm, содержащий .watch файл, --group-translate, меняющая группы rpm, и много других. Однако, понятно, что каким бы богатым не был бы набор опций, он не в состоянии покрыть всю имеющуюся функциональность. Здесь на помощь приходит встроенный язык. Продолжение в части II: Программирование на языке манипуляций spec-файлом. -- Dr. Igor Vlasenko -------------------- Topology Department Institute of Math Kiev, Ukraine -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.
reply other threads:[~2011-11-05 16:58 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20111105165846.GA13658@dad.imath.kiev.ua \ --to=vlasenko@imath.kiev.ua \ --cc=devel@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git