2020年7月2日木曜日

Sametime 関連 nsf ファイル

Sametime のインストールを経験して3ヶ月が経過した頃、管理クライアントを操作していてある事に気づきました。

「タイトルがやたら長いデータベースがある...」

それは Sametime のインストールによって追加された vpuserinfo.nsf というファイルなのですが、そのタイトルがこちらです。

Extended access controls are enabled on this database. You must modify the database on a version 6 or later Domino server.

私は検証環境として Sametime サーバーを2台構築しているのですが、他方のサーバーも同じファイル名になっていました。

ここで Sametime インストールで追加されたファイルのタイトルを見てみると「エラーメッセージか?」と感じるような明らかに変なタイトルが幾つもあることがわかりました。※下図赤枠部分のファイルです
タイトルが明らかに不正なnsfファイル

ファイル名不正なタイトル
 vpuserinfo.nsf Extended access controls are enabled on this database. You must modify the database on a version 6 or later Domino server.
 stauths.nsf You cannot do a remote queue put to a pre-R5 server
 stautht.nsf You cannot administer Enterprise Directories on a pre-R5 server
stconf.nsf  Network protocol error: message from server is too large
 stconfig.nsf Accelerated replica creation cannot be used with an encrypted database
 stcs.nsf Invalid profile 
 stdomino.nsf Cannot close a database within an NSFSearchStart - NSFSearchStop loop that was opened outside of the loop
 stlog.nsf LookupExtended on server %a
 stnamechange.nsf Invalid VJournal property found


こういった事象は Sametime のフォーラム技術情報にも似たような報告がありました。



ところが、これらが私の環境と違う点は、CentOS8 でなく CentOS7 である事と、11.0 から 11.0FP1へのアップグレードではなく 11.0FP1 を新規にインストールしている事です。

そこでサポートへ問い合わせてみたところ、次の事がわかりました。

  • Linux 版 Sametime のインストールで Sametime 用のデータベースを作成する際データベースタイトル設定時にインストーラー側の問題で不正な文字列が入りタイトルにエラーメッセージのような文字列が入り不正になる
  • 技術情報では Sametime 11.0 から 11.0FP1 へのアップグレード時と記載があるがバージョンアップに限定されず、Sametime 11 や Sametime 11.0 FP1 の Linux 版 Sametime サーバー新規インストールの場合にも発生することを確認している
  • Windows 版では発生しない
  • ファイル名が正しいならば Sametime の機能上の問題はない
  • 正しいタイトルをテンプレートが保持しているため、テンプレートがあるファイルについては不正なタイトルは Design タスクが稼働すれば正しい名前に置換される。ただ、データベースの設計の引継ぎが無効にされている vpuserinfo.nsf は管理者が手動で「Sametime User Information」と変更しないと変わらない
つまりは、Design タスクを実行すればほぼ解決、という事なのですが、今回は検証環境という事で、普段は検証後にOSをシャットダウンしてしまうことから夜間に Design タスクが動いていなかったのです。

おそらく本番環境では定期的に Design タスクを実行しているでしょうから、なかなか気付く事は無いかもしれません。


ところで Sametime インストール時に追加されるファイルにはどのようなものがあるのでしょうか。こちらもサポートに聞いてみました。

 ファイル名  概要
 stofflinemessage.nsf オフラインメッセージ(チャット相手がオフラインの時に相手に送ったメッセージ)を格納するデータベース
 stlog.nsf Sametime のログデータベース
 stconfig.nsf Sametime の設定情報を格納するデータベース
 stauths.nsf Sametime SecretKeys を格納するデータベース
 stautht.nsf Sametime のサーバーのホスト名やポート番号を格納しているデータベース
 stdomino.nsf どのユーザーがオンラインであるかを格納する為のデータベース
 stnamechange.nsf Sametime で STNameChange タスクを使用し名前変更機能を使用する際使われるデータベース
 vpuserinfo.nsf ユーザーのコンタクトリストを格納するデータベース
 stcenter.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime に Web ブラウザからアクセスする場合のホームページ(起点のページ)を表示していたデータベース
 stsrc.nsf Sametime 8.5.2 まで提供されていた Sametime Classic Meeting 機能を利用するための Notes データベース。Sametime 9.0 以降では Classic Meeting 機能が提供されていないので、アクセスが製品側で意図的に禁止されています。
 stconf.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime Classic Meeting 機能を利用するための Notes データベース
 stcs.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime Classic Meeting 機能を利用するための Notes データベース
これらのうち次のデータベースは Sametime 8.5.2 までのリリースで使用されていたデータベースで Sametime 9.x 以降、製品としてアクセスが禁止されているとの事。
stcenter.nsf
stsrc.nsf
stconf.nsf
stcs.nsf

上の4つのデータベースは、そのまま運用するか、OS レベルでリネームし NSF ファイルとして認識されない状態にして運用してほしいとの事でした。

また、stcenter.nsf と stsrc.nsf は、Sametime Community Server のインストールでは除外するよう機能改善要望が提出されているそうです。

2020年6月20日土曜日

HCL Nomad 向け「GPS Tools」データベースについて

HCl Nomad は、緯度経度などの位置情報をスマートフォンの GPS センサーから取りこむことができます。

これまで、このブログでも GPS に関連するエントリをいくつか投稿してきました。

昨日(2020年6月19日)の「テクてくLotus技術者夜会」では、HCL Nomad で GPS から位置情報を取得する方法や、Notesデータベースに保存されている位置情報をどのように活用できるかといった観点でお話させていただきました。

夜会の資料(後日リンクを貼ります)にはコードのサンプルを記載しているのですが、資料の文字は小さすぎて見づらいし、GPSは机上で動かしても全く面白みがないということもあり、夜会の資料で紹介している全てのサンプルコードを1つの nsf ファイルにまとめて公開することにしました。

こちらから NSFTools.nsf をダウンロードできます。

GPS Tools

上のリンクから NSFTools.nsf をダウンロードしましたら、HCL Nomad でアクセスできる Domino サーバーのデータディレクトリへ配置して、都合の良いアカウントで署名してください。
HCL Nomad から Domino に配置した NSFTools.nsf へアクセスして開くことができたら、画面左上のバーガーアイコンから「オフラインで利用できるようにする」を選び、ローカルに複製(レプリカ)を作ることをお勧めします。端末側へ複製した NSF Tools を使用することで、端末側で WiFi や 4G などの電波が届かないオフラインの(Domino サーバーへアクセスできない)状態でも、取得した位置情報を安定的にデータベースへ保存することができます。

このサンプルデータベースには、「2地点間の距離を求める」といったような HCL Nomad が無くても(Notesクライアントでも)試せる機能もあるのでデータのサンプルを入れておけばよかったと少し後悔していますが、ぜひご自身の HCL Nomad を屋外へ持ち出して位置情報を収集してみてください。

2020年5月10日日曜日

Notes で QR コードを表示しよう

今回は LotusScript の NotesHTTPRequest クラスを使って Node.js のアプリと連携する Notes アプリを作ってみましたので、ご紹介します。
※ NotesHTTPRequest クラスは 10.0 の新機能です。

作ったアプリは「テキストを QR コードに変換する」ものです。

(念のため)QRコードとは次のようなものです。


過去のノーツコンソーシアムのイベントでは "notes://" で始まる Notes URL が埋め込まれた QR コードを iPad のカメラで撮影し HCL Nomad ( iOS や Android における Notes クライアントとも言える公式アプリ)で Notes アプリを開くといったデモがありましたね。

iOS 端末には QR コードを読み込む機能がありますが、HCL Nomad からその機能を呼び出して撮影したQRコードに埋め込まれたテキストをフィールドへセットしたり QR コードを生成して表示する機能は、残念ながらまだ Notes 標準の機能にはありません。現状では Notes 以外のものに頼るしかありません。

「ノーツ qr」などとググってみれば、Java や XPages で作ったアプリの例がいくつかヒットします。

けれども現状の Nomad は Java は動かないのです…
XPages ならばブラウザがあれば使えますが... 今後は Domino Volt で!という声も聞こえてきそうですが...

今回は、Notes または Nomad からアクセスできる Web サービスに頼ることにします。

では、Nomad (上の LotusScript )から送信されたテキストから QR コードを生成し、QR コードの画像を返す Web サービスを用意します。

まずは Web サービスを node.js 上に構築します。

私は Windows 10 Pro に node.js をインストールしていますので、コマンドプロンプトから次のコマンドで準備しました。
> mkdir qrapp
> cd qrapp
> npm init
> npm install express
> npm install body-parser
> npm install qrcode

上のコマンドでは、適当な場所(デスクトップなど)に qrapp というディレクトリを作成し、そのディレクトリへ npm init で package.json を作ったら、express, body-parser, qrcode をインストールしています。

QRコードの生成には node-qrcode を利用しています。漢字にも対応しているところが素晴らしい!
https://github.com/soldair/node-qrcode


qrapp ディレクトリに app.js という名前でファイルを作成します。テキストエディタ等で次のコード(たったの14行!)をコピペして保存します。これが Web サービスのメインとなるものです。
const express = require( 'express' );
const bodyParser = require( 'body-parser');
const app = express();
const port = 3000;
const QRCode = require( 'qrcode' );
app.use( bodyParser.urlencoded( { extended: true } ) );
app.use( bodyParser.json() );
app.post( '/qr',( req, res ) => {
    console.log( req.body.qr_text );
    QRCode.toDataURL( req.body.qr_text, function ( err, qrcode ) {
        res.send( qrcode );
    });
});
app.listen( port, () => console.log( 'QR-Code app listening on port 3000.' ) );

この Web サービスは、 http://<host>:3000/qr でユーザーからのリクエストを待ちます。

次の JSON 文字列を http://<host>:3000/qr へ POST すると、QR コード画像をbase64エンコードした値を含む文字列「data:image/png;base64,<base64エンコードされた画像>」を返します。

{
    "qr_text" : "Notes/Dominoと焚き火をこよなく愛する中野です。どうぞよろしくお願いします!"
}

この Web サービスが返す文字列を後述する html へ埋め込むと QRコードが現れるという仕掛けです。


Web サービスを起動するには、コマンドプロンプトから qrapp ディレクトリへ移動して、次のコマンドを投入します。
> node app.js

Ctrl + C(Ctrl キーを押しながら C をタイプ)するとWeb サービスは終了します。



次に Notes アプリを作ります。


データベース内に2つのフォームを作ります。
  • テキストを入力する "Main" フォーム
  • QR コードを表示する "qrcode" フォーム
"Main" フォームには、一つの入力可能なフィールド "qr_text" と、ホットスポットボタンがあります。

以下(Sub Click と Function getQrCode)はホットスポットボタン「QRコード表示」のコードです。
Sub Click(Source As Button)
 Dim ws As New NotesUIWorkspace
 Dim ss As New NotesSession
 Dim req As NotesHTTPRequest
 Dim doc As NotesDocument
 Dim qr_text As String
 Const url = "http://<host>:3000/qr"

 qr_text = ws.CurrentDocument.FieldGetText( "qr_text" )

 Set req = ss.CreateHTTPRequest
 Call req.SetHeaderField( "Content-Type", "application/json; charset=utf-8" )
 req.PreferStrings = True

 Set doc = New NotesDocument( ws.CurrentDocument.Document.ParentDatabase )
 doc.Form = "qrcode"
 doc.qrcode = req.Post( url, |{ "qr_text": "| & qr_text & |"}| )

 Call ws.EditDocument( False, doc, True )
End Sub

7行目の "Const url ="には、Web サービスの URL である http://<host>:3000/qr を指定します。<host>の部分は IPアドレスやホスト名に書き換えます。


もうひとつのフォーム "qrcode" には、ひとつの計算結果テキスト(次の下線部)と、その前後に html タグを書きます。
</form><img src="<計算結果の値>"><form>
</form>から<form>までの文字全体をパススルーHTMLとしています。

計算結果テキストには qrcode フィールドの値を代入しています。なおここではフォーム上に qrcode フィールドを作る必要はありません



以上で完成です。

このサンプルデータベースでは、フォーム”Main”を表示するフレームセットを作りました。データベースのプロパティから、データベースを開いた時に表示するフレームセットとして指定しています。

Web サービスを起動したら、"Main" フォームを開いてテストしてみましょう。
iPad の Nomad でテストする場合、Node.js のアプリが使用するポート 3000 へアクセスできることを確認しましょう。

QR Code アプリをタップすると…

フォーム “Main” が開きます。QR コードにしたい言葉をタイプして「QRコード表示」ボタンをタップすると…

フォーム ”qrcode” 上に QR コードを表示します!




商品コードや URL などの Notes デーベースにある様々な文字列を QR コード化する事ができそうです。

2020年5月4日月曜日

Sameime 11 インストール

私は Notes/Domino のインストール経験はありますが、OSは Windows ばかりで、Linux へは誰の手も借りずにインストールしたことがありませんでした。


そんな私が Linux で稼働する Domino へ Sametime Community Server をインストールする機会がありました。

また Sametime Meetings Preview がもうすぐ始まりそうです。=>登録ページ


Sametime のインストールについて、前バージョンの経験者からは「非常に面倒」と聞いていました。V11 では、インストーラのサイズが小さくかつ簡単になった、といったようなことが公式ブログの記事(下のURL)にも書かれています。

『HCL Sametime 11 Chat 導入ガイドを公開しました』
https://hcljapan.co.jp/software/blog/hcl-sametime-11-chat-%E5%B0%8E%E5%85%A5%E3%82%AC%E3%82%A4%E3%83%89%E3%82%92%E5%85%AC%E9%96%8B%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F



私はそんな記事を鵜吞みにしていたこともあり、完全に舐めてました。

Linux の操作も Sametime のインストールも経験の無い私が、インストールガイド(以降「ガイド」と呼びます)を読みつつ、わからないことをちまちまと調べたりサポートに問い合わせしたりした結果、Domino が既に導入済みの環境にもかからわず、完了までに約 2 人日もかかってしまったのです...



このエントリーでは、その顛末を記載します。ここでは、インストールの方法ではなく主に「はまったポイント」を取り上げます。ガイドの補足としてお読みください。



まずは Sametime V11 について知りたい方には、次の資料をご覧になることをおすすめします。

『製品情報: HCL Sametime V11 の製品紹介資料』
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0078419



公開されているガイドは2種類あります。

ひとつが Windows と Linux の両方に触れている英語のものです。

『HCL Sametime 11 Installation and Administration Guide』
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0074599



もうひとつは、Windows版のみ解説されている日本語のもの、

『HCL Sametime 11 Chat のインストール手順』
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0074706



今回私は不慣れな Linux (CentOS7) 上へ Domino 11.0.1 、 Sametime 11.0 FP1 Community Server、Sametime 11.0 FP1 Proxy Server をインストールしてみようと思い立ち、前者のガイドを使用しています。




ガイドを読み進めてみたのですが、私にはわからないことがありました。

Standard と Limited Use の違い、Mux server、GSKit、Proxy Server、などなど...

これらは環境構築の前提として選択することが必要ですが、何を選択すればいいのかわからないので困りました。


現時点では、こういった用語について説明された V11 の文書が分散しているようで、V10 のようにまとまったヘルプがまだ存在していません。とは言え次の文書になんとなくまとまっています。

『HCL Sametime 11.0 Administrator Documentation』
https://help.hcltechsw.com/sametime/11.0.0/administrator_doc.html


公式のオンラインヘルプにある V10 の文書を参考にすることはできると思います。

『Sametime 10.0 Installation and Administration』
https://help.hcltechsw.com/sametime/10.0/index.html



V11 固有の機能について知りたい場合、カスタマーサポートのトップページから「Sametime 11 <知りたい事>」といった感じで検索してみて、さらに絞り込んでいくのも良いと思います。

https://support.hcltechsw.com/csm?id=csm_index




では、インストールしていきます。


ガイド中で Domino をインストールする項の冒頭に「Linux OS が "en_US" ロケールにインストールされていることを確認してください」(意訳)とボールド体で強調されている部分があります。ロケールを "ja_JP.UTF-8" で進めてしまった私は、のちのちドはまりすることになりました。少なくとも Sametime のインストール前には、次のコマンドでロケールを "en_US" に変えましょう。

> localectl set-locale LANG=en_US

ロケールを変えた後は念のためログインし直しましょう。
ロケールを変えずに進めるとどうなったかについては、後述します。

なお Domino のインストールについてガイドには手順が書かれていますが、インストールとセットとなるOS側の設定(ユーザーとグループを追加するなど)には触れられていません。「domino 11 centos install」でググるとヒットする海外の HCL Master のブログがありました。

ちなみに、Domino 11.0.1 のインストーラは、まっさらの環境に新規にインストールすることできます。


Sametime Community Server (以降「Sametime」と呼びます)では、Persistent Chat (永続的なチャット)が有効の状態でインストールされます。Persistent Chat は MongoDB (に格納された chat logging 情報)を利用します。そのため Sametime インストールの前に MongoDB のインストールを済ませておくことが必要です。ただし、Sametime インストール後はガイドの記載に従って Persistent Chat と MongoDB の要件を無効にすることができます。


という訳で先に MongoDB をインストールします。


MongoDB は yum(=パッケージ管理ツール)でインストールするのですが、MongoDB の最新バージョンではなく、サポートされている 3.6 というバージョンをインストールするために、ファイル mongodb-org-3.6.repo を作成しておきます。ここが私にとって一つ目のハマりポイントでした。

作成したファイルの内容はガイドに記載されていますので、それをコピペすることができます。内容の一部に、ページ幅で収まらず途中で改行されている長い1行があります。その行の右端にあるハイフンが、ペーストしたときに欠落する場合がありました。ハイフンが欠落したままだと yum によるインストールが失敗します。ご注意ください。

yum では MongoDB と依存関係にある他のパッケージを自動でインストールしてくれ、非常に便利です。



ガイドでは、インストールの後 MongoDB を起動します。私は Linux に慣れてないこともあり大文字小文字をガイドのとおりにタイプするよう注意しています。ガイドには次のコマンドの 1 文字目は大文字の S で記載されていますが、これでは MongoDB は起動しません。

Service mongod start

小文字の s に読み替えましょう。



次、めちゃくちゃ重要です。



ガイドに従い MongoDB の設定を進めていくと「db.createUser({」で始まるコマンドを実行する手順の前に、次の記述があります。

Exit the mongo shell (type ‘exit’) and restart the MongoDB server with ‘service mongod restart’ and then continue with the commands below -

【日本語訳】

mongo シェルを終了して('exit' と入力)、'service mongod restart' で MongoDB サーバーを再起動してから、以下のコマンドを実行します。

ここでは、MongoDB サーバーを再起動した後、「db.createUser({」で始まるコマンドを投入するのですが、コマンド投入の前には、

> mongo

の実行後、

> use admin

忘れずに実行しておきます。

ここで use admin を実行しない場合、作成されるユーザーが admin.sametimeUser ではなく test.sametimeUser となります。

「db.createUser({」で始まるコマンドを投入したあとに、admin.sametimeUser で作成されていることを確認するには、次のコマンドを投入します。

> mongo

> use admin

> db.system.users.find()


もし test.sametimeUser で作成されていた場合、次のコマンドで削除した後、admin に切り替えて作成しなおしましょう。

> mongo

> use test

> db.dropUser("sametimeUser")


ここで test.sametimeUser のまま進めてしまった私の環境では、MongoDB のログ(/var/log/mongodb/mongod.log)に認証関連のエラーが大量に記録されてしまい、たった8日間でファイルサイズが 24GB まで膨れ上がりました。ディスク容量が圧迫され、Domino の夜間タスク等で「空きが無い」ことに由来するエラーを頻発する事態となりました。



さらに導入を進めて MongoDB の設定が完了したら、いよいよ Sametime Community 11.0 FP1 のインストールです。
※Sametime Community 11.0 FP1 のインストーラは Sametime 11.0 がインストールされていない環境へのインストールが可能です。



インストーラパッケージを解凍すると「Server」サブディレクトリが作成され、その中にファイル install.bin が追加されています。このファイルでインストールを実行しますが、その前に install.bin があるディレクトリへ移動して、パーミッション(実行権限)を変更します。次のコマンドでパーミッションを変更できます。

> chmod 777 install.bin


この install.bin をオプションなしで実行すると、インストーラの GUI が起動します。

GUIのインストールを進めていくと、私の環境では、テキストが無く縦に3つのラジオボタンだけが表示される画面がありました。日本語のガイドには説明がありますが、上から Standard, Limited Use, Dynamic の三択です。



日本語のガイドには「HCL Sametime サーバーは LDAP を使用します」とありますが、次のブログにも書かれているとおり V11 は Domino ディレクトリだけで構成することも可能です。今回私は LDAP を使いませんでした。

https://hcljapan.co.jp/software/blog/why-you-need-to-upgrade-to-sametime-v11-right-now



インストールが成功すると、データディレクトリ直下にあるファイル  stsetup_exit_status.txt に 0 が入ります。

ロケールを "en_US" に変更してインストールすると書きましたが、私のように "ja_JP.UTF-8" のまま進めると、ファイル stsetup_exit_status.txt に 0 がセットされていても実はインストールに失敗している、といったことがありました。この問題は次の技術情報で公開されています。

『Installing Sametime Community Server in Linux fails with no error』
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0078564


もし stsetup.log 内のエラーが合致する場合、上の技術情報に従い対応した後、Sametime を上書きインストールしましょう。



さて、Sametime のインストールまで終われば、クライアントから接続できそうです。



私は 接続を確認するクライアントとして、Notesクライアントに内臓の Sametime アドイン(右のサイドバーに「Sametime 連絡先」として表示されるやつ)を使いました。

このクライアントのデフォルトは Sametime サーバーへのアクセスにポート 1533/tcp を使います。そのためポート 1533/tcp を Linux(CentOS7) 側で開ける必要があります。
※この時点では、80/tcp, 443/tcp, 1352/tcp, 1533/tcp 等のポートを開けていました


Sametime のクライアントは Notesに内臓のアドイン以外にも、Webブラウザや iPhone/Android のアプリ、Windows/Mac へインストールするタイプのものがあります。使用するクライアントや機能によって使用するポートがいろいろあります。次のURLはV10の情報ですが参考になると思います。

『Ports to open in firewalls』
https://help.hcltechsw.com/sametime/10.0/plan/plan_portstoopeninfirewalls.html?hl=firewall



Sametime を起動するには、Dominoデータディレクトリにある ststart スクリプトを実行します。

> su notes

> ./ststart

実際は Domino が起動した時に、Domino のタスクのひとつ(notes.ini の servertasks= に追加されている staddin)として Sametime が起動します。

ststart スクリプトでは、Sametime の実行に必要な環境変数などを設定します。 Sametime の設定を変更して再起動しなければならない場合、Domino コンソールから quit を実行する、またはシェルから

> ./ststart stop

として停止させてから再度起動します。

Domino まで停止しなくて良い場合は、Domino コンソールから次のコマンドで終了と起動を行うほうが手間がありません。

tell staddin q

load staddin



Limited use ライセンスの場合は、機能制限を反映させるためにポリシーファイルを手動で変更します、との記載が次の技術情報にあります。

『Manual settings required for HCL Sametime 11 Limited Use after installation』
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0075403


この他、ガイドにも、永続的なチャット(persistent chat)を許可する「ポリシー」を設定する方法が記載されてもいます。

これらポリシーの変更は、Domino データディレクトリ直下にあるファイル "policies.user.xml" を編集します。ガイドに記載のファイル名(...users.xml)は誤りですので検索にヒットしません。それから、Domino データディレクトリ下の policy ディレクトリにも同名のファイルがありますが、こちらは変更しないように。


policies.user.xml 内をポリシーの id で検索すると "im.v10sample.policy", "im.default.policy", "im.anonymous.policy" の3か所でヒットします。

"im.v10sample.policy" はコメントアウトされており無効です。

Webブラウザからの匿名アクセスを許可している場合に "im.anonymous.policy" が使用されます。ログインを前提とする場合は使用しません。

ちなみに、Domino ディレクトリに登録したグループ(のメンバー)へ適用するポリシーを設定することが可能との事。



MongoDB のログはデフォルトでは /var/log/mongodb/mongod.log に作成されます。前述のとおり私の環境では設定ミスにより肥大化する現象が発生しましたが、正しく設定された状態でもログファイルは mongod.log に追記される設定です。

MongoDBでは、ログをローテーションする設定が可能です。次の文書が参考になります。

https://docs.mongodb.com/manual/reference/command/logRotate/


ローテーションを設定すれば、コマンド発行によりログファイルを切り替え可能です。Sametime 稼働中にも切替できます。定期的にコマンド発行を実施することで、過去ログを圧縮したり古すぎるログを削除する、といった運用も可能と思います。



私は今回、GUIインストールとサイレントインストールのどちらも試しました。そのどちらにも Sametime のアンインストーラ uninstall.bin が存在しないのは私だけでしょうか...

【2020/5/11 追記】次の技術情報が公開されました。Linux 版の 11.0, 11.0FP1 ともにアンインストーラは無いようです...
How one can uninstalls Sametime v11/v11FP1 community server & then reinstalls it?
https://hclpnpsupport.hcltech.com/csm?id=kb_article&sysparm_article=KB0079104&sys_kb_id=31bbc8841bfcdc54c48197d58d4bcb14



Domino の起動直後、Domino コンソールに「重大: Failed to read from file」が表示されることがありますが、これは無視できるエラーらしいのですが、消すことができないようです。※SAME-32778 として問題が報告されています



Sametime Mux Server は、コネクションを管理できるものらしいのですが、ここでは不要なためインストールしませんでした。



Sametime 11.0 FP1 Proxy Server (以降「Proxy」と呼びます)のインストーラは、Sametime Communinty Server のとは別です。インストーラを解凍すると sametimeproxy サブディレクトリ内にファイル install.sh があります。これもパーミッションを変更しておきます。

> chmod 777 install.sh


Proxy のインストール時に "Sametime Server Host" や "Mongo Host" などを聞かれます。"Sametime Server Host" に FQDN を指定し、同一ホストにある "Mongo Host" にも同じ FQDN を指定したところインストールは失敗しました。その後、私の環境では setenv.sh に保存されていた "MONGO_HOST" の値を "127.0.0.1" と書き直し、再度インストールすることで成功しました。


Proxy Server までインストールが完了すると Web ブラウザやモバイルアプリから接続できます。※接続に必要なポートは firewall-cmd で追加しましょう



以上です。



検証環境の Sametime サーバーは、Windows 10 PC上の VMware Workstation 15 Player に作成した仮想マシンへ Linux(CentOS) を起動したものです。

iPad 上の Web ブラウザから PC 内のゲスト OS 上の Sametimeへアクセス

最終的には iPad にインストールした Sametime アプリから Windows 10 PC へ接続すると、仮想マシンへポートフォワーディングされ Sametime サーバーへアクセスできるようになりました。


iPad の Sametime アプリからPC内のゲストOS上の Sametime へアクセス


2020年3月30日月曜日

グループの入れ子レベル

ドミノディレクトリにグループを作成して、そのグループのメンバーとして別のグループ名を追加することがあります。

このように別のグループをメンバーに追加している状態をここでは「入れ子」と呼びますが、例えば次のように入れ子(ネストとも言う)のレベル(階層とも言う)が深くなった場合、どのレベルまでサポートされるかご存知でしょうか。

11.0 の Administrator ヘルプにある「Domino 命名規則」には(つい最近まで)次のように記載されていました。

メール配信では、グループを5つのレベルまで入れ子にできます。メール配信以外の目的では、6つのレベルまで入れ子にできます。

この制限がどのバージョンからあったかは不明ですが、ずいぶん前からあったように思います。

ところが、アクセス制御リストの画面にある「有効なアクセス権」ボタンを押して、あるユーザーのアクセス権を調べていた時「6つよりレベルが多いこと」に気付きました。

そこで、ドミノディレクトリへグループ文書を 20 作成して次のように設定しました。

グループ "Group1" のメンバー欄へ Group2 を追加
グループ "Group2" のメンバー欄へ Group3 を追加
グループ "Group19" のメンバー欄へ Group20 を追加
グループ "Group20" のメンバー欄へ Test User/v10 を追加

Group20 に追加したユーザー「Test User/v10」は入れ子のレベルが 20 です。

データベースの ACL へグループ "Group1" だけ追加して、「有効なアクセス権」ボタンから調べてみたところ、なんと「Test User/v10」はアクセスできそうでした。

実際に Test User/v10 がこのデータベースへアクセスすると、拒否されることなく開くことができました。


この結果をサポートへ報告してみたところ、次のことがわかりました。

  • メール配信時の入れ子の制限は、グループを Domino 側で展開する場合は制限が無く、クライアントから送信する場合は20レベル以上の階層はエラーになる
  • メール配信以外の入れ子の制限はなくなった
  • 入れ子の制限は変わっているが、ヘルプの更新がされないまま現在に至っている

制限が緩和されていたことを知りませんでした...

これを受けて、Notesクライアントでメールを作成して、宛先へ "Group1" を指定して送信してみたところ、20 レベルのユーザーのためエラーが表示され送信できません。


グループをクライアント側で展開しているためにエラーとなったようです。

次に、グループを Domino 側で展開させるために宛先を「Group1@v10」に変えて送信してみると、今度はエラーなしに送信できました。


さて、メール配信時の入れ子の制限はグループを展開する場所によって違うことを確認できましたが、Domino のメールへアクセスする方法はいくつかあります。どのアクセス方法が制限を受けるのでしょうか。

これまたサポートに聞いてみたところ、次の回答がありました。

【入れ子の制限なし:グループをDomino側で展開】
  • iNotes
  • Verse
  • Traveler
※CAA ではメールをブラウザ iNotes で開きますので入れ子の制限はありません

【入れ子の制限あり:グループをクライアントで展開、「グループ名@ドメイン名」の場合はDomino側で展開】
  • Standard版
  • Basic版
  • Nomad

入れ子と言えば、私が過去に書いた「グループの入れ子を洗い出す」というエントリがあるのですが、これも書き換えないと...

Nomad (iPad) は新元号に対応していました

iPad 版を皮切りに iPhone 版, Android 版もリリースされています「スマートデバイス対応Notes クライアント」とも言うべき HCL Nomad (以下 Nomad )について、新たに分かったことがありますので共有したいと思います。

Notes と Domino にも元号を表示する機能があるということで、昨年の改元に先立ち、新元号「令和」を表示するための対応を実施されたかたもいらっしゃると思います。 

改元のタイミング(2019年5月1日)で Nomad (当時は IBM Domino Mobile Apps 1.0.1 でした)が対応していたかどうかは、私は確認したという記憶が定かではありません。が、おそらく対応していなかったように思います。
※追記:サポートによるとiOS版 HCL Nomad は「1.0.5 から対応」とのこと

新たに分かったことというのは、Nomad でも「新元号が表示される」という事実です。

新元号に対応していない状態では、改元した日付を「平成 31年05月01日」と表示します。
対応している場合「令和 1年05月01日」と表示します。

今回 Nomad でも新元号を表示できることを確認しました。
下図は iPad の Nomad でのスクリーンショットです。

このビューの最初の列の値として「日付/時刻」タイプのフィールド「date1」を指定しています。その列では「年」の表示形式として "ggge" を指定しています。

上の図で「令和 1年05月01日」と表示されている文書を、Notesクライアントから文書のプロパティで見てみると、フィールド「data1」の値が 2019/05/01 であることがわかります。



ところで、私の iPad は、言語設定が「日本語」ですが、これを「英語」に変えると元号はどのように表示されるのでしょうか。

下図をご覧ください。最初のタブが「ホーム」ではなく「Home」と表示されているだけでなく、元号表示も変わりました。

元号は 「Reiwa」「Heisei」と表示されています!

年月日が漢字のままなのはご愛敬ですね。まあ Notes Standard でも「インターフェースの言語」を"英語"にすると同じ結果になるので...


もうひとつどうでもいい情報です。
元号表示は3桁表示まで対応しているようです。
西暦3017年は令和1000年に該当しますが、ggge での表示は「令和 *年」とアスタリスクに変換されてしまいました。

上の図は iPad の Nomad でのスクリーンショットですが、Notes クライアントでも同じ表示になりました。

2020年3月4日水曜日

セクションの境界線のスタイルを指定するには

LotusScript を使ってリッチテキストフィールドへセクションを追加したい場合があります。

次のコードのように NotesRichtextItem クラスの BeginSection メソッドを使うと、リッチテキストフィールドの最後に追加できます。
Dim ss As NotesSession
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Dim style As NotesRichTextStyle
Dim col As NotesColorObject

Sub Initialize
    Set ss = New NotesSession
    Set dc = ss.Currentdatabase.Unprocesseddocuments
    Set doc = dc.Getfirstdocument()
    Set body = doc.GetFirstItem( "Body" )
    
    Set col = ss.Createcolorobject()
    Call col.Setrgb( 0, 0, 255 )
    Set style = ss.Createrichtextstyle()
    style.Fontsize = 12
    style.Notescolor = COLOR_DARK_YELLOW
    
    Call body.Beginsection( "this is section title", style, col, True )
    Call body.Appendtext( "this is the string in the section" )
    Call body.Endsection()
    Call doc.Save( True, False )
End Sub

上のコードで追加したセクションは、下のように表示されます。

文書を編集モードに切り替え、セクションを選択した状態から「セクション」のプロパティを表示すると、「セクションタイトルと境界線」タブの中に「境界線」の「スタイル」という設定項目があります。※英語のプロパティ画面(下図)では Border の Style を指します


境界線の「スタイル」の選択肢は、現行バージョン(11.0)で11種類あります。

上のコードで追加したセクションの境界線の「スタイル」は、何も指定しない場合の(デフォルトの)スタイルになりました。

では、この境界線の「スタイル」は、どうやって指定できるのでしょうか。

BeginSection メソッドの第2パラメータでは NotesRichtextStyle のオブジェクトを指定できます。
Call NotesRichTextItem.BeginSection( title, titleStyle, barColor, expand )

けれども、このオブジェクトには境界線の「スタイル」に該当するものが見当たりません。境界線の「色」は、第3パラメータで指定が可能です

ちなみにセクションを扱う NotesRichTextSection クラスには、境界線の「スタイル」を設定したり取得できそうなメソッド/プロパティはありません。

どうやら標準のクラスでは、新たに作成するセクションの境界線の「スタイル」をデフォルトから変更したり、既存の境界線のスタイルを変更することができないようです。

それでは、このエントリで紹介した XML (Domino DTD = Domino文書型定義)を使う方法で新規に作成する場合はどうでしょうか。

まずは境界線のスタイルを変えて11種類のセクションを追加した文書を作成し、その文書を XML へ出力したものから、境界線のスタイル(borderstyle)の名前を調べてみました。

プロパティの表示
borderstyle
shadow
none
single
double
triple
twoline
windowcaption
gradient
tab
tabdiag


※表にあるスタイルの名前はこのヘルプ文書にも記載があります
※表の最下行の境界線は バージョン 8 で新たに追加されたスタイルらしいのですが、これはヘルプ文書に記載がありません。また XML へ出力しても borderstyle は設定されませんが、これは KKOOBM8D5V で報告されています。

出力した XML を参考に、borderstyle として tab を指定(21行目)したセクションを、ビューで選択している最初の文書へ追加してみます。

Dim ss As NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument, tmpdoc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim stream As NotesStream
Dim importer As NotesDXLImporter
Dim xml$, nid$

Sub Initialize
 Set ss = New NotesSession
 Set db = ss.CurrentDatabase
 
 xml = |





this is title string inner text
| '文書作成用のxmlをストリームへ書き込み、文書へ変換する Set stream = ss.CreateStream Call stream.WriteText( xml ) Set importer = ss.CreateDXLImporter( stream, db ) importer.DocumentImportOption = 2 'DXLIMPORTOPTION_CREATE Call importer.Process '変換した文書のリッチテキストフィールドの内容を選択文書へ追加する nid = importer.GetFirstImportedNoteId Set tmpdoc = db.GetDocumentByID( nid ) '変換した文書 Set dc = db.UnprocessedDocuments Set doc = dc.GetFirstDocument '選択文書 Set rtitem = doc.GetFirstItem( "Body" ) 'セクションを追加するリッチテキストフィールド Call rtitem.AppendRTItem( tmpdoc.GetFirstItem( "Body" ) ) Call doc.Save( True, True ) '変換した文書を削除する Call tmpdoc.Remove( False ) End Sub

実行後にビューで選択していた文書を開くと、下図のとおり tab スタイルのセクションを追加できていました。

既存のセクションの境界線のスタイルを参照したり変更できるプロパティとメソッドが欲しいので、アイデアとして投稿しました。ご賛同いただけるのであれば投票(Vote)してくださると嬉しいです。