Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

создание_aria2-качалки_на_базе_выделенного_компьютера [2015/03/08 06:55] (текущий)
vovka Перенос со старой wiki
Строка 1: Строка 1:
 +Автору надоело сутками гонять свой достаточно мощный компьютер для операции скачивания файлов,​ поэтому было принято решение поднять из хлама старенький маломощный компьютер,​ дать ему вторую жизнь - сделать "​качалку"​ файлов. ​
 +
 +**Дано:​** маломощный старенький компьютер,​ желание организовать простенькую качалку файлов (не торрент).\\
 +**Дополнительно:​** предполагается,​ что компьютер качалки будет работать в домашней сети и подключаться к Интернету через маршрутизатор.\\
 +**Уровень подготовки пользователя:​** выше начинающего,​ умение работать в консоли.\\
 +**Решение:​**\\
 +
 +Особенности выбора железа для этих целей можно почитать в отдельной статье [[Выбор платформы для домашних серверов или "​качалок"​]]
 +
 +
 +==== Платформа ====
 +Автор для этой задачи выбрал системник 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 Гб для <color blue>/</​color>​
 +  * 1,5...2 Гб для <color blue>/​var</​color>​
 +  * 500...600 Мбайт для раздела подкачки (указано для объёма памяти в 256Мбайт)
 +  * остальное пространство отдаётся под выделенный раздел для хранилища скачиваемых файлов и монтируется в <color blue>/​downloads</​color>​
 +
 +Примерная работа с качалкой будет проходить так:
 +  - Пользователь,​ на своём компьютере ищет и формирует список прямых ссылок на скачиваемые файлы.
 +  - Далее заходит на качалку по ssh и копирует список ссылок в файл.
 +  - Запускает screen для фонового выполнения задачи,​ а потом запускает скрипт с параметрами для aria. Пользователь отключается от виртуальной консоли screen.
 +  - Идёт процесс скачивания файлов из списка. Пользователь периодически заходит по ssh на сервер,​ присоединяется к виртуальной консоли и смотрит результат.
 +  - Когда процесс закачки всех завершился,​ пользователь по протоколу ftp копирует на свой компьютер скаченные файлы.
 +
 +
 +==== Установка ПО ====
 +Установка дистрибутива и настройка сетевого подключения особенностей не имеет и в статье не описана. ​
 +
 +Для работы с программой aria заводим в системе нового пользователя,​ например **user** и сразу ему даём пароль:​
 +<​code>​
 + # useradd -c "​download_user"​ -m -s /bin/bash user
 + # passwd user
 +</​code>​
 +
 +Ставим дополнительное ПО: 
 +  * //​openssh-server//​ - для организации удалённого управления ставим,​
 +  * //screen// - менеджер виртуальных консолей,​ для возможности запуска фоновых заданий,​
 +  * //vsftpd// - ftp-сервер для копирования файлов из качалки на компьютер,​
 +  * //aria2// - собственно менеджер закачек.
 +
 +<​code>​
 + # apt-get install ssh screen vsftpd aria2
 +</​code>​
 +
 +==== Настройка ПО ====
 +Для начала настроим инфраструктуру каталогов. Предполагается,​ что пользователь user будет работать с качалкой единолично. Создадим каталог,​ куда будут скачиваться файлы и настроим права:
 +<​code>​
 + # mkdir -p /​downloads/​aria
 + # chmod 775 /​downloads/​aria
 + # chown user:user /​downloads/​aria
 +</​code>​
 +Первая команда создаёт каталоги,​ а вторая - изменяет права на каталог,​ третья - изменяет хозяина каталога на пользователя //user// и группу //user//
 +Стоит попробовать зайти по ssh под именем user и проверить права доступа,​ создав в каталоге /​downloads/​aria какой-нибудь файл или каталог.
 +
 +**Настроим FTP-сервер**\\
 +Для начала остановим демон:
 +<​code>​
 + # /​etc/​init.d/​vsftpd stop
 +</​code>​
 +Сделаем резервную копию конфигурационного файла:
 +<​code>​
 + # cd /etc
 + # cp vsftpd.conf vsftpd.conf.bak
 +</​code>​
 +, и откроем на редактирование vsftpd.conf в любимом редакторе. Для нашей цели опции и параметры будут иметь такой вид: ​
 +
 +<file bash 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
 +
 +</​file>​
 +Подробную информацию по параметрам сервера vsftpd можно изучить по '''​man vsftpd.conf'''​ \\
 +Теперь создадим файл - список пользователей,​ которым будет разрешено покидать свой домашний каталог и ходить по всей файловой системе. В данном случае в него внесём только пользователя user : 
 +<​code>​
 + # echo "​user"​ > /​etc/​vsftpd.chroot_list
 +</​code>​
 +Запускаем vsftpd:
 +<​code>​
 + # /​etc/​init.d/​vsftpd start
 +</​code>​
 +, проверяем работоспособность FTP-соединения и пробуем что-нибудь записать и прочитать в каталоге /​downloads/​aria . Для отладки - пробуйте соединяться через утилиту ftp в терминальном режиме и смотрите лог /​var/​log/​vsftpd.log
 +
 +
 +**Настроим aria2**\\
 +Дальнейшие действия происходят от имени пользователя user. В домашнем каталоге создаём каталог для исполняемых файлов:​
 +<​code>​
 + $ cd 
 + $ mkdir bin
 + $ cd bin
 +</​code>​
 +В нём создаём скрипт aria-dl с параметрами запуска такого вида:
 +
 +<file bash 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 \
 +</​file>​
 +
 +Если вы не используете прокси-сервер,​ опцию <​code>"​--all-proxy=http://​192.168.1.1:​3128"</​code>​ можно удалить. Опция <​code>​--log=""</​code>​ указывает на файл, в который нужно писать лог, например,​ для отладки. Если значение пустое,​ лог не формируется. ​
 +
 +Сделаем скрипт исполняемым:​
 +<​code> ​
 + $ chmod +x aria-dl ​
 +</​code> ​
 +Теперь в корне домашнего каталога создадим файл '''​aria-list'''​ , куда запишем для проверки какую-нибудь прямую ссылку на маленький по объёму файл. Далее, запустим закачку:​
 +<​code>​
 + $ 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
 +.
 +.
 +.
 +</​code>​
 +Результат загрузки:​
 +<​code>​
 +gid|stat|avg speed  |path/URI
 +===+====+===========+===========================================================
 +  1|  OK| 173.0KiB/​s|/​downloads/​aria/​base54.tgz
 +
 +Использованные обозначения:​
 + ​(OK):​download completed.
 +</​code>​
 +
 +Прервать закачку можно через '''​Ctrl + c'''​
 +
 +Подробнее о параметрах запуска aria можно почитать в '''​man aria2c'''​ или в статье [[Aria2]]
 +
 +
 +== Работа ==
 +Заходим на качалку по ssh под учётной записью пользователя user:
 +<​code>​
 + $ ssh user@192.168.1.20
 +</​code>​
 +''​Прим. Адрес качалки 192.168.1.20 взят для примера''​\\
 +
 +Редактируем список файлов и добавляем в него ссылки:​
 +<​code>​
 + ​user@192.168.1.20 $ nano aria-list
 +</​code>​
 +
 +Запускаем screen:
 +<​code>​
 + ​user@192.168.1.20 $ screen
 + ~$
 +</​code>​
 +Запускаем закачку:​
 +<​code>​
 + ~$ aria-dl
 +</​code>​
 +Наблюдаем,​ что закачка пошла и примерно оцениваем время до окончания. ​
 +
 +  * Отсоединяемся от виртуальной консоли,​ путём поочерёдного нажатия двух комбинаций:​ ''​Ctrl + a''​ далее ''​Ctrl + d''​ - будет произведена операция deattach.
 +  * Теперь можно совсем отключиться от качалки. Для контроля,​ можно периодически заходить по ssh на качалку и присоединяться к виртуальной консоли,​ для чего сначала выясняем номер сессии:​
 +<​code>​
 + ​user@192.168.1.20 $ screen -ls
 +
 +  There is a screen on:
 + 16307.pts-1.downloader (Detached)
 + 1 Socket in /​tmp/​screens/​S-aria.
 +</​code>​
 +Номер сессии:​ '''​16307'''​. Присоединяемся к нему:
 +<​code>​
 + ​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
 +---------------------------------------------------------------------------
 +</​code>​
 +Для отключения от виртуального терминала (сессии),​ также используем комбинацию //Ctrl + a// далее //Ctrl + d//.
 +
 +  * После окончания закачки,​ файлы можно скопировать на компьютер по протоколу FTP через: Far или Total Commander - для Windows, или ftp, Midnight Commander или FileZilla - для *nix. В настройках программ ftp-клиентов выбирайте ''​пассивный'' ​ режим ​ работы.
 +
 +
 +===== Дополнительный сервис =====
 +==== Оповещение о завершении загрузки файла ====
 +Последние версии программы aria2c имеют возможность запускать скрипт по какому-то сигналу,​ например после успешного окончания закачки файла. Если у вас в локальной сети настроена локальная почта или почтовый релей, то можно организовать посылку оповещения по электронке. ​
 +
 +В каталоге /​home/​user/​bin на качалке,​ создадим скрипт //​hook-complete.sh//​ с содержимым: ​
 +
 +<file bash 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
 +</​file>​
 +
 +
 +Не забудьте сделать его исполняемым.
 +
 +В скрипте формируется текст, куда подставляются переменные от программы aria: 
 +  * $1 - идентификационный номер сессии aria,
 +  * $2 - номер файла в сессии,​
 +  * $3 - путь к файлу.
 +и весь текст перенаправляется на адрес //​mail_user_login@domain.ru//​ (взят в качестве примера) через локальный MTA. Отправитель:​ //​aria@192.168.1.20//​
 +
 +Теперь,​ открываем на редактирование aria-dl и вставляем такой параметр: ​
 +<​code>​
 + ​--on-download-complete=/​home/​user/​bin/​hook-complete.sh
 +</​code>​
 +- он даёт указание запустить скрипт '''​hook-complete.sh'''​ после успешной загрузки.
 +
 +
 +==== Удалённое управление aria2 ====
 +В новых версиях aria2 имеется возможность удалённо управлять работой программы. Атор не пользовался этой функцией и она пока не описана в данной статье. ​
 +
 +Раздел ждёт своего автора ;-)
 +
 +
 +==== Смотрите также ====
 +  * [[http://​nix.zeya.org/​forum/​index.php?​topic=343.0| Обсуждение статьи на форуме]]
 +  * **man //​aria2c//​**,​ [[Aria2]]
 +  * **man //​vsftpd.conf//​**
 +  * **man //​screen//​**,​ [[screen]]
  
Печать/экспорт