# pydeltup - deltup + дозакачка

## DmP

Привет!

Вот начал пользоваться getdelta + deltup, но меня постоянно смущал факт, что не поддерживается дозакачка. Тогда собрался с мыслями и сделать её.

С налета не получилось, тогда решил переписать getdelta на Питоне, и заодно разобраться с алгоритмом работы.

Вот по ходу все больше разочаровывался в работе getdelta, что выяснилось.

1) Алгоритм определения базового файла не возможно написать на все случаи жизни.

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

2) Механизм очередей deltup сервера, может долго заставить Вас ждать чуда.

А модемное время тикает.

3) Отсутствие собственно дозакачки.

4) Наложение патчей. Тоже отбирает полезное время время.

5) Бывают неверные дельты, верней левые базовые файлы. У меня например, было два раза, когда сообщалось, что патч не может быть наложен, так как не верный базовый файл.

В результате, написал программку, которая более менее решает 1-3 пункты. Сделать 4-5 тоже не сложно. Но я отказался от идеи встроить программку в emerge, как это делает getdelta, так как это немножко абсурдно из выше описанного и ведет к увеличению трафика из-за простоев, ошибок определения имен, и слетания модема с линии.

Программку, пока не публикую, т.к. она сыровата, но кому интересно пишете, можно обсудить её развитие.

--

С уважением,

  Дмитрий.

----------

## fank

прекрасное начинание, очень нужное всем диалапщикам

теперь идеи...

 *Quote:*   

> 1) Алгоритм определения базового файла не возможно написать на все случаи жизни.
> 
> Мало того, что названия порой жутко видоизменяются, но еще в portage может быть несколько файлов с родственными названиями. 

 

вот насчёт этого пункта тоже долго думал, как решить...

можно указывать отдельно скрипту нестандартное имя файла, например, в конфиге где-нить; кстати, насколько я понял, это так и делается, но только на стороне сервера

 *Quote:*   

> 2) Механизм очередей deltup сервера, может долго заставить Вас ждать чуда.
> 
> А модемное время тикает. 

 

согласен на 200%

такое ощущение, что сервер не совсем корректно ставит запрос в очередь, то есть обнуляет очередь по какой-то причине

 *Quote:*   

> 3) Отсутствие собственно дозакачки.

 

я, вообще-то не программер, но это, по-моему, легко решить  :Smile: 

 *Quote:*   

> 4) Наложение патчей. Тоже отбирает полезное время время.

 

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

 *Quote:*   

> 5) Бывают неверные дельты, верней левые базовые файлы. У меня например, было два раза, когда сообщалось, что патч не может быть наложен, так как не верный базовый файл.

 

а вот это, по моему, решается только одним простым способом - на стороне сервера устроить счётчик ошибок применения патча за интервал времени, и пересоздавать патч

удачи тебе, и выложи, плиз, скриптец, очень уж попробовать хочется  :Smile: 

----------

## amax

Привет, очень интересно, хочется включить твою разработку в Fantoo linux

 :Smile: 

пиши

----------

## DmP

 *fank wrote:*   

> прекрасное начинание, очень нужное всем диалапщикам
> 
> теперь идеи...
> 
>  *Quote:*   1) Алгоритм определения базового файла не возможно написать на все случаи жизни.
> ...

 

На сервер надееться не стоит, нужно сказать большое спасибо тому, кто сделал этот deltup сервер, и что он еще стоит и работает. Насколько я понимаю это ведь частная инициатива.

А решил этот вопрос очень просто ставлю базовые файлы вручную.  :Smile: 

 *Quote:*   

> 
> 
>  *Quote:*   2) Механизм очередей deltup сервера, может долго заставить Вас ждать чуда.
> 
> А модемное время тикает.  
> ...

 

Работает он правильно, просто в файле deltup-queued сообщаеться длина очереди, у меня при закачке сохраняються все файлы, и по ним можно реально оценить их положение в очереди. Но обратно же неизвестно какие по объему в очереди стоят файлы. Вижу такой выход - соедениться через пол часа, запросы обработаються к тому времени, и вы сможете их загрузить. Выполненые запросы сохраняються на ftp. НО не на долго, по моим оценкам гдето на сутки.

 *Quote:*   

> 
> 
>  *Quote:*   3) Отсутствие собственно дозакачки. 
> 
> я, вообще-то не программер, но это, по-моему, легко решить 
> ...

 

Элементарно, лишбы ftp сервера поддерживал дозакачку, и разнеца во времени не была бы большой.

 *Quote:*   

> 
> 
>  *Quote:*   4) Наложение патчей. Тоже отбирает полезное время время. 
> 
> ммм.... может, отдельным процессом, но тогда резко усложняется прога, нужно ведь отлавливать состояние процесса, завершился ли удачно или нет
> ...

 

Можно и паралельно отслеживать, но проще наложить патчи после всех закачек, как отключитесь от инета.

 *Quote:*   

> 
> 
>  *Quote:*   5) Бывают неверные дельты, верней левые базовые файлы. У меня например, было два раза, когда сообщалось, что патч не может быть наложен, так как не верный базовый файл. 
> 
> а вот это, по моему, решается только одним простым способом - на стороне сервера устроить счётчик ошибок применения патча за интервал времени, и пересоздавать патч
> ...

 

Сервер не может узнать об ошибки. Просто в дистрибъютиве контрибъютеры  :Smile:  могли пошаманить и Ваш старый файл может отличаться от того что есть на сервере.

Но есть одна хитрость опишу ниже.

 *Quote:*   

> удачи тебе, и выложи, плиз, скриптец, очень уж попробовать хочется 

 

Спасибо, за идеи особенно.

Просто хотел его доработать, но не знаю в какую сторону лучше.

А) Что у меня было:

Скрипт вставляеться как и getdelta.

Создаеться БД на sqlite с именами файлов и прочей инфой (однаразово).

Запускаеться emerge -f ..., скрипт по имени файла и по БД определяет принадлежность к пакету, и по данной информации генерит старый файл, но он стал спотыкать на "сложных пакетов", и я просто не видел логичного простого решения.

Б) Что сейчас.

Запукаем pydeltap.py -c ИмяПакета, создаеться tasks.sh, со строчками типа:

pydeltap.py -l НовыйФайл НовыйФайл Ссылка

Исправляю вручную первый НовыйФайл, на старый - подправляя версию.

Соединяюсь запускаю tasks.sh. И все грузится. Если произойдет разрыв, вручную можно удалить из скрипта загруженные делты (необязательно),  переподключаем запускаем tasks.sh, и он просто тупо перебирает все снова и если что не загружено загружает, или продолжает загружать.

В) Что хочеть сделать:

В1) Сделать более интелектуальное формирование tasks.sh, или еще чего, используя наработки из А.

B2) Возможно отображение содержимого deltup-queued - т.е. состояния очереди, но не позиции в очереди.

В3) Более интелектульное авто-проверки закаченных дельт, опять же экономия трафика.

В4) Наложение патчей вынести в третий этап работы программы, или еще как.

В5) По поводу проверки на правельность базового. Есть одна фича в начале присылаемого dtu файла храниться MD5 сумма старого файла, т.е. скачав начало dtu файла можно проверить правильность старого файло, но проблема в том, что старый файл надо распаковать до tar архива.  :Sad: 

----------

## DmP

 *amax wrote:*   

> Привет, очень интересно, хочется включить твою разработку в Fantoo linux
> 
> пиши

 

 :Smile: 

Скрипт находиться в смешном безобразном состоянии, просто недавно поставил Gentoo. хотелось очень обновиться, а модем работает нестабильно, и грузить дельты в 5 Мб с помощью getdelta было страшнавато.

Но дело не в этом, я пререживаю за deltup сервер, если скрипты типа getdelta включать в дистрюбъетbвы, то это позволит легко завалить этот самый сервер и тогда ни кому сщастья не будет.

----------

## DmP

Да забыл сказать после создания tasks.sh, дельты можно закачавать хоть под форточками, правда сейчас для закачки используеться wget.

----------

## DmP

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

Только вот вопрос куда можно выложить скрипт?

К форуму вроде бы не прикрепишь.

----------

## bobr[x3]

В багзиллу. И еще ebuild напиши, если есть способность, время и желание.

----------

## DmP

 *bobr[x3] wrote:*   

> В багзиллу. И еще ebuild напиши, если есть способность, время и желание.

 

С багзилой чет не понятно, я ведь не исправляю ошибок, а пишу новую программу.

А для ebuild - то надо, что бы файл со скриптом уже в инете лежал.

----------

## fank

 *Quote:*   

> С багзилой чет не понятно, я ведь не исправляю ошибок, а пишу новую программу.
> 
> А для ebuild - то надо, что бы файл со скриптом уже в инете лежал.

 

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

но ты можешь попросить кого-нить написать ебилд прямо там, ничего постыдного тут нет или минимальный скелет набросай, а там уже поправят, будь спок  :Very Happy: 

Удачи !

----------

## DmP

 *fank wrote:*   

>  *Quote:*   С багзилой чет не понятно, я ведь не исправляю ошибок, а пишу новую программу.
> 
> А для ebuild - то надо, что бы файл со скриптом уже в инете лежал. 
> 
> нет, всё правильно, там и запость, совсем недавно один чел накропал прогу, так туда и запостил, ток он ещё и ебилд написал, просил потестить, а оттуда, я так понимаю, потом нужные люди в дерево включат
> ...

 

Зарегистрировался, но не нашел где можно прикрепить файл к описанию бага.  :Smile: .

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

Еще чет у меня сомнения, что многим захочеться лазить по папке distfiles в поиске базовых файлов.  :Smile: 

----------

## fank

 *Quote:*   

> но не нашел где можно прикрепить файл к описанию бага

 

https://bugs.gentoo.org/show_bug.cgi?id=79204

это пример, я туда ебилд сегодня закинул

а вот кнопка создания аттача

https://bugs.gentoo.org/attachment.cgi?bugid=79204&action=enter

дерзай  :Smile: 

----------

## rencoroso

 *amax wrote:*   

> 
> 
> Но дело не в этом, я пререживаю за deltup сервер, если скрипты типа getdelta включать в дистрюбъетbвы, то это позволит легко завалить этот самый сервер и тогда ни кому сщастья не будет.

 

Ну во всяком случае deltup вернули в официальное дерево портежей...

http://linux01.gwdg.de/~nlissne/

 *Quote:*   

> 2005/03/05 Good news! Due to the efforts of Stefan Schweizer aka genstef deltup is back to the official portage tree as well as getdelta is now available as official ebuild. Thank you, Stefan.

 

----------

## DmP

 *rencoroso wrote:*   

> 
> 
> Ну во всяком случае deltup вернули в официальное дерево портежей...
> 
> 

 

Да, уже видел, теперь пусть они сами отвечают за работу своего сайта. Но уже сказываеться то, что очередь бывает довольно длинная,  у меня было была как-то 11 позиция, это можно спокойно на час отключаться.

Кстати, а интересно только deltup, или вместе с getdelta.sh?

Сейчас работаю над более продвинутым алгоритмом поиска базовых файлов и над пунктом 4 и 5. Еще перед тем как выложить на bugs.gentoo.org нужно поубирать русские комментарии. Если, кто подскажет место куда можно выкладывать промежуточные версии, то буду выкладывать по ходу разработки.

----------

## rencoroso

 *Quote:*   

> Да, уже видел, теперь пусть они сами отвечают за работу своего сайта. Но уже сказываеться то, что очередь бывает довольно длинная, у меня было была как-то 11 позиция, это можно спокойно на час отключаться. 

 

Самый логичный вариант решения пробленмы с перегрузкой сервера, это создание новых deltup-серверов, т.е. делаешь свой дистр на основе gentoo

поднимай и свой deltup-сервер (возможно даже и для бинарников) и поддерживай его...

Это я больше к создателям Fantoo linux ,конечно обращаюсь...

 *Quote:*   

> Кстати, а интересно только deltup, или вместе с getdelta.sh?

 

И deltup и getdelta...

 *Quote:*   

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

 

Да,блин, на любом бесплатном хостинге...  :Smile: 

или на ru.gentoo-wiki.com можешь попробовать...

----------

## DmP

 *Quote:*   

> 
> 
> Да,блин, на любом бесплатном хостинге... 
> 
> или на ru.gentoo-wiki.com можешь попробовать...

 

На ru.gentoo-wiki.com пишут:

 *Quote:*   

> 
> 
> Предпочтительны следущие форматы; JPEG - для фотографий, PNG - для рисунков и небольших картинок, OGG - для звуков и музыки.

 

Да и как-то странно на wiki выкладывать программу, не тот профиль. Потом когда её от туда надо будет удалить, че делать?  :Smile: 

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

Сорри.

----------

## fank

 *Quote:*   

> Да и как-то странно на wiki выкладывать программу, не тот профиль. Потом когда её от туда надо будет удалить, че делать?

 

ты не прав, это, кстати, самый лучший вариант, wiki для этого и предназначена

 *Quote:*   

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

 

не думай о приличиях, думай о мировом сообществе  :Smile: 

глядишь, новые мысли появятся или идеи какие - вот и будет дополнительный стимул (и возможность) прославиться  :Smile: 

----------

## rencoroso

 *Quote:*   

> Да и как-то странно на wiki выкладывать программу, не тот профиль. Потом когда её от туда надо будет удалить, че делать? Smile
> 
> А на бесплатном хостинге, там тоже как то не прилично создавать домашнюю страничку, чтобы разместить файл в пару килобайт... Smile
> 
> Сорри.

 

Выкладывай на http://www.webfile.ru , на первое время самое то...

----------

## DmP

 *fank wrote:*   

> 
> 
> не думай о приличиях, думай о мировом сообществе 
> 
> глядишь, новые мысли появятся или идеи какие - вот и будет дополнительный стимул (и возможность) прославиться 

 

Тут как бы не опозориться.  :Smile: 

В общем переехал сюда:

http://www.linuxforum.ru/index.php?showtopic=5628

Там же выложил файл.

Временно данный форум может быть недоступен, т.к. они меняли хостинг.

----------

## fank

слушай, есть такая просьба, так сказать, feature request

у меня такая ситуация - есть хреновый канал в инет, есть локальный миррор для distfiles

когда скачиваю дельту, то хотелось бы, чтобы с ftp сервера забирался самый новый файл

сделать, в принципе, очень просто:

слить список содержимого сервака и найти в нём нужный файл, а потом слить сам файл в локальное [на моём компе, в данном случае] хранилище дистфайлов

заранее спасибо !!!

----------

## DmP

 *fank wrote:*   

> 
> 
> у меня такая ситуация - есть хреновый канал в инет, есть локальный миррор для distfiles
> 
> когда скачиваю дельту, то хотелось бы, чтобы с ftp сервера забирался самый новый файл
> ...

 

Не понял сути.

Суть работы getdelta и моего клона одна, забирать файл, который нужен для emerge -f. По сути это и есть самый новый.

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

И они тащат от туда, от куда им укажет dinamic deltaup server или как его.

----------

## fank

имелось в виду вот что

у меня на компе дистрибов нет - все на серваке

соответственно, если я делаю emerge -f some_program, то getdelta.sh ищет старый файл на моём компе, а мне хотелось бы, чтобы он скачивал старый файл с локального миррора, коим является ftp-сервер. сейчас же так: getdelta.sh пытается скачать с локального миррора только новый файл, считая, что старый лежит на моём компе

----------

## DmP

 *fank wrote:*   

> имелось в виду вот что
> 
> у меня на компе дистрибов нет - все на серваке
> 
> соответственно, если я делаю emerge -f some_program, то getdelta.sh ищет старый файл на моём компе, а мне хотелось бы, чтобы он скачивал старый файл с локального миррора, коим является ftp-сервер. сейчас же так: getdelta.sh пытается скачать с локального миррора только новый файл, считая, что старый лежит на моём компе

 

Оригинально.  :Smile: 

На самом деле, если getdelta.sh не находит старый файл, он отстраняеться, и "передает" бразды правления emerge.

Т.е. качает новый файл.

Для того, что бы работал getdelta.sh, нужен старый файл и дельта.

Т.е. если я правильно понял скрипт должен будет выкачать с локального ftp, старый файл и дельту с Дельтап Сервера.

Правильно?

В принципе решаемо.

----------

## kon

2fank

Ну так подмонтируй свой ftp на /usr/portage/distfiles

И тогда никому ничего не придется наворачивать в своих скриптах

----------

