Дельта-обновления с debdelta

02.08.2008 21:44:34

К предыдущей заметке поступил вопрос:

А у вас в “лучшем дистрибутиве” нету случайно возможности скачивать не пакеты целиком а дельты?

Спрашивали? Отвечаем!

В лучшем дистрибутиве такая возможность, конечно, есть. 🙂

Надо заметить, Gentoo, будучи конструктором, а не дистрибутивом, действительно намного проще в смысле обновлений, тому две причины.

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

Вторая это то, что deltup действительно работать значительно проще, механизм diff/patch для дерева исходников несложен и хорошо отработан, небольшой вопрос только в том, чтобы накатив патч поверх, получить затем бинарно идентичный архив (в принципе, это было бы необязательно, если бы emerge сходу имел понятие патча, повышающего версию, тогда можно было бы так и хранить, версия + патч до следующей +…, накладывая по необходимости, однако, увы). Но, deltup показывает, что это вопрос решаемый.

Так вот, в лучшем дистрибутиве аналогичная возможность есть. Однако, специфика бинарных пакетов несколько усложняет процесс, а сама реализация, увы, далека от совершенства.

Реализация зовётся debdelta и имеет текущую версию за номером 0.26. Она успешно использует использует знание структуры deb-пакета, делает необходимые diff-ы (хитрым образом, распаковывая архивы, применяя bsdiff или xdelta) и создаёт патчи. Потом эти патчи успешно накатываются на установленные пакеты (debdelta настолько сурова, что не нуждается в исходных пакетах .deb!), и получаются пригодные к установке пакеты.

На практике, однако, debdelta имеет ещё и некоторые ограничения.

Во-первых, кто-то должен создавать/раздавать дельты и если зеркал архива Debian (и других репозиториев) в Сети вагоны, то сервер с дельтами один, от создателя debdelta. И предлагает он дельты только для двух веток Debian, etch (stable) и sid (unstable).

Во-вторых, работа с установленными пакетами без исходного .deb, хоть и очень крута сама по себе, играет с debdelta злую шутку, поскольку серьёзные (конфиги сюда не относятся) изменения в установленных пакетах приводят к невозможности накатывания патча. Это, например, если у вас на машинке регулярно работает prelink или чистилка лишних локалей, localepurge.

В-третьих, если использование deltup более-менее прозрачно для системы Ebuild, то у debdelta и APT отношения несколько другие. Надо ручками вызывать debdelta-upgrade и, как ясно из названия, это только для upgrade и актуально. Оно, конечно, понятно, что любой новый пакет это есть новый пакет и дельты неуместны, но разучивать новые команды и ритмы ударов по бубну всегда лениво, хотя, в принципе, ничего кроме

# debdelta-upgrade

знать и не надо. Тем не менее, было бы очень здорово, если бы apt-get или aptitude сам думал на предмет накатывания патчей, хоть при safe-upgrade, хоть при full-upgrade.

Как результат, debdelta на сегодня, я бы сказал, сыровата. Но, конечно, если не используется prelink (у меня используется, поэтому, увы, не так радужно) или localepurge, а основная система stable или unstable, то эффект от использования при обновлениях будет строго положительный. Статистика зеркала дельт говорит, что средняя дельта имеет размер в 15% размера пакета, так что уменьшить трафик в 5 раз или около того можно.

Много комментариев (2) к заметке “Дельта-обновления с debdelta”

  1. Просто Журнал » Debdelta и prelink:

    […] вчера настроение было, ковырнул я ломиком эту самую дебдельту, благо она на Гадюке написана. Ну и, собственно, три […]

  2. Просто Журнал » Debdelta 0.27:

    […] продолжение темы debdelta. Свежая debdelta 0.27 официально поддерживает […]

Закомментировать

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