Originally Posted by
kanSki
то есть у меня неправильный стартер для него.
Скорее всего, у Вас таки были неправильно настроенные директории для него.
Originally Posted by
kanSki
И вы еще писали, что под админом не стоит запускать, так понимаю еще не конец настраивания.
0) Если какой-либо из нижеописанных шагов привел к неудаче, или выводу сообщений об ошибках, дальнейшие шаги не предпринимать. Т.к. пишу я "из головы", вполне возможно, что что-нибудь написал неправильно или забыл.
0+) Если rtorrent еще не стоит, сказать ipkg install rtorrent, создать его рабочие директории, так
mkdir -p /opt/share/torrent/dl
mkdir -p /opt/share/torrent/work
mkdir -p /opt/share/torrent/session
если уже стоит, то ipkg upgrade rtorrent
В любом случае советую заменить бинарники rtorrent на соотв. из корневого поста.
1) Сказать
ipkg install adduser
это доставит пакет adduser (если он еще не стоит), который позволяет добавлять в систему пользователей с несколько большим комфортом, нежели чем редактирование passwd руками. Если уже есть - ipkg так и скажет.
2) mkdir -p /opt/home/p2p
сделать домашний каталог пользователю p2p
3) adduser --home /opt/home/p2p p2p
добавить пользователя p2p. Спросит пароль - вводите на Ваше усмотрение, он Вам в дальнейшем не понадобится.
4) chown p2p /opt/home/p2p
chown p2p /opt/share/torrent/dl
chown p2p /opt/share/torrent/work
chown p2p /opt/share/torrent/session
chmod a+r /opt/etc/rtorrent.conf
chmod a+x /opt/bin/rtorrent
передать во владение пользователю p2p его home каталог и рабочие директории rtorrent, разрешить всем читать файл конфигурации rtorrent,
разрешить всем выполнять rtorrent. Последнее необходимо, если Вы таки прислушались к совету из стартового постинга, и поменяли бинарники rtorrent на мои.
5) Файл /opt/etc/init.d/S99rtorrent оформляем следующим образом:
Code:
#!/bin/sh
user="p2p"
config="/opt/etc/rtorrent.conf"
options="-n -o import=/opt/etc/rtorrent.conf"
base="/opt/share/torrent"
srnname="rtorrent"
logfile="/opt/var/log/rtorrentInit.log"
PATH=/opt/bin:/opt/sbin:/usr/bin:/sbin:/bin:/usr/sbin
DESC="rtorrent"
NAME=rtorrent
DAEMON=$NAME
SCRIPTNAME=/etc/init.d/$NAME
# Do not proceed unless some apps are available.
test -x /opt/bin/screen || ( echo "screen not found." | tee -a "$logfile" >&2 ; exit 2 )
test -x /opt/bin/su -o -x /bin/su || ( echo "su not found." | tee -a "$logfile" >&2 ; exit 2 )
checkcnfg() {
exists=0
for i in `echo "$PATH" | tr ':' '\n'` ; do
if [ -f $i/$NAME ] ; then
exists=1
break
fi
done
if [ $exists -eq 0 ] ; then
echo "cannot find rtorrent binary in PATH $PATH" | tee -a "$logfile" >&2
exit 3
fi
if ! [ -r "${config}" ] ; then
echo "cannot find readable config ${config}. check that it is there and permissions are appropriate" | tee -a "$logfile" >&2
exit 3
fi
session=`getsession "$config"`
if ! [ -d "${session}" ] ; then
echo "cannot find readable session directory ${session} from config ${config}. check permissions" | tee -a "$logfile" >&2
exit 3
fi
}
d_start() {
[ -d "${base}" ] && cd "${base}"
stty stop undef && stty start undef
su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "screen -dm -S ${srnname} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
# this works for the screen command, but starting rtorrent below adopts screen session gid
# even if it is not the screen session we started (e.g. running under an undesirable gid
#su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "sg \"$group\" -c \"screen -fn -dm -S ${srnname} 2>&1 1>/dev/null\"" ${user} | tee -a "$logfile" >&2
su -c "screen -S "${srnname}" -X screen rtorrent ${options} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
}
d_stop() {
session=`getsession "$config"`
if ! [ -s ${session}/rtorrent.lock ] ; then
return
fi
pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"`
if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn't belong to another process
kill -s INT ${pid}
fi
}
getsession() {
session=`awk '/^[[:space:]]*session[[:space:]]*=[[:space:]]*/{print($3)}' "$config"`
echo $session
}
checkcnfg
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
restart|force-reload)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
Замечу, что данный скрипт предполагает, что пакеты procps, grep, gawk и screen установлены в системе. Если это не так, не забудьте сказать
ipkg install procps
ipkg install grep
ipkg install screen
ipkg install gawk
Так же не забудьте, что переводы каретки должны быть в дОлжном виде.
6) В файл /tmp/local/root/.profile добавляем строчки для нормальной работы в консоли rtorrent. Полностью файл у меня выглядит так:
Code:
export TERMINFO="/opt/share/terminfo"
export TERM="xterm"
alias rt='su -c "screen -r" p2p'
chmod a+rw `tty`
stty start undef
stty stop undef
После изменения не забыть сказать flashfs save && flashfs commit && flashfs enable - данный файл во флеш памяти находится, без данных команд все изменения исчезнут после перезагрузки. Собственно, это должно быть "на автомате" - если меняете что-либо не на /opt - не забыть сохраниться.
7) Копируем данный файл пользователю p2p
cp /tmp/local/root/.profile /opt/home/p2p/.profile
chown p2p /opt/home/p2p/.profile
8) Проверяем результаты. Для начала убедимся, что пользователь завелся, и rtorrent под ним работает. Так:
su p2p
/opt/bin/rtorrent -n -o import=/opt/etc/rtorrent.conf
Если консоль показалась - ^Q.
завершить telnet сессию (или ssh, если его используете). Сие необходимо, чтобы написанное в файле .profile вступило в действие.
9) Залогиниться снова. На всякий случай - mc не запускать!
Последовательно сказать
/opt/etc/init.d/S99rtorrent start
rt
Если консоль показалась - сказать ^A ^D.
Все, Вы отсоединились от консоли, но rtorrent продолжает работать.
10) Убедиться, что в файле /usr/tmp/local/.files есть следующие строчки:
Code:
/etc/passwd
/etc/group
При необходимости отредактировать и сказать flashfs save && flashfs commit && flashfs enable. Если этого не сделать (или, например, если в /usr/tmp/local/.files будут отсутствовать строчки /etc/passwd и /etc/group) то только что заведенный пользователь при перезагрузке исчезнет.
11) Теперь можно перегрузить роутер и убедиться, что все заводится и автоматом тоже.
UPD. На всякий случай добавил вложения с конфигурационными файлами. Обращаю, однако, внимание, что настройки в rtorrent.conf нужно подбирать индивидуально, они зависят от ширины Вашего канала, нагрузки, используемых трекеров и т.п.