ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Mikhail Yakshin <greycat@altlinux.org>
To: ALT Devel discussion list <devel@lists.altlinux.org>
Subject: Re: [devel] I: jabber services
Date: Tue, 06 Mar 2007 02:52:14 +0300
Message-ID: <45ECAD2E.3090108@altlinux.org> (raw)
In-Reply-To: <45EC1A21.2070602@altlinux.org>

[-- Attachment #1: Type: text/plain, Size: 963 bytes --]

Mikhail Yakshin wrote:
> Приветствую!
> 
> Предлагаю вниманию интересующихся некий примерный проект того, как 
> планируется организовывать инфраструктуру сборки jabber-сервисов в ALT:

[...]

Теперь выкладываю для всех заинтересованных proof of concept реализации.
Здесь 3 скрипта:

* /usr/share/jabber/component/mrim.jabber-config - адаптер компонента,
умеет отдавать из конфига компонента 3 параметра конфигурации;

* /usr/share/jabber/server/ejabberd.jabber-config - адаптер сервера,
умеет регистрировать компонент в сервере;

* /usr/bin/jabber-config - скрипт, который тупо регистрирует все везде,
делая "всем хорошо".

и один новый конфиг ejabberd.cfg, в котором сделаны некие искусственные
конструкции - см. внутри делимитеры <jabber-config>, обозначающие место
для автоматического вторжения в файл.

Как всегда, жду отзывов и конструктивных предложений.

-- 
WBR, Mikhail Yakshin AKA GreyCat
ALT Linux [http://www.altlinux.ru] [xmpp:greycat@altlinux.org]

[-- Attachment #2: ejabberd.jabber-config --]
[-- Type: text/plain, Size: 2431 bytes --]

#!/bin/sh -e

CONFIG_FILE=/etc/ejabberd/ejabberd.cfg

show_usage()
{
	echo "Usage: $0 --port=<port> --host=<hostname> --password=<password> [--config=<config-file>]"
	exit 1
}

port=
host=
password=

TEMP=`getopt -n "$0" -o h -l port:,host:,password:,config: -- "$@"` || show_usage
eval set -- "$TEMP"

while :; do
	case "$1" in
	--port) shift; port=$1
		;;
	--host) shift; host=$1
		;;
	--password) shift; password=$1
		;;
	--config) shift; CONFIG_FILE=$1
		;;
	--) shift; break
		;;
	esac
	shift
done

[ -n "$port" ] || show_usage
[ -n "$host" ] || show_usage
[ -n "$password" ] || show_usage

exit_handler()
{
	local rc=$?
	trap - EXIT
	if [ -d "$JC_TEMPDIR" ]; then
		rm -f "$JC_TEMPDIR/header" "$JC_TEMPDIR/footer" "$JC_TEMPDIR/body" "$JC_TEMPDIR/ejabberd.cfg"
		rmdir "$JC_TEMPDIR"
	fi
	exit $rc
}
trap exit_handler HUP PIPE INT QUIT TERM EXIT

# Check if config has automation sections
egrep -q '^% <jabber-config>' $CONFIG_FILE || {
	echo "ejabberd: unable to find opening automation tag <jabber-config> - config file editing failed"
	exit 1
}
egrep -q '^% </jabber-config>' $CONFIG_FILE || {
	echo "ejabberd: unable to find closing automation tag </jabber-config> - config file editing failed"
	exit 1
}

# Split config into parts
JC_TEMPDIR=`mktemp -td`
sed '/^% <jabber-config>/q' <$CONFIG_FILE >"$JC_TEMPDIR/header"
sed -n '/^% <jabber-config>/,/^% <\/jabber-config>/p' <$CONFIG_FILE | sed '1d; $d' >"$JC_TEMPDIR/body"
sed -n '/^% <\/jabber-config>/,$p' <$CONFIG_FILE >"$JC_TEMPDIR/footer"

# Check if it's there but disabled
LINE="{$port, ejabberd_service, [{ip, {127, 0, 0, 1}}, {access, all}, {host, \"$host\", [{password, \"$password\"}]}]},"
if egrep -q "% *{$port, ejabberd_service, " "$JC_TEMPDIR/body"; then
	echo "ejabberd: service \"$host\" is disabled"
elif grep -q "{$port, ejabberd_service, " "$JC_TEMPDIR/body"; then
	echo "ejabberd: reinstalling service \"$host\""
	sed -i "s!{$port, ejabberd_service, .*!$LINE!" "$JC_TEMPDIR/body"
else
	echo "ejabberd: adding new service \"$host\""
	echo "$LINE" >>"$JC_TEMPDIR/body"
fi

# Recollect parts to create a new config file
cat "$JC_TEMPDIR/header" "$JC_TEMPDIR/body" "$JC_TEMPDIR/footer" >"$JC_TEMPDIR/ejabberd.cfg"

# Replace old config if it differs
if ! diff -q "$CONFIG_FILE" "$JC_TEMPDIR/ejabberd.cfg" >/dev/null; then
	echo "ejabberd: updating config file"
	mv -f "$CONFIG_FILE" "${CONFIG_FILE}.old"
	mv -f "$JC_TEMPDIR/ejabberd.cfg" "$CONFIG_FILE"
fi

[-- Attachment #3: ejabberd.cfg --]
[-- Type: text/plain, Size: 5787 bytes --]

%override_acls.


% Users that have admin access.  Add line like one of the following after you
% will be successfully registered on server to get admin access:
%{acl, admin, {user, "aleksey"}}.
%{acl, admin, {user, "ermine"}}.

% Blocked users:
%{acl, blocked, {user, "test"}}.

% Local users:
{acl, local, {user_regexp, ""}}.

% Another examples of ACLs:
%{acl, jabberorg, {server, "jabber.org"}}.
%{acl, aleksey, {user, "aleksey", "jabber.ru"}}.
%{acl, test, {user_regexp, "^test"}}.
%{acl, test, {user_glob, "test*"}}.


% Only admins can use configuration interface:
{access, configure, [{allow, admin}]}.

% Every username can be registered via in-band registration:
{access, register, [{allow, all}]}.

% None username can be registered via in-band registration:
%{access, register, [{deny, all}]}.

% After successful registration user will get message with following subject
% and body:
{welcome_message,
 {"Welcome!",
  "Welcome to ALT Linux Jabber Service hosted on ejabberd server.  "
  "For information about Jabber visit http://jabber.org"}}.
% Replace them with 'none' if you don't want to send such message:
%{welcome_message, none}.

% List of people who will get notifications about registered users
%{registration_watchers, ["admin1@localhost",
%                         "admin2@localhost"]}.

% Only admins can send announcement messages:
{access, announce, [{allow, admin}]}.


% Only non-blocked users can use c2s connections:
{access, c2s, [{deny, blocked},
	       {allow, all}]}.

% Set shaper with name "normal" to limit traffic speed to 1000B/s
{shaper, normal, {maxrate, 1000}}.

% Set shaper with name "fast" to limit traffic speed to 50000B/s
{shaper, fast, {maxrate, 50000}}.

% For all users except admins used "normal" shaper
{access, c2s_shaper, [{none, admin},
		      {normal, all}]}.

% For all S2S connections used "fast" shaper
{access, s2s_shaper, [{fast, all}]}.

% Admins of this server are also admins of MUC service:
{access, muc_admin, [{allow, admin}]}.

% All users are allowed to use MUC service:
{access, muc, [{allow, all}]}.

% This rule allows access only for local users:
{access, local, [{allow, local}]}.


% Authentification method.  If you want to use internal user base, then use
% this line:
{auth_method, internal}.

% For LDAP uthentification use these lines instead of above one:
%{auth_method, ldap}.
%{ldap_servers, ["localhost"]}.    % List of LDAP servers
%{ldap_uidattr, "uid"}.            % LDAP attribute that holds user ID
%{ldap_base, "dc=example,dc=com"}. % Base of LDAP directory


% Host name: (replace for your hostname)
{host, "localhost"}.


% Default language for server messages
{language, "en"}.

% Listened ports:
{listen,
% Ordinary client-2-server service
 [{5222, ejabberd_c2s,     [{access, c2s},
                            {shaper, c2s_shaper}]},

% SSL-enabled client-2-server service
  {5223, ejabberd_c2s,     [{access, c2s},
                            ssl,
                            {certfile, "/etc/ssl/certs/ejabberd.pem"}]},

% Server-2-server service
  {5269, ejabberd_s2s_in,  [{shaper, s2s_shaper}]},

% The list between <jabber-config> and </jabber-config> is automatically
% generated by installing packages and running jabber-config script.
% Feel free to comment out, but don't edit it manually!
%
% If you want to edit it something here, comment it out there and
% re-create what you want outside jabber-config section.

% <jabber-config>
% </jabber-config>

% External MUC jabber-muc (but internal mod_muc is better :))
% {5554, ejabberd_service, [{ip, {127, 0, 0, 1}},
%                           {access, all},
%                           {host, "muc.localhost", [{password, "secret"}]}]},

% Jabber ICQ Transport
% {5555, ejabberd_service, [{ip, {127, 0, 0, 1}},
%                           {access, all},
%                           {hosts, ["icq.localhost", "sms.localhost"], [{password, "secret"}]}]},

% AIM Transport
% {5556, ejabberd_service, [{ip, {127, 0, 0, 1}},
%                           {access, all},
%                           {host, "aim.localhost", [{password, "secret"}]}]},

% MSN Transport
% {5557, ejabberd_service, [{ip, {127, 0, 0, 1}},
%                           {access, all},
%                           {host, "msn.localhost", [{password, "secret"}]}]},

% Yahoo! Transport
% {5558, ejabberd_service, [{ip, {127, 0, 0, 1}},
%                           {access, all},
%                           {host, "yahoo.localhost", [{password, "secret"}]}]},

% External JUD (internal is more powerful,
% but doesn't allow to register users from other servers)
% {5559, ejabberd_service, [{ip, {127, 0, 0, 1}},
%                           {access, all},
%                           {host, "jud.localhost", [{password, "secret"}]}]},

% HTTP service (You may choose options HTTP-polling and Web-administering)
% When commenting out, be careful with commas
  {5280, ejabberd_http,    [http_poll, web_admin]}
 ]}.

% If SRV lookup fails, then port 5269 is used to communicate with remote server
{outgoing_s2s_port, 5269}.

% Used modules:
{modules,
 [
  {mod_register,   [{access, register}]},
  {mod_roster,     []},
  {mod_privacy,    []},
  {mod_configure,  []},
  {mod_configure2, []},
  {mod_disco,      [{extra_domains, ["users.jabber.org"]}]},
  {mod_stats,      []},
  {mod_vcard,      []},
  {mod_offline,    []},
  {mod_echo,       []},
  {mod_private,    []},
  {mod_irc,        []},
% Default options for mod_muc:
%   host: "conference." ++ ?MYNAME
%   access: all
%   access_create: all
%   access_admin: none (only room creator has owner privileges)
  {mod_muc,        [{access, muc},
		    {access_create, muc},
		    {access_admin, muc_admin}]},
  {mod_pubsub,     []},
  {mod_time,       []},
  {mod_last,       []},
  {mod_version,    []}
 ]}.


[-- Attachment #4: mrim.jabber-config --]
[-- Type: text/plain, Size: 300 bytes --]

#!/bin/sh -e

CONFIG_FILE=/etc/jabber-mrim/mrim.conf
#CONFIG_FILE=mrim/mrim.conf.example

case "$1" in
--port) sed -n '/^port = / s/^port = //p' <$CONFIG_FILE
	;;
--host) sed -n '/^name = / s/^name = //p' <$CONFIG_FILE
	;;
--password) sed -n '/^password = / s/^password = //p' <$CONFIG_FILE
	;;
esac

[-- Attachment #5: jabber-config --]
[-- Type: text/plain, Size: 348 bytes --]

#!/bin/sh -e

SERVER_DIR=/usr/share/jabber/server
COMPONENT_DIR=/usr/share/jabber/component

for S in "$SERVER_DIR/*"; do
	[ -x "$S" ] || continue
	for C in "$COMPONENT_DIR/*"; do
		[ -x "$C" ] || continue
		port=`"$C" --port`
		host=`"$C" --host`
		password=`"$C" --password`
		"$S" "--port=$port" "--host=$host" "--password=$password"
	done
done

  parent reply	other threads:[~2007-03-05 23:52 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-05 13:24 Mikhail Yakshin
2007-03-05 13:37 ` Mikhail Gusarov
2007-03-11 13:47   ` [devel] jabber policy? (was: I: jabber services) Michael Shigorin
2007-03-11 16:40     ` Mikhail Gusarov
2007-03-11 19:49       ` Michael Shigorin
2007-03-05 14:02 ` [devel] I: jabber services Шенцев Алексей Владимирович
2007-03-05 14:15   ` Nick S. Grechukh
2007-03-05 15:16   ` Mikhail Yakshin
2007-03-05 15:22     ` Шенцев Алексей Владимирович
2007-03-05 14:16 ` Dmitriy L. Kruglikov
2007-03-05 14:47   ` Alexey I. Froloff
2007-03-05 15:06   ` Mikhail Yakshin
2007-03-05 23:52 ` Mikhail Yakshin [this message]
2007-03-12  7:59   ` Mikhail Yakshin
2007-03-12 10:26       ` Mikhail Yakshin
2007-03-12 23:01     ` Michael Shigorin
2007-03-13  5:25       ` Alexey Sidorov
2007-03-13  8:22         ` Mikhail Yakshin
2007-03-13 14:00           ` Alexey Sidorov
2007-03-14 13:53             ` [devel] [JT] точки над Ы (Was: I: jabber services) Andrei Bulava
2007-03-14 14:20               ` Anton Farygin
2007-03-14 14:32                 ` Igor Zubkov
2007-03-14 14:43                   ` Anton Farygin
2007-06-21 22:37                     ` Igor Zubkov
2007-06-23 14:30                       ` Денис Смирнов
2007-03-14 18:06               ` Алексей Сидоров
2007-03-17 12:58               ` [devel] [JT] активный админ -- толковый майнтейнер Michael Shigorin
2007-03-13  8:53       ` [devel] I: jabber services Денис Смирнов

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45ECAD2E.3090108@altlinux.org \
    --to=greycat@altlinux.org \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git