[linux] загрузка файлов по smb

mirt1971

Вашему вниманию предлагается весьма функциональный загрузчик файлов по протоколу smb(возможно вскоре появится поддержка и ftp). Возможности: дозакачка, восстановление после прерывания сесси, многопоточность. В общем все что необходимо . Взять можно тут: smb://braindead.hackers/pub/Downloader3.tar.bz2
Для того чтобы собрать его, нужно отредактировать Makefile. А именно - прописать место установки Samba(например /usr, у меня - /usr/progs/Samba). После чего - make && make install.
Работа с программой:
downloader -d "smb://braindead.hackers/pub/Video/Friends" - закачка директории
downloader -f "smb://braindead.hackers/pub/Downloader3.tar.bz2" - закачка одного файла
Поддерживаемые опции: -n количество_потоков
Просьба пока не распространять программу, так как она находится в стадии тестирования. Хотя я уже скачал достаточно много данных, но... кто знает

lenabarskaya

VVDCopy (c)

mirt1971

Ты это к чему?

shlyumper

Совет автору: изучить как работает autoconf и научиться им пользоваться. Еще полезно выучить что такое automake, и как правильно писать makefile если делать это самому. Чтобы не возникало недоразумений типа


[chep01 Downloader3]$ head -3 Makefile
#change
SAMBADIR = /usr
[chep01 Downloader3]$ ls -l /usr/include/libsmbclient.h
-rw-r--r-- 1 root root 79774 Sep 13 23:03 /usr/include/libsmbclient.h
[chep01 Downloader3]$ ls -l /usr/lib/libsmbclient.a
-rw-r--r-- 1 root root 1986642 Sep 13 23:05 /usr/lib/libsmbclient.a
[chep01 Downloader3]$ make
make: *** No rule to make target `/usr/progs/Samba/include/libsmbclient.h', needed by `slave.o'. Stop.


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

vall

есть уже такое поделие на libsmbclient - называется smbget.
даже в самбу кажется включено.
libsmbclient - крайне кривая штука...
они там в четвёртой самбе прогнозируют сделать нормальную клиентскую либу.

hoha32

libsmbclient - крайне кривая штука...

Это точно. В Gnome-2 встроена его поддержка, когда начинаешь чего-нить копировать, результат практически непредсказуем

mirt1971

Я УМЕЮ пользоваться этими инструментами. И уже довольно давно. Но В ДАННОМ СЛУЧАЕ я этого не сделал. по многим причинам которые даже не собираюсь обсуждать.
В твоем случае сделай make deps. Забыл про это написать.

mirt1971

Да. Очень кривая. Но я попытался обойти все ее кривости. Вроде даже получилось.
А smbget умеет докачивать? Многопоточность? Восстановление после сбоев?

mirt1971

В моей проге - он вполне предсказуем. Рано или поздно, но файл докачается. Разве что владелец его удалит или зашарит навсегда

hoha32

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

mirt1971

Это хорошо. А если тебя отрубят посреди закачки?

hoha32

Midnight Commander Помнится, даже с dd извращался
Хотя была пара случаев, когда мне реально могла бы пригодиться твоя прога.

mirt1971

Да, графический клиент(для KDE) в стадии разработки.

mirt1971

Ну не знаю. С dd - Я как щас себе это представил В общем я думаю что прога ОЧЕНЬ полезна. Особенно когда я 3 дня не мог скачать фильм из-за отрубов.

hoha32

А можешь его сделать ни к чему не привязанным?
Кстати, графический stand-alone менеджер файлов кто-нить знает нормальный? Чтоб из него можно было файлы перетаскивать в плейлист того же xmms.

hoha32

Тогда тебе остаётся MC - он может дописывать файл.

mirt1971

Это как? Даже к X?
Может rox-filler тебе поможет? (название точно не помню)

hoha32

Так он на libkde или на QT? Если просто на QT - тогда намано Главное - чтоб файлы можно было перетаскивать

mirt1971

Не замечал. А если тебе надо кучу файлов скачать? Я вот поставил - и забыл. А тебе придется следить, восстанавливать если что... Тем более smbfs на мой взгляд весьма глючная.

mirt1971

rox-filler? на gtk.

hoha32

Это да, следить надо. Сделай графический интерфейс - цены твоей проге не будет
smbfs глючная - не то слово но больше ничего нету, да и libsmbclient ненамного лучше

hoha32

Да не rox-как-его-там, а твоя скачивалка

mirt1971

Теперь есть моя прога. Графический интерфейс - со временем точно будет. Cейча мне более важна стабильность закачки.

mirt1971

Будет на libkde. В принципе можно QT only, но мне нужен dcop для возможности общения с konqueror.

hoha32

Не, КДЕ меня тоже не радует Я бы и Гнома снёс, да только в нём есть нормальный файловый менеджер.
Находил, правда, ещё один, самостоятельный. Только он у меня вылетал с дампом часто, походу комп мой потихонечку загибается.

mirt1971

Хммм... Такой древний комп? Тебе нужны Х, xterm и моя прога Без GUI.

hoha32

Комп не древний. Но чего-то в нём глючит. Маза сегодня мне собраться с силами и прибить acpi.
Что меня убивает в Гноме и КДЕ - так это требования к оперативной памяти. Покуда не сделал 256+512, нормально работать не захотело

Makc500

настоящие фанаты делают mount smbfs, потом расшаривают это дело у себе на ftp и закачивают

sergey_m

> Ты это к чему?
vvdcopy программа с аналогичной функциональностью. Написана несколько лет назад. Те, кто давно учится в МГУ имели счастье быть знакомы с отцом VVD, её автором.

Marinavo_0507

я так понял, оно не умело smb, только если смонтировать, т.е. фтопку сразу

lenabarskaya

vvdcopy программа с аналогичной функциональностью.

Это не то ключевое свойство, благодаря которому она вошла в историю

sergey_m

Я УМЕЮ пользоваться этими инструментами. И уже довольно давно. Но В ДАННОМ СЛУЧАЕ я этого не сделал. по многим причинам которые даже не собираюсь обсуждать.
Чёрт возьми, из всех юзеров на форуме ты лучше всех подходишь к собственному аватару!

sergey_m

> настоящие фанаты делают mount smbfs, потом расшаривают это дело у себе на ftp и закачивают
Я вот кстати всегда так делал и не парился по этому поводу.

Marinavo_0507

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

hoha32

сетевых файловых систем

NFS?

Marinavo_0507

не зря ж это называют Network Failure System

hoha32

Кто называет? По мне так ничего
Я бы сказал что у унихов с мелкософтом совместимость плохая.

mirt1971

Я знаю. Именно поэтому его и выбрал.

mirt1971

Ну и не парься дальше. Зачем что-то монтировать для того чтобы скачать? Это как удалять гланды через задний проход.

myrka68

Взять можно тут: smb://braindead.hackers/...

ключевое слово...
лично меня скорость 2-5 мегов по самбе и до 9-10 по фтп вполне устраивает, для того, чтобы качать через smbclient и ncftp не боясь обрыва
хотя с другой стороны и хорошо, что такая сеть как хакерсы, выращивает вот таких вот Кулибиных

Marinavo_0507

да не в скорости дело
неудобен smbclient ...

mirt1971

Да. Кто-то заплатил кучу денег. А кто-то применил немножко мозгов и прямых рук. Каждому - свое.
PS: а если комп с которого ты качаешь тебя отрубит? Что ты будешь делать? Я вот 3 дня не мог скачать кино. Постоянно отрубали. В общем-то я после этого и написал downloader.

myrka68

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

mirt1971

В чем наебали? Подключиться к хакерсам - практически бесплатно. Да, посмотри еще PS в предыдущем посту

myrka68

PS позднее появился
по-моему, было бы гораздо полезнее встроить это дело в конквир, а не в виде отдельной утилиты. Поскольку встроенный smb:// - это просто пиздец...

mirt1971

Я об этом подумываю. Но специфика моего решения - его довольно сложно встроить в другое приложение. Для надежности программа разбита на 4 реальных программы. И каждая следит друг за другом. Чтобы избежать зависания. Поэтому оформить это как либу - не пройдет(ну или не стоит затрат). Я скорее всего сделаю отдельное приложение, и добавлю в меню konqueror пару пунктов(типа скачать с...). А smb:// - это точно пиздец. Зависает при любом удобном случае. Но это больше ошибка libsmbclient - таймауты там ни к черту. Вообще не работают.

vall

я пользуюсь этим.
http://www.opennet.ru/tips/info/739.shtml
очень удобно...
многопоточность - нафиг она нужна ?

shlyumper

кстати, очень грамотная вещь. что-то я раньше не подумал, что можно smbfs на autofs посадить.

mirt1971

Как это зачем? Чтобы отжирать канал. Например поставил человек ограничение 100кб - и сидят там 5 человек. И качаешь ты со скоростью 20кб. А я подключусь на 20 каналов и отожру все 100кб
PS: а как же дозакачка?

shlyumper

Я УМЕЮ пользоваться этими инструментами. И уже довольно давно. Но В ДАННОМ СЛУЧАЕ я этого не сделал. по многим причинам которые даже не собираюсь обсуждать.

Ну хорошо, хорошо, умеешь, только Makefile-то правильно написать можно было?

mirt1971

Можно. Забыл Ты лучше скажи, ты попользовался? Отзывы? Пожелания? Фичиреквесты?

shlyumper

Не пользовался. Просто тест на компилируемость устроил, меня строчка /usr/progs/... немного позабавила, вот и решил глянуть на такого кулибина. Мне эта программа нахрен не нужна - дома у меня Windows, а на работе нет Windows/samba.
А под винду я такую приблуду еще раньше "папы VVD" написал в свое время...

mirt1971

А чем тебя эта сточка позабавила?

shlyumper

Просто интересно, чем так модно делать /usr/progs в который каждую программу ставить индивидуально. Ну кроме того, что получается $PATH охуенных размеров.

mirt1971

Например chroot.

shlyumper

Ммм... поподробнее, пожалуйста.
chroot /usr/progs?
chroot /usr/progs/Samba?

mirt1971

Второй вариант.

mirt1971

Еще ssh, apache...

shlyumper

Неубедительно как-то все, ну да ладно...

Landstreicher

Насчет зависаний. Я samba есть несколько зашитых таймаутов с совершенно дикими значениями типа 20 секунд. Я перекомпилил ее, поменяв таймаут на 2 секунды. В результате она у меня или качает, или сразу отваливается без подвисаний - я доволен. Править source/libsmb/clientgen.c, строчку cli->timeout = 20000.

sergey_m

> Ну и не парься дальше. Зачем что-то монтировать для того чтобы скачать? Это как удалять гланды через задний проход.
Но на это уходит намного меньше времени, чем у тебя сейчас уходит на написание программы.

sergey_m

да не в скорости дело
неудобен smbclient ...
Чем?

sergey_m

Для надежности программа разбита на 4 реальных программы. И каждая следит друг за другом. Чтобы избежать зависания.
ROTFL!
Это напоминает моё предыдущее место работы. Там все проблемы решались именно таким путём. Если программа раз в неделю виснет, то вместо анализа проблемы писался watchdog, который эту программу перезапускал, если от неё не приходит сообщений. Впрочем с watchdogом тоже была проблема, он не всегда успешно выходил по SIGTERM и иногда последующая инвокация watchdоg не могла сделать bind. Для борьбы с этой проблемой был написан еще один скрипт. Важно то, что перед начальством этот подход выставлялся именно как надежность. Кстати люди, внедрявшие эту методологию очень любили Linux, как и ты. К чему бы это?

sergey_m

Как это зачем? Чтобы отжирать канал. Например поставил человек ограничение 100кб - и сидят там 5 человек. И качаешь ты со скоростью 20кб. А я подключусь на 20 каналов и отожру все 100кб
Прокатит только с теми, кто ставит ограничения по TCP сессиям, а не по IP клиентов.

Marinavo_0507

> Если программа раз в неделю виснет, то вместо анализа проблемы писался watchdog, который эту программу перезапускал,
> если от неё не приходит сообщений.
Твоя ошибка в том, что ты противопоставляешь эти методы, хотя они не являются взаимно противоречивыми и могут совмещаться.
То, что на твоей работе умели пользоваться только одним из них --- исключительно ваши трудности.

Marinavo_0507

>> неудобен smbclient ...
> Чем?
если забыть про баги, коих немало, то
* нет даже истории и автодополнения (по крайней мере в той версии, что у меня)
* нет автоматической докачки, о чём собственно и тема

sergey_m

Твоя ошибка в том, что ты противопоставляешь эти методы, хотя они не являются взаимно противоречивыми и могут совмещаться.
Пример достойного софта или качественного продукта где этот подход используется? Вот у тебя на phoenix к каждому демону (sshd, syslogd, etc...) прилагается программа которая за ним следит?

Marinavo_0507

> Пример достойного софта или качественного продукта где этот подход используется?
если рассмотреть системы более крупные, чем одна софтина, то такой подход используется повсеместно
например, в построении сетей
если типа "анализ проблемы" показывает, что исправить её сложнее, чем обойти, то интересы дела требуют её именно обойти
это если есть конкретная задача, а не желание что-то улучшить на будущее

sergey_m

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

Marinavo_0507

> Нет, мы всё таки рассмотрим одну программу.
На разных уровнях абстракции одно и то же может рассматриваться как одна программа, либо как несколько.
Пример про феникс:
падает иногда в корку pptpd
но так как происходит это редко, а запускается он из inetd, то практической проблемы это не представляет
inetd - та самая подпорка
и я даже посмотрел, где и почему падает
это чистый null pointer dereference в случае какого-то редкого race condition
исправлять не стал, в силу отсутствия проблемы на практике
аналогично было ещё с freebsd, когда рулил ты, что-то там падало по signal 10
ты тогда сказал, что хуй знает что это, но типа у вас на виржине уже год так, и вроде ничего
а почему ничего? а потому что запускалась эта фигня из обвязки по имени pppoed

sergey_m

> но так как происходит это редко, а запускается он из inetd, то практической проблемы это не представляет
> inetd - та самая подпорка
То, что inetd сглаживает глюки глючных программ это его побочное свойство, он не ради этого придуман. А то, что это побочное свойство злостно эксплуатируют - ничего хорошего.
> аналогично было ещё с freebsd, когда рулил ты, что-то там падало по signal 10
> ты тогда сказал, что хуй знает что это, но типа у вас на виржине уже год так, и вроде ничего
Это был radiusd-cistron. При этом я занимался анализом проблемы, а не обвязкой. Несколько падений было пофикшено. Каждый раз, когда он падал в новом месте, то я ничего не мог сказать кроме "хуй знает". В конце концов cistron нас зоебал и мы от него отказались.
> а почему ничего? а потому что запускалась эта фигня из обвязки по имени pppoed
ppp тут не причём. Падал только radiusd.

Marinavo_0507

> ppp тут не причём. Падал только radiusd.
значит, я говорил про другой случай
я вижу, у тебя очень удобная память, быстро забывает то, что не укладывается в теорию
> То, что inetd сглаживает глюки глючных программ это его побочное свойство, он не ради этого придуман.
Все практически используемые программы глючные.
Не согласен - приведи контрпример с доказательством неглючности.
> А то, что это побочное свойство злостно эксплуатируют - ничего хорошего.
Не вижу принципиальной разницы с изобретением уникальной подпорки.
Если существующая подпорка хорошо себя зарекомендовала, и можно ей воспользоваться, то не вижу ничего плохого в этом.
Тут у тебя были рассуждения про неподконтрольность некоторых факторов.
Глючность софта - именно такой неподконтрольный фактор, так как победить его в достаточных масштабах никто не может.

sergey_m

> ppp тут не причём. Падал только radiusd.
значит, я говорил про другой случай
я вижу, у тебя очень удобная память, быстро забывает то, что не укладывается в теорию
Я вижу, ты фантазёр. Потому что на virgin сейчас ничего не падает. И ppp никогда не падало.
Все практически используемые программы глючные.
Не согласен - приведи контрпример с доказательством неглючности.
Только после того, как ты докажешь что бога нет.
Если существующая подпорка хорошо себя зарекомендовала, и можно ей воспользоваться, то не вижу ничего плохого в этом.
А если программа падает не из-за null pointer derefence, а из-за переполнения, то использование inetd спасает от падучести, но не от уязвимости.
Если программа оставляет после себя что-то мешающее следующей? Конечно, можно написать скрипт, который подчищает.
Если у тебя имя corefilа содержит pid, то у тебя через несколько недель (месяцев) неспешных падений закончится место на винте. Конечно, ты можешь написать скрипт, который коры удаляет.
Рано или поздно львиная доля рабочего времени будет уходить на то, что бы читать аутпуты неудачных кронджобов от этих самых скриптов, пытаться понять почему же скрипт-подчищатель не сработал, а также на написание новых роботов и вотчдогов n-ного уровня. Это я не придумал, а то что наблюдал на практике, когда 5 человек администрили 100 машин. Можешь привести мне пример, где такой подход работает на практике.

Marinavo_0507

> Я вижу, ты фантазёр. Потому что на virgin сейчас ничего не падает. И ppp никогда не падало.
На этом стоит прекратить, так как других доказательств, кроме слов, ни у кого нет
> А если программа падает не из-за null pointer derefence, а из-за переполнения,
> то использование inetd спасает от падучести, но не от уязвимости.
именно руководствуясь этим, я и посмотрел, где оно падает и почему
ты опять настаиваешь на том, что нужно выбрать только один метод из возможных
> Рано или поздно львиная доля рабочего времени будет уходить на то, что бы читать аутпуты неудачных кронджобов от этих самых скриптов,
> пытаться понять почему же скрипт-подчищатель не сработал, а также на написание новых роботов и вотчдогов n-ного уровня.
Верю.
Так бывает, если решать все проблемы только одним способом, игнорируя более эффективные.
А вот если отказоустойчивость заложить в дизайн, то и не понадобится новых роботов.
Я же не призываю никогда не исправлять баги, только добавлять обёртки, это ты почему-то упорно пытаешься мне приписать такое.

sergey_m

> На этом стоит прекратить, так как других доказательств, кроме слов, ни у кого нет
Есть virgin на котором с тех пор сменилась версия FreeBSD, но не ppp, потому что лень мержить изменения с локальным патчсетом. И сменился radiusd, как я уже говорил. Но на ppp это не должно влиять.
Так бывает, если решать все проблемы только одним способом, игнорируя более эффективные.
А вот если отказоустойчивость заложить в дизайн, то и не понадобится новых роботов.
Я же не призываю никогда не исправлять баги, только добавлять обёртки, это ты почему-то упорно пытаешься мне приписать такое.
Хорошо, тогда давай критерий того, когда нужно разбираться, а когда делать подпорку.

Marinavo_0507

> Но на ppp это не должно влиять.
ну всякое бывает
я не говорил, что именно ppp
но точно какая-то хрень, которая из в результате коннекта по pppoe запускается
на фениксе оно так и проработало до самого апгрейда...
> Хорошо, тогда давай критерий того, когда нужно разбираться, а когда делать подпорку.
Надо делать то, что представляется наиболее эффективным продвижением по выбранному пути.
Это типа если универсальный критерий.

mirt1971

Понимаешь ли, я писал эту программу не с нуля. Я пользовался готовыми библиотеками(libsmbclient). И за ИХ глюки я не отвечаю. Поэтому я учитываю возможность что моя программа подвиснет именно не в моей библиотеке. Именно для этого и написан watchdog.
PS: хоть кто-нибудь пользовался downloader? Отзывы? Пожелания? Фичиреквесты?

Marinavo_0507

У тебя типа ссылка на smb://
У меня нет удобной скачивалки, так что ломает смотреть.

sergey_m

> но точно какая-то хрень, которая из в результате коннекта по pppoe запускается
ага. radiusd-cistron.
Надо делать то, что представляется наиболее эффективным продвижением по выбранному пути.
Это типа если универсальный критерий.
Что значит эффективным? С точки зрения компа эффективнее починить - не будут тратиться ресурсы на запуск и работу костыля. С точки зрения человека эффективнее поставить костыль - не будет тратиться время на анализ проблемы.

sergey_m

Понимаешь ли, я писал эту программу не с нуля. Я пользовался готовыми библиотеками(libsmbclient). И за ИХ глюки я не отвечаю. Поэтому я учитываю возможность что моя программа подвиснет именно не в моей библиотеке. Именно для этого и написан watchdog.
А еще два зачем?
Кстати лучше потратить время на написание патча и баг репорта самбистам. Принесешь человечеству пользу.

Marinavo_0507

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

mirt1971

Две - просто вспомогательные. Они могут оказаться полезными сами по себе, вот я и вынес их в отдельные проги.
PS: может оно и лучше. Но дольше. А мне просто хотелось иметь работающую програму.

sergey_m

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

Marinavo_0507



g++-3.3 -O2 -g -W -Wall -I/usr/include -DBINDIR='"/usr/local/bin"' slave.o Master.o Slave.o File.o Samba.o SlaveFactory.o Utils.o Exception.o Job.o Debug.o Storage.o ThreadedJob.o -L/usr/lib -lsmbclient -lpthread -o slave1
/usr/lib/libsmbclient.so: undefined reference to `secrets_fetch_machine_password'
/usr/lib/libsmbclient.so: undefined reference to `secrets_fetch'
/usr/lib/libsmbclient.so: undefined reference to `secrets_delete'
/usr/lib/libsmbclient.so: undefined reference to `secrets_store'


гугл что-то не прояснил, где искать эти функции...
libsmbclient-dev только что поставил из debian/unstable

Marinavo_0507

Ты типа хочешь от меня рецепт, как всего достигать, и никогда не ошибаться?

mirt1971

Забавно... Я подозреваю что у тебя libsmbclient собрана с чем-то типа kerberos, etc(там в опциях у samba много подобной шняги). Посмотри с чем у тебя слинкован smbd и попробуй прописать это в LDFLAGS.

sergey_m

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

Marinavo_0507

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

Marinavo_0507

Есть типа костыли, а есть типа средства повышения отказоустойчивости.

IvladV71

чё то у тя ни самба ни фтп не пашут

mirt1971

Включил ftp. Samba еще некоторое время будет отключена по причинам перехода на 3.0.8

mirt1971

Вышла новая версия программы.
Основное улучшение - возможность качать сразу с нескольких источников.
Для этого добавился ключ -a [дополнительный урл]. Внимание: программа
пока не проверяет файлы на идентичность(даже по размеру )
брать тут: ftp://braindead.hackers/Downloader4.tar.bz2

Ivan8209

Именуемые костылями?
---
...Я работаю антинаучным аферистом...

Marinavo_0507

Костыли - это типа для инвалидов. Такое название выражает отношение автора подпорки.

mirt1971

Блиииииин.... Как же вы все достали. Повышает надежность программы? Повышает. Так что, только из религиозных принципов мне их(костыли) убрать? Да, когда мы будем жить в идеальном мире, когда все программы будут правильно работать, тогда и можно будет выкинуть костыли. А сейчас - хрен.

Marinavo_0507

> Так что, только из религиозных принципов мне их(костыли) убрать?
Сделай там типа ifdef или что-нить в этом роде

a10063

возможность качать сразу с нескольких источников

вот это маза, кстати
мне часто не хватает...

sergey_m

Блиииииин.... Как же вы все достали. Повышает надежность программы? Повышает. Так что, только из религиозных принципов мне их(костыли) убрать? Да, когда мы будем жить в идеальном мире, когда все программы будут правильно работать, тогда и можно будет выкинуть костыли. А сейчас - хрен.
Не повышает ни хрена. Всё сложное менее надежно.
Я так понял у тебя проблема в том, что некоторые вызовы к libsmbclient могут зависнуть? Или у тебя проблема в том, что программа виснет хуй знает где?
В первом случае ты должен просто перед вызовом к libsmbclient сделать alarm(3). Во втором случае нужно сидеть и разбираться, а не писать n-ую программу.

sergey_m

> Именуемые костылями?
Ни в коем случае. Произносится только "средства повышения надежности".

mirt1971

alarm(3) - это круто. А как в posix определено взаимодействие сигналов и тредов? Куда придет сигнал? В какой тред? А если это nptl? Или linuxthreads? Могу еще подобных вопросов позадавать. А когда я прикручу ftp/http мне там тоже алярмы расставлять? Я уж лучше в одном месте и навсегда. Это БОЛЕЕ ПРОСТО. Подумай над этим.

mirt1971

Появилась новая версия программы. Чистка кода, добавление поиска по лориену.
Теперь вы можете запустить закачку таким образом: lorien_downloader "Имя файла".
Программа пошурует по лориену, найдет все такие файлы и запустит downloader. Будут
использованы ВСЕ найденные соотвествия. Скоросто повышается весьма серьезно. Правда этот метод хорош только для уникально названных файлов. Например фильмов.

sergey_m

> alarm(3) - это круто. А как в posix определено взаимодействие сигналов и тредов?
Весьма однозначно.
> Куда придет сигнал? В какой тред?
Зависит от тебя и совместимости твоей реализации тредов с POSIX.
> А если это nptl? Или linuxthreads?
Не знаю, я ими не пользовался.
> Могу еще подобных вопросов позадавать.
Задавай.
> А когда я прикручу ftp/http мне там тоже алярмы расставлять?
Если библиотека с помощью которой ты будешь работать с ftp/http будет зависать, то ответ - да.
> Я уж лучше в одном месте и навсегда. Это БОЛЕЕ ПРОСТО. Подумай над этим.
Подумай над тем, что с проблемой ненадежного внешнего вызова ты столкнулся не первый. Наверное уже много людей решали эту проблему, наверное ты не первый используешь libsmbclient. Найди программу где для решения этой проблемы используется твой подход.

Marinavo_0507

Более интересный вопрос: а что делать, когда придёт alarm?
Повторно вызывать функции библиотеки нельзя, если они не объявлены реентерабельными.

sergey_m

Более интересный вопрос: а что делать, когда придёт alarm?
Повторно вызывать функции библиотеки нельзя, если они не объявлены реентерабельными.
Повторно, в смысле из обработчика сигнала? Конечно нельзя, дело даже не в реентерабельности. В обработчике нужно поставить флажок и всё. Функция должна завершиться с ошибкой. Если она не завершается с ошибкой, т.к. разработчики перехватывают EINTR внутри функции, то alarm(3) не поможет. Хуй знает что тогда делать.

Marinavo_0507

> Хуй знает что тогда делать.
Так вот, знает не только он.
Нужно завершить зависший процесс и породить новый.
В случае с чужой библиотекой нельзя даже гарантировать, что она внутри себя не пользуется тем же сигналом,
что и alarm.

Marinavo_0507

> Повторно, в смысле из обработчика сигнала? Конечно нельзя, дело даже не в реентерабельности.
Не обязательно даже из самого обработчика.
Даже если библиотека обработает EINTR и завершит функцию, нельзя быть уверенным, что её внутренние структуры данных
не испортились, раз библиотека кривая.

sergey_m

Даже если библиотека обработает EINTR и завершит функцию, нельзя быть уверенным, что её внутренние структуры данных
не испортились, раз библиотека кривая.
Если библиотечная функция не вызывается второй раз, после прихода сигнала, то лучше её вообще не использовать. Тогда нужно делать exec после каждого вызова этой функции.
Может совсем бредовые варианты не будем рассматривать? Изначальная постановка задачи - функция может заблокироваться.

Marinavo_0507

> Если библиотечная функция не вызывается второй раз, после прихода сигнала, то лучше её вообще не использовать.
API libsmbclient не смотрел, но часто бывает что-то вроде:
smb_open(...);
smb_read_something(...);
smb_close(...);
smb_read_something внутри вызывает read и он иногда блокируется
если разработчики не предусмотрели, что read может заблокироваться,
то скорее всего, и на EINTR реакция будет какая-нибудь неправильная
например: тут же вызовут read повторно, тогда alarm не поможет
или: аварийно завершат функцию smb_read_something так, что структуры данных библиотеки окажутся испорчены
как можно всё-таки надёжно использовать такую библиотеку, при условии, что подвисания происходят не слишком часто:
можно создавать по процессу на каждое соединение, и, если с ним случилась лажа, просто прибивать его,
и пытаться продолжить скачивание в другом процессе
по-моему, именно такая схема наиболее проста, и обеспечит наивысшую надёжность

sergey_m

> по-моему, именно такая схема наиболее проста, и обеспечит наивысшую надёжность
Тот же вопрос, что и у: какие ты знаешь программы использующие libsmbclient, действующие по этой схеме?

Marinavo_0507

я не знаю ни одной программы, использующей libsmbclient

mirt1971

Моя программа действует примерно по этой схеме.

Marinavo_0507

Downloader3 скомпилировался с libsmbclient из debian sarge, но хочу последнюю версию сразу попробовать, а ftp не работает.

sergey_m

> я не знаю ни одной программы, использующей libsmbclient
Наверное нету команды apt-grep?
Используют:
gnomevfs
kpopup
linpopup
xsmbbrowser
интерфейсы к perl и python
ama
apsfilter
linneighborhood
smb2www
KDE (konqueror)
я сомневаюсь что хоть в одном из этих софтов используется внешний процесс следящий за основным.

Marinavo_0507

> сомневаюсь что хоть в одном из этих софтов используется внешний процесс следящий за основным
на многое из этого набора жаловались на ненадёжную работу с smb, даже в этом форуме

sergey_m

> на многое из этого набора жаловались на ненадёжную работу с smb, даже в этом форуме
Всё, спорить мне на сегодня надоело. Признаю, что вы с braindead гении, изобрели новый способ работы с libsmbclient. Вышлите патчи разработчикам вышеперечисленных программ, что бы они не глючили.

Marinavo_0507

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

mirt1971

ftp://braindead.hackers/Downloader5.tar.bz2
PS:
Появилась новая версия программы. Чистка кода, добавление поиска по лориену.
Теперь вы можете запустить закачку таким образом: lorien_downloader "Имя файла".
Программа пошурует по лориену, найдет все такие файлы и запустит downloader. Будут
использованы ВСЕ найденные соотвествия. Скоросто повышается весьма серьезно. Правда этот метод хорош только для уникально названных файлов. Например фильмов.

sergey_m

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

Marinavo_0507

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

mirt1971

Ну как тебе сказать, я на днях собираюсь на sourceforge зарегистрировать проект.(+ к уже имеющимся ). Так что я пытаюсь чтобы программа была полезна не только для меня.

Marinavo_0507

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

mirt1971

А тут что-то с чем-то сравнивали? Я и не заметил. Нет. Я не собираюсь патчить соответствующие программы/библиотеки. Нет ни времени, ни желания. У них есть свои разработчики, вот пусть они этим и занимаются. Кстати, если интересно, вот список моих программ, которые я либо уже открыл либо собираюсь это сделать.
http://unix.molod.ru/index.php?page=flux
http://unix.molod.ru/index.php?page=mdm
http://unix.molod.ru/index.php?page=reader

shlyumper

Автор: Самохвалов Антон

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

mirt1971

И что? Я никогда не скрывал как меня зовут

Marinavo_0507

Один файл я взять смог, дальше буду тестировать, если появится необходимость скачать что-то, а это может быть нескоро.
lorien_downloader, где адрес сервера и формат его вывода зашит в C++-код, не буду запускать никогда
пожелание:
1) slave* в $PATH делать нечего, для такого придумали libexec
2) неплохо бы скорость скачивания выводить

Landstreicher

Если появились желающие использовать поисковую систему в автоматическом режиме, то можно предоставить к ней соответсвтующий доступ (вместо глупого выдирания html). Сейчас поиск оформлен в виде отдельного сервера, который слушает на UNIX-сокете. Можно приделать туда слушание TCP/IP сокетов и открыть их в сеть, чтобы любой желающий мог писать собственные программы на основании этого поиска. Если в этом есть какой-то интерес - пишите, обсудим.
PS. Идея парсить html мне нравится. Он может легко изменяться.

mirt1971

Эээээ... А как тебе нужно с лориеном? Может на перле написать? Я не хотел лишних зависимомтей вводить. Вот и написал на С++. Почему адрес зашит? Ну лень мне было вспоминать как делать gethostbyname. 100 лет уже не делал.
1) libexec - а что это? В LSB такого вроде нет. Это какое-то странное новвоведение Могу поместить в /usr/lib/downloader, как многие проги делают.
2) Скорость - будет.

Marinavo_0507

> В LSB такого вроде нет.
В FHS, ты хотел сказать?
/usr/progs там тоже нет

mirt1971

Да, именно это я и хотел сказать. В общем, могу сделать инсталляцию slave в любую директорию. Если надо - просто поменяешь.

Marinavo_0507

Адрес сервера должен быть в конфиге.
Шаблоны или что там нужно для разбора конкретного формата HTML(XML) - тоже в конфиге.
> Ну лень мне было вспоминать как делать gethostbyname
Это не обязательно помнить, когда есть man

mirt1971

В общем было 3 часа ночи и мне жутко хотелось спать. Я просто хотел побыстрее доделать, получить результат. XML - не будет. Скорее всего приделает что-нибудь с чем можно работать напрямую.

lordik72

что-то типа такого ?

Ivan8209

Оно не повышает надёжности.
Оно всего лишь автоматизирует перезапуск программы.
От безнадёжности.
---
...Я работаю антинаучным аферистом...

mirt1971

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

Ivan8209

В смысле?
Меньше риск повесить систему так, что она потом вообще не загрузится?
С какой стати?
---
...Я работаю антинаучным аферистом...

mirt1971

Чегооооо? Какую еще систему? Я говорю о своем конкретном случае.

Ivan8209

Конкретно в твоём случае какое именно действие предотвращается
перезапуском?
Это действие приводит к порче системы или потере данных,
не имеющих прямого отношения к работе твоей программы?
---
...Я работаю антинаучным аферистом...

Marinavo_0507

Маза ты как-то не так понимаешь "надёжность".

mirt1971

Вышла обновленная версия программы. Чистка, добавилась возможность качать по ftp. Внимание: эта фича до конца не отлажена, просьба пользоваться с осторожностью(если вообще кто-нибудь будет ).
Пример использования:
downloader -f "ftp://braindead.hackers/qw" -a "smb://braindead.hackers/pub/qw" -n 2

Gasparfx

когда GUI будет?

mirt1971

Не скоро. Я же говорил, сейчас меня больше интересует надежность. Да и другой работы немало...
Оставить комментарий
Имя или ник:
Комментарий: