Вход:  Пароль:  
FreeSource: TZ/ALtLinux/КакойДолжнаБытьСистема?/PatchRPMS ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

Patch/delta-RPMs и их возможное использование в ALTLinux

Общая теория

patch-rpm и delta-rpm (ниже называемые разностными пакетами) — это способы упаковки обновлений, применяемые в Su SE? Linux. Пакеты prpm и drpm содержат лишь разницу (записанную в той или иной форме) между двумя версиями некоторого rpm-пакета. Установка в систему prpm/drpm равносильна установке обычного (будем называть его полным) rpm-пакета новой версии при условии наличия в системе этого же rpm-пакета определённой старой версии. Внешнее отличие prpm и drpm в случае Su SE? Linux состоит в том, что prpm используется для консервативных обновлений внутри одной версии апстрима, тогда как drpm используется для обновления до новых версий апстрима. Скорее всего, в patch-rpm и delta-rpm изменения упакованы по-разному.
Основным достоиством prpm/drpm является их малый, по сравнению с полным rpm, размер. Основной недостаток обоих разностных rpm — жёсткое требование к версии пакета, установленной в системе.
«Неполнота» разностных пакетов в определённых условиях приводит к неудобствам: например, может не работать механизм rpmnew/rpmsave из-за того, что нет полной версии обновляемого файла. Справиться с этим можно, если поместить соответствующий файл в разностный пакет полностью (вполне возможно, это делается в delta-rpm, однако достоверной информации у меня пока нет).
Ещё одна проблема присуща не отдельным разностным пакетам, а системе обновлений на их основе: если новая версия добавляет к зависимостям новые программы/библиотеки, не всегда может быть возможно получить полный пакет, от которого зависит обновляемый. Однако эта проблема легко решается путём использования традиционного репозитория (назовём его основным репозиторием) наряду с репозиторием разностных пакетов, при этом пакеты одной и той же версии помещаются в оба репозитория (drpm и полный rpm соответственно). Очевидно, при наличии двух пакетов с полностью одинаковыми версиями, отличающихся лишь своим типом (полный и drpm) и при условии наличия установленного пакета подходящей старой версии, apt должен будет предпочитать drpm полному rpm'у.

Каким образом разностные пакеты могут использоваться в ALTLinux

Как показал опыт Su SE?, разностные пакеты прекрасно подходят для доставки консервативных (не апстрима) обновлений, таких как обновления безопасности, пользователям, не устанавливающим сторонних пакетов. В большей степени, пожалуй, это применимо к стабильным версиям дистрибутивов, чем к нестабильным репозиториям (например, Sisyphus). Это не отменяет необходимости в полных пакетах для тех же самых обновлений.


В Sisyphus разностные пакеты можно использовать на регулярной основе при условии параллельного наличия полных пакетов тех же версий. В этом случае пользователь, часто обновляющийся из репозитория, сможет пользоваться разностными пакетами для обновления между последовательными версиями, а пользователь, пропустивший версию, сможет обновиться,

В первом случае потребуется договориться, обновления насколько старых версий хранятся в репозитории (в пределе — хранятся лишь обновления между двумя последними версиями).
Часто обновляющиеся пользователи безусловно выиграют от наличия разностных пакетов у крупных программ (например, xorg), подобно тому, как сейчас выигрывают тестирующие installer от того, что Антон выкладывает xdelt'ы между версиями :) Однако небольшие программы нецелесообразно снабжать разностными пакетами, поскольку разница может оказаться больше полного пакета. По-видимому, вопрос о том, создавать ли разностные пакеты, нужно решать per-package; возможно, этот вопрос стоит решать мейнтейнеру.
Насколько я понимаю, подобный способ обновления из нестабильных репозиториев Linux пока не используется нигде в мире.


Виталий Липатов предложил использовать разностные пакеты для оптимизации обновления зеркал репозитория. По-моему, тоже очень стоящая идея.
Готовые разностные пакеты снижают нагрузку на процессор сервера – если формировать разность непосредственно при синхронизации, получается надо выполнить примерно следующее:

  1. Потрошим rpm-пакет на сервере
  2. Потрошим rpm предыдущей версии пакета на клиенте
  3. Делаем rsync между потрохами
  4. Собираем пакет на клиенте
  5. Делаем rsync пакетов (чтобы подпись восстановить).

(этот подход не делает предположений насколько далеко ушёл репозиторий от зеркала клиента, а также не требует изменений в коде rpm и apt)


Для того, чтобы использовать разностные пакеты, потребуется внести некоторые изменения в код как rpm, так и apt. И самое главное, нужно понять, в каком виде лучше представлять разницу между версиями. Очевидно, тупая xdelta между двумя полными пакетами – наихудшее, что можно придумать. Вопрос скорее в том, можно ли придумать что-то лучше, чем xdelta между файлами пакетов. Имеет смысл разобраться в отличиях сусешных patch-rpm и delta-rpm и что-то взять на вооружение.


Ключевые слова: prpm, drpm, xdelta, обновление системы, пакеты с обновлениями, patch-rpm, delta-rpm.

Ссылки


Ссылок на эту страницу нет


 
Файлов нет. [Показать файлы/форму]
Много комментариев (2). [Показать комментарии/форму]