From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sun, 6 Feb 2011 06:31:15 +0300 From: Alexey Tourbin To: devel@lists.altlinux.org Message-ID: <20110206033115.GE22517@altlinux.org> Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit Subject: [devel] kde4games & dep optimizations X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 06 Feb 2011 03:31:16 -0000 Archived-At: List-Archive: List-Post: Новый rpm выполняет оптимизацию зависимостей между подпакетами: если пакет A содержит строгую зависимость на libA (Requires: libA = %version-%release), то все остальные зависимости пакета A, которые разрешаются в libA, - например Requires: libA.so.0, - удаляются. В этом примере названия пакетов A и libA условны, оптимизация работает для пакетов с любыми именами (я выбрал имена A и libA, чтобы пример был интуитивно понятнее). Оптимизация в том числе выстраивает цепочки строгих зависимостей: A -> libA0 -> libA1 -> ... libAN, чтобы удалить лишние зависимости пакета A, разрешающиеся в libAN (в случае, если пакет A требует только libA0, но libA0 в свою очередь требует libA1 и т.д.) К сожалению, для некоторых пакетов эта оптимизация не сработает, потому что у этих пакетов нет строгих зависимостей между подпакетами. Как ни странно, одним из первых пакетов такого рода мне попался kde4games (в то время как kde4 у нас собирается с очень жесткими зависимостями). $ hsh-install kde4games-bovo ... $ hsh-run -- rpm -e --test libkdegames4 error: removing these packages would break dependencies: libkdegames.so.5()(64bit) >= set:okXdnAZtmOhWJfrPk02zqtrC0apKQoS0 is needed by kde4games-bovo-4.5.5-alt1 $ hsh-run -- rpm -q --qf '%{SOURCERPM}\n' kde4games-bovo libkdegames4 kde4games-4.5.5-alt1.src.rpm kde4games-4.5.5-alt1.src.rpm $ Отсюда видно, что подпакеты kde4games-bovo и libkdegames4 собираются из одного исходного пакета, и между ними существует soname-зависимость с set-версией; но в тоже время нет ни одной строгой зависимости на имя пакета с библиотекой - ни прямой, ни по цепочке. Таким образом, во всех kde4games-* подпакетах не удастся соптимизировать дорогостоящую зависимость с set-версией (которая занимает больше места, и для проверки которой будет выполняться rpmsetcmp) на более строгую и дешевую зависимость - имя пакета с версией (для проверки такой версии обычно будет достаточно strcmp). Получается, что мои усилия по оптимизации зависимостей во многом бесполезны, потому что некоторые толстые пакеты собраны не по понятиям. Интересно, что тогда дальше делать? С одной стороны, следовало бы исправить такие пакеты (для этого нужно сначала научиться их диагностировать). С другой стороны, если мейнтейнерам это в голову не приходит, то может лучше научить rpm автоматически вставлять строгие зависимости туда, где они будут иметь смысл?