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

Дано: маломощный старенький компьютер, желание организовать простенькую качалку файлов (не торрент).
Дополнительно: предполагается, что компьютер качалки будет работать в домашней сети и подключаться к Интернету через маршрутизатор.
Уровень подготовки пользователя: выше начинающего, умение работать в консоли.
Решение:

Особенности выбора железа для этих целей можно почитать в отдельной статье Выбор платформы для домашних серверов или "качалок"

Платформа

Автор для этой задачи выбрал системник 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

Примерная работа с качалкой будет проходить так:

  1. Пользователь, на своём компьютере ищет и формирует список прямых ссылок на скачиваемые файлы.
  2. Далее заходит на качалку по ssh и копирует список ссылок в файл.
  3. Запускает screen для фонового выполнения задачи, а потом запускает скрипт с параметрами для aria. Пользователь отключается от виртуальной консоли screen.
  4. Идёт процесс скачивания файлов из списка. Пользователь периодически заходит по ssh на сервер, присоединяется к виртуальной консоли и смотрит результат.
  5. Когда процесс закачки всех завершился, пользователь по протоколу 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 в любимом редакторе. Для нашей цели опции и параметры будут иметь такой вид:

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 с параметрами запуска такого вида:

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 с содержимым:

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 имеется возможность удалённо управлять работой программы. Атор не пользовался этой функцией и она пока не описана в данной статье.

Раздел ждёт своего автора ;-)

Смотрите также

Печать/экспорт