четверг, 14 октября 2010 г.

Western Digital My Book World Edition II: настройка, установка rtorrent

На этот раз я разбирался с устройством, которое декларирует себя как NAS. До взрослого NAS-а ему далековато, но кое что все же коробочка может.

Итак, что я сделал для использования этого хозяйства? Работает на linux, архитектура arm, есть сайт, с которого стоит начать знакомство с внутренностями после покупки: http://mybookworld.wikidot.com/.

Первым делом я подключил nfs, в "белой" редакции это делается через веб-интерфейс. Затем включил доступ по ssh. С ssh надо быть осторожным, если ваша сеть не является закрытой. Да и в таком случае лучше быть осторожным ;).

По-умолчанию коробочка запускает одного демона nfsd, в рекомендациях по производительности написано это число поменять на то, что будет лучше для вас. Я решил, что 1 - мало по любому, поэтому поставил сразу 4. Делается это следующим образом:

1. Заходим по ssh на коробочку (root'ом с логином welc0me):

kilork@phoenix ~ $ ssh wdmybookip -l root
root@wdmybookip's password: 

~ # 

2. Редактируем /etc/init.d/S80nfsd:

~ # vi /etc/init.d/S80nfsd

Строку
/usr/sbin/rpc.nfsd

заменяем на
/usr/sbin/rpc.nfsd 4

Вместо 4 можно поставить ваше любимое число. Ну или можно этого не делать, мне кажется лучше, когда демонов больше, но конкретных замеров я не проводил на одновременную работу с коробочкой при разном числе демонов.

Далее, по инструкции ставим на коробочку пакетный менеджер ipkg. Для установки rtorrent достаточно сделать:
/opt/bin/ipkg install rtorrent

Далее, запуск через:
/opt/bin/rtorrent

Настройка в файле .rtorrent.rc. Вот мой:
directory = /shares/Public
session = /shares/Public/session
schedule = watch_directory,5,5,load_start=/shares/Public/torrent/*.torrent
port_range = 40890-40890
#port_random = no
#check_hash = yes
session_save = yes
encryption = allow_incoming,enable_retry,prefer_plaintext
use_udp_trackers = no
dht = auto
dht_port = 6881
encoding_list = UTF-8
bind = wdmybookip
ip = external_ip
scgi_port = localhost:5000
upload_rate = 100
download_rate = 1000
max_peers = 30
max_uploads = 10
max_uploads_global = 20
max_downloads_global = 60
send_buffer_size = 1M
receive_buffer_size = 1M
max_memory_usage = 128M

wdmybookip и external_ip - адрес коробочки в локальной сети и адрес внешний. Порты 40890 и 6881 должны быть проброшены с внешнего адреса на коробочку.

Вот и все, можно скачивать и сохранять пентабайты данных?

К сожалению, все не так просто. Дело в том, что метод соединения по-умолчанию через epoll у меня не заработал, и два - падает на больших торрентах. Обе проблемы известные, первая решается передачей параметра окружения для выбора метода select, вторая - через компиляцию libtorrent. Первое весьма просто:
export RTORRENT_POLL=select
/opt/bin/rtorrent

А вот второе уже сложнее. Для этого нам понадобится на другой машине выкачать репозитории ipkg и самостоятельно все собрать/поправить. Я сделал скрипт, который все делает, главное, на что надо обратить внимание - это удаление define'ов USE_EPOLL и USE_MADVISE:

#!/bin/bash
mkdir wd
cd wd
svn co http://svn.nslu2-linux.org/svnroot/optware/trunk optware
cd optware
make cs05q1armel-target
cd cs05q1armel
make directories ipkg-utils toolchain
make libtorrent
cd builds/libtorrent
sed -i '/USE_EPOLL/ d;/USE_MADVISE/ d' config.h
make
cd -
make libtorrent-ipk
mv builds/libtorrent*-1_arm.ipk builds/libtorrent.ipk

Полученый файл wd/optware/cs05q1armel/builds/libtorrent.ipk необходимо скопировать на коробочку, после чего на ней уже запустить команду:
/opt/bin/ipkg install path/to/libtorrent.ipk
.

Теперь все хорошо и запускать можно без всяких переменных окружения: /opt/bin/rtorrent. С чем я всех и поздравляю.

З.Ы. Скачать готовый скрипт и пакет.

2 комментария:

Анонимный комментирует...

скрипт на моем UBuntu не работает. Готовый файл не ставится
ipkg install /DataVolume/Public/libtorrent.ipk
Installing libtorrent (0.12.6-1) to root...
Nothing to be done
Successfully terminated.
Collected errors:
Package libtorrent md5sum mismatch. Either the ipkg or the package index are corrupt. Try 'ipkg update'.

Unknown комментирует...

Скорее всего, нужная библиотека уже поставлена из другого иточника. Можете попробовать удалить библиотеку, затем поставить из ipk. Либо просто руками заменить нужные so файлы.