Установка ICQ сервера для локальной сети

Решил рассказать вам про установку локального icq сервера. Вещица полезная, особенно если сотрудники оффиса сидят по разным комнатам. Конечно это способствует развитию гиподинамии, но такой уж на век. В любом случае, решать вам. Выбрать сервер будет очень просто, потому что он один (про другие я не слышал, во всех форумах говорят только о нем) iserverd...

[Беляевский Сергей]

Установка ICQ сервера для локальной сети.



Беляевский Сергей

Решил рассказать вам про установку локального icq сервера. Вещица полезная, особенно если сотрудники оффиса сидят по разным комнатам. Конечно это способствует развитию гиподинамии, но такой уж на век. В любом случае, решать вам. Выбрать сервер будет очень просто, потому что он один (про другие я не слышал, во всех форумах говорят только о нем) iserverd. Скачать его можно на http://iserverd.khstu.ru/download/index_r.html. Существует две ветки - stable (стабильные с исправлеными багами) и current (те что сейчас находятся в разработке). Я брал IServerd-current.tar.gz работает достаточно хорошо, пока нареканий не было. Фишка этого продукта в том, что он работает с postgresql. Это что-то вроде MySQL только с большими возможностями. Он поддреживает почти все SQL конструкции, включая вложенные запросы, транзакции, схемы, пользовательские типы и функции. С установкой SQL сервера проблем быть не должно, он присудствует в портах /usr/ports/databases/postgresql-devel Но установить это 50% успеха, его нужно запустить и по минимуму сконфигурировать.

И так начнем.

Система.

OC FreeBSD 5.1 Celereon 333 RAM 32MB HDD 2GB

Установка postgresql.



#cd /usr/ports/databases/postgresql-devel
#make install


компьютеру возможно потребуется доступ в интернет, так как в distfiles пакетов может не оказаться. Я говорю пакетов потому у него есть зависимости - bisonXXXX. При наличии выделенной линии стянуть все что требуется не составит труда.
Сам SQL сервер имеет размер приблизительно 8.7МБ
bison - 815KБ.
После установки у нас появляется пользователь pgsql от его имени мы и будем стартовать сервер. И его родная папка /usr/local/pgsql. Нам надо решить где будет храниться база. Я просто создал папку data в /usr/local/pgsql сделал ее владельцем юзера pgsql

#cd /usr/local/pgsql
#mkdir data
#chown pgsql:pgsql ./data


и положил ее туда. Положил на самом деле подразумевает следующие действия:

#su pgsql
$initdb -D /usr/local/pgsql/data


Папка data теперь наполнена данными и содержит так же конфигурационые файлы. Но для запуска серера нам потребуется еще поправить postgresql.conf, а именно разкомментировать port = 5432. Сохраняем и запускаем. Это можно сделать из командной строки

#su pgsql -c 'pg_ctl start -d /usr/local/pgsql/data'

Но тогда нам прийдется это делать при каждой перезагрузке сервера. Поэтому лучше создать файл в /usr/local/etc/rc.d такого содержания:

#!/bin/sh

# $FreeBSD: ports/databases/postgresql-devel/files/pgsql.sh.tmpl,v 1.13 2002/04/11 04:58:11 ijliao Exp $
#
# For postmaster startup options, edit $PGDATA/postgresql.conf

PREFIX=/usr/local
PGBIN=${PREFIX}/bin

case $1 in
start)
[ -d ${PREFIX}/lib ] && /sbin/ldconfig -m ${PREFIX}/lib
touch /var/log/pgsql
chmod 600 /var/log/pgsql
chown pgsql:pgsql /var/log/pgsql
[ -x ${PGBIN}/pg_ctl ] && {
su -l pgsql -c \
'[ -d ${PGDATA} ] && exec /usr/local/bin/pg_ctl start -s -w -l /var/log/pgsql'
echo -n ' pgsql'
}
;;

stop)
[ -x ${PGBIN}/pg_ctl ] && {
su -l pgsql -c 'exec /usr/local/bin/pg_ctl stop -s -m fast'
echo -n ' pgsql'
}
;;

status)
[ -x ${PGBIN}/pg_ctl ] && {
exec su -l pgsql -c 'exec /usr/local/bin/pg_ctl status'
}
;;

*)
echo "usage: `basename $0` {start|stop|status}" >&2
exit 64
;;
esac


Может быть такое, что это файл уже там будет, остется только дать ему права на исполнение. Переходим к следующему этапу - установке iserverd

Установка iserverd.



Скачиваем архив http://iserverd.khstu.ru/download/IServerd-current.tar.gz, раскручиваем, далее

#./configure --with-russian
#make
#make install



ПРИМЕЧАНИЕ. Мне пришлось поправить одну строчку в исходных текстах программы что бы компиляция прошла без ошибок. Файл /config/action/y.tab.cpp строка 2040 // --attribute-- ((--unused--)). Сохраняем, компилим.

Теперь создаем таблицы и их владельцев

#su pgsql
$db_manage.sh create users_db


оно попросит указать имя владельца и пароль (эти данные мы потом должны будем передать iserverd)
DATABSE CREATED
USER CREATED
$


После, идем в /etc/iserverd

#cd /etc/iserverd

Там находятся примеры настроечных файлом, смело их делам рабочими, но с небольшими поправками.

iserv.conf


database user = юзер_которого_мы_создали_при_db_manage.sh create users_db
database password = пароль_который_мы_указали_при_db_manage.sh create users_db


v7_proto.conf


вообщем-то нам достаточно иметь поддержку v7, кроме этого есть возможность использования протокола v3 и v5.

V7 BOS address = IP:5190 #тут наш сервер будет слушать порт
V7 registration enabled = Yes #что бы юзера могли сами регистрироваться


ПРИМЕЧАНИЕ. Регистрацию юзеров можно проводить и на сервере:
# su pgsql
$cd /etc/iserverd/db
$icquser add UIN

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


Сохраняем. Стартуем. Как всегда у нас есть 2 варианта запуска:
1) командная строка # iserverd -o
2) скрипт (будет стартовать при каждой загрузке сервера /usr/local/etc/rc.d)

#!/bin/sh

ISERVERD="/usr/sbin/iserverd"
PIDFILE="/var/run/iserverd/iserverd.pid"

# See how we were called.
case "$1" in
start)
# Start daemons.
echo -n "Starting iserverd: "
$ISERVERD -o
sleep 1
if [ -f $PIDFILE ]; then
echo " [ OK ]"
else
echo " [ FAILED ]"
fi
;;

stop)
# Stop daemons.
echo -n "Shutting down iserverd: "
if [ -f $PIDFILE ]; then
kill `cat $PIDFILE`
echo " [ OK ]"
else
echo " [ FAILED ]"
fi
rm -f $PIDFILE
;;

status)

if [ -f $PIDFILE ]; then
echo -n "Iserverd is running, pid: "
echo `cat $PIDFILE`
else
echo "Iserverd is stopped"
fi
;;

restart)
$0 stop
$0 start
;;

*)
echo "Usage: iserverd {start|stop|restart|status}"
exit 1
esac

exit 0
Это была финальная часть настройки.

ВАЖНО!!!
Даже если все описаное проделано правильно, icq сервер может не запуститься (скорее всего так и будет). Это связано с параметрами с которыми собрано ядро. В первую очередь shared memory и семафоры. Увеличиваем эти параметры

options SHMALL=8192
options SHMMAX=(SHMMAXPGS*PAGE_SIZE+1)
options SEMMNI=40
options SEMMNS=240
options SEMUME=40
options SEMMNU=120
options SEMOPM=301
options SEMMSL=200
options SEMMAP=200

и пересобераем ядро. Как это делается, подробно описано в /usr/share/doc/handbook/kernelconfig.html
Привожу полные конфигурационные файлы для работы всех систем.

postgresql.conf


# -----------------------------
# PostgreSQL configuration file
# -----------------------------
#
# This file consists of lines of the form:
#
# name = value
#
# (The '=' is optional.) White space may be used. Comments are introduced
# with '#' anywhere on a line. The complete list of option names and
# allowed values can be found in the PostgreSQL documentation. The
# commented-out settings shown in this file represent the default values.
#
# Any option can also be given as a command line switch to the
# postmaster, e.g. 'postmaster -c log_connections=on'. Some options
# can be changed at run-time with the 'SET' SQL command.
#
# This file is read on postmaster startup and when the postmaster
# receives a SIGHUP. If you edit the file on a running system, you have
# to SIGHUP the postmaster for the changes to take effect, or use
# "pg_ctl reload".


#---------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#---------------------------------------------------------------------------

# - Connection Settings -

#tcpip_socket = false
max_connections = 100
# note: increasing max_connections costs about 500 bytes of shared
# memory per connection slot, in addition to costs from shared_buffers
# and max_locks_per_transaction.
#superuser_reserved_connections = 2
port = 5432
#unix_socket_directory = ''
#unix_socket_group = ''
#unix_socket_permissions = 0777 # octal
#virtual_host = '' # what interface to listen on; defaults to any
#rendezvous_name = '' # defaults to the computer name

# - Security & Authentication -

#authentication_timeout = 60 # 1-600, in seconds
#ssl = false
#password_encryption = true
#krb_server_keyfile = ''
#db_user_namespace = false


#---------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#---------------------------------------------------------------------------

# - Memory -

shared_buffers = 1000 # min 16, at least max_connections*2, 8KB each
#sort_mem = 1024 # min 64, size in KB
#vacuum_mem = 8192 # min 1024, size in KB
#debug_shared_buffers = 0 # 0-600 seconds

# - Background writer -
#bgwriter_delay = 200 # 10-5000 milliseconds
#bgwriter_percent = 1 # 0-100% of dirty buffers
#bgwriter_maxpages = 100 # 1-1000 buffers max at once

# - Free Space Map -

#max_fsm_pages = 20000 # min max_fsm_relations*16, 6 bytes each
#max_fsm_relations = 1000 # min 100, ~50 bytes each

# - Kernel Resource Usage -

#max_files_per_process = 1000 # min 25
#preload_libraries = ''


#---------------------------------------------------------------------------
# WRITE AHEAD LOG
#---------------------------------------------------------------------------

# - Settings -

#fsync = true # turns forced synchronization on or off
#wal_sync_method = fsync # the default varies across platforms:
# fsync, fdatasync, open_sync, or open_datasync
#wal_buffers = 8 # min 4, 8KB each

# - Checkpoints -

#checkpoint_segments = 3 # in logfile segments, min 1, 16MB each
#checkpoint_timeout = 300 # range 30-3600, in seconds
#checkpoint_warning = 30 # 0 is off, in seconds
#commit_delay = 0 # range 0-100000, in microseconds
#commit_siblings = 5 # range 1-1000


#---------------------------------------------------------------------------
# QUERY TUNING
#---------------------------------------------------------------------------

# - Planner Method Configuration -

#enable_hashagg = true
#enable_hashjoin = true
#enable_indexscan = true
#enable_mergejoin = true
#enable_nestloop = true
#enable_seqscan = true
#enable_sort = true
#enable_tidscan = true

# - Planner Cost Constants -

#effective_cache_size = 1000 # typically 8KB each
#random_page_cost = 4 # units are one sequential page fetch cost
#cpu_tuple_cost = 0.01 # (same)
#cpu_index_tuple_cost = 0.001 # (same)
#cpu_operator_cost = 0.0025 # (same)

# - Genetic Query Optimizer -

#geqo = true
#geqo_threshold = 11
#geqo_effort = 1
#geqo_generations = 0
#geqo_pool_size = 0 # default based on tables in statement,
# range 128-1024
#geqo_selection_bias = 2.0 # range 1.5-2.0

# - Other Planner Options -

#default_statistics_target = 10 # range 1-1000
#from_collapse_limit = 8
#join_collapse_limit = 8 # 1 disables collapsing of explicit JOINs


#---------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#---------------------------------------------------------------------------

# - Syslog -

#syslog = 0 # range 0-2; 0=stdout; 1=both; 2=syslog
#syslog_facility = 'LOCAL0'
#syslog_ident = 'postgres'

# - When to Log -

#client_min_messages = notice # Values, in order of decreasing detail:
# debug5, debug4, debug3, debug2, debug1,
# log, info, notice, warning, error

#log_min_messages = notice # Values, in order of decreasing detail:
# debug5, debug4, debug3, debug2, debug1,
# info, notice, warning, error, log, fatal,
# panic

#log_error_verbosity = default # terse, default, or verbose messages

#log_min_error_statement = panic # Values in order of increasing severity:
# debug5, debug4, debug3, debug2, debug1,
# info, notice, warning, error, panic(off)

#log_min_duration_statement = -1 # Log all statements whose
# execution time exceeds the value, in
# milliseconds. Zero prints all queries.
# Minus-one disables.

#silent_mode = false # DO NOT USE without Syslog!

# - What to Log -

#debug_print_parse = false
#debug_print_rewritten = false
#debug_print_plan = false
#debug_pretty_print = false
#log_connections = false
#log_duration = false
#log_pid = false
#log_statement = false
#log_timestamp = false
#log_hostname = false
#log_source_port = false


#---------------------------------------------------------------------------
# RUNTIME STATISTICS
#---------------------------------------------------------------------------

# - Statistics Monitoring -

#log_parser_stats = false
#log_planner_stats = false
#log_executor_stats = false
#log_statement_stats = false

# - Query/Index Statistics Collector -

#stats_start_collector = true
#stats_command_string = false
#stats_block_level = false
#stats_row_level = false
#stats_reset_on_server_start = true


#---------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
#---------------------------------------------------------------------------

# - Statement Behavior -

#search_path = '$user,public' # schema names
#check_function_bodies = true
#default_transaction_isolation = 'read committed'
#default_transaction_read_only = false
#statement_timeout = 0 # 0 is disabled, in milliseconds

# - Locale and Formatting -

#datestyle = 'iso, mdy'
#timezone = unknown # actually, defaults to TZ environment setting
#australian_timezones = false
#extra_float_digits = 0 # min -15, max 2
#client_encoding = sql_ascii # actually, defaults to database encoding<

# These settings are initialized by initdb -- they may be changed
lc_messages = 'ru_RU.KOI8-R' # locale for system error message strings
lc_monetary = 'ru_RU.KOI8-R' # locale for monetary formatting
lc_numeric = 'ru_RU.KOI8-R' # locale for number formatting
lc_time = 'ru_RU.KOI8-R' # locale for time formatting

# - Other Defaults -

#explain_pretty_print = true
#dynamic_library_path = '$libdir'
#max_expr_depth = 10000 # min 10


#---------------------------------------------------------------------------
# LOCK MANAGEMENT
#---------------------------------------------------------------------------

#deadlock_timeout = 1000 # in milliseconds
#max_locks_per_transaction = 64 # min 10, ~260*max_connections bytes each


#---------------------------------------------------------------------------
# VERSION/PLATFORM COMPATIBILITY
#---------------------------------------------------------------------------

# - Previous Postgres Versions -

#add_missing_from = true
#regex_flavor = advanced # advanced, extended, or basic
#sql_inheritance = true
#default_with_oids = true

# - Other Platforms & Clients -

#transform_null_equals = false


iserv.conf



# This is the main IServerd config file. Don't forget to
# change database and info passwords. Probably you'll need
# to change admin email (it is used in broadcast and
# error messages).

[Globals]

# ------server parameters ----------------------

Bind on all interfaces = No
Bind interface = 0.0.0.0/32
Listen port = 4000
Pid file path = /var/run/iserverd/iserverd.pid
Translate path = /etc/iserverd/translate
Translate table = RUSSIAN_WIN
Var dir path = /var/run/iserverd
Server mode = daemon
Min childs = 4
Max childs = 100
Shared memory size = 512000
Default ping time = 120
Depart list version = 1
Externals number = 0
Admin email = root@localhost
Info Password = DEFAULT
Enable actions = False
Enable watchdog = True
Start without RDBMS = True
Watchdog timeout = 10
WWP socket filename = /tmp/wwp_sock
Actions config file = /etc/iserverd/actions.conf
Realtime online db = False

# -----parameters for database system ----------

database user = полльзователь
database password = пароль

# Leave it blank if you have local PostgreSQL
database addr =
database port = 5432
users db name = users_db

vacuumdb timeout = 1800
Defrag db check period = 43200
Online db check period = 3600

# -----parameters for log/debug system----------

Maxlog size = 500
Log umask = 022
Log level = 10
Debug level = 10
Timestamp logs = True
Append logs = False
Log process pid = False

# -----Config files for Vxx proto modules--------

Include = /etc/iserverd/v3_proto.conf
Include = /etc/iserverd/v5_proto.conf
Include = /etc/iserverd/v7_proto.conf


v7_proto.conf



# ---Parameters for AIM/V7 proto module----
# This configuration is default.
# There is also one config file for AIM protocol module,
# that declares protocol rate-limits, snac groups and etc

Enable AIM port = 5190
V7 proto enabled = Yes
V7 connection timeout = 20
V7 cookie timeout = 240
V7 accept concurent = True
V7 max search = 100
V7 max contact size = 600
V7 max watchers size = 750
V7 max visible size = 200
V7 max invisible size = 200

# Direct connection to v3 is disabled by default
# because v3 client crashes on contact_list and
# file_abort messages, enable this only if you
# know what are you doing

V7 direct V3 connect = False

# This is just temp solution to allow iserverd
# administrator to setup bos server address
# returned to client after authorization
# IT SHOULD BE REAL ADDRESS OF YOUR SERVER OR V7 WILL NOT WORK

V7 BOS address = 192.168.2.10:5190
V7 proto config = /etc/iserverd/aim_proto.conf

# WARN: V7 clients doesn't provide enough information
# for manual registration, so there is only autoregistration
# And it is disabled by default

V7 registration enabled = Yes

# Default icbm subsystem parameters for V7 proto
# Client can change this params via SNAC(04,02)

V7 default max channel = 2
V7 default max msgsize = 512
V7 default max sevil = 999
V7 default max revil = 999
V7 default mm interval = 0

# Maximum groups in ServerStoredInformation
V7 max ssi groups = 61

# Maximum ingnore records in ServerStoredInformation
V7 max ssi ignore = 128

# Maximum non-icq contacts in ServerStoredInformation
V7 max ssi non-icq = 200

сайт разработчика http://iserverd.khstu.ru/russian
Последняя стабильная версия http://iserverd.khstu.ru/download/IServerd-stable.tar.gz
Последняя current версия http://iserverd.khstu.ru/download/IServerd-current.tar.gz

Статья взята с сайта OpenNet.

[ опубликовано 23/06/2005 ]

Беляевский Сергей - Установка ICQ сервера для локальной сети   Версия для печати