[devel] I: arepo: next steps

Vitaly Kuznetsov vitty на altlinux.ru
Вт Фев 28 22:59:42 MSK 2012


On Tue, 28 Feb 2012 19:41:15 +0200, Igor Vlasenko wrote:
> On Tue, Feb 28, 2012 at 04:32:57PM +0400, Vitaly Kuznetsov wrote:
>> спасибо, это как раз то, что я хотел написать. Я попробую в
>> ближайшее время поиграться с python-rpm и понять, можем ли бы им
>> сформировать правильную rpm-ку. Если сможем, то мы получим очень
>> приличную скорость. Это важно как минимум для бутстрапа (когда мы
>> будем перепаковывать весь репозитоий).
>
> О, замечательно. В этом случае, мне, наверное,
> нет смысла копаться в коде arepo-1, который вскоре,
> похоже, полностью устареет.
>
> Будем ждать arepo-2 :)

В взглянул на python-rpm и rpmrebuild. Первый, похоже, вообще не имеет 
интерфейса для записи заголовков rpm. Второй решает немного другую 
задачу - восстанавливает rpm из установленного состояния (т.е. 
проворачивает фарш обратно).
Нам нужен немного другой инструмент: взять rpm-файл, отредактировать 
заголовки и содержимое, сохранить как новый rpm-файл. Мне пока такой 
найти не удалось. Вижу два возможных варианта решения:
1) Реализовать такой инструмент на librpm-е (муторно)
2) Таки билдить результирующий rpm с помощью rpmbuild-а. В общем случае 
данный подход требует новой хешерницы для каждого пакета, но мы можем 
использовать дополнительное знание о том, что спек-файл является вовсе 
не произвольным, а только что нами сформированным. Его можно попытаться 
сформировать таким образом, чтобы никакого выполнения произвольного кода 
не происходило (выписываем все Requires/Provides вручную, глушим все 
автопоисковики,...). Тогда будет возможно всю перепаковку для всей 
репозиторной транзакции (или вообще для всего репозитория в период 
бутстрапа) выполнить последовательно в одной и той же хешернице: создаём 
спек, специальным образом извлекаем файлы из исходного пакета, формируем 
новый пакет. Это должно быть достаточно быстро.



Подробная информация о списке рассылки Devel