Содержание
Автору надоело сутками гонять свой достаточно мощный компьютер для операции скачивания файлов, поэтому было принято решение поднять из хлама старенький маломощный компьютер, дать ему вторую жизнь - сделать "качалку" файлов.
Дано: маломощный старенький компьютер, желание организовать простенькую качалку файлов (не торрент).
Дополнительно: предполагается, что компьютер качалки будет работать в домашней сети и подключаться к Интернету через маршрутизатор.
Уровень подготовки пользователя: выше начинающего, умение работать в консоли.
Решение:
Особенности выбора железа для этих целей можно почитать в отдельной статье Выбор платформы для домашних серверов или "качалок"
Платформа
Автор для этой задачи выбрал системник 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 в любимом редакторе. Для нашей цели опции и параметры будут иметь такой вид:
- 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 имеется возможность удалённо управлять работой программы. Атор не пользовался этой функцией и она пока не описана в данной статье.
Раздел ждёт своего автора