Консольный DC++ клиент

Posted: 2015-04-16 in IT
Метки:

Нашёл тут обалденную штуку: ncdc (http://dev.yorhel.nl/ncdc) — консольный DC++ клиент, написанный на NCurses.
В отличие от привычных GUI-приложений, кушаюших память как не в себя и довольно херовенько работающих при большом числе одновременно подключенных хабов, эта тулза весом 200 Кб из репозитария просто шокирует своей шустростью и неприхотливостью.

Итак, если вам надо вершить добро в ритме примерно 30-80 Гбайт/сутки (то есть только отдавать всякие дистрибы линуксов по протоколу DirectConnect), держать при этом аптаймы, и уметь работать как сервис, то эта программа — однозначно лучший выбор, то, что доктор прописал.

В тёплой ламповой федоре ncdc есть прямо в репозитории, ставим c помощью yum. Не забываем поставить screen.
Вообщем, вот русский ман: http://homenas.ru/forum/viewtopic.php?f=7&t=6
Делаем пользователя dc, от имени которого оный ncdc будет работать, запустим его и с помощью мануала настроим и добавим хабы. Не забываем на вкладках хабов прописывать /hset autoconnect true. Когда всё прописали (ник, активный режим, лимит скорости отдачи, хабы), то пишем небольшой скрипт запуска (у меня логи вытащены в /tmp отдельно симлинком, мне так удобнее):

#!/bin/bash

mkdir -p /tmp/ncdc/logs
chmod 700 /tmp/ncdc
find ~/.ncdc/logs -type f -name "*.log" -delete
screen -dmS DC ncdc

Пропишем в автозапуск. Есть два метода.
Первый — добавить запись вида su — dc -c «путь-к-скрипту» в /etc/rc.d/rc.local
Это классический путь, и им всегда можно воспользоваться.
Второй — написать свой юнит для SystemD.
Читаем статейку: http://habrahabr.ru/company/centosadmin/blog/255845/,
пишем юнит:

# cat /etc/systemd/system/ncdc.service
[Unit]
Description=NCDC DC++ Client
After=network.target

[Service]
Type=forking

User=dc
Group=dc

ExecStart=/home/dc/start_dc.sh
ExecStop=/usr/bin/pkill ncdc
ExecReload=/home/dc/start_dc.sh
TimeoutSec=30

[Install]
WantedBy=multi-user.target

Плюсов в сравнении с запуском из rc.local масса — тут и более детальный мониторинг процесса, и своя cgroup, и запуск параллельно другим сервисам (но не ранее поднятия сети), и SELinux-контекст system_u:system_r:unconfined_service_t для процесса.
Смотрим:

# systemctl status ncdc
● ncdc.service - NCDC DC++ Client
Loaded: loaded (/etc/systemd/system/ncdc.service; enabled)
Active: active (running) since Чт 2015-04-16 00:56:47 MSK; 1h 20min ago
Main PID: 21083 (screen)
CGroup: /system.slice/ncdc.service
├─21083 SCREEN -dmS DC ncdc
└─21084 ncdc

# ps afxuZ | grep dc
system_u:system_r:init_t:s0 dc 21083 0.0 0.0 6172 2740 ? Ss 00:56 0:00 SCREEN -dmS DC ncdc
system_u:system_r:unconfined_service_t:s0 dc 21084 1.5 0.6 75612 21088 pts/3 Ssl+ 00:56 1:18 \_ ncdc

Да, чуть посложнее, чем прямой вызов скрипта из rc.local, но и плюшек несравненно больше.
SystemD конечно комбайн, но молотит он знатно, так что имеет смысл начинать активно использовать и изучать глубже.

Реклама

Обсуждение закрыто.