PDA

Bekijk de volledige versie : Возможно ли управление роутером по ICQ, Jabber и т.п.?



mario
12-06-2008, 08:41
Не бейте ногами, поиском пользовался, честное слово.
Идея может бредовая, поправьте меня, если неправ. Последнее время у меня достаточно часто стала возникать необходимость отслеживать состояние удаленных сетей, находясь в самых неожиданных ситуациях. Сидишь например где-нибудь на важной встрече, под рукой обычно максимум - наладонник, отвлекаться вообще неудобняк, офисный сисадмин опять напился, а выслушивать бред секретарши, о том, что "у нас тут сломалось ВСЁ", нет ни возможности, ни желания. А разрешить ситуацию нужно немедленно, иначе работа встанет. Вот и думаешь в моменты такого дебилизма - сейчас бы попереписываться по ICQ не с секретаршей, а напрямую с железками, как по телнету... они умнее секретарши... Ты им команду - они тебе ответ на команду. Понимаю конечно, ICQ - не тот протокол с точки зрения безопасности данных, но можно же придумать какие-нибудь одноразовые пароли, действительные в течение пяти минут после первого использования, или еще что-то в этом роде... Другими словами вопрос ко всем гуру. Насколько сложно, имея какой-либо ICQ CommandLine client под Linux (если такие конечно существуют) сделать нечто "Command Line over ICQ for Linux", что находилось бы для своего админа всегда в онлайне, работало по требованию админа как телнет? А еще присылало бы на указанный UIN сообщения, возникающие в каком-нибудь файле во флеше роутера (я имею в виду файл, куда другие скрипты складывали бы сообщения для отправки администатору). Наверное люди пользуются чем-то более правильным для управления железками, или, например, стараются в принципе по жизни не попадать в такие идиотские ситуации, но свою жизнь не поменяешь, уж что выросло, то выросло. Мест, состояние которых я хотел бы мониторить в онлайне, у меня накопилось около десятка, и лучшего, чем видеть у себя в ICQ клиенте в наладоннике группу Routers мне не приходит в голову.
Извините, если кого посмешил.

Dekker
12-06-2008, 09:42
SSH чем не устраивает ? тот же Putty и переписывайся с железкой сколько влезет

mario
12-06-2008, 10:07
SSH чем не устраивает ? тот же Putty и переписывайся с железкой сколько влезет
с железкОЙ - да, а если железок десять? Я хочу чтобы мне железки присылали свои системные сообщения, например, что тот или иной RAID массив по такому-то адресу потерял один из винтов, и данные под угрозой, а не связываться с железкой, когда уже поздно пить Боржоми... Да и потом, во что превратиться наладонник с постоянно открытым сеансом SSH? А с десятью сеансами? Это должен быть отдельный наладонник специально под это, он больше не сможет ничего делать. А вот ася у меня на нем открыта всегда, когда я не у компа, и ничуть не грузит WM6... Задача состоит не в том, чтобы один раз экстренно попасть на какой-нибудь роутер, а в том, чтобы иметь универсальное решение для множества роутеров с возможностью мгновенного доступа. Или вот еще пример. Не буду описывать обстоятельства, при которых это нужно, думаю все догадаются. В какой-то момент понадобилось, чтобы все компьютеры в офисе оказались недоступными и немеленно выключились, а сервер быстренько слил важную инфу через инет в какое-нибудь укромное место. Счет идет на секунды. В этом случае кто-либо из разрешенного списка отправляет по асе сообщение "пипец" и все. С асей знакома любая мартышка, а вот по SSH это сможет сделать только специально обученный человек, да и то не факт что быстро в экстремальной ситуации.

ABATAPA
12-06-2008, 10:56
Последнее время у меня достаточно часто стала возникать необходимость отслеживать состояние удаленных сетей, находясь в самых неожиданных ситуациях. Сидишь например где-нибудь на важной встрече, под рукой обычно максимум - наладонник, отвлекаться вообще неудобняк, офисный сисадмин опять напился, а выслушивать бред секретарши, о том, что "у нас тут сломалось ВСЁ", нет ни возможности, ни желания.

Настраивайте средства мониторинга (Nagius, Cacti с плагином TH, и т.д.) на каком-либо сервере, настраивайте уведомления - почтой, SMS, Jabber/AIM, и т.д.

DemonGloom
12-06-2008, 13:46
А возможно ли управлять роутером через Jabber, IRC или иной общедоступный протокол? (у меня вообще не реального ip и управление снаружи через telnet/ssh невозможно)

ABATAPA
12-06-2008, 15:37
А возможно ли управлять роутером через Jabber, IRC или иной общедоступный протокол? (у меня вообще не реального ip и управление снаружи через telnet/ssh невозможно)

Все возможно.
Однако, или Вам придется все реализовывать самому, или идти на
http://freshmeat.net, http://sourceforge.net/, искать там уже реализованное кем-то (типа SmartICQ, или ICQShell - provides remote access to computer using ICQ protocol.), и собирать для роутера.
Как Вы, должно быть, понимаете, Вы не первый, кому в голову пришла подобная идея.
Так что - дерзайте.

mario
12-06-2008, 22:12
Настраивайте средства мониторинга (Nagius, Cacti с плагином TH, и т.д.) на каком-либо сервере, настраивайте уведомления - почтой, SMS, Jabber/AIM, и т.д.
Спасибо за совет, посмотрел - действительно серьезные средства мониторинга, когда-нибудь обязательно воспользуюсь. Но боюсь, что это ответ не на мой вопрос. Моя задача - не имея под рукой ничего кроме ICQ, который у меня и так включен постоянно, контролировать именно те процессы, которые мне в данный момент интересны. А тогда, когда мне это неинтересно, мне не нужны ни письма, ни SMS, ни все остальное. К тому же, если я наставлю кучу софта, мой наладонник этого просто не выдержит и помрет от тормозов. А он для меня еще и телефон. Да и потом, мне прежде всего нужна командная строка, а не графики и безумное количество алармов. Я не собираюсь превращаться во всемогущего-всезнающего сисадмина, я просто хочу иметь универсальный и легкий способ быстро сделать то, что мне очень нужно, тогда, когда кроме меня этого сделать никто не может, не имея под рукой ничего, кроме аси. Может даже с любой попавшейся под руку аси.

ABATAPA
12-06-2008, 23:08
Спасибо за совет, посмотрел - действительно серьезные средства мониторинга, когда-нибудь обязательно воспользуюсь. Но боюсь, что это ответ не на мой вопрос. Моя задача - не имея под рукой ничего кроме ICQ, который у меня и так включен постоянно, контролировать именно те процессы, которые мне в данный момент интересны.
...


А следующее мое сообщение Вы вообще читали?

mario
13-06-2008, 08:43
А следующее мое сообщение Вы вообще читали?

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

ABATAPA
13-06-2008, 19:34
Сорри, когда днем набирал ответ, Вашего сообщения еще не было, просто отправляясь спать, увидел, что забыл нажать "ответить". Не прав, должен был проверить, не появилось ли еще сообщений.

Попробуйте отталкиваться от приведенного.

Vofik
14-06-2008, 21:01
Я занимаюсь созданием ICQ-Telnet моста на обьекно-оринтейном паскале в делфи для винды, но есть пакет делфи для линукса и возможно я займусь и разработкой данной программы под линукс (естественно под нормальный (десктопный и серверный), о роутере и речи быть не может), если интересно - пишите (желательно в личку)...

supremacy
31-10-2008, 11:46
Кто-нибудь поднимал ICQ бота на основе climm?
Интересно в репозитарии лежит версия climm собранная с поддержкой tcl?

Danya0w
20-11-2008, 11:38
есть какие нибудь продвижения в этом плане?

Freepriman
04-01-2009, 10:53
Решил написать управление роутером через ICQ.

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

Написать собираюсь скрипт на PHP, в качестве реализации протокола - WebICQPro. Вопросы пока что такие:
Как правильно запускать скрипт в виде демона? (видимо в post-mount следует добавить команду запуска php ...)
Как после этого правильно запускать shell команды и получать их output, достаточно ли простого shell_exec-а?

featZima
04-01-2009, 11:43
Мне кажется что это всё сильный бред =) Не стоит забывать про очень сильно ограниченные возможности роутера... Исходя из которых желательно использовать jabber + своя программа, которая будет делать необходимый мониторинг и отправлять сообщения...

Danya0w
05-01-2009, 03:15
Мне кажется что это всё сильный бред =) Не стоит забывать про очень сильно ограниченные возможности роутера... Исходя из которых желательно использовать jabber + своя программа, которая будет делать необходимый мониторинг и отправлять сообщения...

почему же бред? можно использовать тот же SNMP для снятия данных.
не думаю что посребуется cacti или еще чтото экзотичное.
самая большая проблема - это организовать протокол router - icq/
эту проблему нужно решить...
Freepriman, пиши - будем ждать результатов!

featZima
05-01-2009, 08:20
самая большая проблема - это организовать протокол router - icq/

Именно это я и имел ввиду... Не думаю что можно найти какую либо "лёгкую" либу под это дело ^^

Freepriman
05-01-2009, 11:56
Общение через ICQ с различными серверными программами и самими серверами - достаточно полезная штука, какие бы возможности не были у устройства, особенно когда у людей дел по горло то гораздо проще получить по аське все не обходимое за пару секунд, чем ходить в WebUI или подключаться по SSH.

Прикладываю получившийся результат, пока что скрипт потестировал просто запустив из командной строки php .../icqcontrol/icqcontrol.php.

В /conf/conf.php находится конфигурационная информация:

$icq_uin, $icq_password - ICQ номер и пароль для учетной записи, под которой будет работать роутер (пароль не более 8-ми символов, иначе будет ошибка авторизации, т.к. подключение через md5).

$icq_session_timeout - время через которое отвалится сессия, если нет активности (под активностью понимается успешный запуск некой команды).

$icq_allowed_uins - ICQ номера с которых возможно управлять роутером, php-ый массив, определяется так: array(222222222 => true, 333333333 => true), если какой-то uin временно требуется отключить, то можно выставить false или вообще удалить.

$icq_connection_delay - время через которое происходит попытка переподключения

$icq_retries - кол-во попыток подключения, через которое происходит продолжительная пауза (полезно, когда происходит блокировка аккаунта)

$icq_long_connection_delay - продолжительность длительной паузы, по-умолчанию 20 минут.

$icq_users - информация для логина, php-ый массив, ключ-логин, значение - пароль.

Нужно зарегистрировать учетную запись ICQ для роутера, добавить в контакт лист те номера, откуда будет возможно управление, разрулить все проблемы с авторизацией, сделать чтобы получение сообщение было возможно только от людей из списка контактов.

Все команды имеют следующий вид:

имя_функции("аргумент1", "аргумент2", ...)

в строках аргументов не должно быть символов ".

Пока что реализованы функции test("Message") и exec("command"), login("login", "password"), logout(). Первая просто в тестовых целях посылает обратно переданное сообщение, вторая через shell_exec запускает команду операционной системы, про последние и так все понятно.

Вот пример общения c роутером:

login("login", "password")

test("a")

logout()

Новые функции можно добавить просто путем добавления соответствующих статических методов в класс в файле FunctionLib.class.php.

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

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

rutony
05-01-2009, 12:55
круто,
еще бы реализовать счетчики, например, скачивается торрент, как тока докачался, пришло сообщение в асю=)

tiny
05-01-2009, 13:26
Может не в тему, но очень легко реализовать управление роутером по фтп.
Скрипт раз в 5 секунд проверяет определенный файлик и выполняет его и затем удаляет. Потом редирет консоли возвращается в другой файлик.

Freepriman
05-01-2009, 15:56
Может не в тему, но очень легко реализовать управление роутером по фтп.
Скрипт раз в 5 секунд проверяет определенный файлик и выполняет его и затем удаляет. Потом редирет консоли возвращается в другой файлик.

Так-то да, но, во первых, это не проще чем по SSH, во вторых, если "серый" IP, как у меня, то к нему никак не подключиться. Я занялся этой задачей только из-за второго, так бы - пользовался SSH.

tiny
05-01-2009, 19:04
Можно вместо скрипта в ftp использовать в цикле wget с шарового хостинга :). Хотя по icq конечно удобнее.

rutony
06-01-2009, 13:44
как правильно запустить демона с помощью screen для php скрипта? да и вообще как отследить правильно активность скрипта?
как передать файл от роутеровской аси?
да и вообще есть более простой вариант парсера, а не func("arg")?

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

supremacy
26-01-2009, 09:20
Мои эксперименты с icq не удались, поэтому я у себя установил mcabber (Jabber клиент) у него есть уже пример скрипта для обработки сообщений. Система с клиентом взаимодействует через pipe. Вобщем получилось всё просто. Пока реализовал скачивание файлов по присылаемой ссылке, выполнение команды в shell с выдачей результата.
Пришлось вставить в крон реконнект, потому-что клиент при потере соединения реконектится сам не хочет.
mcabber запускается через screen, весь вывод заворачивается в null.

zavant
27-01-2009, 22:43
2supremacy
А можно посмотреть, что в итоге получилось?

supremacy
02-02-2009, 18:26
зарегистрируйте аккаунт на jabber.ru для своего роутера.
после установки mcabber редактируем файл /opt/etc/.mcabber/mcabberrc

set username = routeraccount@jabber.ru
set password = ********
set server = jabber.ru
set port = 5222

set events_command = /opt/etc/.mcabber/eventcmd
set event_log_files = 1
set event_log_dir = /opt/etc/.mcabber/event_files

set fifo_name = /opt/etc/.mcabber/mcabber.fifo
set fifo_hide_commands = 0
set fifo_ignore = 0

set autoaway = 0

далее редактируем /opt/etc/.mcabber/eventcmd

#!/bin/sh
event=$1
arg1=$2
arg2=$3
filename=$4
# Note that the 4th argument is only provided for incoming messages
# and when 'event_log_files' is set.
if [ $event = "MSG" ]; then
case "$arg1" in
IN)
if [ $arg2 = "masteraccount@jabber.ru" ]
then
var=`/bin/cat $filename`
cmd=`echo "$var" | cut -c1-4`;
cmdarg=`echo "$var" | cut -c6-`;

echo "cmd($cmd) cmdarg($cmdarg)" >> /opt/etc/.mcabber/log
if [ $cmd = "exec" ]; then
$cmdarg > /opt/etc/.mcabber/result && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) &
elif [ $cmd = "!get" ]; then
cd /opt/etc/.mcabber
/opt/bin/curl -O $cmdarg && (echo "/say_to $arg2 Complete $cmdarg" > /opt/etc/.mcabber/mcabber.fifo) &
fi
echo "/say_to $arg2 Ok" > /opt/etc/.mcabber/mcabber.fifo
else
echo "/say_to $arg2 Ne ponyatno" > /opt/etc/.mcabber/mcabber.fifo
fi
/bin/rm $filename
;;
MUC)
# Groupchat message in room $arg2
if [ -n "$filename" && -f "$filename" ]; then
# We could process filename here...
/bin/rm $filename
fi
;;
OUT)
# Outgoing message for buddy $arg2
;;
esac
fi


создаём исполняемый файл /opt/bin/mcabber-run

#!/bin/sh
export LANG="ru_RU.UTF-8"
/opt/bin/mcabber -f /opt/etc/.mcabber/mcabberrc >/dev/null 2>&1


у меня mcabber запускается файлом /opt/etc/init.d/S97mcabber


#!/bin/sh
#
# Startup script for mcabber
#
# Stop myself if running
PIDFILE=/opt/var/run/mcabber.pid
case $1 in
start)
[ -f /opt/etc/.mcabber/mcabber.fifo ] && rm /opt/etc/.mcabber/mcabber.fifo
/opt/bin/screen -dmS mcabbers /opt/bin/mcabber-run
sleep 2s
rm ${PIDFILE}
pidof mcabber > ${PIDFILE};
;;
stop)
[ -f ${PIDFILE} ] && kill `cat ${PIDFILE}` ;;
*)
echo "usage: $0 (start|stop)"
exit 1
esac

Для начала нужно просто запустить mcabber и убедится что всё работает

/opt/bin/mcabber -f /opt/etc/.mcabber/mcabberrc
возможно авторизовать ваш masteraccount с которого вы будете управлять роутером, убедится что сообщения приходят и отправляются.

потом запускать выполнив

/opt/etc/init.d/S97mcabber start
(если у вас эти скрипты не выполняются автоматически при загрузке)


на всякий случай вставил в cron.hourly скрипт mcabber-online

#!/bin/sh
if [ -w /opt/etc/.mcabber/mcabber.fifo ]
then
echo "/connect /status away" > /opt/etc/.mcabber/mcabber.fifo
fi

Скрипт обработки сообщений выложил в урезанном виде, т.к. у меня там много специфических функций, типа выдача истории падения канала, поэтому не исключены ошибки. Лучше скачать архив с исходниками mcabber там несколько примеров скриптов.
Ну и в линуксе я не сильно разбираюсь, поэтому некоторые решения могут кому-то показаться кривоватыми.

Matashin
02-02-2009, 21:33
Все установил, связи есть, как команды посылать, в каком виде их набирать?
и еще, после запуска попадаещ видимо в общий чат, и в каталоге event_files копятся файлы, что с ними делать?

supremacy
03-02-2009, 07:02
Все установил, связи есть, как команды посылать, в каком виде их набирать?
и еще, после запуска попадаещ видимо в общий чат, и в каталоге event_files копятся файлы, что с ними делать?

в jabber есть понятие закладок. По умолчанию этот чат добавлен в закладки вашего аккаунта. Я удалил его из закладок используя клиент windows, вы может попробовать сделать это командой /room bookmark [add|del] [-autojoin|+autojoin]
Файлы копятся видимо потому что я выложил урезанный скрипт. В полном скрипте в конце обработки сообщений всегда вызывалась команда удаления файла события.

/bin/rm $filename

по командам читайте MCABBER(1) Manual Page (http://www.lilotux.net/~mikael/mcabber/files/mcabber.1.html)

как отправить сообщение из командной строки я вроде показал:
отправить текст:

echo "/say_to account@jabber.ru Ok" > /opt/etc/.mcabber/mcabber.fifo
отправить содержимое тектового файла result:

echo "/say_to -n -f /opt/etc/.mcabber/result account@jabber.ru" > /opt/etc/.mcabber/mcabber.fifo


Пример скрипта eventcmd идущего с исходниками:


#! /bin/sh
#
# Sample events script for mcabber
# Plays a sound when receiving a message
#
# To use this script, set the "events_command" option to the path of
# the script (see the mcabberrc.example file for an example)
#
# MiKael, 2005-07-15

# The following sound comes with the gtkboard package,
# you can modify this line to play another one...
CMD_MSG_IN="/usr/bin/play /usr/share/sounds/gtkboard/machine_move.ogg"

event=$1
arg1=$2
arg2=$3
filename=$4
# Note that the 4th argument is only provided for incoming messages
# and when 'event_log_files' is set.

if [ $event = "MSG" ]; then
case "$arg1" in
IN)
# Incoming message from buddy $arg2
$CMD_MSG_IN > /dev/null 2>&1
if [ -n "$filename" -a -f "$filename" ]; then
# We could process filename here...
/bin/rm $filename
fi
;;
MUC)
# Groupchat message in room $arg2
if [ -n "$filename" && -f "$filename" ]; then
# We could process filename here...
/bin/rm $filename
fi
;;
OUT)
# Outgoing message for buddy $arg2
;;
esac
elif [ $event = "STATUS" ]; then
# Buddy $arg2 status is $arg1 (_, O, I, F, D, N, A)
echo > /dev/null
elif [ $event = "UNREAD" ]; then
# $arg1 is the number of unread buffers
echo > /dev/null
fi


Я не стал расписывать то что делает скрипт, но кое-какие пояснения видимо требуются.
if [ $arg2 = "masteraccount@jabber.ru" ] только с этого аккаунта будут приниматься команды

если отправить с masteraccount@jabber.ru роутеру сообщение exec ps то он ответит Ok, а затем пришлёт список запущенных процессов.
если отправить !get http://www.lilotux.net/~mikael/mcabber/files/mcabber.1.txt он ответит Ok, а как только скачает файл пришлёт Complete http://www.lilotux.net/~mikael/mcabber/files/mcabber.1.txt


Если у кого-то возник вопрос а зачем весь этот огород городить? Отвечу просто у моего провайдера даже за деньги нельзя получить белый IP, а таким образом я получаю возможность посылать команды роутеру хоть с мобильного телефона, хоть в браузере из почтового ящика gmail.com

zavant
03-02-2009, 08:39
2supremacy
спасибо.
уже сделал примерно также, но у вас в некоторых местах красивее получилось :)
единственное:
$cmdarg > /opt/etc/.mcabber/result ... в result пишет только stdout. Я сделал
$cmdarg > /opt/etc/.mcabber/result 2>&1 ... чтоб приходили и сообщения об ошибках.

supremacy
03-02-2009, 11:07
$cmdarg > /opt/etc/.mcabber/result 2>&1 ... чтоб приходили и сообщения об ошибках.

Спасибо за подсказку, я об этом почему-то не подумал.

abufct
05-02-2009, 11:17
У меня тоже нет даже динамического IP. Сижу за NATом провайдера, так что такой способ управления роутером для меня актуален.
Скрипт supremacy у меня почему-то не заработал (возможно проблема в копировании с форума в MC).
Пришлось комбинировать скрипт supremacy и тот, который идет с исходниками
+ добавил еще один JID, с которого можно управлять роутером (актуально для тех, у кого в семье несколько человек хотят добавлять торренты на скачивание)
+ сделал добавление торрентов с torrents.ru:
команда !tor <URL to .torrent> (ссылка не на страницу раздачи, а на торрент)
Куки берутся из файла /opt/etc/.mcabber/cookies.txt
Сохранил я их туда при помощи расширения для FF Export Cookies (https://addons.mozilla.org/en-US/firefox/addon/8154) Я оставлял только записи, относящиеся к torrents.ru, но должно работать и без этого
+ сделал вывод листинга
команда !!ls /path/to/dir
скорее для эксперимента из-за проблем с exec

exec работает как-то странно - некоторые команды проходят, некоторые не проходят:
Проходят:
ps
free
df -h
ls -la (только в корневом каталоге, команда cp /path/to/dir && ls -la не работает)
du -sh /path/to/dir

Не работают
ps axu
vmstat
du -h (работает только если в папке нет подпапок, т.е. аналогично -sh)
w

Что интересно, скрипт ps.sh


#! /bin/sh

ps axu > /opt/etc/.mcabber/result && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) &

запущеный в терминале работает и присылает по Jabber'у вывод команды, а точно таrой же eventcmd не работает. Насколько я вижу, не работает именно $cmdarg > /opt/etc/.mcabber/result добавление 2>&1 не помогает (хотя может я как-то не так вставляю??)

чего бы хотелось:
корректной работы exec для всех команд
разбора сообщений не по n символов, а по пробелам (чтобы не нужно было делать команды !!ls)
какого-нибудь простенького средства для мониторинга (сказал !cpu, он выдал информацию о загружености, а еще нучше статистику за день и т.д. в том числе и для сети, либо одну команду stat)

Нашел такой проект - jabbot (http://sourceforge.net/projects/jabbot) специализированный бот, написан на C (по идее грузить систему не должен) и делает shell. Так что можно посмотреть

asp
05-02-2009, 11:45
eventcmd +х поставили? %)

abufct
05-02-2009, 13:29
поставил
но если бы не поставил, он бы вообще не работал, насколько я понимаю, а у меня работает, но exec результаты не всех команд выдает...

сейчас еще раз проверил, скрипт supremacy с +x - не работает...

re3lex
05-02-2009, 14:38
поставил
но если бы не поставил, он бы вообще не работал, насколько я понимаю, а у меня работает, но exec результаты не всех команд выдает...

сейчас еще раз проверил, скрипт supremacy с +x - не работает...

Он не работает, потому что в скипте один fi лишний :)

А именно вот тут:



#answer to buddy
fi
;;

abufct
05-02-2009, 15:13
заработал, но ps axu все равно не проходит

re3lex
05-02-2009, 16:09
заработал, но ps axu все равно не проходит

Если ps стандартный из прошивки, то и не пройдет, т.к. урезанная версия ps-а.

abufct
05-02-2009, 16:20
procps стоит, и как я уже писал выше, скрипт


#! /bin/sh

ps axu > /opt/etc/.mcabber/result && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) &

запущеный из терминала работает
и просто команда
ps axu > /opt/etc/.mcabber/result && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) &
работает
а вот точно такой же eventcmd не работает

re3lex
05-02-2009, 16:57
procps стоит, и как я уже писал выше, скрипт


#! /bin/sh

ps axu > /opt/etc/.mcabber/result && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) &

запущеный из терминала работает
и просто команда
ps axu > /opt/etc/.mcabber/result && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) &
работает
а вот точно такой же eventcmd не работает

Попробуйте запустить команду с абсолютным путем.

abufct
05-02-2009, 17:24
Заработало!!
exec /opt/bin/ps axu
exec /opt/bin/vmstat
выдает ответ

re3lex
05-02-2009, 18:21
Нашел такой проект - jabbot (http://sourceforge.net/projects/jabbot) специализированный бот, написан на C (по идее грузить систему не должен) и делает shell. Так что можно посмотреть

Эта штука требует libconfig, который я не могу найти в репозитарии. Так что видимо jabbot не смогём скомпилить под роутер. По крайней мере с текущими знаниями по ОС Linux :)

Вопрос к знатокам: возможно ли портировать libconfig?

re3lex
05-02-2009, 20:27
На тему eventcmd: почему-то не отправляет большие файлы: не получается отправить result размером в 2.5 кБ. Хотя если из консоли набрать

echo "/say_to -n -f our_file user@jabber.ru" > /opt/etc/.mcabber/mcabber.fifo
содержимое отправляется, то есть проблема не джаббере как таковом.

abufct
06-02-2009, 01:12
У меня длинное сообщение (ls -la в папке с раздаваемыми торрентами) обрубил на 2000 символов.
Я подумал, что это ограничение Google Talk и теперь пользуюсь ls -ap
По хорошему конечно нужно сделать вывод в несколько сообщений или разобраться, откуда ограничение

Усовершенствовал скриптик
добавил PATH, так что не нужно теперь писать полные пути к бинарникам
сделал сохранение текущей папки. раньше скрипт прогонялся и при следующем выполнении исполнялся опять из root - это было неудобно, нельзя было сделать cd, потом следующей командой ls
теперь скрипт запоминает текущую директорию. в конце выполнения команды он запоминает ее в файл /opt/etc/.mcabber/dir, а в начале выполнения кладет в переменную и потом перед исполнением команды делает cd в нее.
Убрал необходимость писать exec перед командой. Логика теперь такая - если cmd - !get или !tor - соответственно скачиваем или кладем торрент, а если ни то ни другое, выполняем все входящее сообщение как в shell'е
Сделал код более читабельным и убрал лишнее (обработку исходящих сообщений и т.д.)
Скрин:
http://img201.imageshack.us/img201/4941/capture02062009025938dn2.th.png (http://img201.imageshack.us/img201/4941/capture02062009025938dn2.png)

supremacy
06-02-2009, 06:52
Одно замечание. В такой конструции


$var > /opt/etc/.mcabber/result 2>&1 && (echo

не имеет смысла писать 2>&1 т.к. следующая команда && (echo выполнится только при отсутсвии ошибок в первой.
Тут лучше их просто последовательно через ; записать, без &&

Рад, что тема получила развитие 8)

re3lex
06-02-2009, 09:42
Накапал еще несколько проектов, специализирующихся на управление системой посредством jabber'а:
http://sourceforge.net/projects/jabsh/
http://www.ylsoftware.com/files/jabber-shell-20080315.tar.bz2

Теоретически должны работать пошустрее/кушать память/быть удобнее чем связка mcabber+screen :)

Поробую поставить и потестить. О результатах отпишусь :)

abufct
06-02-2009, 11:03
А я то думал, почему у меня ошибки не присылаются...
Заменил && на ; и заработало

Насчет этих ботов можно немного почитать тут (http://www.linux.org.ru/view-message.jsp?msgid=2826747)
Краткая выжимка:
Мой рабочий десктоп. Пишу jabsh, что-то вроде ssh over XMPP (подробнее jabsh.sf.net).
anonymous (*) (11.06.2008 13:34:01)

Аналог этому?
http://www.ylsoftware.com/?action=files&fa=viewfile&file=16
anonymous (*) (11.06.2008 22:54:48)

>>Аналог этому?
Да. Когда возникла необходимость юзать джаббер-шелл, вначале хотел использовать этот проект. Но на ноябрь 2007 года проект имел плачевный вид, поэтому я стал развивать свой. Сейчас оба проекта идут "ноздря в ноздрю".
(12.06.2008 10:24:00)

Мне нужен быланалогичный бот, тоже начал писать. Но, как было указано в коментах к новости Муса про его питоновский шел - довольно интересно использовать forkpty для форка консоли, а потом писать/читать оттуда данные и посылать их через джаббер. Правда один минус - символы цветов валят соединение, потому приходится включать фильтр, который, собственно и режет управляющие символы. Несколько не приятно, но зато всё работает. В том числе и emerge что-либо через такую консоль, а так же ssh куда-нибудь с вводом пароля и вообще перелогин под другого пользователя и т.д. В общем всё, кроме vim и mc :-) ну и man. Если интересно - мой контакт progserega@jabber.ru. Как это реализованно в коде: http://sourceforge.net/projects/jabbot/. Пока не допилено - времени очень мало, пилю по-чуть чуть.
progserega (*) (16.06.2008 9:55:11)

UPD
Следающая задача, которую хотелось бы решить - запускать mcabber не от рута. Есть пользователь p2p, которы запускает rtorrent - неплохо было бы от него запускать.
пробовал
su -c "/opt/bin/screen -dmS mcabbers /opt/bin/mcabber-run" p2p
не работает

re3lex
06-02-2009, 20:13
Вообщем мой отчет:
Запустить получилось только jabber-shell.
С остальными возникли проблемы при установке требуемых пакетов

Однако и jabsh немного косячный: пишет в консоль то что он делает. Перенаправление вывода в файл не помогает :(

psevdo0
19-03-2009, 01:10
не совсем разобрался как установить mcabber, ipkg install mcabber?
После этого не появилось директории .mcabber в папке opt/etc/:confused:
Ну я её создал всё вроде сделал как тут написано, джабер запустился но если шлю с мастер акуанта команды пишет все время ok и все :(

re3lex
19-03-2009, 05:53
не совсем разобрался как установить mcabber, ipkg install mcabber?
После этого не появилось директории .mcabber в папке opt/etc/:confused:
Ну я её создал всё вроде сделал как тут написано, джабер запустился но если шлю с мастер акуанта команды пишет все время ok и все :(

Покажи eventcmd

psevdo0
19-03-2009, 10:07
вот копия моего eventcmd
И ещё не могли бы вы сказать как все же правильно всё установить, подозреваю тут косяк.Почему не было папки .mcabber или её не должно быть ?
и при запуску он ругаться всё время "cannot remove `/opt/etc/.mcabber/mcabber.fifo': No such file or directory":(

re3lex
19-03-2009, 10:46
Замени кусок


if [ $cmd = "exec" ]; then
$cmdarg > /opt/etc/.mcabber/result && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) &



Вот этим


if [ $cmd = "exec" ]; then
$cmdarg > /opt/etc/.mcabber/result&
echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo



Во втором IF-блоке по аналогии

psevdo0
19-03-2009, 11:48
Всё изменил как вы посоветовали , результат то же на все ответ "ok" .
Где может быть косяк?:confused:

re3lex
19-03-2009, 17:00
Всё изменил как вы посоветовали , результат то же на все ответ "ok" .
Где может быть косяк?:confused:

Замени вот на этот кусок:


if [ $cmd = "exec" ]; then
echo "" > $result;
$cmdarg >> /opt/etc/.mcabber/result;
echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo $

re3lex
19-03-2009, 17:03
Привожу свой рабочий eventcmd дабы было с чем сравнивать :)



#!/bin/sh
event=$1
arg1=$2
arg2=$3
filename=$4

mnt_dir="/tmp/mnt"
flash_dir="disc0_2"
d_dir="download/mcabber"
flash_dev="/dev/discs/disc0/part2"
result="/opt/etc/.mcabber/result"

var_dir="./vars"

cd_file="CD_DIR"
cd_dir=`cat $var_dir/$cd_file`


if [ $cd_dir = "" ] ; then
$cd_dir= ".";
echo $cd_dir > $var_dir/$cd_file
fi



# Note that the 4th argument is only provided for incoming messages
# and when 'event_log_files' is set.
# echo "/say_to $arg2 $arg2" > /opt/etc/.mcabber/mcabber.fifo &
if [ $event = "MSG" ]; then
case "$arg1" in
IN)
if [ $arg2 = "my_router_jid@jabber.ru" ]; then
var=`/bin/cat $filename`
cmd=`echo "$var" | cut -d" " -f1`;
cmdarg=`echo "$var" | cut -d" " -f2-`;
echo "cmd($cmd) cmdarg($cmdarg)" >> /opt/etc/.mcabber/log
#echo "/say_to $arg2 $cmd|$cmdarg" > /opt/etc/.mcabber/mcabber.fifo &
if [ $cmd = "exec" ]; then
echo "" > $result;
cd $cd_dir;
$cmdarg >> $result;
echo "/say_to -n -f $result $arg2" > /opt/etc/.mcabber/mcabber.fifo &
elif [ $cmd = "get" ]; then
ls $mnt_dir | grep $flash_dir > $result
chk_dir=`/bin/cat $result`
if [ $chk_dir = $flash_dir ]; then
cd $mnt_dir/$flash_dir/$d_dir
/opt/bin/wget -b $cmdarg && (echo "/say_to $arg2 Use list to check your downloads" > /opt/etc/.mcabber/mcabber.fifo) &
else
echo "/say_to $arg2 Looks like $flash_dir dir is not mounted. Try to mount..." > /opt/etc/.mcabber/mcabber.fifo &
mount $flash_dev $mnt_dir/$flash_dir
fi

elif [ $cmd = "ping" ]; then
ping -c 10 $cmdarg > /opt/etc/.mcabber/result && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) &
elif [ $cmd = "help" ]; then
echo "/say_to $arg2 get, ping, list, tor_list " > /opt/etc/.mcabber/mcabber.fifo
elif [ $cmd = "list" ]; then
echo "" > /opt/etc/.mcabber/result
ls -alh $mnt_dir/$flash_dir/$d_dir >> /opt/etc/.mcabber/result
echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo &
elif [ $cmd = "cd" ]; then
echo $cmdarg > $var_dir/$cd_file
echo "/say_to $arg2 $cmdarg " > /opt/etc/.mcabber/mcabber.fifo
elif [ $cmd = "tor_list" ]; then
echo "" > $result;
transmission-remote 127.0.0.1:9091 -l -n user_name:user_password >> $result;
echo "/say_to -n -f $result $arg2" > /opt/etc/.mcabber/mcabber.fifo &
elif [ $cmd = "tor_start" ]; then
echo "" > $result;
transmission-remote 127.0.0.1:9091 -n user_name:user_password -t $cmdarg -s >> $result;
echo "/say_to -n -f $result $arg2" > /opt/etc/.mcabber/mcabber.fifo &
elif [ $cmd = "tor_stop" ]; then
echo "" > $result;
transmission-remote 127.0.0.1:9091 -n user_name:user_password -t $cmdarg -S >> $result;
echo "/say_to -n -f $result $arg2" > /opt/etc/.mcabber/mcabber.fifo &

else
echo "/say_to $arg2 Pardon?.. Use help" > /opt/etc/.mcabber/mcabber.fifo
fi

else
echo "/say_to $arg2 Ne ponyatno" > /opt/etc/.mcabber/mcabber.fifo
fi
/bin/rm $filename
;;
MUC)
# Groupchat message in room $arg2
if [ -n "$filename" && -f "$filename" ]; then
# We could process filename here...
/bin/rm $filename
fi
;;
OUT)
# Outgoing message for buddy $arg2
;;
esac
fi


Я его немного доработал под себя.

psevdo0
19-03-2009, 17:45
буду пробовать.

if [ $arg2 = "my_router_jid@jabber.ru" ] это ник того клиента который я запускаю на компе чтобы отдовать приказы роутеру я правильно понял?
и ещё вопрос, в двух словах раскажите как всетаки правильно всё это ставить? пчму у меня все время пишет "cannot remove `/opt/etc/.mcabber/mcabber.fifo': No such file or directory"при запуски в консоли

re3lex
19-03-2009, 18:22
буду пробовать.

if [ $arg2 = "my_router_jid@jabber.ru" ] это ник того клиента который я запускаю на компе чтобы отдовать приказы роутеру я правильно понял?
Это ваш собственный jid с которого вы хотите управлять.



и ещё вопрос, в двух словах раскажите как всетаки правильно всё это ставить? пчму у меня все время пишет "cannot remove `/opt/etc/.mcabber/mcabber.fifo': No such file or directory"при запуски в консоли
Не понятно почему происходит попытка удалить этот канал ввода-вывода.
Как запускается mcabber?

psevdo0
19-03-2009, 18:45
всё делал по инструкции со второй станице.
запускаю
/opt/etc/init.d/S97mcabber start
вот и прошу расказать как правильно все установить? взял ваш eventcmd теперь он пишет пардон :D

re3lex
20-03-2009, 15:38
всё делал по инструкции со второй станице.
запускаю
/opt/etc/init.d/S97mcabber start


А что в S97mcabber содержится?



вот и прошу расказать как правильно все установить? взял ваш eventcmd теперь он пишет пардон :D

:) При использовании моего evencmd "Пардон.." может выдаваться, если только ваша команда не соответствует ни одной команде в файле.
Да, в папке ./.mcabber должна быть создана папка vars, а в ней файл CD_DIR

re3lex
20-03-2009, 15:40
Приведите вывод команды ls -al для директории .mcabber при запущеном mcabber'e

psevdo0
20-03-2009, 18:54
вот ls -al

$ ls -al
total 36
drwxrwxrwx 3 admin root 4096 Mar 20 19:45 .
drwxr-xr-x 16 admin root 4096 Mar 19 01:32 ..
-rw-r--r-- 1 admin root 16 Mar 19 02:15 dir
-rwxr-xr-x 1 admin root 3435 Mar 20 20:48 eventcmd
-rw-r--r-- 1 admin root 1275 Mar 20 20:42 log
-rw-r--r-- 1 admin root 37 Mar 19 11:55 mcabb
prw------- 1 admin root 0 Mar 20 20:42 mcabber.fifo
-rw------- 1 admin root 331 Mar 19 20:50 mcabberrc
-rw-r--r-- 1 admin root 4021 Mar 19 12:08 result
drwxr-xr-x 2 admin root 4096 Mar 20 19:44 vars

и вот ошибка в синтаксе

/opt/etc/.mcabber/eventcmd
./vars/CD_DIR: No such file or directory
[: missing argument after `'
[: missing argument after `MSG'
хотя папку в каталоге я создал. видимо здесь косяк, буду проверять

re3lex
21-03-2009, 07:32
В приведенном листинге я не увидел папку event_files, хотя она по умолчанию должна быть указана в mcabberrc.

Файл CD_DIR должан лежать по этому пути:

/opt/etc/.mcabber/vars/

Приведи содержание /opt/etc/init.d/S97mcabber и mcabberrc

psevdo0
21-03-2009, 12:57
содержание /opt/etc/init.d/S97mcabber и mcabberrc копировал со второй странице темы.
Ответьте пожалуйста как вы устанавливали mcabber nr после ipkg install mcabber не появилась папка /opt/etc/.mcabber/ ? или так и должно было быть? Я создал там пусто , так и должно?
а вот по поводу этого
/opt/etc/.mcabber/eventcmd
./vars/CD_DIR: No such file or directory
[: missing argument after `'
[: missing argument after `MSG'
это появляеться разве не из за этого в вашем eventcmd
строчка
var_dir="./vars"
вот мой новый
$ ls -al
total 40
drwxrwxrwx 4 admin root 4096 Mar 21 14:34 .
drwxr-xr-x 16 admin root 4096 Mar 19 01:32 ..
-rw-r--r-- 1 admin root 16 Mar 19 02:15 dir
drwxr-xr-x 2 admin root 4096 Mar 21 14:34 event_files
-rwxr-xr-x 1 admin root 3451 Mar 21 15:05 eventcmd
-rw-r--r-- 1 admin root 1845 Mar 21 14:28 log
-rw-r--r-- 1 admin root 37 Mar 19 11:55 mcabb
prw------- 1 admin root 0 Mar 21 14:28 mcabber.fifo
-rw------- 1 admin root 331 Mar 19 20:50 mcabberrc
-rw-r--r-- 1 admin root 4021 Mar 19 12:08 result
drwxr-xr-x 2 admin root 4096 Mar 20 19:44 vars

и что за ошибка
missing argument after `' ??
UPD
вроде заработало =) как только добавил папку event_files
re3lex большое спасибо!!!

re3lex
21-03-2009, 20:13
и что за ошибка
missing argument after `' ??

В файле используются четыре параметра командной строки, на это и ругается шелл.



вроде заработало =) как только добавил папку event_files
re3lex большое спасибо!!!
You are welcome

supremacy
28-03-2009, 07:28
пчму у меня все время пишет "cannot remove `/opt/etc/.mcabber/mcabber.fifo': No such file or directory"при запуски в консоли

в S97mcabber есть строчка:

rm /opt/etc/.mcabber/mcabber.fifo
по-хорошему, стоило бы написать

[ -f /opt/etc/.mcabber/mcabber.fifo ] && rm /opt/etc/.mcabber/mcabber.fifo

Вообще это удаление нужно, в случае, когда попытка передачи сообщения произошла при выключенном mcabber и создался текстовый файл mcabber.fifo. При этом mcabber стартует нормально, но fifo создаться не может, потому что уже есть текстовый файл с таким именем. В результате отправка сообщений работать не будет.

psevdo0
30-03-2009, 21:40
вот что заметил, как настроил командой exec ps axu выдавал мне ответ как положено , сейчас же не знаю в следствии чего стал отзываться только на exec /opt/bin/ps axu :confused: ? в конфиг не лазил.И ещё заметил после перезагрузки роутера что он еле работает, проверил командой top и оказалась что процесс с именем mcabber ест 70% cpu после kill и запуска заново все стало на свои места, как это объяснить?

re3lex
31-03-2009, 07:09
вот что заметил, как настроил командой exec ps axu выдавал мне ответ как положено , сейчас же не знаю в следствии чего стал отзываться только на exec /opt/bin/ps axu :confused: ? в конфиг не лазил.

Я думаю такое поведение будет наблюдаться не только при запуске через жаббер, но и в консоли тоже. По крайней мере я подобное встречал у себя. Выяснилось тогда, что криво подмонтировалась флешка с /opt. Перезагрузка роутера решила проблему.


У меня наблюдается другая проблема: настроил mcabber чтобы по команде выдавал статус закачек в transmission. Сначала все работало на ура, но недавно перестал выдавать резалт. Я грешил на то, что mcabber не умеет пересылать файлы, объемом от 1 килобайта. Однако проведя несколько тестов выяснил, что похоже виноват не объём резалта, содержащиеся в нем какие-то спец. символы, на которые mcabber реагирует отказом. По-Крайней мере все выглядит именно так.

Никто с подобным не встречался?

psevdo0
01-04-2009, 16:43
вот что заметил, как настроил командой exec ps axu выдавал мне ответ как положено , сейчас же не знаю в следствии чего стал отзываться только на exec /opt/bin/ps axu ?
решил свою проблему теперь он опять понимает
exec ps axu
дал эту команду
/opt/bin/mcabber -f /opt/etc/.mcabber/mcabberrc в терминале поговорил вышел из терминала запустил заново
/opt/etc/init.d/S97mcabber start и он стал принимать короткие команды :cool: уверен что есть способ проще но пока не решил.

Thunderbird
02-04-2009, 11:53
У меня отлично работает связка IRC+роутер. Реализация - самая банальная, IRC-клиент(Xchat) + скрипт на Perl реализующий telnet-соединение с роутером.
В мои нужды входит пока просто мониторинг лога на наличие дисконнектов и вывод их в отдельное окно, но дописать, чтоб по определенным событиям вывод отправлялся другому пользователю, допустим вам же с наладонника/телефона - 5 минут.

re3lex
03-04-2009, 20:25
У меня наблюдается другая проблема: настроил mcabber чтобы по команде выдавал статус закачек в transmission. Сначала все работало на ура, но недавно перестал выдавать резалт. Я грешил на то, что mcabber не умеет пересылать файлы, объемом от 1 килобайта. Однако проведя несколько тестов выяснил, что похоже виноват не объём резалта, содержащиеся в нем какие-то спец. символы, на которые mcabber реагирует отказом. По-Крайней мере все выглядит именно так.

Никто с подобным не встречался?

Вообщем решил я свою проблему.
Оказывается вся засада была тогда, когда в резалт файле оказывались русские буквы.
Решил проблему утем обработки резалта через команду sed:


ls -alh /some/dir/to/files/with/russian/names >> sed >> result;


Теперь mcabber отдает резалт с русскими символами.

Если кто знает в чем проблема была и почему sed ее решил - сообщите, пожалуйста :)

drJabber
10-04-2009, 13:27
почему-то mcabber не отдает результат
ls -al /opt/bin

при этом
ls /opt/bin и
ls -al /opt/sbin - работают

не работают также:

ipkg install
cat /path/to/file | tile -n 2
cat /tmp/syslog.log, хотя dmesg работает

eventcmd в аттаче

re3lex
10-04-2009, 16:22
почему-то mcabber не отдает результат
ls -al /opt/bin

при этом
ls /opt/bin и
ls -al /opt/sbin - работают

не работают также:

ipkg install
cat /path/to/file | tile -n 2
cat /tmp/syslog.log, хотя dmesg работает

eventcmd в аттаче

А в result файле есть результат работы команд?

drJabber
11-04-2009, 12:08
А в result файле есть результат работы команд?
в логе есть, в result - только то что выполнилось, но не успело отправиться

re3lex
11-04-2009, 13:55
Была у меня такая проблема (смотри мой пост выше).

Решил предварительной обработкой содержимого резал файла командой sed

drJabber
11-04-2009, 14:16
Была у меня такая проблема (смотри мой пост выше).

Решил предварительной обработкой содержимого резал файла командой sed

то есть примерно вот так? (к сожалению, в линухе - не очень)


<поскипано>
else
cd $dir
$var >> sed >> /opt/etc/.mcabber/result 2>&1 && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) && pwd > /opt/etc/.mcabber/dir
fi
<поскипано>

re3lex
11-04-2009, 21:11
то есть примерно вот так? (к сожалению, в линухе - не очень)


<поскипано>
else
cd $dir
$var >> sed >> /opt/etc/.mcabber/result 2>&1 && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) && pwd > /opt/etc/.mcabber/dir
fi
<поскипано>


Так вряд ли сработает

У меня вот так:


ls -alh /some/dir/to/files/with/russian/names >> sed >> result;

supremacy
20-04-2009, 11:10
у меня в каталогах нет русских имён, но подозреваю что дело в кодировках.
т.к. mcabber стартует через файл в котором прописано

export LANG="ru_RU.UTF-8"
он понимает русский в кодировке UTF-8 (в моём скрипте некторые сообщения на русском, сам файл скрипта сохранён в UTF-8)

наверное ls выводит не в UTF-8, а sed конвертит в нужную кодировку.
Могу ошибаться, т.к. с линуксом редко пересекаюсь.

ranold
24-04-2009, 21:01
у меня в каталогах нет русских имён, но подозреваю что дело в кодировках.

Только заметил вот что- нельзя вывести файл, содержащий последовательность символов "\r\n". Просто c "\n"- можно.

Думаю, вопрос не в кодировках, а в управляющих последовательностях и, возможно, внутренних командах mcabber (которые начинаются с "/").

Возможно стоит копать в сторону /msay и /msay verbatim. Разбираюсь пока..

ranold
26-04-2009, 16:28
Свою проблему решил. Теперь возможно получить в jabber результат тех команд, которые раньше отказывались выводиться.

Для этого выполнил следующую последовательность операций

ipkg install coreutils sed


Далее блок запуска процесса в файле /opt/etc/.mcabber/eventcmd привёл к следующему виду

$var > /opt/etc/.mcabber/result 2>&1;
cat -v /opt/etc/.mcabber/result | sed -e 's/\^[A-Z]//g' > /opt/etc/.mcabber/result;
echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo;

Если на словах, то опция -v у команды cat включает вывод непечатных символов, а следом идущая sed подчищает эти самые символы.

Я не уверен в идеалогической правильности своего решения, но ничего более правильного я пока не нашёл.

Минус этого решения - из текста вывода вырежутся все сочетания ^<заглавная латинская буква>, но они достаточно редки в обычной жизни.

Elite_boy
27-04-2009, 15:58
Что нужно добавить в скрипт, чтобы смотреть состоянии закачек в rtorrent'e?

ranold
27-04-2009, 16:00
Что нужно добавить в скрипт, чтобы смотреть состоянии закачек в rtorrent'e?
Выложу на днях. Пока сам разбираюсь.

Elite_boy
27-04-2009, 20:09
Не могу понять, как ему скармливать ссылки для добавления на закачку в rtorrent? Или Я тороплю события?
Перечитал тему, пробовал делать как написно !tor URL, но закачка не стартует, только скачивается сам файл .torrent

ranold
27-04-2009, 20:37
Не могу понять, как ему скармливать ссылки для добавления на закачку в rtorrent? Или Я тороплю события?
Перечитал тему, пробовал делать как написно !tor URL, но закачка не стартует, только скачивается сам файл .torrent
Если файл .torrent скачивается корректно, то он просто должен быть размещен в директории "dl", которую вы прописывали в mcabberrc. Далее закачка стартует автоматически.

Т.е. просто в eventcmd надо настроить, чтобы файлы .torrent скачивались сразу в нужную директорию.

ranold
27-04-2009, 21:38
допилил получение статистики rtorrent в jabber.

Подразумевается, что уже установлена веб-морда к rtorrent и php.
Последовательность действий такова:

1) Устанавливаем необходимые пакеты:

ipkg install coreutils sed

2) Распаковываем директорию из аттача в путь /opt/etc/.mcabber/ чтобы путь принял вид /opt/etc/.mcabber/rtorrent/

3) Делаем файл исполняемым:

chmod +x /opt/etc/.mcabber/rtorrent/getstats.php

4) Добавляем секцию в файл /opt/etc/.mcabber/eventcmd

elif [ $cmd = "!stt" ]; then
/opt/etc/.mcabber/rtorrent/getstats.php > /opt/etc/.mcabber/result 2>&1
cat -v /opt/etc/.mcabber/result | sed -e 's/\^[A-Z]//g' > /opt/etc/.mcabber/result
echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo


Всё, теперь по команде !stt получаем список активных торрентов.

Elite_boy
27-04-2009, 21:55
ranold, спасибо. Но, что не получается, то файл скачивается, но без расширения .torrent, то говорит выполнено, но файл не скачивается - это Я сам пытался подредактировать скрипт. :(
Поделитесь, пожалуйста, той строчкой скрипта, которая за это отвечает. Мне нужно без куков, Я качаю с tracker.freeexchange.ru, там авторизация не нужна. Как это будет выглядеть?

Add later: спасибо за статистику, работает. Только не забываем менять ip адрес маршрутизатора в файле getstats.php на свой ;)

ranold
28-04-2009, 19:05
ranold, спасибо. Но, что не получается, то файл скачивается, но без расширения .torrent, то говорит выполнено, но файл не скачивается - это Я сам пытался подредактировать скрипт. :(
Поделитесь, пожалуйста, той строчкой скрипта, которая за это отвечает. Мне нужно без куков, Я качаю с tracker.freeexchange.ru, там авторизация не нужна. Как это будет выглядеть?

Выглядеть будет вот так:

elif [ $cmd = "!tor" ]; then
cd /opt/torrent/dl/
/opt/bin/curl -L -o `date +%Y%m%d%H%M%S`.torrent $cmdarg && (echo "/say_to $arg2 Complete $cmdarg" > /opt/etc/.mcabber/mcabber.fifo)

Elite_boy
29-04-2009, 06:53
ranold, Спасибо огромное. Работает!

ranold
29-04-2009, 08:47
ranold, Спасибо огромное. Работает!
Пожалуйста :).

abufct
10-06-2009, 00:43
Если в названиях торрентов присутствуют русские буквы, substr() из getstats.php может некорректно резать строку. Режет он не посимвольно, а побайтно, а в UTF-8 2 байта на символ и может так получиться, что символ режется пополам. Такие половинчатые символы воспринимаются mcabber'ом как некорректные.
решилось заменой substr() на utf8_substr() (ну и добавлением соответствующей функции):


function utf8_substr($str, $from, $len) {
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s', '$1', $str);
}

И в eventcmd обхожусь без cat и sed

elif [ $cmd = "!stt" ]; then
/opt/etc/.mcabber/rtorrent/getstats.php > /opt/etc/.mcabber/result 2>&1
echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo
В аттаче мой вариант getstats.php

ranold
10-06-2009, 06:43
Можно использовать мультибайтовый вариант substr - mb_substr, тогда обойдётся без самописной функции.
Но торренты с русскими буквами - зло.

А ваш вариант eventcmd попробую чуть позже, спасибо!

abufct
26-06-2009, 01:31
Обнаружил странное поведение бота, когда делал оповещение о том, что закачка в rtorrent'е закончена: если я не в онлайне, начинается бесконечный цикл отправки сообщений ботом.
Сразу замечу, что для удобства у меня shell'овые команды стоят в else и обрабатываются без предварительной команды типа !exe
При анализе лога обнаружилось, что Гугл считает присланые в оффлайн сообщения ошибочными и отвечает на них сообщением об ошибке с тем же содержанием. Это сообщение воспринимается ботом как входящее и опять отрабатываются, отсылается ответ, он тоже считается ошибочным и т.д.



#Принудительно отправляю текст из консоли
[2009-06-26 02:47:56] Executing FIFO command: /say_to my@gmail.com test
# отсылка сообщения test
[2009-06-26 02:47:56] OUT: <message type='chat' to='my@gmail.com' id='166'><body>test</body><x xmlns='jabber:x:event'><composing/></x></message>
# от гугла приходит в ответ сообщение об ошибке с тем же тестом test, но при этом оно воспринимается как в eventcmd как MSG IN
[2009-06-26 02:47:56] IN: <message type="error" to="router@gmail.com/mcabber.a1192287" id="166" from="my@gmail.com"><body>test</body><x xmlns="jabber:x:event"><composing/></x><nos:x value="enabled" xmlns:nos="google:nosave"/><arc:record otr="true" xmlns:arc="http://jabber.org/protocol/archive"/><error code="503" type="cancel"><service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></message>
[2009-06-26 02:47:56] Received error packet [service-unavailable]
[2009-06-26 02:47:56] Error code from server: 503 Service Unavailable
[2009-06-26 02:47:56] Error message received from <my@gmail.com>
[2009-06-26 02:47:57] Executing FIFO command: /say_to -n -f /opt/etc/.mcabber/result my@gmail.com
[2009-06-26 02:47:57] Message file is empty (/opt/etc/.mcabber/result)
# В конце eventcmd посылается Ok
[2009-06-26 02:47:57] Executing FIFO command: /say_to my@gmail.com Ok
[2009-06-26 02:47:57] OUT: <message type='chat' to='my@gmail.com' id='217'><body>Ok</body><x xmlns='jabber:x:event'><composing/></x></message>
# И опять гугл отвечает тем же сообщением, теперь уже Ok
[2009-06-26 02:47:57] IN: <message type="error" to="router@gmail.com/mcabber.a1192287" id="217" from="my@gmail.com"><body>Ok</body><x xmlns="jabber:x:event"><composing/></x><nos:x value="enabled" xmlns:nos="google:nosave"/><arc:record otr="true" xmlns:arc="http://jabber.org/protocol/archive"/><error code="503" type="cancel"><service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></message>

И так появляется бесконечный цикл.
Пути решения пока вижу либо в отслеживании статуса (он все равно мне нужен будет для определения, уведомлять SMSкой или в джаббер)

Нашел причину такого поведения:

your friend isn't able to receive offline messages. This is due to one of the following situations:
you were chatting off the record when your friend went offline.
А у меня как раз запись разговоров с логом отключена... Так что для решения проблемы можно включить запись логов.

P.S. может стоит переименовать тему в "...роутером по... Jabber'у?"

Break Action
08-07-2009, 00:20
Подскажите плз, как можно настроить mcabber, чтобы он посылал сообщения, при каких-либо событиях происходящих в системе, скажем реконект или OpenVPN отключился, ну это всего лишь как примеры. Главное чтобы он посылал сообщения сам, а не только при получении какой-то комманды.
Заранее благодарен за ответ.

asp
08-07-2009, 12:00
Вешаете какой-нибудь скрипт, который отслеживает что вам надо и из него в файл /opt/etc/.mcabber/mcabber.fifo выдаёте команду. Прочитайте тему внимательнее.

Break Action
08-07-2009, 13:39
Вешаете какой-нибудь скрипт, который отслеживает что вам надо и из него в файл /opt/etc/.mcabber/mcabber.fifo выдаёте команду. Прочитайте тему внимательнее.

Спасибо, дальше разберусь!

re3lex
08-07-2009, 20:38
Подскажите плз, как можно настроить mcabber, чтобы он посылал сообщения, при каких-либо событиях происходящих в системе, скажем реконект или OpenVPN отключился, ну это всего лишь как примеры. Главное чтобы он посылал сообщения сам, а не только при получении какой-то комманды.
Заранее благодарен за ответ.

Mcabber - это всго лишь инструмент. Он ничего не знает о событиях, происходящих в системе.

С другой стороны его можно использовать в некоем скрипте, который бы, к примеру, крутился в кроне и проверял некие параметры (состояние ВПН, размер дискового пространства и тд). При определенных показателях скрипт может отсылать сообщение через mcabber. Вот как-то так.

Break Action
08-07-2009, 21:14
Mcabber - это всго лишь инструмент. Он ничего не знает о событиях, происходящих в системе.

С другой стороны его можно использовать в некоем скрипте, который бы, к примеру, крутился в кроне и проверял некие параметры (состояние ВПН, размер дискового пространства и тд). При определенных показателях скрипт может отсылать сообщение через mcabber. Вот как-то так.
Да, именно, так. Просто я незнал, как заставить mcabber отправить сообщение самостоятельно. Но уже со все разобрался.

supremacy
30-07-2009, 08:19
Обнаружил странное поведение бота, когда делал оповещение о том, что закачка в rtorrent'е закончена: если я не в онлайне, начинается бесконечный цикл отправки сообщений ботом.


P.S. может стоит переименовать тему в "...роутером по... Jabber'у?"

Я в eventcmd игнорирую сообщения от самого себя (тоже ловил этот бесконечный цикл)

Надо админа попросить или топикстартера чтобы тему переименовали.

fabius
08-08-2009, 11:14
У меня возникли проблемы при работе с mcabber.
Почему то не создаются файлы входящих сообщений, хотя в файле конфигурациия клиента черным по белому прописано

set event_log_files = 1
set event_log_dir = /opt/etc/.mcabber/event_files/

При этом директория event-files создана, но в ней ничего не пишется.
На роутере установлена последняя прошивка Олега. Десятая, если мне не изменяет память.
Права на event-files 777
Работаю с mcabber через следующие файлы
-rwxr-xr-x /opt/etc/init.d/S97mcabber

#!/bin/sh
#
# Startup script for mcabber
#
# Stop myself if running
PIDFILE=/opt/var/run/mcabber.pid
case $1 in
start)
[ -f /opt/etc/.mcabber/mcabber.fifo ] && rm /opt/etc/.mcabber/mcabber.fifo
/opt/bin/screen -dmS mcabbers /opt/bin/mcabber-run
sleep 2s
rm ${PIDFILE}
pidof mcabber > ${PIDFILE};
;;
stop)
[ -f ${PIDFILE} ] && kill `cat ${PIDFILE}` ;;
*)
echo "usage: $0 (start|stop)"
exit 1
esac


-rwxr-xr-x /opt/bin/mcabber-run


#!/bin/sh
export LANG="ru_RU.UTF-8"
/opt/bin/mcabber -f /opt/etc/.mcabber/mcabberrc >/dev/null 2>&1


-rw------- /opt/etc/.mcabber/mcabberrc


set username = fabiusrouter@jabber.ru
set password = ******
set server = jabber.ru
set port = 5222

set pinginterval = 40
set lang = ru

set logging = 1
set logging_dir = opt/etc/.mcabber/histo/

#set events_command = /opt/etc/.mcabber/eventcmd
set event_log_files = 1
set event_log_dir = /opt/etc/.mcabber/event_files/

set fifo_name = /opt/etc/.mcabber/mcabber.fifo
set fifo_hide_commands = 0
set fifo_ignore = 0


-rwxr-xr-x /opt/etc/.mcabber/eventcmd


#!/bin/sh
event=$1
arg1=$2
arg2=$3
filename=$4

mnt_dir="/tmp/mnt"
flash_dir="disc0_2"
d_dir="download/mcabber"
flash_dev="/dev/discs/disc0/part2"
result="/opt/etc/.mcabber/result"

var_dir="./vars"

cd_file="CD_DIR"
cd_dir=`cat $var_dir/$cd_file`


if [ $cd_dir = "" ] ; then
$cd_dir= ".";
echo $cd_dir > $var_dir/$cd_file
fi



# Note that the 4th argument is only provided for incoming messages
# and when 'event_log_files' is set.
# echo "/say_to $arg2 $arg2" > /opt/etc/.mcabber/mcabber.fifo &
if [ $event = "MSG" ]; then
case "$arg1" in
IN)
if [ $arg2 = "fabius@jabber.ru" ]; then
var=`/bin/cat $filename`
cmd=`echo "$var" | cut -d" " -f1`;
cmdarg=`echo "$var" | cut -d" " -f2-`;
echo "cmd($cmd) cmdarg($cmdarg)" >> /opt/etc/.mcabber/log
#echo "/say_to $arg2 $cmd|$cmdarg" > /opt/etc/.mcabber/mcabber.fifo &
if [ $cmd = "exec" ]; then
echo "" > $result;
cd $cd_dir;
$cmdarg >> $result;
echo "/say_to -n -f $result $arg2" > /opt/etc/.mcabber/mcabber.fifo &
elif [ $cmd = "get" ]; then
ls $mnt_dir | grep $flash_dir > $result
chk_dir=`/bin/cat $result`
if [ $chk_dir = $flash_dir ]; then
cd $mnt_dir/$flash_dir/$d_dir
/opt/bin/wget -b $cmdarg && (echo "/say_to $arg2 Use list to check your downloads" > /opt/etc/.mcabber/mcabber.fifo) &
else
echo "/say_to $arg2 Looks like $flash_dir dir is not mounted. Try to mount..." > /opt/etc/.mcabber/mcabber.fifo &
mount $flash_dev $mnt_dir/$flash_dir
fi

elif [ $cmd = "ping" ]; then
ping -c 10 $cmdarg > /opt/etc/.mcabber/result && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) &
elif [ $cmd = "help" ]; then
echo "/say_to $arg2 get, ping, list, tor_list " > /opt/etc/.mcabber/mcabber.fifo
elif [ $cmd = "list" ]; then
echo "" > /opt/etc/.mcabber/result
ls -alh $mnt_dir/$flash_dir/$d_dir >> /opt/etc/.mcabber/result
echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo &
elif [ $cmd = "cd" ]; then
echo $cmdarg > $var_dir/$cd_file
echo "/say_to $arg2 $cmdarg " > /opt/etc/.mcabber/mcabber.fifo
elif [ $cmd = "tor_list" ]; then
echo "" > $result;
transmission-remote 127.0.0.1:9091 -l -n user_name:user_password >> $result;
echo "/say_to -n -f $result $arg2" > /opt/etc/.mcabber/mcabber.fifo &
elif [ $cmd = "tor_start" ]; then
echo "" > $result;
transmission-remote 127.0.0.1:9091 -n user_name:user_password -t $cmdarg -s >> $result;
echo "/say_to -n -f $result $arg2" > /opt/etc/.mcabber/mcabber.fifo &
elif [ $cmd = "tor_stop" ]; then
echo "" > $result;
transmission-remote 127.0.0.1:9091 -n user_name:user_password -t $cmdarg -S >> $result;
echo "/say_to -n -f $result $arg2" > /opt/etc/.mcabber/mcabber.fifo &

else
echo "/say_to $arg2 Pardon?.. Use help" > /opt/etc/.mcabber/mcabber.fifo
fi

else
echo "/say_to $arg2 Ne ponyatno" > /opt/etc/.mcabber/mcabber.fifo
fi
# /bin/rm $filename
;;
MUC)
# Groupchat message in room $arg2
if [ -n "$filename" && -f "$filename" ]; then
# We could process filename here...
# /bin/rm $filename
fi
;;
OUT)
# Outgoing message for buddy $arg2
;;
esac
fi


Закомментил строчки, где промежуточный файл сообщения удаляется, чтобы проверить есть ли он вообще.

ls -al /opt/etc/.mcabber

drwx------ 5 root 4096 Aug 8 13:02 .
drwxr-xr-x 10 root 4096 Aug 6 22:13 ..
drwxrwxrwx 2 root 4096 Aug 7 23:02 event-files
-rwxr-xr-x 1 root 3437 Aug 7 21:50 eventcmd
-rwxr-xr-x 1 root 1374 Aug 7 22:26 eventcmd2
drwxr-xr-x 2 root 4096 Aug 8 11:16 histo
-rw-r--r-- 1 root 345 Aug 7 21:47 log
-rw------- 1 root 437 Aug 8 13:00 mcabberrc
-rw-r--r-- 1 root 0 Aug 6 22:29 result
-rw-r--r-- 1 root 39 Aug 6 22:57 temp-log
drwxr-xr-x 2 root 4096 Aug 6 21:48 vars


Также при запуске консольного mcabber c помощью команды

/opt/bin/mcabber -f /opt/etc/.mcabber/mcabberrc
Когда присылаются сообщения от любого клиента mcabber пишет ошибку

Unable to create temp file for external command.
В linux я недавно, так что ошибка может быть совершенно идиотская. Гугл по ошибке привел только к исходникам mcabber(

fabius
08-08-2009, 22:53
С этим можно сказать разобрался. Какие то проблемы были именно с папкой event-files. Когда создал новую папку events и прописал её в mcabberrc сообщения стали сохраняться.
Но все-таки интересно, почему выскакивала ошибка. Буду благодарен, если кто-нибудь подскажет...

supremacy
09-08-2009, 18:50
может с правами на папку перемудрил, а может в конфиге лишний слэш
set event_log_dir = /opt/etc/.mcabber/event_files/

Dim.
16-09-2009, 14:39
Привет всем. Кому не сложно киньте плиз event файл с настройками для торентов. на скачивание о статус. Спасибо за внимание

allion
28-10-2009, 13:46
Поковырялся и собрал архив с конфигурационными файлами мкаббера, чтобы новичкам с нуля было проще разбираться.
из особенностей
- переименовал /opt/etc/.mcabber в /opt/etc/mcabber
- создал файл mcabber.conf , в котором содержатся два "админских" адреса для eventcmd
- создал скрипт mcabber-send, чтобы облегчить отправку сообщений на жаббер в сторонних скриптах.
Имхо намного проще там писать mcabber-send -m "message" или mcabber-send -f /tmp/syslog.log
Адрес для отправки берется первый из mcabber.conf

Для работы требуются

ipkg install screen
ipkg install sed
ipkg install coreutils
ipkg install mcabber

st7105
07-11-2009, 23:50
Поковырялся и собрал архив с конфигурационными файлами мкаббера, чтобы новичкам с нуля было проще разбираться.
из особенностей
- переименовал /opt/etc/.mcabber в /opt/etc/mcabber
- создал файл mcabber.conf , в котором содержатся два "админских" адреса для eventcmd
- создал скрипт mcabber-send, чтобы облегчить отправку сообщений на жаббер в сторонних скриптах.
Имхо намного проще там писать mcabber-send -m "message" или mcabber-send -f /tmp/syslog.log
Адрес для отправки берется первый из mcabber.conf


Огромное спасибо!

derrij
09-12-2009, 16:48
У кого-нибудь работает?
xml-rpc.php из архива не из под windows'a сохранён ли?или это не проблема?
как быть если https://18.664.176.79/rtorrent/
должно хватить подправить getstats.php на ??
$result = XMLRPC_request("https://127.0.0.1:80", "/RPC2", "d.multicall",




допилил получение статистики rtorrent в jabber.

Подразумевается, что уже установлена веб-морда к rtorrent и php.
Последовательность действий такова:

1) Устанавливаем необходимые пакеты:

ipkg install coreutils sed

2) Распаковываем директорию из аттача в путь /opt/etc/.mcabber/ чтобы путь принял вид /opt/etc/.mcabber/rtorrent/

3) Делаем файл исполняемым:

chmod +x /opt/etc/.mcabber/rtorrent/getstats.php

4) Добавляем секцию в файл /opt/etc/.mcabber/eventcmd

elif [ $cmd = "!stt" ]; then
/opt/etc/.mcabber/rtorrent/getstats.php > /opt/etc/.mcabber/result 2>&1
cat -v /opt/etc/.mcabber/result | sed -e 's/\^[A-Z]//g' > /opt/etc/.mcabber/result
echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo


Всё, теперь по команде !stt получаем список активных торрентов.

supremacy
15-12-2009, 12:41
У кого-нибудь работает?
xml-rpc.php из архива не из под windows'a сохранён ли?или это не проблема?
как быть если https://18.664.176.79/rtorrent/
должно хватить подправить getstats.php на ??
$result = XMLRPC_request("https://127.0.0.1:80", "/RPC2", "d.multicall",

У меня работает. Я настроил конфиг вебсервера, чтобы RPC2 был доступен также через http (сервер на 8081 порту), т.к. XMLRPC не поддерживает https. Все остальные вебприложения доступны через https.
таким образом получилось
$result = XMLRPC_request("127.0.0.1:8081", "/RPC2", "d.multicall",

derrij
15-12-2009, 15:59
как можно проверить?
/opt/etc/.mcabber/rtorrent/getstats.php выдаёт только

$ /opt/etc/.mcabber/rtorrent/getstats.php
Name Size Progress Ratio Speed

SSN
15-12-2009, 19:24
как можно проверить?
/opt/etc/.mcabber/rtorrent/getstats.php выдаёт только

$ /opt/etc/.mcabber/rtorrent/getstats.php
Name Size Progress Ratio Speed

Аналогично, автору написал в личку, если у него будет время - он поглядит что к чему.

supremacy
15-12-2009, 22:24
просто советую в конфиге вебсервера обрамить всю SSL секцию такой конструкцией

server.document-root = "/opt/share/www2/"
server.port = 8081

...
#### SSL engine
$SERVER["socket"] == ":443" {
server.document-root = "/opt/share/www/"
ssl.engine = "enable"
ssl.pemfile = "/opt/etc/lighttpd/ssl/lighttpd.pem"

...

}

#### url handling modules (rewrite, redirect, access)
...

Получится, что по https доступен каталог /opt/share/www/
а по http доступен каталог /opt/share/www2/

getstats.php заработает.

derrij
16-12-2009, 10:55
с этими изменениями тоже самое.

$ /opt/etc/.mcabber/rtorrent/getstats.php
Name Size Progress Ratio Speed


просто советую в конфиге вебсервера обрамить всю SSL секцию такой конструкцией
server.document-root = "/opt/share/www2/"
server.port = 8081
...
#### SSL engine
$SERVER["socket"] == ":443" {
server.document-root = "/opt/share/www/"
ssl.engine = "enable"
ssl.pemfile = "/opt/etc/lighttpd/ssl/lighttpd.pem"

supremacy
16-12-2009, 11:31
вебсервер перазапустили после изменения конфига?
в браузере заходит по http на 8081 порт?

по https вебморда к rtorrent работает?

derrij
16-12-2009, 11:46
да, rtorrent на https.
на 8081 страница Index of /

в getstats.php

$result = XMLRPC_request("127.0.0.1:8081", "/RPC2", "d.multicall",

supremacy
16-12-2009, 13:15
getstats.php из 87-го поста в этой ветке?
может имена торентов русские.

можно попробовать
ini_set("display_errors","1");
ini_set("display_startup_errors","1");
ini_set('error_reporting', E_ALL);

Хотя функция что-то возвращает, раз заголовок таблицы выводится

derrij
16-12-2009, 13:56
заработало! с этими настройками. Спасибо


просто советую в конфиге вебсервера обрамить всю SSL секцию такой конструкцией

server.document-root = "/opt/share/www2/"
server.port = 8081

...
#### SSL engine
$SERVER["socket"] == ":443" {
server.document-root = "/opt/share/www/"
ssl.engine = "enable"
ssl.pemfile = "/opt/etc/lighttpd/ssl/lighttpd.pem"

...

}

#### url handling modules (rewrite, redirect, access)
...

Получится, что по https доступен каталог /opt/share/www/
а по http доступен каталог /opt/share/www2/

getstats.php заработает.

SSN
16-12-2009, 15:30
заработало! с этими настройками. Спасибо

Не понимаю как оно взаимосвязано. И самое интересное, не понимаю как можно без создания сертификатов поднять этот самый SSL?

Естественно при перезапуске lighttpd матюкается на отсутствие pem файла:

[admin@Router init.d]$ ./S80lighttpd restart
Starting web server: lighttpd
2009-12-16 15:23:50: (network.c.589) SSL: Private key does not match the certificate public key, reason: error:02001002:system library:fopen:No such file or directory /opt/etc/lighttpd/ssl/lighttpd.pem


плюнул на эту ошибку и попробовал запустить getstat.php, теперь вообще ни чего не возвращает.

Может это и решение проблемы, но оно отнюдь не универсальное.
Возвратил настройки lighttpd обратно.

SSN
16-12-2009, 15:36
getstats.php из 87-го поста в этой ветке?
может имена торентов русские.

можно попробовать
ini_set("display_errors","1");
ini_set("display_startup_errors","1");
ini_set('error_reporting', E_ALL);

Хотя функция что-то возвращает, раз заголовок таблицы выводится

Включил по твоему совету показ всех ошибок, варнингов, вот результат:


Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 83

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 136

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 159

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 168

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 190

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 205

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 252

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 256

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 276

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 281

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 326

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 400

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 406

Warning: Call-time pass-by-reference has been deprecated in /opt/etc/mcabber/xml-rpc.php on line 417

Warning: Invalid argument supplied for foreach() in /opt/etc/mcabber/getstats.php on line 33


"проблему" Warning: Call-time pass-by-reference has been deprecated можно решить выставив allow_call_time_pass_reference = On в php.ini

а вот последнюю строку
Warning: Invalid argument supplied for foreach() похоже решить можно подправив скрипт. Только как пока не ясно, также не ясно взаимосвязана эта проблема с тем, что getstats.php не возвращается нужные значения.

supremacy
16-12-2009, 15:55
Не понимаю как оно взаимосвязано. И самое интересное, не понимаю как можно без создания сертификатов поднять этот самый SSL?


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

если SSL не включён по-умолчанию для сервера, то должно работать без этих изменений. У вас вебморда к rtorrent работает? если да, то и getstats.php должен работать, т.к. используют один и тот же механизм запросов.

SSN
16-12-2009, 16:25
Это помогает лишь в случае, когда на lighttpd настроен SSL для доступа к вебсерверу через https. (тут где-то на форуме был способ настройки)

если SSL не включён по-умолчанию для сервера, то должно работать без этих изменений. У вас вебморда к rtorrent работает? если да, то и getstats.php должен работать, т.к. используют один и тот же механизм запросов.

я понимаю это, вэб морда работает, настроен вэб-сервер на 8080, в getstats.php подправил запрос на порт 8080, по умолчанию стоял 8081... а не хочет работать, точнее явно видно что пытается работать - заголовок выводит, но дальше этого дело не идет. В php я нуль...

Версии:
rtorrent - 0.8.6, вчера была 0.8.5.
php - 5.2.11-1
php-fcgi - 5.2.11-3
php-gd - 5.2.11-1
lighttpd - 1.4.25-1

P.S. Если у кого работает getstats.php, киньте своим /opt/etc/php.ini и конфиги lighttpd (/opt/etc/lighttpd.conf и связанные с ними типа 10-php-fcgi.conf и т.д., которые в папке /opt/etc/lighttpd/conf.d), хотелось-бы понять почему не работает у меня getstats.php.

supremacy
17-12-2009, 08:39
Сомневаюсь что проблема в php.
Возможно нестандартно настроен lighttpd или проблема с кодировкой.

Можно попробовать запросить список через wget как в этой теме
http://wl500g.info/showthread.php?t=21154
это исключит проблему php

список команд тут http://libtorrent.rakshasa.no/wiki/RTorrentCommands


надо ещё посмотреть есть ли для роутера утилитка xmlrpc (http://sourceforge.net/projects/xmlrpc-c/files/)

SSN
17-12-2009, 11:29
Сомневаюсь что проблема в php.
Возможно нестандартно настроен lighttpd или проблема с кодировкой.

Возможно нестандартно настроен, вот я и хотел поглядеть настройки у тех, у кого работает нормально эта связка скриптов.
Кодировка везде UTF, юзаю год.
(Вышли пожалуйста свою php.ini и настройки lighttpd)


Можно попробовать запросить список через wget как в этой теме
http://wl500g.info/showthread.php?t=21154
это исключит проблему php

Я в курсе этого варианта, наверное попробую его, если он сработает, значит проблема или в версии php, или в его настройках. Я правильно понимаю?


список команд тут http://libtorrent.rakshasa.no/wiki/RTorrentCommands

Ага, спасибо...


надо ещё посмотреть есть ли для роутера утилитка xmlrpc (http://sourceforge.net/projects/xmlrpc-c/files/)
Нету, неделю назад искал... исходники есть, а скомпилённой версии нет, надо наверное учится компилировать. :)

al37919
17-12-2009, 12:12
Нету, неделю назад искал... исходники есть, а скомпилённой версии нет, надо наверное учится компилировать. :)
а это что?

ipkg list | grep xmlrpc-c
xmlrpc-c - 1.11.00-3 - A library providing modular implementation of XML-RPC for C and C++.

SSN
17-12-2009, 13:47
а это что?

ipkg list | grep xmlrpc-c
xmlrpc-c - 1.11.00-3 - A library providing modular implementation of XML-RPC for C and C++.

Набор библиотек и исходники для написания на языке C XML-RPC запросов... по крайней мере неделю назад так оно и было... Сам думал: о круто утилита наконец-то появилась - не надо будет шаманить с wget-ом или php... ага, оказалось утилиты там нету.
Та собственно она там и не обязана быть в описании проекта написано:
Programming library for writing an XML-RPC server or client in C or C++. XML-RPC is a standard network protocol to allow a client program to make a simple remote procedure call (RPC) type request of a server. Like SOAP or CORBA, but much simpler.

supremacy
18-12-2009, 20:03
Не думаю, что поможет, но вот конфиги.

al37919
19-12-2009, 00:31
Набор библиотек и исходники для написания на языке C XML-RPC запросов... по крайней мере неделю назад так оно и было... Сам думал: о круто утилита наконец-то появилась - не надо будет шаманить с wget-ом или php... ага, оказалось утилиты там нету.
Та собственно она там и не обязана быть в описании проекта написано:
Programming library for writing an XML-RPC server or client in C or C++. XML-RPC is a standard network protocol to allow a client program to make a simple remote procedure call (RPC) type request of a server. Like SOAP or CORBA, but much simpler.
попробуй поставить отсюда:
http://code.google.com/p/wl500g/source/browse/ipkg/optware

supremacy
19-12-2009, 18:59
al37919, спасибо. Утилитка полезная, и главное работает.

SSN
04-01-2010, 00:58
Я тут гриппом поболел недельку, сейчас поковырял, нашел зацепку...
Вся проблема в авторизации, У меня на веб-сервере простейшая plain-авторизация из-за неё не возвращались значения.
Сейчас отключил временно, getstats.php выдает:

Warning: Division by zero in /opt/etc/mcabber/rtorrent/getstats.php on line 38
PHP Warning: Division by zero in /opt/etc/mcabber/rtorrent/getstats.php on line 38

Warning: Division by zero in /opt/etc/mcabber/rtorrent/getstats.php on line 38
Name Size Progress Ratio Speed
Up.BDRemux.2009.mkv 0MB 0% 0
Ekstrakt.2009.P.BDRip.720 0MB 0% 0


Пускай не идеально, но уже что-то.

to al37919: Скачал, установил, утилитка (xmlrpc) запускается. Можно пример простейшего запроса к rtorrent?
xmlrpc localhost get_upload_rate
выдает:

Failed. Call failed. libcurl failed to execute the HTTP POST transaction. Empty reply from server. (XML-RPC fault code -504)


И как мне авторизироватся с помощью этой утилитки, это вообще возможно?
типа такого вместо localhost:

user:pass@127.0.0.1

Всё, разобрался:

xmlrpc user:pass@127.0.0.1:8080 command

SSN
04-01-2010, 11:02
попробуй поставить отсюда:
http://code.google.com/p/wl500g/source/browse/ipkg/optware

Похоже с русскими именами проблема, возвращается ерунда:

Index 0 String: '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\ xff\xff\xff\xff\xff\xff\xff\xff.Galapagos.2006.HDD VD.Rip.1080p.h264.Rus.Eng'

xmlrpc результат в UTF-8 портит. Такой UTF-8 невозможно куда-либо сконвертировать.

Xfera
06-12-2011, 15:54
Возник вопрос: - возможно ли установить jimmbot на мой роутер и каким образом можно это сделать? Я пока ещё чайник в Linux, на данный момент установленны основные программы скриптом для чайника...
Для справки: jimmbot работает на java, искал информацию по установке на linux там он каким то образом через apach запускается.

sem2142
30-12-2011, 04:45
парни помогите плз..
в общем хочу написать eventcmd в mcabber'e, но плохо знаю программирование..
хочу чтобы командой "SMS №телефона /сообщение/" отправляла смски посредством /opt/etc/sms_py/send.py
Полный пример этой команды:
/opt/etc/sms_py/send.py 79031111111 "message"