Реализация Deltup-server

Надоело, что не работает deltup. Написал на перле реализацию его сервера.
- полностью совместим с getdelta.sh.
- зависимости: deltup (тот, который в gentoo), bdelta

Ссылка: http://slader.org.ru/dserver-0.20.zip

Как работает:
1. принимает два параметра have= и want=
2. если файлы доступны локально (находятся в указанных каталогах) – делает дельту и выкладывает в свободный доступ.
3. если файлы есть на зеркалах gentoo – скачивает и goto 2.

Что не делает:
- Нет контроля занимаемого места. Может только удалять скачанные пакеты (или перемещать их в локальное хранилище.

Может кто поставит – потестирует? У меня на локальном апаче (с mod_perl) работает нормально. Вот только хостинга у меня нет. Если бы кто смог захостить скрипт – было бы шикарно. А если бы там был локальный репозиторий пакетов… то мы бы все получили работающий deltup сервер.

Установка

Пожалуйста, отредактируйте секции настроек в обоих файлах перед их помещением на сервер.

PS. Есть несколько вопросов по программингу на perl:
1. Какой самый простой способ обработки файла с настройками? Хочется все настройки вынести в один файл и в скриптах его читать. Со строками все легко, а вот если у меня массив (т.е. переменная вида @A= ('11', '22');) ?

2. Когда я выдаю пользователю файл (использую print "Location: $name\n\n"), как узнать, что он этот файл закончил скачивать? (чтобы можно было удалять?)
Или, с другой стороны, как узнать, что этот файл нельзя удалять, потому что пользователь его еще качает?

Сейчас

Сейчас заглянул в http://www.rthwlr.net/ddeltup/ и просто охренел сколько там хлама... нужно чтобы Нельзя было создавать дельту Наоборот, от старшей версии к младшей. Нужно чтобы скрипт проверял место на винте и удалял самые старые dtu. Либо самые неиспользуемые.

Re: Сейчас

stranger169 написал(а):
Нельзя было создавать дельту Наоборот, от старшей версии к младшей.

Почему? если они созданы значит они кому-то нужны, например откат на страую версию, потому что новая глючит и старая удалена.

В качель...

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

99,9% прользователей обновляются вперед.

Вообще я думаю что делать дельты надо как-то модерируемо. :)
А то автоматика забивает сервер бесполезными дельтами.

Хотя с другой стороны я представляю какой это объем... :(

>>99,9%

>>99,9% прользователей обновляются вперед.

А кривая преступности как обычно растет вниз :))

Бесполезная дельта имхо это та которую никто не выкачивает. То бишь к ней никто долго не обращается, то бишь валить автоматом, а понятие "долго" -в конфиг. find умеет. Так нормальный модератор и сделает :).

Основной объем имхо сырцы занимают.

Это так, но....

... Основная нагрузка на deltup сервер - это не хранение и распространение дельт, это их создание.

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

А непправильные создавать только тогда, когда заняться больше нечем.

Ежели места

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

Предположим есть пакет ПАКЕТ1, мантейнер добавляет новую версию ПАКЕТ2. Отчего бы сразу же не сделать дельты ПАКЕТ1ПАКЕТ2 и ПАКЕТ2ПАКЕТ1 и не выложить их на дельтап? Времени это займет не больше нежели отладка ебилда. Поскольку мантейнеру это не обяснить, можно попытаться заставить это делать автоматом сервер сборки дельт. Сразу по появлению ебилда. Насколько я понимаю сумма дельт ПАКЕТ0ПАКЕТ1+ПАКЕТ1ПАКЕТ2=ПАКЕТ0ПАКЕТ2. Ежели научить клиента суммировать дельты то счастье не за горами. Ну а юзер точно будет знать что через сутки после появления ебилда дельту (или их набор) можно запросто забрать.

Все дельты...

не слишком ли громко сказано... :) нельзя объять необъятное. :)

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

Всеравно нахождение сервера дельт на одном сервере с дистфайлами - очень выгодно.

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

А бинарные дельты вообще не стоит делать. тогда клиенты автоматически будут качать полные файлы.

Опят deltup сервер

Опят deltup сервер в дауне.

А идея приютить deltup сервер на gentoo.ru умерла?

Ребята, что Вам

Ребята, что Вам мешает сходит например по этой ссылке http://www.keyweb.ru/hosting/vrs-start.html заказать виртуальный выделенный сервер за 9 евро в месяц, и разместить там русский deltup?

Проперло (плачу)

100% использование памяти и процессора )))

disambig

Я уж подумал, что ты уже оплачиваешь :). Эх, надо бы поглядеть на скрипты эти самые, может что путного найду :).
_________________
Прежде чем задать вопрос, подумай, а не додумались до него раньше?
From Siberia with Love!

Если хочется

Если хочется ощутимого прироста в сжатии дельт то архивы нужно сжимать не BZip2, а 7-Zip'ом в режиме максимального сжатия.
По поводу того, что сервер с дельтами должен обновляться при появлении новой версии пакета в портеже - абсолютно верно! Разумеется весь софт из
"emerge -uDN system" должен быть всегда доступен!
А ещё в первую очередь на сервер дельт нужно добавлять те дельты, которые наиболее популярны у народа (apache,mysql,php,kde*,gnome*,wine и т.д.)
_________________
^_^

Есть решение

Всем привет.
Проблемой дельт интересуюсь уже полгода и вот решил сделать нормальный сервис. Всем известный deltup вроде бы последнее время стабильно работает, но многих пакетов там не найти. Найденный мной еще один сервер просто хранит дельты, однако применить мне их так и не удалось. Вот и пришлось задуматься о собственной реализации. Попробую вкатце описать суть.
Принцип работы:
1. Все дельты просто лежат на сервере в некоторой директории.
2. Клиент сам формирует правильное имя файла, и запрашивает дельту. Этим решается проблема resume. После загрузки работа сводится к получению требуемого файла. В случае отсустсвия файла грузим всё целиком. Если сервер недоступен берем другое зеркало.
3. На сервере стоит отдельная программа, которая по расписанию делает обновление дерева portage и создает дельты для новых файлов и удаляет для тех которые исчезли из дерева. Думаю для более гибкого решения стоит завести БД с информацией о текущем состоянии дерева и репозитория. Таким образом можно разделить сервер для репозитория и для создания дельт. Зеркала же просто синхронизируются с главным хранилищем.

При создании новых дельт необходимо руководствоваться следующими правилами (если что-то забыл - дополните):
- требуемый файл должен быть больше некоторой заданной величины (например, 1 Мб);
- файл должен содержать исходные тексты (а не компилированные программы, как, наприме, драйвера от nVidia);
- после создания дельты, надо чтобы дельта была меньше требуемого файла хотя бы на какую-то величину (напр., 25%).

Всё хочу реализовать на питоне. Хотя, может сервер стоит написать на С. Есть уже определённые наброски.

Также хорошо бы сделать сервис доступным не только для пользователей Gentoo, а и для всех остальных. В принципе, 90% файлов одно и то же во всех компилируемых дистрибутивах.

Т.о. я постарался решить следующие проблемы:
- создание дельт на лету,
- удаление старых файлов,
- возможность восстановления прерванной загрузки (для модемных пользователей даже 500 Кб что-то значат),
- простое создание зеркал,
- снижение загрузки на сервера,
- унифицирование алгоритма работы,
- синхронизация с деревом portage,
- возможность расширения сервиса (напривер, Web-интерфейс и т.д.)

Конечно, наверняка, я многое упустил.

Если кому-то это дело всё же интересно буду рад сотрудничеству. Можете связаться со мной по ICQ.

Так уже же

Так уже же пишут нечто подобное, попробуйте договориться :) Идея очень интересная, может быть тоже подключусь...
_________________
Каждому линуксоиду - по мануалу!!!

так а где ихний

так а где ихний сервер то? что-то не нашёл какой url ставить.
вот бы еще эти сервера умели складывать дельты друг с дружкой, что бы получить конечную дельту.

А там где-то

А там где-то написано что они поддерживают публичный дельтап сервер?
Они просто прогу разрабатывают.

Я не вижу

Я не вижу смысла делать дельты для всего дерева сразу. Лучше делать так, как это делает старый deltup сервер. Т.е. создавать дельты по мере запроса пользователем. Ну и как-то оптимизировать этот процесс, например если есть очередь на создание дельт, сохранять количество запросов дельты от разных хостов и сортировать очередь по количеству запросов. Т.о. самые популярные дельты будут выдаваться в первую очередь.
Все это делается элементарно на apache+php+mysql. Дельты создает демон, который может быть написан на чем угодно. Примерно так и работает текущий дельтап сервер.
Его уже переписывали, есть готовый скрипт для сервера. Еще многое в нем нужно улучшать, но его для начала нужно потестить. А проблема теста загнулась на проблеме нахождения сервера.
Это и есть препятсвие для поднятия сервера дельт - отсутсвие площадки. А сами скрипты серверные написать делов на 1-2 дня.

Отчасти

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

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

Некрофил

Значит моя идея такова.
Дерево портежей обновляется каждую неделю и генерируется патч для обновления с предыдущей версии. (так как emerge-delta-webrsync, только генерируется каждую неделю (можно каждую вторую неделю etc...))

Дельты создаются только для самых запрашиваемых файлов (для этого ведется статистика скачиваний в базе. Так же туда ложется время создания, размер, дата создания ну и прочее).

Дистфайлы со старых дельт умирают, остается только текущая версия и дельта для перехода на новую версию (текущая для того что бы не качать заново для будущей дельты файл).
Но что же делать когда нужно переход более чем одной дельтой? - Отдавать две дельты, которые немного исправленный getdelta.sh сам наложит на файл.

Вообще вопросов еще много. Например стоит ли оно того вынимание информации о текущих дельтах в дереве. Стоит ли создавать заранее все дельты для категории system/. Возможно ли научить tar.(xz|lzma) дельтоватся...

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".