Torrent
rtorrent + ruTorrent + HTTPRPC + scgi_local
На домашнем сервере запилил себе rtorrent+ruTorrent. Сначала делал по старинке — через mod_scgi. Потом обнаружил, что ruTorrent периодически жалуется, что, дескать, «rtorrent не отвечает». В интернетах утверждают, что связаны эти грабли с тем, что для mod_scgi нынешние скорости закачки (а следовательно, и обновления информации) зело велики и оно не справляется. Не то что бы это сильно влияло на функционал, но ведь косячок-с налицо. Поэтому решил с этим побороться. Для борьбы рекомендуется использовать специальный плагин для ruTorrent, который называется HTTPRPC.
Установка плагина нехитрая — нужно просто скопировать папку плагина в подкаталог plugins внутри каталога ruTorrent. После этого можно отключить в конфигах апача модуль mod_scgi (ежели был подключён) и убрать строку
Я решил пойти ещё дальше. Вычитал, что работа через сетевой сокет (даже если он висит на localhost) — это «несекурненько». И есть возможность организовать обмен информацией между rtorrent и ruTorrent через файловый сокет. Для этого требуется в конфиге rtorrent вписать такое:
Где /mnt/storage0/sys/tmp/rtorrent-rpc.socket — путь к файлу сокета.
После перезапуска rtorrent будет создан файл /mnt/storage0/sys/tmp/rtorrent-rpc.socket
Чтобы ruTorrent вкурил, что ему теперь надо работать не через сетевой сокет, а через файловый, нужно в конфиге config.php от ruTorrent изобразить следующее:
$scgi_host = "unix:///mnt/storage0/sys/tmp/rtorrent-rpc.socket";
Строчку
ОСТАВЛЯЕМ КАК ЕСТЬ. То есть, её не трогаем.
После этого запускаем rtorrent, перезапускаем апач (если вносились изменения в его конфиг) и наслаждаемся.
У меня ещё возникли грабли с тем, что права на создаваемый сокет не позволяли туда писать пользователю www, от которого работает апач. Пришлось немного доработать скрипт запуска rtorrent.
Добавил в rc.conf переменную rtorrent_socket:
А в скрипте запуска добавил проверку на существование сокета при запуске rtorrent, и если сокет существует, то меняем ему владельца на rtorrent:www. В целом скрипт запуска rtorrent выглядит так (нужные строки, относящиеся к правам на файловый сокет выделены красным):
#!/bin/sh # PROVIDE: rtorrent # REQUIRE: NETWORKING SERVERS # BEFORE: DAEMON # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable rtorrent at startup # rtorrent (bool): Set to "NO" by default. # Set it to "YES" to enable rtorrent # rtorrent_user (str): Set to user running rtorrent # (default 'p2p') # rtorrent_home (str): Set to home directory of user running rtorrent # (default /home/${rtorrent_user}) . /etc/rc.subr name="rtorrent" rcvar=rtorrent_enable load_rc_config $name rtorrent_enable=${rtorrent_enable:-"NO"} rtorrent_user=${rtorrent_user:-"rtorrent"} rtorrent_home=${rtorrent_home:-"/home/$rtorrent_user"} rtorrent_socket=${rtorrent_socket:-"/tmp/rtorrent-rpc.socket"} required_dirs=${rtorrent_home} required_files="${rtorrent_home}/.rtorrent.rc" start_cmd="${name}_start" stop_cmd="${name}_stop" rtorrent_start() { if [ ! -f /var/run/${name}.run ] then cd ${rtorrent_home} su ${rtorrent_user} -c "/usr/local/bin/screen -dmS rtorrent_init /usr/local/bin/rtorrent" touch /var/run/${name}.run echo "Started ${name}." else echo "${name} seems to be already running — remove /var/run/${name}.run manually if needed." fi sleep 3 if [ -e ${rtorrent_socket} ] then chown rtorrent:www ${rtorrent_socket} fi } rtorrent_stop() { if [ -f /var/run/${name}.run ] then kill -SIGINT `ps -xa| awk '/rtorrent/ && ! /rtorrent_init/ && ! /stop/ { print $1 }'` rm -f /var/run/${name}.run echo "Stopped ${name}." else echo "${name} doesn't seem to be running — create /var/run/${name}.run if needed." fi } run_rc_command "$1"
sleep 3 добавлен, чтобы дать возможность rtorrent запуститься и создать сокет. У меня в роли сервера комп слабенький, система стоит на флэшке, поэтому иногда процесс создания сокета требует секунду-другую.