良い一日。
まず、私たちが持っているもの:主にWindows XP、Windows 2k3で自然に発生したドメイン、そしてgentoo linuxがインストールされている通常のマシン(またはサーバー)(オプションでMySQL)を含む〜150台のマシンの小さなネットワーク。
タスク:jabberサーバーをインストールし、ADのグループを使用して一般名簿を作成し、icqゲートをそれに接続して、jabberクライアントを稼働中のマシンに配置します。
ejabberdをインストールするejabberdのインストールを開始する前に、すべてが揃っていることを確認する必要があります。そうすれば、彼はそれを必要とする可能性があります。
- GNU Make
- Gcc
- libexpat 1.95以降
- アーラン/ OTP R10B-9以上
- STARTTLS、SASL、およびSSL暗号化用のOpenSSL 0.9.6以降。 オプション、強く推奨。
- Zlib 1.2.3以降、ストリーム圧縮のサポート(XEP-0138)。 オプション。
- IRCトランスポート(mod_irc)用のGNU Iconv 1.8以降。 オプション。 GNU Libcを搭載したシステムでは必要ありません。
安定版に共有名簿をインストールできなかったため、sjaからejabberd自体をビルドします。 これを行うには、次を実行します。
user$ svn checkout svn.process-one.net/ejabberd
これを収集します。アセンブリパラメーターに--enable-odbcを含めることを忘れないでください
user$ cd ejabberd/trunk/src/
user$ ./configure --enable-odbc
user$ make
user$ sudo make install
一部のエラーが表示されなかった場合は、さらに先に進みます。次のステップでは、共有名簿のモジュールを収集します。 モジュール自体のソースコードは、まだ
mod_shared_roster_ldap.erlです。user$ wget -c www.ejabberd.im/files/contributions/mod_shared_roster_ldap.erl
user$ erlc -I ejabberd/trunk/src/ mod_shared_roster_ldap.erl
そのようなメッセージが表示されても心配しないでください
./mod_shared_roster_ldap.erl:19: Warning: behaviour gen_mod undefined
./mod_shared_roster_ldap.erl:289: Warning: variable 'User' is unused
さて、新しいモジュールをまとめて残りにコピーします
user$ sudo cp mod_shared_roster_ldap.beam /lib/ejabberd/ebin/
Ejabberdのセットアップルートに移動して(
sudo -i || su )、/ etc / ejabberd /に移動します。
そこでejabberd.cfgというファイルに興味があり、お気に入りのエディターで開いて編集を開始します。 私は%%でエスケープされるいくつかのコメントを使用して設定をもたらします:
override_global.
override_local.
override_acls.
{loglevel, 4}.
%% ,
, admin@domain %%
{watchdog_admins, ["admin@domain"]}.
%% , ejabberd,
cartman. hostname %%
{hosts, ["cartman"]}.
{listen,
[
%% %%
{5222, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536}
]},
%% , . SSL %%
{5223, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
%% , %%
{certfile, "/etc/ejabberd/cert/ejabberd.pem"}, tls,
{max_stanza_size, 65536}
]},
%% jabber %%
{5269, ejabberd_s2s_in, [
{shaper, s2s_shaper},
{max_stanza_size, 131072}
]},
%% , pyucq-t %%
{8888, ejabberd_service, [
{access, all},
{shaper_rule, fast},
{ip, {127, 0, 0, 1}},
%% %%
{hosts, ["icq.cartman"],
%% , pyicq-t %%
[{password, "123456"}]}
]},
%% ejabberd, %%
{5280, ejabberd_http, [
http_poll,
web_admin
]}
]}.
%% ldap %%
{auth_method, ldap}.
%% , domain.local %%
{ldap_servers, ["domain.local"]}.
{ldap_uids, [{"sAMAccountName"}]}.
{ldap_base, "dc=domain,dc=local"}.
%% , root, "" "" Users, ldap ( ?) %%
{ldap_rootdn, "cn=root,cn=Users,dc=domain,dc=local"}.
%% %%
{ldap_password, "123456"}.
%% , jabber ( ) %%
{shaper, normal, {maxrate, 10000}}.
{shaper, fast, {maxrate, 500000}}.
%% , admin %%
{acl, admin, {user, "admin", "cartman"}}.
%% , %%
{acl, admin, {user, "admin2", "cartman"}}.
{acl, local, {user_regexp, ""}}.
{access, max_user_sessions, [{10, all}]}.
{access, local, [{allow, local}]}.
%% , , jabber %%
{access, c2s, [{deny, blocked},
{allow, all}]}.
{access, c2s_shaper, [{none, admin},
{normal, all}]}.
{access, s2s_shaper, [{fast, all}]}.
{access, announce, [{allow, admin}]}.
{access, configure, [{allow, admin}]}.
{access, muc_admin, [{allow, admin}]}.
{access, muc, [{allow, all}]}.
{access, pubsub_createnode, [{allow, all}]}.
%% , AD %%
{access, register, [{deny, all}]}.
{language, "ru"}.
{modules,
[
{mod_adhoc, []},
{mod_announce, [{access, announce}]}, % recommends mod_adhoc
{mod_caps, []},
{mod_configure,[]}, % requires mod_adhoc
{mod_disco, []},
{mod_echo, [{host, "echo.localhost"}]},
{mod_last, []},
{mod_muc, [
{access, muc},
{access_create, muc},
{access_persistent, muc},
{access_admin, muc_admin}
]},
%% , , , . %%
{mod_muc_log, [
{access, muc},
{access_create, muc},
{access_admin, muc_admin},
{access_log, muc},
{outdir, "/var/log/muc_log"},
{top_link, {"http://cartman/", "JABBER SERVER"}}
]},
{mod_offline, []},
{mod_privacy, []},
{mod_private, []},
{mod_pubsub, [ % requires mod_caps
{access_createnode, pubsub_createnode},
{plugins, ["default", "pep"]}
]},
{mod_register, [
{welcome_message, {"Welcome",
"Hi! Welcome to this Jabber server."}},
%% , , , , , . %%
{registration_watchers, ["admin@cartman"]},
{access, register}
]},
{mod_roster, []},
{mod_stats, []},
{mod_time, []},
%% vcard AD, %%
{mod_vcard_ldap,
[{host, "users.cartman"},
{ldap_vcard_map,
[{"NICKNAME", "%u", []},
{"GIVEN", "%s", ["givenName"]},
{"MIDDLE", "%s", ["initials"]},
{"FAMILY", "%s", ["sn"]},
{"FN", "%s", ["displayName"]},
{"EMAIL", "%s", ["mail"]},
{"ORGNAME", "%s", ["company"]},
{"ORGUNIT", "%s", ["department"]},
{"CTRY", "%s", ["c"]},
{"LOCALITY", "%s", ["l"]},
{"STREET", "%s", ["streetAddress"]},
{"REGION", "%s", ["st"]},
{"PCODE", "%s", ["postalCode"]},
{"TITLE", "%s", ["title"]},
{"URL", "%s", ["wWWHomePage"]},
{"DESC", "%s", ["description"]},
{"TEL", "%s", ["telephoneNumber"]}]},
{ldap_search_fields,
[{"User", "%u"},
{"Name", "givenName"},
{"Family Name", "sn"},
{"Email", "mail"},
{"Phone", "telephoneNumber"}
]},
{ldap_search_reported,
[{"Full Name", "FN"},
{"Nickname", "NICKNAME"},
{"Email", "EMAIL"}]}
]},
%% shared_roster. department, AD %%
{mod_shared_roster_ldap,
[{ldap_groupattr,"department"},
{ldap_groupdesc,"department"},
%% , , AD JabberUsers, "" Users. , JabberUsers %%
{ldap_rfilter, "(&(memberOf=CN=JabberUsers,CN=Users,DC=klondike,DC=local) (|(userAccountControl=66050)(userAccountControl=66048)))"},
{ldap_memberattr,"sAMAccountName"},
{ldap_userdesc,"cn"}
]
},
{mod_version, []}
]}.
トレーラーにはすべて準備が整っています。SSL証明書を追加しましょう(bamが便利です)
mkdir /etc/ejabberd/cert
cd /etc/ejabberd/cert
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem
openssl rsa -in privkey.pem -out privkey.pem
cat privkey.pem >> ejabberd.pem
rm privkey.pem
pyicq-tをインストールして構成するsnv || svc || gitからそれを収集することはありません。それは、gentooで利用可能になり、かなり機能しているからです(主に、USE =“ webinterface”を含めることを忘れないでください。
user$ sudo emerge net-im/pyicq-t
** / etc / jabber / pyicq-t.xmlにある彼の(彼女の)congfigによって、すべてがさらに修正されています。
<pyicqt>
<jid>icq.cartman</jid>
<spooldir>/var/spool/jabber</spooldir>
<pid>/var/run/jabber/pyicq-t.pid</pid>
<mainServer>127.0.0.1</mainServer>
<mainServerJID>cartman</mainServerJID>
<website>http://cartman/</website>
<supportJid>admin@cartman</supportJid>
<port>8888</port>
<webport>12345</webport>
<secret>123456</secret>
<lang>ru</lang>
<encoding>cp-1251</encoding>
<icqServer>login.icq.com</icqServer>
<icqPort>5190</icqPort>
<usemd5auth/>
<sessionGreeting>Welcome to icq gate of Cartman server</sessionGreeting>
<enableShutdownMessage/>
<customShutdownMessage>Sorry but icq gete will be shutdown.</customShutdownMessage>
<registerMessage>You have succsefull registed</registerMessage>
<crossChat/>
<enableAutoInvite/>
<xstatusessupport/>
<detectunicode>1</detectunicode>
<admins>
<jid>admin@cartman</jid>
</admins>
<reactor>epoll</reactor>
<!--<xdbDriver>xmlfiles</xdbDriver>-->
<xdbDriver>mysql</xdbDriver>
<xdbDriver_mysql>
<username>pyicqt</username>
<password>12345678</password>
<database>pyicqt</database>
<server>localhost</server>
<format>encrypted</format>
</xdbDriver_mysql>
<avatarsOnlyOnChat/>
</pyicqt>
私はおそらくそれについてコメントしないでしょう、設定自体のコメントはすでに非常に
良い、私が気づく唯一のことは8888です
私たちがいる方法で、ジャバーにねじ込まれているポート
彼らはjabber設定を登録しました。123456はjabberへのゲートアクセスのパスワードです。* .xmlファイルから情報のストレージを削除し、MySQLに転送します。以下にその方法を示します。
MySQLのインストール方法と起動方法、およびユーザーとデータベースの作成方法については説明しません。 一般に、MySQLは既にpyicqtデータベースで動作しており、pyicqtユーザーの完全な権限があり、パスワード12345678を使用してログインできます。次に、gentuvodsの場合は、/ usr / lib / python2.5 / site-packages / pyicq-フォルダーに移動します
t / tools /そして、次のことを行います
user$ mysql -u pyicqt -D pyicqt -p
mysql> \. db-setup.mysql
さて、これをすべて実行してみましょうか? 最初にejabberdを起動することにより、ejabberdctlを介して実行し、すぐにpyicq-tを実行します
user$ sudo ejabberdctl start
user$ sudo /etc/init.d/pyicq-t start
そして、jabberログを調べ始めます。
user$ sudo tail -F /var/log/ejabberd/ejabberd.log
そうでない場合、いくつかの恐ろしい恐怖は発生しません-すべての話題。 クライアントの構成を開始します。
クライアントの構成とインストール原則として、私は多くのグースクライアントを感じました(私自身は長い間mcabberを使用しています)、そして
Windows XPを搭載したクライアントマシンでは、
PSIはより進化しており、PSIは
JabberクライアントとSparkは、MSIパッケージを持つ唯一のクライアントです。 どっち
あなたは自分で決定し、賭けます。私は、HELLの政治家を通じて、私がそれらをどのように置くかを個人的に示します。
PSI
原則として、これは良くありません。設定を中断するためにPythonを使用しました
クライアントマシン上にあるため、それぞれにインストールする必要があります
(これは簡単に行われます-彼はMSIパッケージを持っているので、ADを介して強打します)。 次に、自分でPSIを設定し、アカウントを追加して、すべてがどのように機能するか、グループがどのように表示されるか、オフラインユーザーがハングする方法を確認し、PSIを設定します。 完了したら、閉じます。
* C:\ Documents and Settings \%USERNAME%\ PsiData \ profiles \ default \ accounts.xmlに移動して編集し、行
admin @ cartman (最後のどこか)を探します(adminは、ジャバーを入力したアカウントです、およびADのアカウント)で
管理者を
QWERTYUIOPに置き換え、保存して、それを
accounts_oldに名前変更し
ます 。 次のステップは、全員の読み取り権限でボールを作成することです。
\\ server4 \ psi_installを持ち 、
C:\ Documents and Settings \%USERNAME%\ PsiDataおよび
C:\ Program Files \ Psiを ドロップするとし
ます (読み取り権限が必要です)すべてである)。
\\ server4 \ psi_install \ PsiData \ profiles \ defaultに 移動し、そこに
psi_settings.pyという名前のPythonスクリプトをコピーし
ます 。
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
#!/usr/env/bin python
# -*- coding: utf-8 -*-
import os
import re
import sys
username = os.getenv('USERNAME')
find_accountname = re.compile('^\s{0,3}<jid type="QString" >(.+)@cartman</jid>$')
change_username = re.compile('QWERTYUIOP')
fr = open('accounts_old', 'r')
fw = open('accounts.xml', 'w+')
for i in fr.readlines():
if find_accountname.search(i):
i = change_username.sub(username, i)
fw.write(i)
fr.close()
fw.close()
スクリプトは悲惨で、急いで書いたそのため、ほとんどのユーザーは限られた権限で作業するため、
C:\ Documents and Settings \%USERNAME%*のディレクトリからPSIを起動することにしました
。 [グループポリシー]-> [ユーザーの構成]-> [Windowsの構成]-> [スクリプト(ログイン/ログアウト)]のスナップインに進み、[システムへのログイン]を選択します。 [ファイルの表示]をクリックし、* copy_psi.cmdというファイルを作成して、内容を変更します。
@Echo off
IF EXIST "C:\Python25\python.exe" (
IF NOT EXIST "C:\Documents and Settings\%USERNAME%\Psi\psi.exe" (
xcopy \dc\Soft\ezotrank\psi_ad\* "C:\Documents and Settings\%USERNAME%" /E /C
cd "C:\Documents and Settings\%USERNAME%\PsiData\profiles\default"
python psi_settings.py
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v psi_run /d "C:\Documents and Settings\%USERNAME%\Psi\psi.exe"
)
)
さて、これで終わりです。GPに追加して、喫煙しましょう。
スパーク
すぐに気に入らなかったのは、RAMを非常に愛するJavaで書かれていることですが、市場の企業セグメントを対象としており、おそらくOpenFire(原則として、これと一部の人々の発案)、特に有料版で非常にうまく機能します。 私が一番気に入ったのは、スクリーンショット付きの組み込み機能です。 通常、
sparkを使用してダウンロードし、ADを使用して設定するのは簡単です。
いくつかのメモ:ハリネズミのウェブフェイスはcartmanに配置されます :5280 /管理者ログイン
パスワードは、ejabberd.cfgに登録したadminです。つまり、admin @ cartmanです。Webマズルpyicq-t cartman :12345