Дельта-обновления с 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 раз или около того можно.
03.08.2008 11:08:22
[…] вчера настроение было, ковырнул я ломиком эту самую дебдельту, благо она на Гадюке написана. Ну и, собственно, три […]
17.09.2008 11:52:26
[…] продолжение темы debdelta. Свежая debdelta 0.27 официально поддерживает […]