IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Пингвинятник (ОС *NIX) (http://www.imho.ws/forumdisplay.php?f=76)
-   -   [FAQ] Deluge (http://www.imho.ws/showthread.php?t=144593)

Plague 26.01.2009 05:20

Deluge
 
народ, требуется запустить deluged автозагрузкой во FreeBSD от обычного пользователя, а не от рута.
проблема в том что ключа типа --user=_____(впиши нужное) сия чУдная софтина не понимает :(
скрипт
Код:

#!/bin/sh
# taken from http://forum.deluge-torrent.org/viewtopic.php?f=7&t=3185
# deluge startup script
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DELUGE="/usr/local/bin/deluge" #replace with actual path if different
WEBDAEMON="/usr/local/bin/deluge"
USER=delugeuser

DELUGEDAEMON="/usr/local/bin/deluged"
DESC1="Deluge Daemon"
DESC2="WebUi"
NAME1="deluged"
NAME2="Deluge webserver"

case "$1" in
        start)
                echo -n "Starting $DESC1 : "
                $DELUGEDAEMON --port=58846 --logfile=$HOME/.config/deluge/deluged.log --loglevel=warning
                echo "$NAME1"
                sleep 2
                echo -n "Starting $DESC2 : "
                $WEBDAEMON --ui web &
                echo "$NAME2"
                ;;
        stop)
                echo -n "Stopping $DESC1 : "
                PIDDELUGE=`ps ax |grep deluged |sed -n 1p |awk '{print $1}'`
                kill $PIDDELUGE
                echo "$NAME1."
                echo -n "Stopping $DESC2 : "
                PIDWEB=`ps ax |grep "deluge --ui web" |sed -n 1p |awk '{print $1}'`
                kill $PIDWEB
                echo "$NAME2."
                ;;
        *)
                N=deluge-daemon
                echo "Usage: $N {start|stop}" >&2

                exit 1
                ;;
esac

exit 0

замечательно работает, пока его ручками пускаешь. а вот как в него прописать юзера под которым оно должно грузиться при загрузке системы?
переменная USER=delugeuser не производит на него никакого впечатления: если пытаюсь пустить скрипт под рутом все это хозяйство рутом и запускается.. :help:

Borland 26.01.2009 09:50

А, к примеру, заюзать что-нить типа sudo? :rolleyes:
(Возможно, конечно, глупость сморозил...:молись: )
Или вот http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/058556.html вроде похожий вопрос...

Plague 26.01.2009 12:39

Цитата:

Сообщение от Borland (Сообщение 1628286)
Возможно, конечно, глупость сморозил...

за исключением, того что ты опять попутал немного, и в данном случае если и прикручивать, то не sudo, а su надо, в целом мысль нормальная, только чего-то не получилось у меня ночью. заменял к примеру
Код:

$DELUGEDAEMON --port=58846 --logfile=$HOME/.config/deluge/deluged.log --loglevel=warning
на
Код:

su delugeuser $DELUGEDAEMON --port=58846 --logfile=$HOME/.config/deluge/deluged.log --loglevel=warning
получал ругательства что-то про :____required____: is missing.

хотя сильно сдается мне, что есть и более элегантное решение (без нагромождений с su), просто я как-то не так строку поиска в гугле набираю... :idontnow:

в варианте по ссылке твоей - юзают suid (бит смены идентификатора юзера: chmos u+s имя_скрипта ). это я попробовал первым делом. не проканало..

Borland 26.01.2009 12:45

Цитата:

Сообщение от Plague (Сообщение 1628349)
это я попробовал первым делом. не проканало

Насколько я понял, там suid предлагается ставить не на скрипт, а на бинарник, который этот скрипт запускает.
Цитата:

most UNIX kernels will
disable users from running scripts as setuid. The most common way
around this is to create a wrapper program around your script. A
wrapper, in this context, is a small program, possibly written in C,
that when executed will simply run your script
Такое вот решение с переподвыподвертом...

Plague 26.01.2009 12:51

не надо suid на бинарник ставить :rolleyes:

FantomIL 26.01.2009 13:16

Plague, А на что ругается конкретно?

По идее рут может менять юзера по su безо всяких ограничений.
Если на пароль ругается, то проверяй permission на su

И разумеется, у того юзера должны быть необходимые привилегии на запуск данного скрипта.

Plague 26.01.2009 13:25

я ж написал. что-то возможно я в строку не дописал.

Цитата:

Сообщение от FantomIL (Сообщение 1628363)
у того юзера должны быть необходимые привилегии на запуск данного скрипта

:contract:
Цитата:

Сообщение от Plague (Сообщение 1628238)
замечательно работает, пока его ручками пускаешь.

но повторяю: я на 99% уверен, что должен быть более правильный способ, без нагромождений с su и suid. ведь далеко не только deluge требуется запускать с правами непривелигированного юзера..

ps. под линух-то в том топике откуда я этот скрипт стянул все нормально вырулили...

FantomIL 26.01.2009 13:40

Ну а если через cron стартовать с ключом @reboot?
Не покатит?

Plague 26.01.2009 13:45

теоретически должно. тож думал на эту тему. :)
но уже просто интересно стало как сие реализуется посредством стандартной системы стартапа. ну ведь должно оно быть! :молись:
угу, мы не ищем лёгких путей :biggrin:

конкретно по deluge - майтейнера данного порта пинают на тему написания стартовых скриптов:
http://groups.google.com/group/muc.l...fa30ebe5f3f25e (только я там нихрена не понял :biggrin:)
и скорей всего в ближайшее время они появятся. просто уже реально интересно стало как данный сабж рулить не в проекции на конкретную софтину, а в принципе..

FantomIL 26.01.2009 13:52

Ну в принципе, можно наваять скрипт, который будет запускать твой скрипт от непривилегированного пользователя и засунуть этот "запускач" в /usr/local/etc/rc.d
Теоретически тоже должно работать
Тока с cron проще будет, IMHO

Plague 26.01.2009 13:57

Цитата:

Сообщение от FantomIL (Сообщение 1628375)
можно наваять скрипт, который будет запускать твой скрипт от непривилегированного пользователя

эмммм. а в чем собственно разница между такой этажеркой и одним скриптом, который пускает сервис от непривелигированного пользователя?
Цитата:

Сообщение от FantomIL (Сообщение 1628375)
засунуть этот "запускач" в /usr/local/etc/rc.d

это понятно. это и есть стартап.
в общем, ребят мне хотелось бы все-таки конкретного кода, а не общетеоретических изысканий... :молись:

FantomIL 26.01.2009 15:07

Цитата:

Сообщение от Plague (Сообщение 1628377)
а в чем собственно разница между такой этажеркой и одним скриптом, который пускает сервис от непривелигированного пользователя

В том, что стартап-сервисы из /usr/local/etc/rc.d/ всегда исполняются от рута, если не ошибаюсь.
Поэтому от рута исполняется "запускач", который запускает твой скрипт от другого пользователя.

Что-то типа:
/usr/local/etc/rc.d/запускач.sh

Код:

su delugeuser delug_start_script.sh
Цитата:

Сообщение от Plague (Сообщение 1628366)
я на 99% уверен, что должен быть более правильный способ, без нагромождений с su и suid.

Правильный способ это написание RC-скрипта и затем манипулировать переменными в \etc\rc.conf:

scriptname_enabled="YES"
scriptname_user="username"


Но самое простое и безгимморное - cron

Plague 27.01.2009 01:05

сделал-таки. через su:
Код:

#!/bin/sh
# taken from http://forum.deluge-torrent.org/viewtopic.php?f=7&t=3185
# Headless deluge startup script
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DELUGE="/usr/local/bin/deluge" #replace with actual path if different
WEBDAEMON="/usr/local/bin/deluge --ui web &"
DELUGEUSER="plague"


DELUGEDAEMON="/usr/local/bin/deluged --port=58846 --logfile=/home/${DELUGEUSER}/.config/deluge/deluged.log --loglevel=warning"
DESC1="Deluge Daemon"
DESC2="WebUi"
NAME1="deluged"
NAME2="Deluge webserver"

case "$1" in
        start)
                echo -n "Starting ${DESC1} : "
                su ${DELUGEUSER} -c "${DELUGEDAEMON}"
                echo "${NAME1}"
                sleep 2
                echo -n "Starting ${DESC2} : "
                su ${DELUGEUSER} -c "${WEBDAEMON}"
                echo "${NAME2}"
                ;;
        stop)
                echo -n "Stopping ${DESC1} : "
                PIDDELUGE=`ps ax |grep deluged |sed -n 1p |awk '{print $1}'`
                kill ${PIDDELUGE}
                echo "${NAME1}."
                echo -n "Stopping ${DESC2} : "
                PIDWEB=`ps ax |grep "deluge --ui web" |sed -n 1p |awk '{print $1}'`
                kill ${PIDWEB}
                echo "${NAME2}."
                ;;
        *)
                N=deluge-daemon
                echo "Usage: $N {start|stop}" >&2

                exit 1
                ;;
esac

exit 0

терь это надо замутить через "левого" юзверя, но это уже отдельная пестня :p

хотя ощущение что можно было обойтись просто переменными - не отступает... :rolleyes:

Цитата:

Сообщение от FantomIL (Сообщение 1628409)
Правильный способ это написание RC-скрипта

а я про что спрашивал? :confused:

Plague 07.10.2010 12:05

народ, хэлп. уже неделю медитирую - нифига понять не могу. самое ужасное, что даже не могу понять в какую сторону копать :confused:

короче. сабж обновился на 1.3.0 (до того я сидел на 1.1.9, то есть 1.2.х я благополучно миновал)
и началась свистопляска. сам демон замечательно стартует и работает. deluge-console тоже фунциклирует. а вот web и гуй работать не хотят. Причем пару раз запустились. но потом видимо, что-то в конфигах не то прописывают и потом работать перестают.
В чем заключается их неработоспособность: сами по себе они запускаются, но не видят демона, и соответственно нифига не отображают..
В логах имеем:
deluged.log (лог демона):
Код:

BadLoginError: Username does not exist
[INFO    ] 17:37:00 rpcserver:223 Deluge client disconnected: Connection was closed cleanly.
[INFO    ] 17:37:00 rpcserver:203 Deluge Client connection made from: 127.0.0.1:25073
[ERROR  ] 17:37:00 rpcserver:265 Username does not exist
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/site-packages/deluge-1.3.0-py2.6.egg/deluge/core/rpcserver.py", line 259, in dispatch
    ret = component.get("AuthManager").authorize(*args, **kwargs)
  File "/usr/local/lib/python2.6/site-packages/deluge-1.3.0-py2.6.egg/deluge/core/authmanager.py", line 87, in authorize
    raise BadLoginError("Username does not exist")
BadLoginError: Username does not exist
и т.д

delugew.log (лог web-морды)
Код:

BadLoginError: Username does not exist
--------------------------------------------------------------------------------
[INFO    ] 17:37:00 client:228 Connection lost to daemon at :58846 reason: Connection was closed cleanly.
[INFO    ] 17:37:00 client:221 Connecting to daemon at :58846..
[INFO    ] 17:37:00 client:125 Connected to daemon at :58846..
[ERROR  ] 17:37:00 client:393 RPCError Message Received!
--------------------------------------------------------------------------------
RPCRequest: daemon.login(, )
--------------------------------------------------------------------------------
  File "/usr/local/lib/python2.6/site-packages/deluge-1.3.0-py2.6.egg/deluge/core/rpcserver.py", line 259, in dispatch
    ret = component.get("AuthManager").authorize(*args, **kwargs)
  File "/usr/local/lib/python2.6/site-packages/deluge-1.3.0-py2.6.egg/deluge/core/authmanager.py", line 87, in authorize
    raise BadLoginError("Username does not exist")

BadLoginError: Username does not exist

Тоесть оно явно не может внутри локалхоста заавторизоваться. Судя, по
Цитата:

RPCRequest: daemon.login(, )
- оно вообще не получает ничего из файла auth. Хотя, записи там есть. и где он лежит оно тоже знает, ибо при затирании оного и перезапуске демона оно его создает.

куда хоть брейкпойнты пихать чтоб поглядеть что где и как оно спрашивает/ищет/получает, и как эти брейкпойнты должны выглядеть? Ну типа, как в php - echo ___; (или var_dump ___; ) exit; .... Тут - змеюка, я с ней не сталкивался доселе. Если требуются еще какие подробности - напишу.

ps. FreeBSD

Hubbitus 07.10.2010 13:15

Для начала посмотри, висит ли демон в процессах до попытки коннекта и после. Такое ощущение что он умирает. Да, не забудь сверить их PID'ы, если висят, вдруг он просто перезапускается.

Plague 07.10.2010 14:07

висит. PID'ы не изменяются

Hubbitus 07.10.2010 16:26

А напрямую телнетом сразу после ошибки законнектиться можно?

Plague 07.10.2010 16:58

а ошибок он на фейсе как бы и не выдает. просто нифига не показывает.
можно. и на 8112 (порт веб-фейса) и на 58846 (порт демона, в который веб-фейс стучаться должен)

я тут щас такую вещь выяснил, про гуёвину: сношу ее конфиги, запускаю (демон отгружен), - запускается. но соответственно, после отгрузки и сервис кладет. это т.н "классический" режим. а если его отключить, тоесть морды - отдельно, демон отдельно, в этом случае оно при загрузке выдает окно запроса подсоединения к демону (который предварительно загружен) - так вот, демон в окне выбора подключения виден, и оно вроде как кажет что оно подключилось (значок меняет) но нифига не показывает... :idontnow:. Бред какой-то.
возвращаю "классический" режим в конфиге, при загруженном демоне оно естественно ругается, потому как видит что демон уже запущен, и предлагает "классический режим" выключить.

Plague 07.10.2010 17:28

стартую демона не скриптом, а руками:
Код:

/usr/local/bin/deluged --port=58846 --logfile=/home/plague/.config/deluge/deluged.log --pidfile=/var/run/deluge/deluged.pid --loglevel=warning
стартует и работает.
стартую веб-морду руками:
Код:

/usr/local/bin/deluge -uweb --logfile=/home/plague/.config/deluge/deluge-web.log --loglevel=warning &
выдаёт:
Код:

Traceback (most recent call last):
  File "/usr/local/bin/deluge", line 8, in <module>
    load_entry_point('deluge==1.3.0', 'console_scripts', 'deluge')()
  File "/usr/local/lib/python2.6/site-packages/deluge-1.3.0-py2.6.egg/deluge/main.py", line 121, in start_ui
    UI(options, args, options.args)
  File "/usr/local/lib/python2.6/site-packages/deluge-1.3.0-py2.6.egg/deluge/ui/ui.py", line 121, in __init__
    config.save()
  File "/usr/local/lib/python2.6/site-packages/deluge-1.3.0-py2.6.egg/deluge/config.py", line 395, in save
    start, end = objects[0]
IndexError: list index out of range

[1]    Exit 1                        /usr/local/bin/deluge -uweb --logfile=/home/plague/.config/deluge/deluge-web.log --loglevel=warning

и падает. :idontnow:

Hubbitus 07.10.2010 19:31

Ну по последней ошибке полюбому надо с трейсом репортить мэйнтэйнерам!

Plague 07.10.2010 19:54

Hubbitus, у меня возникло стойкое ощущение (после экспериментов с запуском гуя) что запуск веб-морды должен тоже подразумевать автостарт демона. Но не стартует.
смотри:
cat /usr/local/bin/deluge-gtk
Код:

#!/usr/local/bin/python2.6
# EASY-INSTALL-ENTRY-SCRIPT: 'deluge==1.3.0','console_scripts','deluge-gtk'
__requires__ = 'deluge==1.3.0'
import sys
from pkg_resources import load_entry_point

sys.exit(
  load_entry_point('deluge==1.3.0', 'console_scripts', 'deluge-gtk')()

cat /usr/local/bin/deluge-web
Код:

#!/usr/local/bin/python2.6
# EASY-INSTALL-ENTRY-SCRIPT: 'deluge==1.3.0','console_scripts','deluge-web'
__requires__ = 'deluge==1.3.0'
import sys
from pkg_resources import load_entry_point

sys.exit(
  load_entry_point('deluge==1.3.0', 'console_scripts', 'deluge-web')()

исполняемые скрипты отличаются только внутренними аргументами: deluge-gtk или deluge-web.. и думается мне что они не случайно их разделили в новой версии (раньше был только файл демона - deluged и файл пользователя deluge который запускался с тем или иным аргументом -ui= )

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

Насчет ментейнеров - я думаю что косяк где-то у меня все же. Ибо клиент достаточно популярный (как раз когда начало глючить, я попробовал хвалёную transmission: она значительно хуже в настройках, гибкости и удобстве), а следовательно было бы уже что-то. а тут на форуме FreeBSD - тишина вообще, на форуме самой делюги - если и есть какие-то вопли, то либо совершенно о другом, и решенные, либо вот типа такого http://forum.deluge-torrent.org/viewtopic.php?f=7&t=31255
(последний пост смотри: тоже у чела видать частный глюк типа моего)

Hubbitus 07.10.2010 20:29

Что-то я не понял:

Цитата:

Сообщение от Plague (Сообщение 1725009)
стартую веб-морду руками:
Код:

/usr/local/bin/deluge -uweb --logfile=/home/plague/.config/deluge/deluge-web.log --loglevel=warning &

и

Цитата:

Сообщение от Plague (Сообщение 1725024)
cat /usr/local/bin/deluge-web

Ты уверен что оба файла из одной версии?? Почему тогда разный запуск одного и того же?

Я так понимаю ты ставил по той инструкции вручную, не из портов? Старую удалил предварительно?


Цитата:

Сообщение от Plague (Сообщение 1725024)
Насчет ментейнеров - я думаю что косяк где-то у меня все же. Ибо клиент достаточно популярный (как раз когда начало глючить, я попробовал хвалёную transmission: она значительно хуже в настройках, гибкости и удобстве), а следовательно было бы уже что-то. а тут на форуме FreeBSD - тишина вообще, на форуме самой делюги - если и есть какие-то вопли, то либо совершенно о другом, и решенные, либо вот типа такого http://forum.deluge-torrent.org/view...hp?f=7&t=31255

Оффтоп конечно, но я уже не один год пользуюсь rtorrent и полностью доволен.

Plague 07.10.2010 20:58

/usr/local/bin/deluge -uweb
и
/usr/local/bin/deluge-web

по логике должно быть одним и тем же.
ибо
$ man deluge
Код:

....
      -u UI, --ui=UI
              The UI that you wish to launch, current  options  include:  gtk,
              web or console

а deluge-web - это просто враппер похоже для того же самого.
Цитата:

Сообщение от Hubbitus (Сообщение 1725027)
ты ставил по той инструкции вручную, не из портов? Старую удалил предварительно?

из портов. старую сносил естественно.
щас погляжу как оно на дебиане заработает. правда там 1.2.3...

Plague 07.10.2010 22:26

ууууу, как всё запущено:
$ deluge --help
Код:

Traceback (most recent call last):
  File "/usr/local/bin/deluge", line 8, in <module>
    load_entry_point('deluge==1.3.0', 'console_scripts', 'deluge')()
  File "/usr/local/lib/python2.6/site-packages/deluge-1.3.0-py2.6.egg/deluge/main.py", line 79, in start_ui
    (options, args) = parser.parse_args()
  File "/usr/local/lib/python2.6/optparse.py", line 1394, in parse_args
    stop = self._process_args(largs, rargs, values)
  File "/usr/local/lib/python2.6/optparse.py", line 1434, in _process_args
    self._process_long_opt(rargs, values)
  File "/usr/local/lib/python2.6/optparse.py", line 1509, in _process_long_opt
    option.process(opt, value, values, self)
  File "/usr/local/lib/python2.6/optparse.py", line 788, in process
    self.action, self.dest, opt, value, values, parser)
  File "/usr/local/lib/python2.6/optparse.py", line 810, in take_action
    parser.print_help()
  File "/usr/local/lib/python2.6/optparse.py", line 1664, in print_help
    file.write(self.format_help().encode(encoding, "replace"))
  File "/usr/local/lib/python2.6/encodings/koi8_r.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 35: ordinal not in range(128)

:ржать:
короче, в топку эту каку, буржуи опять про кодировки похоже забыли. откатываюсь на 1.1.9

ps. на дебиане все работает как надо..

Hubbitus 08.10.2010 14:15

Цитата:

Сообщение от Plague (Сообщение 1725041)
короче, в топку эту каку, буржуи опять про кодировки похоже забыли. откатываюсь на 1.1.9

Да, действительно похоже дело в кодировке. Во-первых репортить об этом надо однозначно во фряху мэйнтэйнеру порта.

Во вторых, попробуй запустить в С локали:
Код:

$ LANG=C deluge --help

Plague 08.10.2010 14:54

Цитата:

Сообщение от Hubbitus (Сообщение 1725104)
Во-первых репортить об этом надо однозначно во фряху мэйнтэйнеру порта.

я для себя-то пока не очень понял где именно косяк, а ты предлагаешь это еще и на английском ментейнеру истолковать... :biggrin:

седня попробую чистую БЗДю накатить на виртуалку и поглядеть что там будет..

Hubbitus 08.10.2010 15:30

Цитата:

Сообщение от Plague (Сообщение 1725107)
я для себя-то пока не очень понял где именно косяк, а ты предлагаешь это еще и на английском ментейнеру истолковать...

Вот вместе и разберетесь :)
Для начала вполне достаточно команд и трэйсов что ты тут привел. Тебе ж не обязательно решение сразу. Проссто ему-то виднее и подсказать будет легче.

В английской локали попробовал, работает?

Plague 10.10.2010 18:50

Цитата:

Сообщение от Hubbitus (Сообщение 1725111)
В английской локали попробовал, работает?

да, работает.

Hubbitus 11.10.2010 12:43

Ну вот и получается что она виновата. Значит и воркараунд пока есть, как его сейчас использовать, и мэйнтэйнеру знаешь что писать :)

А вообще это питоновская бага скорее всего, у нас с yum частенько такое случается в локализации, я сам уже пару раз репортил - исправляли...

Отпишись плиз как ответят.


Часовой пояс GMT +4, время: 08:44.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.