Автору надоело сутками гонять свой достаточно мощный компьютер для операции скачивания файлов, поэтому было принято решение поднять из хлама старенький маломощный компьютер, дать ему вторую жизнь - сделать "качалку" файлов. **Дано:** маломощный старенький компьютер, желание организовать простенькую качалку файлов (не торрент).\\ **Дополнительно:** предполагается, что компьютер качалки будет работать в домашней сети и подключаться к Интернету через маршрутизатор.\\ **Уровень подготовки пользователя:** выше начинающего, умение работать в консоли.\\ **Решение:**\\ Особенности выбора железа для этих целей можно почитать в отдельной статье [[Выбор платформы для домашних серверов или "качалок"]] ==== Платформа ==== Автор для этой задачи выбрал системник Legend SunChase 3000 6C/433, который иногда использовался как "песочница" для экспериментов. Конфигурация: Legend QDI P6I810E, Celeron 433MHz (Socket 370), 256Mb RAM, Seagate 80Gb IDE, VIA PCI-SATA controller, D-Link DFE-520TX 100Mbit. Жёсткий диск подключен через IDE PATA-шлейф через PCI SATA-контроллер, а встроенный в материнку контроллер отключен. Это даёт небольшой прирост производительности, а также возможность подключения жёстких дисков с интерфейсом SATA. Сам диск установлен в отсек 5,25`` через переходник, а крышка отсека открыта для улучшения охлаждения. В качестве операционной системы автор выбрал FreeBSD с целью изучения этой ОС. Конечно же можно применить и Linux-дистрибутив, например Debian. Далее по тексту будет рассмотрен вариант именно на базе Debian. ==== Организация работы ==== Из-за скромных технических характеристик платформы, не предполагается наличие графического интерфейса. Качалка будет автономна и доступ к ней будет работать через ssh или программы удалённого управления. Скаченные файлы будут сохраняться в отдельный раздел на диске для уменьшения фрагментации. Примерная разбивка диска: * 6 Гб для / * 1,5...2 Гб для /var * 500...600 Мбайт для раздела подкачки (указано для объёма памяти в 256Мбайт) * остальное пространство отдаётся под выделенный раздел для хранилища скачиваемых файлов и монтируется в /downloads Примерная работа с качалкой будет проходить так: - Пользователь, на своём компьютере ищет и формирует список прямых ссылок на скачиваемые файлы. - Далее заходит на качалку по ssh и копирует список ссылок в файл. - Запускает screen для фонового выполнения задачи, а потом запускает скрипт с параметрами для aria. Пользователь отключается от виртуальной консоли screen. - Идёт процесс скачивания файлов из списка. Пользователь периодически заходит по ssh на сервер, присоединяется к виртуальной консоли и смотрит результат. - Когда процесс закачки всех завершился, пользователь по протоколу ftp копирует на свой компьютер скаченные файлы. ==== Установка ПО ==== Установка дистрибутива и настройка сетевого подключения особенностей не имеет и в статье не описана. Для работы с программой aria заводим в системе нового пользователя, например **user** и сразу ему даём пароль: # useradd -c "download_user" -m -s /bin/bash user # passwd user Ставим дополнительное ПО: * //openssh-server// - для организации удалённого управления ставим, * //screen// - менеджер виртуальных консолей, для возможности запуска фоновых заданий, * //vsftpd// - ftp-сервер для копирования файлов из качалки на компьютер, * //aria2// - собственно менеджер закачек. # apt-get install ssh screen vsftpd aria2 ==== Настройка ПО ==== Для начала настроим инфраструктуру каталогов. Предполагается, что пользователь user будет работать с качалкой единолично. Создадим каталог, куда будут скачиваться файлы и настроим права: # mkdir -p /downloads/aria # chmod 775 /downloads/aria # chown user:user /downloads/aria Первая команда создаёт каталоги, а вторая - изменяет права на каталог, третья - изменяет хозяина каталога на пользователя //user// и группу //user// Стоит попробовать зайти по ssh под именем user и проверить права доступа, создав в каталоге /downloads/aria какой-нибудь файл или каталог. **Настроим FTP-сервер**\\ Для начала остановим демон: # /etc/init.d/vsftpd stop Сделаем резервную копию конфигурационного файла: # cd /etc # cp vsftpd.conf vsftpd.conf.bak , и откроем на редактирование vsftpd.conf в любимом редакторе. Для нашей цели опции и параметры будут иметь такой вид: listen=YES #listen_ipv6=YES max_clients=10 max_per_ip=3 # ----------------- anonymous_enable=YES local_enable=YES write_enable=YES local_umask=002 anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO ftp_username=ftp # ----------------- anon_world_readable_only=YES connect_from_port_20=YES hide_ids=YES pasv_min_port=30000 pasv_max_port=65000 #chown_uploads=NO #chown_username=whoever #nopriv_user=ftpsecure chroot_local_user=YES #deny_email_enable=YES passwd_chroot_enable=yes userlist_enable=yes chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list ls_recurse_enable=NO secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd delay_failed_login=4 # ----------------- ssl_enable=NO rsa_cert_file=/etc/ssl/private/vsftpd.pem # ----------------- xferlog_enable=YES #xferlog_file=/var/log/vsftpd.log #xferlog_std_format=YES #ascii_upload_enable=YES #ascii_download_enable=YES # ----------------- dirmessage_enable=YES ftpd_banner=FTP service ready. # ----------------- #idle_session_timeout=600 data_connection_timeout=420 async_abor_enable=YES local_max_rate=0 anon_max_rate=0 Подробную информацию по параметрам сервера vsftpd можно изучить по '''man vsftpd.conf''' \\ Теперь создадим файл - список пользователей, которым будет разрешено покидать свой домашний каталог и ходить по всей файловой системе. В данном случае в него внесём только пользователя user : # echo "user" > /etc/vsftpd.chroot_list Запускаем vsftpd: # /etc/init.d/vsftpd start , проверяем работоспособность FTP-соединения и пробуем что-нибудь записать и прочитать в каталоге /downloads/aria . Для отладки - пробуйте соединяться через утилиту ftp в терминальном режиме и смотрите лог /var/log/vsftpd.log **Настроим aria2**\\ Дальнейшие действия происходят от имени пользователя user. В домашнем каталоге создаём каталог для исполняемых файлов: $ cd $ mkdir bin $ cd bin В нём создаём скрипт aria-dl с параметрами запуска такого вида: #!/bin/bash /usr/bin/aria2c --dir=/downloads/aria --log="" \ --max-concurrent-downloads=1 --continue=true --all-proxy=http://192.168.1.1:3128 \ --max-connection-per-server=1 --max-tries=10 --proxy-method=get \ --max-download-limit=180K --log-level=info --input-file=/home/user/aria-list \ Если вы не используете прокси-сервер, опцию "--all-proxy=http://192.168.1.1:3128" можно удалить. Опция --log="" указывает на файл, в который нужно писать лог, например, для отладки. Если значение пустое, лог не формируется. Сделаем скрипт исполняемым: $ chmod +x aria-dl Теперь в корне домашнего каталога создадим файл '''aria-list''' , куда запишем для проверки какую-нибудь прямую ссылку на маленький по объёму файл. Далее, запустим закачку: $ aria-dl *** Download Progress Summary as of Sun Apr 20 13:36:13 2014 *** ===================================================================== [#1 SIZE:10.2MiB/54.4MiB(18%) CN:1 SPD:170.0KiBs ETA:04m26s] FILE: /downloads/aria/base54.tgz --------------------------------------------------------------------- *** Download Progress Summary as of Sun Apr 20 13:37:14 2014 *** ===================================================================== [#1 SIZE:20.1MiB/54.4MiB(36%) CN:1 SPD:160.0KiBs ETA:03m39s] FILE: /downloads/aria/base54.tgz . . . Результат загрузки: gid|stat|avg speed |path/URI ===+====+===========+=========================================================== 1| OK| 173.0KiB/s|/downloads/aria/base54.tgz Использованные обозначения: (OK):download completed. Прервать закачку можно через '''Ctrl + c''' Подробнее о параметрах запуска aria можно почитать в '''man aria2c''' или в статье [[Aria2]] == Работа == Заходим на качалку по ssh под учётной записью пользователя user: $ ssh user@192.168.1.20 ''Прим. Адрес качалки 192.168.1.20 взят для примера''\\ Редактируем список файлов и добавляем в него ссылки: user@192.168.1.20 $ nano aria-list Запускаем screen: user@192.168.1.20 $ screen ~$ Запускаем закачку: ~$ aria-dl Наблюдаем, что закачка пошла и примерно оцениваем время до окончания. * Отсоединяемся от виртуальной консоли, путём поочерёдного нажатия двух комбинаций: ''Ctrl + a'' далее ''Ctrl + d'' - будет произведена операция deattach. * Теперь можно совсем отключиться от качалки. Для контроля, можно периодически заходить по ssh на качалку и присоединяться к виртуальной консоли, для чего сначала выясняем номер сессии: user@192.168.1.20 $ screen -ls There is a screen on: 16307.pts-1.downloader (Detached) 1 Socket in /tmp/screens/S-aria. Номер сессии: '''16307'''. Присоединяемся к нему: user@192.168.1.20 $ screen -r 16307 *** Download Progress Summary as of Sun Apr 20 14:29:43 2014 *** ========================================================================== [#416805 81MiB/549MiB(14%) CN:1 DL:170KiB ETA:46m39s] FILE: /downloads/aria/ubuntu-14.04-server-i386.iso --------------------------------------------------------------------------- Для отключения от виртуального терминала (сессии), также используем комбинацию //Ctrl + a// далее //Ctrl + d//. * После окончания закачки, файлы можно скопировать на компьютер по протоколу FTP через: Far или Total Commander - для Windows, или ftp, Midnight Commander или FileZilla - для *nix. В настройках программ ftp-клиентов выбирайте ''пассивный'' режим работы. ===== Дополнительный сервис ===== ==== Оповещение о завершении загрузки файла ==== Последние версии программы aria2c имеют возможность запускать скрипт по какому-то сигналу, например после успешного окончания закачки файла. Если у вас в локальной сети настроена локальная почта или почтовый релей, то можно организовать посылку оповещения по электронке. В каталоге /home/user/bin на качалке, создадим скрипт //hook-complete.sh// с содержимым: #!/bin/bash echo "Complete download: GID: $1, files: $2, path: $3" | /usr/sbin/sendmail -f aria@192.168.1.20 mail_user_login@domain.ru Не забудьте сделать его исполняемым. В скрипте формируется текст, куда подставляются переменные от программы aria: * $1 - идентификационный номер сессии aria, * $2 - номер файла в сессии, * $3 - путь к файлу. и весь текст перенаправляется на адрес //mail_user_login@domain.ru// (взят в качестве примера) через локальный MTA. Отправитель: //aria@192.168.1.20// Теперь, открываем на редактирование aria-dl и вставляем такой параметр: --on-download-complete=/home/user/bin/hook-complete.sh - он даёт указание запустить скрипт '''hook-complete.sh''' после успешной загрузки. ==== Удалённое управление aria2 ==== В новых версиях aria2 имеется возможность удалённо управлять работой программы. Атор не пользовался этой функцией и она пока не описана в данной статье. Раздел ждёт своего автора ;-) ==== Смотрите также ==== * [[http://www.nixzeya.ru.net/forum/index.php?topic=343.0| Обсуждение статьи на форуме]] * **man //aria2c//**, [[Aria2]] * **man //vsftpd.conf//** * **man //screen//**, [[screen]]