こんにちは、ハブル!
仕事
私の組織では、Kerio Connectプラットフォームでメールサーバーが使用されており、ユーザーにサービスを提供するメールサーバーがさまざまな都市にインストールされています。ドメインは第3レベルで異なり、サイトの都市を示しているため、当初、分散構造はありませんでした。すべてが機能し、誰もが幸せでした。ある晴れた日-経営陣は、すべてのサイト間で共通の業務カレンダーであるタスクを設定しました。
バックグラウンド
最初は、分散Kerioメールドメインを上げるというアイデアでしたが、彼はすべて自分で行います。分散ドメインが作成されたと言われましたが、そこにはありませんでした。サーバーは、同じサーバー上にあるドメイン間でカレンダー、フォルダー、連絡先を同期する準備ができていましたが、複数のサーバー間でデータを同期することはできませんでした。
もちろん、私はそのようなトリックを期待していなかったし、長い間、必要な機能がないことを信じることができませんでした。後で私はこの事実の文書による確認を見つけました。私はとても困惑し、失望しました。
タスクはスムーズに問題に変わりました。
オプションは何でしたか
- いくつかのサードパーティソフトウェアと必要なデータを交換する、異なるサーバー上に2つのクライアントを作成します。この機能を実装するサードパーティ製のソフトウェアを見つける必要がありました。私はそのようなレーキは好きではありませんが、これが唯一の迅速な解決策であるように思われました。
- . , Kerio , , - , , - .
, Kerio , , — .
, “ ”, 6 :
- – .
- — .
, – DFS
- , OS Windows. ( Linux. OS)
- , — .
- DFS .
- Kerio, , , Kerio . ( )
- DFS.
- - ( )
( )
1. Kerio Distributed domain
Master , .
:
, Master :
—
— .
! , ( — )
— , .
— ( ) .
2. Kerio
, . , , .
– , , , - , .
.
~DataMail\mail\#public\ \#msgs
~DataMail\mail\**Domain**\#public\ \#msgs
, , #msgs — , .
3. DFS
DFS, , .
DFS — Windows Server, ,
MS DFS
DFS – .
.
( — ) .
.
4.
(DFS), — - - , - .
, , . 6 – 12 .
, - , DFS, - , #msgs , .
Kerio , , 6 .
, index.fld, Kerio . , , , , , Kerio - index.fld
— - - .
, - — , , , .
?
.
, —
. , - #msgs, , . .
, , (15 ) 3-4 .
, , .
Kerio API
, , –
session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)
, , - , .
, , , .
CMD
Re-index.bat
@echo off
set dir=%~dp0
%dir:~0,2%
CD "%~dp0\"
md "%CD%\LOG\"
md "%CD%\Setup\"
ECHO -Start- >> "%CD%\LOG\%Computername%.log"
ECHO Start -> %Computername% %Date% %Time% >> "%CD%\LOG\%Computername%.log"
SetLocal EnableDelayedExpansion
for /f "UseBackQ Delims=" %%A IN ("%CD%\Setup\%Computername%.List") do (
set /a c+=1
set "m!c!=%%A"
)
set d=%c%
Echo Folder = %c%
ECHO Folder = %c% >> "%CD%\LOG\%Computername%.log"
ECHO.
ECHO. >> "%CD%\LOG\%Computername%.log"
:start
cls
if %c% LSS 1 exit
set /a id=1
set R=0
:Find
REM PF-Start
if "%id%" gtr "%c%" if %R% == 1 Goto Reindex
if "%id%" gtr "%c%" timeout 60 && Goto start
For /F "tokens=1-3" %%a IN ('Dir "!m%id%!\#msgs\" /-C/S/A:-D') Do Set 2DirSize!id!=!DS!& Set DS=%%c
if "2DirSize!id!" == "" set 1DirSize!id!=!2DirSize%id%!
echo %id%
ECHO !m%id%!
echo Count [ !1DirSize%id%! -- !2DirSize%id%! ]
if "!1DirSize%id%!" == "!2DirSize%id%!" ECHO Synk
REM DEL index.fld
if "!1DirSize%id%!" NEQ "!2DirSize%id%!" del /f /q !m%id%!\index.fld && del /f /q !m%id%!\indexlog.fld && del /f /q !m%id%!\search.fld && set R=1 && ECHO RE-index Count && ECHO RE-index Count %Date% %Time% - Delete !m%id%! >> "%CD%\LOG\%Computername%.log"
set 1DirSize!id!=!2DirSize%id%!
ECHO.
ECHO.
set /a id+=1
goto Find
:Reindex
ECHO. >> "%CD%\LOG\%Computername%.log"
ECHO --- RE-INDEX - Start - %Date% %Time% --- >> "%CD%\LOG\%Computername%.log"
ECHO. >> ----------------------------------- >> "%CD%\LOG\%Computername%.log"
call PublicFolders.py
timeout 60
goto start
exit
( , )
\Setup\%Computername%.List
%Computername% — ( .)
%Computername%.List – , , .
, , .
.
, , , : index.fld, indexlog.fld, search.fld
— .
LOG .
インデックス作成
プロセスインデックス作成プロセスは、API関数Kerio
Session = callMethod( "Domains.checkPublicFoldersIntegrity"、{}、token)を実行するように縮小されています
実行例は
-python PublicFolders.pyにあります
import json
import urllib.request
import http.cookiejar
""" Cookie storage is necessary for session handling """
jar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
urllib.request.install_opener(opener)
""" Hostname or ip address of your Kerio Control instance with protocol, port and credentials """
server = "http://127.0.0.1:4040"
username = "user"
password = "password"
def callMethod(method, params, token = None):
"""
Remotely calls given method with given params.
:param: method string with fully qualified method name
:param: params dict with parameters of remotely called method
:param: token CSRF token is always required except login method. Use method "Session.login" to obtain this token.
"""
data = {"method": method ,"id":1, "jsonrpc":"2.0", "params": params}
req = urllib.request.Request(url = server + '/admin/api/jsonrpc/')
req.add_header('Content-Type', 'application/json')
if (token is not None):
req.add_header('X-Token', token)
httpResponse = urllib.request.urlopen(req, json.dumps(data).encode())
if (httpResponse.status == 200):
body = httpResponse.read().decode()
return json.loads(body)
session = callMethod("Session.login", {"userName":username, "password":password, "application":{"vendor":"Kerio", "name":"Control Api-Local", "version":"Python"}})
token = session["result"]["token"]
print (session)
session = callMethod("Domains.checkPublicFoldersIntegrity",{"domainId": "test2.local"}, token)
print (session)
callMethod("Session.logout",{}, token)
http://127.0.0.1:4040はそのままにすることができますが、HTTPSが必要な場合、PythonはKerio証明書を信頼する必要があります。
また、ファイルでは、メールサーバーのこの機能(管理-共有メールフォルダー)を実行する権限を持つアカウントを指定する必要があります。
私の記事がKerio Connectの管理者に役立つことを願っています。