Libretto
Давно искал вебморду для закачек файлов на сервер, и вот нашел (найти было очень тяжело, поверьте) Libretto — программу, написанную испанским товарищем Jordi Pujol.
Что мы имеем:
- Многопользовательность — просмотр, добавление, управление и удаление закачки для каждого пользователя. Мне не очень актуально, но вдруг кому-то пригодится
- Закачки запускаются и управляются из любого веб браузера
- Выбор директории для сохранения закачки — создание подкаталога
- Просмотр и удаление закаченных файлов. Загрузка закаченных файлов из браузера
- Работает в любой системе, где есть wget, php и вебсервер с поддержкой php, начиная от роутеров с busibox, заканчивая соляркой (а может и даже виндой, кто знает...).
Libretto написан на PHP и ему нужен всего лишь веб сервер с PHP4 или PHP5 и больше ничего. Закачка выполняется с помощью wget, aria2, Enhanced Ctorrent и jigdo-lite. Поддерживаемые протоколы: HTTP, HTTPS, FTP, Bittorrent, Metalink version 3.0 и Jigsaw. Вполне внушительный список, надо сказать, хотя для торрентов у меня есть rtorrent c wtorrent'ом.
А дизайн у Libretto мог бы быть получше
Сначала покажу скриншот со статусом, а в конце ещё скриншот с настройками.
Ну что, готовы попробовать?
0. Начальные условия: у нас есть настроенный вебсервер и php, а также wget и прочие вышеперечисленные утилиты по желанию. Кстати, рекомендую aria2 — отличная штука!
1. Установка. Заходим в каталог, закачиваем и распаковываем туда архив с Libretto. Я сделаю это в своей маленькой любименькой директории для https:
cd /var/www/data_ssl/ wget http://sourceforge.net/projects/libretto/files/libretto/0.92%20Beta/libretto-0.92Beta.zip/download
Какой архив качать, смотрим на странице загрузки.
unzip libretto-0.92Beta.zipЕсли нет unzip — устанавливаем, во всех репозитариях он есть. Содержимое архива распакуется в директорию libretto (удивительно, правда?
). Заходим в неё и настраиваем.
2. Настройка. Сразу скажу, что торрент меня не интересует, так что оставляю все настройки торрента на ваше усмотрение.
cd libretto nano includes/settings.php
Конфиг хорошо прокомментирован, но я поясню:
<? /* * Libretto - Web download manager. * Copyright (C) 2007 Jordi Pujol (jordi_pujolATtelefonicaDOTnet). * GNUтое БЛА БЛА БЛА! */ /** * Типа конфиг * configuration file. */ // report use of variables not initialized error_reporting(E_ALL|E_STRICT); ini_set('display_errors', true); ini_set('html_errors', true); ini_set('auto_detect_line_endings', true); ini_set('allow_url_fopen', true); /* language support */ //Языковая поддержка - мне лень переводить, поэтому я не трогал, //хотя для красоты можно оставить только английский язык // language codes corresponding to internet navigator codes $lang_codes = array("en", "ca", "es"); // locales are codes accepted by php function setlocale() // see http://es2.php.net/manual/en/function.setlocale.php $locales = array("en" => "en_UK", "ca" => "ca_ES@euro", "es" => "es_ES@euro"); //Интервал обновления страницы статуса в секундах. Оставил 0, //так как уж лучше ручками обновлять // interval for update of the status page. // in seconds. 0 means no refresh $refreshinterval = 0; // //Это для торрентов // folder from where is possible to take torrents // if no set no folder selection will be displayed // $displayfolder = '/mnt/wwwdata/torrents/'; // when pid should be updated $updatepidinterval = 200; //Мегакрасивое значение у опции, я восхищён испанским товарищем! //Вывод предупреждений. Если их хотите видеть, то просто уберите восклицательный знак // Print warnings on screen $printwarnings = !false; //Тип вашей коробки:) //Дело в том, что у wget'а из набора окружения busybox'а несколько другие опции. //Для моего случая - без изменений. // Box type // Posible values = 'linux2.6', 'busybox' $boxtype = 'linux2.6'; //Удалять загруженные файлы при отменении задачи вместе с каталогом //А нахрена? Оставляем как есть, то бишь false. // Remove all job files when cancelling a job. // Removes the download directory (and all his contents) // only when this directory is different from the main download directory // because Libretto does not track a list of downloaded files, // assumes that directory contains the files from the corresponding download, // use with care ! $removealljobfiles = false; //Маска для закачиваемых файлов. // permission for downloaded files and directories $createumask = 0000; // is an int, values from 0000 to 0777 //А вот и директории для закачек и временных файлов //Я решил закачивать в свою домашнюю директорию //Каталог должен заканчиваться на / // This is where the downloads and status files go. // Make sure this directory exists and is WRITABLE by the webserver process! // directories ending with slash $destdir = '/home/siniy/Downloads/'; $tmpdir = '/var/cache/libretto/'; //Лог. ИМХО, нужно. // Libretto does not log if $logfile is commented $logfile = '/var/log/libretto.log'; // Extra options //Настройки прокси. Сами настраиваем, если надо. // Use HTTP proxy server. This affects to all URLs. //$httpproxy = 'proxy:port'; // Set HTTP proxy user. //$httpproxyuser = 'proxyuser'; // Set HTTP proxy password. //$httpproxypasswd = 'pass'; // Aria2. Set the method to use in proxy request. METHOD is either get or tunnel. Default: tunnel //$httpproxymethod = 'get'; //Порты, как я понял для торента // available TCP/IP ports for communication, // is an inclusive range, from -> to $serverports = array( 6810, 6819 ); //А вот тут внимательнее. Если утилиты находятся не в path, то //указываем пути к ним в параметре fullpath. Также, если fullpath поставим //значение false, то утилита просто не будет использоваться. $downloaders = array( 'wget' => array( 'binary' => 'wget', // Path and name of your server's compatible binary, // optional, if not specified Libretto will search the binary program in the path //'fullpath' => '/usr/sbin/wget', // if you don't want to use this downloader set fullpath to false //'fullpath' => false, 'protocols' => array ( 'file' => array ( // a file 'url',// from Internet URL ), 'directory' => array ( // all files from Internet directory 'url',// from Internet URL ), 'mirror' => array ( 'url', // from Internet URL ), ), ), 'aria2c' => array( 'binary' => 'aria2c', //Закоментировал, так как буду пользоваться aria2 //'fullpath' => false, 'protocols' => array ( 'file' => array ( // a file 'url', // from Internet URL ), 'torrent' => array ( // with bittorrent protocol 'filelocal', // from local disc file 'fileserver', // from server disc file 'url', // from Internet URL ), 'metalink' => array ( // whith metalink protocol 'filelocal', // from local disc file 'fileserver', // from server disc file 'url', // from Internet URL ), ), ), 'jigdo' => array( 'binary' => 'jigdo-lite', //Если честно, то не знаю, что ставить, в //Debian не нашёл jigdo-lite, а там есть только jigdo 'fullpath' => false, 'protocols' => array ( 'jigdo' => array ( // jigdo protocol 'filelocal', // from local disc file 'fileserver', // from server disc file 'url', // from Internet URL ), ), ), //С торрентом сами:) 'enhancedctorrent' => array( 'binary' => 'enhanced-ctorrent', //'fullpath' => '/usr/sbin/enhanced-ctorrent', 'protocols' => array ( 'torrent' => array ( // with bittorrent protocol 'filelocal', // from local disc file 'fileserver', // from server disc file 'url', // from Internet URL ), ), ), ); /** * Users: *Юзвери. Мне достаточно одного - себя любимого */ //Авторизация. Надо. // require authentication, true or false // if true only listed users will login successfully $authrequire = true; //Использовать локальных юзеров? Нет. // sudo the download commands to local user's profiles, // therefore they will own the downloaded files and directories. // Extra configuration is needed to permit the sudo commands. // It is an experimental feature, by now... $localusers = false; //Использовать cron? Конечно да! // Use of Cron Daemon to control job schedule $jobschedule = true; //Максимальное количество закачек на юзера. //Себя стал не ограничивать, поставил 20 против 5 по умолчанию // Maximum number of jobs per user // 0 means no maximum $maxuserjobs = 20; //Массив юзеров. Уже отредактирован мною. $users = array( 'siniy' => array( 'name' => 'Siniy', //Я и так один, зачем мне ещё директории? Закомментил // main destination directory for the downloaded files // optional parameter, when not present, $destdir is taken //'destdir' => '/home/jpujol/MyDownloads/', //Админ? Конечно! // administrator flag, optional 'administrator' => true, //Опять ограничение на количество закачек. Закомментил, потому что уже устанавливал // maximum number of jobs for this user, // optional parameter, when it is not present, $maxuserjobs is taken //'maxuserjobs' => 2, //Каталог для торрентов. В топку. // folder from where is possible to take torrents // if no set no folder selection will be displayed // the displayfolder for the user overrides the value for entire system //'displayfolder' => '/mnt/wwwdata/torrents/', ), ); ?>
Создаём каталоги для закачек и временных файлов и файл лога:
mkdir /home/siniy/Downloads/ chmod 777 /home/siniy/Downloads/ mkdir /var/cache/libretto/ chown www-data /var/cache/libretto/ touch /var/log/libretto.log chown www-data /var/log/libretto.log
Все параметры вызываемых опций у закачивающих утилит смотреть в php файлах в каталоге downloaders.
Вот как выглядит страница с настройками:
Вывод: Кривенько, бажненько, но работает ведь, зараза! С аria2 возникли проблемы, потом решу. Я буду юзать, даже с одним wget'ом, ведь я давно искал похожее решение.
А уважаемые читатели видели аналогичные системы? Расскажите мне о них.




Есть Aria2web, но лично я настроить не осилил (с лином знаком месяца два). Возможность закачки также поддерживает webmin. С Aria2с в libretto тоже возникли проблемы((
@Nik
У меня есть в планах настроить aria2web и написать, как это делается, так что, раз кому-то стало интересно, постараюсь ускориться в написании
А libretto я и не пользовался толком с того момента, как написал эту статью.