From: Alexey Tourbin <at@altlinux.ru> To: devel@lists.altlinux.org Subject: [devel] rpm 4.0.4-alt87 Date: Sun, 24 Feb 2008 21:01:21 +0300 Message-ID: <20080224180121.GA32305@solemn.turbinal> (raw) [-- Attachment #1: Type: text/plain, Size: 3689 bytes --] После некоторых колебаний я подготовил новую сборку rpm. 4.0.4-alt87 - implemented automatic dependencies for %%pre, %%preun, %%post, and %%postun scriptlets (#7409) - find-package: when possible, keep file-level dependencies as is, without mapping them to package names - find-package: relax file-level dependencies on unpackaged directories - find-package: optimize out bulk dependencies on sh, cat, rm, mv etc. - build/parseScript.c: optimize out RPMSENSE_INTERP dependencies on /bin/sh - lib.req: enabled ELF_INTERP dependencies except for standard /lib/ld-linux.so.2 - functions (ValidateBuildRoot): require RPM_BUILD_ROOT path be canonical Прокомментирую основные изменения: 1) Поиск зависимостей в %post-скритпах. Теперь зависимости %post-скриптов вида Requires(post): ... можно не писать вручную (и лучше вообще не писать без особой нужды). Реализация мне не очень нравится, но на практике это не должно повлиять на конечный результат (реализацию можно будет переделать, если станет понятно, как это можно сделать лучше). Ранее я уже писал, что нужно понимать некоторые особенности работы shell.req, чтобы зависимости в шелл-коде %post-скриптов генерировались наиболее приемлемым образом. В частности, если зависимости быть не должно (если она не строгая), то команды в шелл-коде нужно заворачивать в переменные: x=/usr/bin/x if [ -x "$x" ]; then "$x" fi В отличие от реализации jbj@ (в апстриме rpm), поиск зависимостей работает не только для shell-кода (например, если %post-скрипт написан на перле -- "%post -p /usr/bin/perl" -- то будет работать поиск перловых зависимостей). 2) Когда путь к файлу указан явно, rpm теперь будет стараться сохранить зависимость на этот файл as is, без поиска соответствующего пакета, который содержит этот файл. Это пока возможно не для всех путей (для некоторых путей это может дать "полу-анметы"), но для многих -- возможно. Идея в том, что когда где-то требуется путь к файлу, то наиболее точный способ указать зависимость -- это просто вставить этот путь в зависимости. Вот пример, когда это желательно. Пусть в пакете используется /usr/bin/tclsh8.4. Тогда старый rpm разрешал эту зависимость в пакет tcl (версии 8.4). Новый пакет tcl (версии 8.5) уже не содержит файла /usr/bin/tclsh8.4, но зависимость на пакет tcl остаётся, естественно, удовлетворенной (то есть получаем нерабочий пакет). После же пересборки старый rpm изменил бы зависимость s/tcl/tcl8.4/. Всего этого можно избежать, если не делать "производных" зависимостей, а стараться указывать зависимости в их наиболее "первоначальном" виде. Здесь имеется полная аналогия с виртуальными зависимостями -- они как раз предназначены для того, чтобы указывать зависимости в наиболее точном "первичном" виде. Чтобы не появилось слишком много bulk зависимостей, я реализовал оптимизацию, которая удаляет следующие зависимости (как "команды" в шелл-скриптах, так и соответствующие им /bin/ пути): sh cat rm mv cp mkdir ln (список можно будет немного увеличить, если кто-нибудь захочет составить более точную статистику, чем у меня получилось с ходу). Поскольку сам rpm требует coreutils и /bin/sh, то в любой не окончательно поломанной среде эти зависимости должны быть заведомо удовлетворены. Это изменение не затрагивает случая, когда известна только "команда" (из шелл-срипта) и поиск зависимости на эту команду идёт через перебор каталогов по default PATH. Здесь осталось всё по-старому (как правило, генерируется зависимость на имя пакета, содержащего "команду"). 2ldv: лучше собрать его два раза, второй раз --with-stuff. [-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
next reply other threads:[~2008-02-24 18:01 UTC|newest] Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top 2008-02-24 18:01 Alexey Tourbin [this message] 2008-02-24 19:29 ` [devel] [JT] subjunctive mode (rpm 4.0.4-alt87) Alexey Tourbin 2008-02-24 22:53 ` Alexey Rusakov 2008-02-25 3:33 ` Alexey Tourbin 2008-02-25 7:49 ` Alexey Rusakov 2008-03-09 16:12 ` Alexey Tourbin 2008-03-09 17:03 ` Alexey Rusakov 2008-03-09 18:08 ` Alexey Tourbin 2008-03-09 18:13 ` [devel] libgtk+2-common-2.12.8-alt1 Dmitry V. Levin 2008-03-09 19:07 ` [devel] [JT] subjunctive mode (rpm 4.0.4-alt87) Alexey Rusakov 2008-02-25 10:36 ` [devel] rpm 4.0.4-alt87 Stanislav Ievlev 2008-02-25 11:11 ` Mikhail Gusarov 2008-02-25 11:18 ` Dmitry V. Levin 2008-02-25 20:48 ` Dmitry V. Levin 2008-02-28 17:38 ` Alexey Tourbin 2008-02-27 16:46 ` Dmitry V. Levin 2008-02-28 18:00 ` Alexey Tourbin 2008-02-28 18:34 ` Dmitry V. Levin 2008-02-28 19:05 ` Alexey Tourbin 2008-02-28 20:52 ` [devel] Q: rpmi --chroot Dmitry V. Levin 2008-02-28 21:09 ` Alexey Gladkov 2008-02-28 21:15 ` Dmitry V. Levin 2008-02-28 21:52 ` Alexey Gladkov 2008-02-28 22:49 ` Sergey Bolshakov 2008-02-28 23:08 ` Sergey Bolshakov 2008-02-29 5:47 ` Alexey Tourbin 2008-02-28 21:27 ` Alexey Tourbin 2008-02-28 21:38 ` Alexey Gladkov 2008-02-28 22:16 ` Alexey Tourbin 2008-02-28 23:06 ` Alexey Gladkov 2008-02-29 5:12 ` Alexey Tourbin 2008-02-29 6:39 ` Alexey Gladkov 2008-02-29 10:34 ` [devel] rpm 4.0.4-alt87 Kirill A. Shutemov 2008-03-01 9:45 ` Alexey Tourbin 2008-03-01 15:35 ` Mikhail Gusarov 2008-03-01 21:02 ` Alexander Bokovoy 2008-03-01 21:06 ` Mikhail Gusarov 2008-03-01 21:25 ` Alexey Tourbin 2008-03-01 21:45 ` Alexey Gladkov 2008-03-01 22:02 ` Alexey Tourbin 2008-03-01 22:09 ` Alexey Gladkov 2008-03-01 22:25 ` Led 2008-03-01 22:29 ` Pavlov Konstantin 2008-03-02 7:30 ` Alexander Bokovoy 2008-03-02 7:54 ` Alexey Tourbin 2008-03-02 7:58 ` Alexey Tourbin 2008-03-02 8:12 ` Alexey Tourbin 2008-03-02 8:54 ` Alexander Bokovoy 2008-03-02 13:30 ` Led 2008-03-03 15:01 ` [devel] embedded package (non-)management Michael Shigorin 2008-03-03 17:05 ` Alexey Shabalin 2008-02-28 18:40 ` [devel] rpm 4.0.4-alt87 Alexey Tourbin 2008-02-28 18:44 ` Dmitry V. Levin 2008-02-28 19:11 ` Alexey Tourbin
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=20080224180121.GA32305@solemn.turbinal \ --to=at@altlinux.ru \ --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