Установка MoniTorrent на WD MyCloud with OMV
Leliil edited this page 2017-10-26 19:55:04 +07:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.


Для удобной работы с файловой системой (распаковка архивов, создание папок и т.п.) через GUI можно использовать WinSCP или FileZilla.

Исходная система:

$ uname -a
Linux MyCloud 3.2.68 #7 SMP Wed Apr 1 18:37:42 UTC 2015 armv7l GNU/Linux
$ dpkg -l | grep openmediavault
ii openmediavault 2.2.13 all Open network attached storage solution
ii openmediavault-minidlna 1.1 all OpenMediaVault miniDLNA (DLNA server) plugin
ii openmediavault-omvextrasorg 1.34 all OMV-Extras.org Package Repositories for OpenMediaVault
ii openmediavault-transmissionbt 1.4 all OpenMediaVault Transmission (BitTorrent client) plugin.

В поставке отсутствует systemd, так что выкручиваемся с автозапуском через sysvinit.


Подготовительный этап:

Управлять версиями python будем с помощью утилиты pyenv. Ставим необходимые пакеты для ее корректной установки и дальнейшей сборки python из исходников:

apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev libncursesw5-dev xz-utils php5-curl curl git

Устанавливаем сам pyenv и обновляем его:

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
pyenv update

Если ругнулось на неизвестную команду pyenv, то надо добавить в профиль .bashrc следующее (подробнее, а так же для других шеллов, в Wiki проекта pyenv):

export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Подтягиваем изменения:

source .bashrc

Далее ставим последнюю версию python (3.6.0 на момент написания):

pyenv install 3.6.0

На этапе установки может вывалиться ошибка об отсутствии свободного места (т.к. pyenv сначала выкачивает исходники указанной версии python, а потом билдит его), тогда можно переопределить папку tmp для текущей сессии (!ВАЖНО! папка должна быть смонтирована без флага noexec):

export TMPDIR="/media/tmp"

После того, как установили нужную версию python, создадим отдельный virtualenv для MT:

pyenv 3.6.0 monitorrent

Если на любом из этих этапов возникли какие-либо сложности, то сначала смотрим Wiki проекта pyenv.


Теперь можно переходить к запуску самого MT.

Выкачиваем последний релиз и распаковываем его (пример: /root/monitorent).

Устанавливаем для этой папки локальный virtualenv, который мы создали ранее:

cd /root/monitorent
pyenv local monitorrent

Проверяем установленную локальную версию python, ставим зависимости по инструкции MT и запускаем сервер:

cd /root/monitorent
pyenv local
pip install -r requirements.txt
python server.py

На этом основной этап установки закончен.


Для автоматического запуска сервера при старте системы создадим отдельный скрипт и добавим его в /etc/init.d.

Скрипт для запуска monitorrent:

#!/bin/sh

### BEGIN INIT INFO
# Provides:          monitorrent
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Daemon for monitorrent server
# Description:       This app can watch for torrent updates.
#                    Github repo https://github.com/werwolfby/monitorrent
### END INIT INFO

# Full path to monitorrent folder (ex: /home/user/monitorrent)
DIR=/root/monitorrent
SERVICE=$DIR/server.py
# Full path to python you want to use for monitorrent (ex: /usr/bin/python)
SERVICE_RUNNER=/root/.pyenv/versions/monitorrent/bin/python
SERVICE_NAME=monitorrent
# Args to pass to a server (ex: "--debug")
SERVICE_ARGS=""


# This next line determines what user the script runs as.
SERVICE_USER=root

# The process ID of the script when it runs is stored here:
PIDFILE=/var/run/$SERVICE_NAME.pid

. /lib/lsb/init-functions

do_start () {
  log_daemon_msg "Starting $SERVICE_NAME service"
  start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $SERVICE_USER --chuid $SERVICE_USER --chdir $DIR --exec $SERVICE_RUNNER -- $SERVICE $SERVICE_ARGS
  log_end_msg $?
}
do_stop () {
  log_daemon_msg "Stopping $SERVICE_NAME service"
  start-stop-daemon --stop --pidfile $PIDFILE --retry 10
  log_end_msg $?
}
do_uninstall() {
  echo -n "Uninstall "$SERVICE_NAME" service? That cannot be undone. [yes|No] "
  local SURE
  read SURE
  if [ "$SURE" = "yes" ]; then
    stop
    rm -f "$PIDFILE"
    update-rc.d -f "$SERVICE_NAME" remove
    rm -fv "$0"
  fi
}

case "$1" in
  start|stop)
    do_${1}
    ;;

  restart|reload|force-reload)
    do_stop
    do_start
    ;;

  uninstall)
    do_${1}
    ;;

  status)
    status_of_proc "$SERVICE_NAME" "$SERVICE" && exit 0 || exit $?
    ;;

  *)
    echo "Usage: /etc/init.d/$SERVICE_NAME {start|stop|restart|uninstall|status}"
    exit 1
    ;;

esac
exit 0

!ВАЖНО! Не забудьте поменять значения переменных DIR=, SERVICE_RUNNER= и SERVICE_USER= на свои. При необходимости, можно указать аргументы для запуска сервера в переменной SERVICE_ARGS=

Установим этому скрипту права на исполнение:

chmod +x /etc/init.d/monitorrent

Добавим его для автозапуска:

update-rc.d monitorrent defaults 90 20

После перезагрузки устройства, статус сервера можно проверить командой service monitorrent status.