Skip to content

Установка MoniTorrent на WD MyCloud with OMV

Leliil edited this page Oct 26, 2017 · 1 revision

Для удобной работы с файловой системой (распаковка архивов, создание папок и т.п.) через 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.