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'ом, ведь я давно искал похожее решение.

А уважаемые читатели видели аналогичные системы? Расскажите мне о них.

Подпишитесь на обновления блога по RSS, Email или Twitter!
  • Nik
    22 апреля 2011 г. в 16:43 | #1

    Есть Aria2web, но лично я настроить не осилил (с лином знаком месяца два). Возможность закачки также поддерживает webmin. С Aria2с в libretto тоже возникли проблемы((

  • Siniy
    22 апреля 2011 г. в 19:44 | #2

    @Nik

    У меня есть в планах настроить aria2web и написать, как это делается, так что, раз кому-то стало интересно, постараюсь ускориться в написании :)

    А libretto я и не пользовался толком с того момента, как написал эту статью.

Оставить комментарий

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">