Содержание

Установка бота Isida с использованием PostgreSQL в Ubuntu-server

Подготовка системы

Получаем права суперпользователя перманентно:

sudo -s

Устанавливаем необходимые для корректной работы бота компоненты:

apt-get install python2.7 python2.7-minimal git git-core postgresql openssl python-psycopg2

Скачиваем, собираем из исходников python-crontab и убираем за собой мусор:

cd /tmp
wget https://pypi.python.org/packages/source/c/crontab/crontab-0.20.5.tar.gz#md5=e358955f1662810a7995ac4825d0c647
tar -xvf crontab-0.20.5.tar.gz
cd crontab-0.20.5
python setup.py build
python setup.py install
cd .. && rm -rf /tmp/crontab*

Рекомендуемоые действия

Подготовим PostgreSQL к работе с ботом, поправим конфигурационный файл:

nano /etc/postgresql/9.3/main/pg_hba.conf

Приведем данную секцию local к следующему виду

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     trust

Иногда бывают случаи, когда владелец бота халатно относится к безопасности своего сервера/компьютера, иногда злоумышленники находят какие-либо бреши в коде бота (как это не раз бывало с талисманами) и пользуются этим… Во избежание подобных проблем, рекомендую для ботов создавать отдельные учетные записи без прав sudo со своими домашними директориями. В данном мануале именно это мы и сделаем:

useradd isida

Назначаем пароль к учетной записи, отвечаем на вопросы…

Установка и настройка бота

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

cd /home/isida
su isida

Скачиваем из GIT-репозитория самого бота и входим в его директорию (в дальнейшем надо работать в ней):

git clone git://github.com/disabler/isida/4.git isida
cd isida

Создаем конфиг бота на базе дефолтного и правим его:

cp settings/demo_config.py settings/config.py
nano settings/config.py

Вносим свои данные, также указываем данные к доступу в PostgreSQL (относится к паролю, остальное в этой секции можно оставить как есть) <spoiler>

config.py
# -*- coding: utf-8 -*-
 
#-------------------------------------------------------#
#				 Isida-bot Config file
#						v3.2ru
#-------------------------------------------------------#
 
 
#-------------------------------------------------------#
#--------------- Настройки подключения -----------------#
Settings = {
'nickname': 			u'<пишем сюда ник бота>',			# Ник бота в конференциях
'jid':				u'isida-bot@server.tld/resource',		# Jid бота с ресурсом
'password':			u'********',					# Пароль Jid'а бота
'status':			u'online',					# Статус бота chat|online|away|xa|dnd
'priority':			0,						# Приоритет
'message':			u'Йа аццкое железко!'}				# Статус-сообщение
 
 
#-------------------------------------------------------#
#---------------- Стартовые настройки ------------------#
SuperAdmin		=	u'username@server.tld'				# JID владельца бота
defaultConf		=	u'room@conference.server.tld'			# Стартовая конференция
prefix			=	u'_'						# Префикс команд по умолчанию
msg_limit		=	2048						# Лимит символов в одном сообщении
 
 
#-------------------------------------------------------#
#---------------- Настройка прокси/хостов --------------#
#proxy = {'host':'localhost','port':3128,'user':'me','password':'secret'}	# Прокси
#proxy = {'host':'127.0.0.1','port':3128,'user':'','password':''}
#proxy = {'host':'localhost','port':3128}
#server = 'allports.jabber.ru:443'						# Подключение минуя ресольвер
#secure = True									# Включение ssl (порт 5223)
#http_proxy = {'host':'localhost','port':3128,'user':'me','password':'secret'}	# Http-прокси
#http_proxy = {'host':'127.0.0.1','port':3128,'user':None,'password':None}
 
 
#-------------------------------------------------------#
#-------------- Отладка, системные логи ----------------#
#ignore_owner = True								# не исполнять для владельца бота отключенные команды
#halt_on_exception = True							# останавливать работу бота при исключениях
#debug_xmpppy = True								# режим отладки xmpppy
#debug_console = True								# режим показа действий бота в консоле
#database_debug = True								# режим отладки PostgreSQL
CommandsLog = True								# логгирование команд бота
#thread_type = None								# тип тредов thread/threading. по умолчанию - threading
#ENABLE_TLS = False								# принудительное отключение TLS при сбоях на больших станзах на старых версиях OpenSSL
#ENABLE_SASL = False								# отключение SASL
 
 
 
#-------------------------------------------------------#
#----------------- Настройка баз данных ----------------#
#---------------------- PostgreSQL ---------------------#
base_type = 'pgsql'			# тип базы: pgsql
base_name = 'isidabot'			# название базы для PostgreSQL
base_user = 'isidabot'			# пользователь базы для PostgreSQL
base_host = 'localhost'			# хост базы для PostgreSQL
base_pass = '******'			# пароль базы для PostgreSQL
base_port = '5432'			# порт для подключения. стандартный - 5432
 
#----------------------- SQLite3 -----------------------#
#base_type = 'sqlite3'			# тип базы: sqlite3
 
#------------------------ MySQL ------------------------#
#base_type = 'mysql'			# тип базы: mysql
#base_name = 'isidabot'			# название базы для MySQL
#base_user = 'isidabot'			# пользователь базы для MySQL
#base_host = 'localhost'		# хост базы для MySQL
#base_pass = '******'			# пароль базы для MySQL
#base_port = 3306			# порт для подключения. стандартный - 3306
 
 
#-------------------------------------------------------#
#------------------ Файлы, пути к файлам ---------------#
tmp_folder = 'tmp/%s'						# папка временных данных
data_folder = 'data/%s'						# папка данных
set_folder 	= 'settings/%s'					# папка настроек
sqlite_base = data_folder % 'sqlite3.db'			# файл с базой sqlite3
slog_folder = data_folder % 'log/%s'				# папка системных логов
back_folder = data_folder % 'backup/%s'				# папка хранения резервных копий
loc_folder 	= data_folder % 'locales/%s.txt'		# папка локализаций
log_folder 	= data_folder % 'conflogs/%s'			# папка логов конференций
LOG_FILENAME = slog_folder % 'error.txt'			# логи ошибок
ver_file = tmp_folder % 'version'				# версия бота
cens = data_folder % 'censor.txt'				# цензор
custom_cens = data_folder % 'custom_censor.txt'			# цензор пользователя
public_log = log_folder % 'chatlogs/%s'				# папка публичных логов конференций
system_log = log_folder % 'syslogs/%s'				# папка системных логов конференций
logs_css_path = '../../../.css/isida.css'			# путь к css файлу для логов
tld_list = data_folder % 'tldlist.txt'				# список tld кодов
poke_file = data_folder % 'poke.txt'				# список ответов для команды poke
answers_file = tmp_folder % 'answers.txt'			# имя файла по умолчанию для импорта/экспорта ответов
date_file = data_folder % 'date.txt'				# список праздников
pastepath = data_folder % 'paste/'				# путь для больших сообщений
pasteurl  = 'http://fill_it_before_use/paste/'			# url для сообщений. необходимо вписать *СВОЙ* сайт!
paste_css_path = '.css/isida.css'				# путь к css
default_msg_limit = msg_limit					# размер сообщений по умолчанию
smile_folder = '.smiles'					# папка со смайлами в чатлогах
smile_descriptor = 'icondef.xml'				# дескриптор смайлов
back_file = back_folder % '%s.back'				# шаблон копий файлов
starttime_file = tmp_folder % 'starttime'
 
#-------------------------------------------------------#
# Регекспы для блокиратора рекламы, регистронезависимые #
adblock_regexp = [u'([-0-9a-zа-я_+]+@c[-0-9a-z-.]+)',
				  u'https?://(.*?icq.*?/[-a-z0-9?+./=?&]*?)']
 
#-------------------------------------------------------#
#------------- Дополнительные настройки ----------------#
#default_censor_set = 2						# номер набора правил для цензора. 1 - слово целиком, 2 - кроме первой буквы
 
#-------------------------------------------------------#

</spoiler> Сохраняем и выходим из редактора. Также временно выходим из учетной записи isida, нажав сочетание CTRL+D, либо написав команду exit.

Создание БД PostgreSQL

Создадим базы данных для бота, используя его шаблоны (именно поэтому при настройке БД необходимо находиться в директории бота)

su postgres
createuser -P isidabot
createdb isidabot -E UTF8 -T template0
psql -U isidabot isidabot -f scripts/pgsql.schema
psql -U isidabot isidabot -f data/db/defcodes.dump
psql -U isidabot isidabot -f data/db/dist.dump
psql -U isidabot isidabot -f data/db/gis.dump
psql -U isidabot isidabot -f data/db/wz.dump
psql -U isidabot isidabot -f data/db/ru_alias.dump
exit

<fc #ff0000>Внимание!</fc>
<fc #ffff00>После создания Базы Данных и импорта дампов рекомендуется очистить БД от дублей следующей командой:</fc>

psql -U isidabot isidabot -f pgsql_remove_duplicates.schema

до выхода из учетной записи PostgreSQL. На этом подготовка и настройка закончены.

Запуск бота

Как говорилось выше, для бота лучше всего иметь свою учетныю запись без права выполнять привилигерованные действия. Это означает, что его запуск и работа также должны быть из этой учетки. Поэтому снова логинимся:

su isida

и при условии, что мы все еще находимся в директории /home/isida/isida производим запуск бота

sh launch.sh &

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

touch isida.sh
nano isida.sh

Вставляем в скрипт следующее

#!/bin/sh
cd /home/isida/isida && sh launch.sh &
exit

и прописываем в /etc/rc.local его запуск от учетной записи isida при старте ОС (как ни странно, напрямую запустить бота у меня не получилось, поэтому и костыли в помощь :-) )

nano /etc/rc.local

вставить код

sleep 15 && sudo -H -b -u isida sh /home/isida/isida.sh

в целом выглядеть должно примерно так: <spoiler>

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
 
sleep 15 && sudo -H -b -u isida sh /home/isida/isida.sh
 
exit 0

</spoiler>

Эпилог

Это самое основное, что надо сделать для установки и запуска бота Isida.
Материал для этой статьи честно скоммуниздил с Wiki Isida.
Всю остальную информацию по более тонкой настройке вы сможете взять оттуда.