<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Posts on ma3ki&#39;s memo</title>
        <link>https://memo2.ma3ki.net/posts/</link>
        <description>Recent content in Posts on ma3ki&#39;s memo</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja-jp</language>
        <lastBuildDate>Tue, 14 Jul 2026 07:48:00 +0900</lastBuildDate><atom:link href="https://memo2.ma3ki.net/posts/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>dovecot2.4.4にアップグレードしたらSieveのheader :regexで日本語Subjectが文字化けした</title>
        <link>https://memo2.ma3ki.net/Almalinux10/dovecot2.4-sieve-mojibake/</link>
        <pubDate>Tue, 14 Jul 2026 07:48:00 +0900</pubDate>
        
        <guid>https://memo2.ma3ki.net/Almalinux10/dovecot2.4-sieve-mojibake/</guid>
        <description>&lt;p&gt;Rocky Linux 9 (Dovecot 2.3系) から AlmaLinux 10 (Dovecot 2.4.4) へメールサーバを移行したところ、WordPress(Postie)へメール投稿する際に件名が文字化けするようになった。&lt;/p&gt;
&lt;p&gt;例えば、&amp;ldquo;ランドセル&amp;rdquo; という件名が、 &amp;ldquo;ã©ã³ãã»ã«&amp;rdquo; のように文字化けする。
最初はPostie や WordPress、phpなどを疑ったが、原因はその前に件名を修正していた Sieve の header :regex にありました。&lt;/p&gt;
&lt;h2 id=&#34;状況&#34;&gt;状況
&lt;/h2&gt;&lt;p&gt;もともと使用していた Sieve ルールは件名の先頭に日付(YYYY/MM/DD)を挿入する以下のようなもの。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;require [&amp;#34;editheader&amp;#34;,&amp;#34;fileinto&amp;#34;,&amp;#34;regex&amp;#34;,&amp;#34;variables&amp;#34;,&amp;#34;date&amp;#34;];

if header :regex &amp;#34;Subject&amp;#34; &amp;#34;(.*)&amp;#34; {
    set &amp;#34;subj&amp;#34; &amp;#34;${1}&amp;#34;;
    deleteheader :regex &amp;#34;Subject&amp;#34; &amp;#34;.*&amp;#34;;
    addheader &amp;#34;Subject&amp;#34; &amp;#34;2026/07/14 ${subj}&amp;#34;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Rocky Linux 9 (Dovecot 2.3系) では想定通りに動作していました。&lt;/p&gt;
&lt;h2 id=&#34;対応&#34;&gt;対応
&lt;/h2&gt;&lt;p&gt;Pigeonhole 2.4 系では regex が Unicode comparator をサポートしたことに気付きました。(Chatgptが)
比較器を明示すると想定通り動作します。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;require [
    &amp;#34;editheader&amp;#34;,
    &amp;#34;fileinto&amp;#34;,
    &amp;#34;regex&amp;#34;,
    &amp;#34;variables&amp;#34;,
    &amp;#34;date&amp;#34;,
    &amp;#34;comparator-i;unicode-casemap&amp;#34;
];

if header :comparator &amp;#34;i;unicode-casemap&amp;#34;
          :regex &amp;#34;Subject&amp;#34; &amp;#34;(.*)&amp;#34;
{
    set &amp;#34;subj&amp;#34; &amp;#34;${1}&amp;#34;;
    deleteheader :regex &amp;#34;Subject&amp;#34; &amp;#34;.*&amp;#34;;
    addheader &amp;#34;Subject&amp;#34; &amp;#34;2026/07/14 ${subj}&amp;#34;;
}
&lt;/code&gt;&lt;/pre&gt;</description>
        </item>
        <item>
        <title>さくらのAI Engineを使った対話型AIアバターを作ってみた</title>
        <link>https://memo2.ma3ki.net/rockylinux9/sakura-ai-engine-conversation-character/</link>
        <pubDate>Tue, 07 Apr 2026 23:17:00 +0900</pubDate>
        
        <guid>https://memo2.ma3ki.net/rockylinux9/sakura-ai-engine-conversation-character/</guid>
        <description>&lt;p&gt;先日、とある会社のオフィスを訪問するとエントランスにAIと連携した3Dの社員が設置されており面白いと思った。
アニメ風かつ口パクなら自分でも似たようなもの作れるんじゃないか？と考え、
最近遊んでいるさくらのAI Engineを使って会話文、音声データを生成するものを作ってみた。
コードと画像は普段使っているgeminiで生成した。&lt;/p&gt;
&lt;h2 id=&#34;デモ動画&#34;&gt;デモ動画
&lt;/h2&gt;&lt;p&gt;会話がインチキすぎて成り立たず笑ってしまったw
&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;video
    controls
    src=&#34;https://memo2.ma3ki.net/videos/2026-03-22-inchiki.mov&#34;
    
    
    &gt;
        &lt;p&gt;
            Your browser doesn&#39;t support HTML5 video. Here is a
            &lt;a href=&#34;https://memo2.ma3ki.net/videos/2026-03-22-inchiki.mov&#34;&gt;link to the video&lt;/a&gt; instead.
        &lt;/p&gt;
    &lt;/video&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id=&#34;リポジトリ&#34;&gt;リポジトリ
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ma3ki/ma3ki_workshop/tree/main/ai_conversation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ai_conversation&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;仕組み&#34;&gt;仕組み
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;「会話生成API」にて回答と感情の抽出
ブラウザで認識した音声をテキスト化し、さくらのAI Engine の会話生成APIへリクエストを送信します。プロンプトによって回答の冒頭に [happy] などの感情タグを付与するように制御しており、バックエンド側でこのタグを解析することで、回答文と「キャラクターの今の感情」を切り分けて抽出しています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「音声合成API」による発話データの生成
音声データの生成(再生)は３パターンに対応した。複数対応した理由はさくらのAI Engineの音声合成APIは無料枠が限られているため。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;さくらのAI Engine の音声合成APIに渡して固有の音声データ生成&lt;/li&gt;
&lt;li&gt;edge-tts&lt;/li&gt;
&lt;li&gt;Chromeブラウザ内蔵TTS&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;ブラウザ側での感情表現とリップシンク制御
フロントエンドは、受け取った感情データに基づいてキャラクターの画像を切り替えながら、音声の再生時間に合わせて「口の開閉画像」を一定間隔でループさせることで、口パクを実装しました。これにより、AIの回答とキャラクターの動きが同期した自然な対話体験を作っています。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;作ってみて&#34;&gt;作ってみて
&lt;/h2&gt;&lt;p&gt;キャラクター画像と設定ファイルを用意すればどんなキャラクターにも対応できるので面白いと思った。
例えばアニメのキャラクター画像を生成して子供と会話させてみたり。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Rspamd GPT Plugin をさくらのAI Engine で動かしてみる その2</title>
        <link>https://memo2.ma3ki.net/rockylinux9/rspamd-gpt-plugin-sakura-ai-engine2/</link>
        <pubDate>Wed, 11 Feb 2026 22:12:08 +0900</pubDate>
        
        <guid>https://memo2.ma3ki.net/rockylinux9/rspamd-gpt-plugin-sakura-ai-engine2/</guid>
        <description>&lt;p&gt;前回の記事「&lt;a class=&#34;link&#34; href=&#34;https://memo2.ma3ki.net/rockylinux9/rspamd-gpt-plugin-sakura-ai-engine/&#34; &gt;Rspamd GPT Plugin をさくらのAI Engine で動かしてみた&lt;/a&gt;」で Rspamd のバージョンを &lt;strong&gt;3.13.0 から 3.14.2&lt;/strong&gt; へ更新してから40日が経過しました。AI 側に送信するプロンプト（指示文）も改善されたので記事に残しておきます。&lt;/p&gt;
&lt;p&gt;約4,000通の受信データを解析したところ、AIの「回答」が変化し、実用的なフィルタへと進化していることが分かりました。&lt;/p&gt;
&lt;h2 id=&#34;1-判定結果の劇的な変化比較&#34;&gt;1. 判定結果の劇的な変化（比較）
&lt;/h2&gt;&lt;p&gt;バージョンアップ前後で、判定の割合は以下のように変化しました。違いは、新しく導入された &lt;strong&gt;&lt;code&gt;GPT_UNCERTAIN&lt;/code&gt;（判定保留）&lt;/strong&gt; の登場です。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;判定項目&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;以前 (v3.13.0)&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;今回 (v3.14.2)&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;傾向と分析&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;GPT_HAM&lt;/strong&gt; (安全)&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;44.1%&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;72.3%&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;救済ルールにより「白」判定が大幅増。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;GPT_UNCERTAIN&lt;/strong&gt; (保留)&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;0%&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;19.9%&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;証拠不十分なものを「保留」にする慎重派へ。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;GPT_SPAM/PHISHING&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;9.6%&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;4.3%&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;確実な「黒」のみを絞り込み。誤判定が激減。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;NONE&lt;/strong&gt; (判定なし)&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3.6%&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;3.5%&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;既存フィルタで確定したスパムは賢くスキップ。&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;無理に白黒つけない&#34;&gt;「無理に白黒つけない」
&lt;/h3&gt;&lt;p&gt;以前のプロンプトは「厳格に判断せよ」という指示だったため、少しでも怪しいとスパム扱いされ、誤判定もありました。更新後は「複数のレッドフラグがない限り決めつけない」というルールが徹底されており、柔軟な判断になっています。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;2-判定理由の具体例英文と日本語訳&#34;&gt;2. 判定理由の具体例（英文と日本語訳）
&lt;/h2&gt;&lt;p&gt;AIが実際にどのような理由（X-GPT-Reason）で判定を下しているのか、各カテゴリーの代表例をまとめました。&lt;/p&gt;
&lt;h3 id=&#34;gpt_ham安全&#34;&gt;【GPT_HAM】（安全）
&lt;/h3&gt;&lt;p&gt;信頼できる送信元や、正当なビジネスメールが正しく認識されています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Legitimate recruitment email from known domain with no suspicious requests.&lt;/strong&gt;
（既知のドメインからの正当な求人メールであり、不審な要求は見られません。）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legitimate job scouting email from a known domain with no malicious requests or urgent threats.&lt;/strong&gt;
（既知のドメインからの正当なスカウトメールであり、悪意ある要求や緊急の脅しはありません。）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Official transactional update from a recognized service with no phishing indicators.&lt;/strong&gt;
（認識されているサービスからの公式な通知であり、フィッシングの兆候は見られません。）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;gpt_uncertain保留&#34;&gt;【GPT_UNCERTAIN】（保留）
&lt;/h3&gt;&lt;p&gt;安全そうだが100%の確証がないグレーゾーンです。日本の配信システム経由のメールに多い傾向があります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Legitimate technical mailing list discussion with no suspicious requests or links.&lt;/strong&gt;
（不審なリンクや要求はありませんが、技術的なメーリングリストでの議論のようです。）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Promotional language found, but it originates from a potentially recognized sender.&lt;/strong&gt;
（宣伝的な表現が含まれていますが、認識されている送信者からの可能性があります。）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A standard technical update or notification that does not meet the strict threshold for ham.&lt;/strong&gt;
（標準的な通知ですが、完全に安全と断定するための厳格な基準には達していません。）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;gpt_spam迷惑メール&#34;&gt;【GPT_SPAM】（迷惑メール）
&lt;/h3&gt;&lt;p&gt;詐欺ではないものの、一方的な宣伝や過度な売り込みを検知しています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Unsolicited promotional email pushing a business seminar with sensational claims.&lt;/strong&gt;
（衝撃的な主張を伴う、未承諾のビジネスセミナー勧誘メールです。）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dense promotional offer with discounts and coupon roulette, typical of marketing spam.&lt;/strong&gt;
（割引やクーポンが詰め込まれた過度な宣伝で、典型的なマーケティングスパムです。）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The email is a promotional solicitation with multiple marketing pitches and calls‑to‑action.&lt;/strong&gt;
（複数の宣伝文句や行動を促す言葉が含まれた、一方的な営業メールです。）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;gpt_phishingフィッシング詐欺&#34;&gt;【GPT_PHISHING】（フィッシング詐欺）
&lt;/h3&gt;&lt;p&gt;なりすましやアカウント停止を装う「明確な悪意」を正確に射抜いています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Sender uses unrelated domain and links to a third‑party URL instead of an official domain.&lt;/strong&gt;
（送信者が無関係なドメインを使用し、公式サイトではないURLへ誘導しています。）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Urgent threat about account restriction combined with a mismatched URL domain.&lt;/strong&gt;
（アカウント制限という緊急の脅しと、送信元と一致しないドメインのURLが含まれています。）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uses a fake sender address and directs users to a suspicious URL, classic signs of phishing.&lt;/strong&gt;
（偽の送信アドレスを使用し、不審なURLへ誘導しています。フィッシングの典型的な兆候です。）&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;3-さくらのai-engine-の活用について&#34;&gt;3. さくらのAI Engine の活用について
&lt;/h2&gt;&lt;p&gt;2ヶ月半使ってみて、 &lt;strong&gt;さくらのAI Engine は迷惑メール判定に十分活用できる&lt;/strong&gt;ということがわかりました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;安定性&lt;/strong&gt;: さくらのAI Engineの平均判定時間は &lt;strong&gt;1.66秒&lt;/strong&gt;。最長でも3秒程度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;納得感&lt;/strong&gt;: 判定理由（Reason）を読むと、AIが文脈をしっかり理解して「なぜ怪しいか」を論理的に説明している&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;毎日100通前後のメールが届いており、月末に無料枠を使い切っていた。
&lt;img src=&#34;https://memo2.ma3ki.net/posts/images/2026-02-11-1.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;さくらのAI Engine 1月分のリクエスト数&#34;
	
	
&gt;
&lt;img src=&#34;https://memo2.ma3ki.net/posts/images/2026-02-11-2.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;さくらのAI Engine 2月分のリクエスト数&#34;
	
	
&gt;
Rspamd のログを確認したところ、1/30 20時頃から制限され、2/1 8時過ぎまで続いた。月初の9時にリセットされるのかな。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;2026-01-30 20:11:11 #3605770(normal) &amp;lt;ace518&amp;gt;; lua; gpt.lua:896: bad reply: {&amp;#34;error&amp;#34;:{&amp;#34;message&amp;#34;:&amp;#34;rate limit exceeded&amp;#34;}}
...
2026-02-01 08:17:52 #3605770(normal) &amp;lt;67de09&amp;gt;; lua; gpt.lua:896: bad reply: {&amp;#34;error&amp;#34;:{&amp;#34;message&amp;#34;:&amp;#34;rate limit exceeded&amp;#34;}}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;この記事は Gemini と壁打ちして作成しています。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>RoundcubeとAutheliaで2要素認証を試してみた</title>
        <link>https://memo2.ma3ki.net/rockylinux9/roundcube-2fa-test/</link>
        <pubDate>Sat, 24 Jan 2026 23:43:33 +0900</pubDate>
        
        <guid>https://memo2.ma3ki.net/rockylinux9/roundcube-2fa-test/</guid>
        <description>&lt;p&gt;メールサーバの2要素認証について調べていたら自身で運用しているメールサーバでも
少し頑張れば動かせそうだったので試してみました。&lt;/p&gt;
&lt;h2 id=&#34;現在のメールサーバの構成&#34;&gt;現在のメールサーバの構成
&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://memo2.ma3ki.net/posts/images/2026-01-24-%e7%8f%be%e6%a7%8b%e6%88%90.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;現構成&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;freenginxのmail_moduleによるMail Proxyを設定しており、そこでTLSを終端している。
認証には自前のphpスクリプトを介してLDAP認証をし、LDAPからProxy先のdovecotの情報を得ている。 dovecotでは認証をしていない。
また、メールの送信については、Proxy先がpostfixになりxclientを使用して同じく認証はしていない。&lt;/p&gt;
&lt;h2 id=&#34;2要素認証設定後のメールサーバの構成&#34;&gt;2要素認証設定後のメールサーバの構成
&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://memo2.ma3ki.net/posts/images/2026-01-24-%e6%96%b0%e6%a7%8b%e6%88%90.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;2要素認証構成&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;2要素認証のためにAutheliaを導入し、認可やトークン発行周りの処理を一任した。図には書いてないがバックエンドはMySQLを選択。
自前のphpスクリプトは10年前に作成したもの。今回geminiにXOAUTH2対応とついでにリファクタリングをしてもらった。
KeycloakではなくAutheliaを選択したのは、サーバのメモリ節約のためJavaを動かしたくなかったから。&lt;/p&gt;
&lt;h2 id=&#34;ログイン画面遷移&#34;&gt;ログイン画面遷移
&lt;/h2&gt;&lt;p&gt;Roundcubeのログイン画面
&lt;img src=&#34;https://memo2.ma3ki.net/posts/images/2026-01-24-test1.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;test1&#34;
	
	
&gt;
Autheliaのログイン画面
&lt;img src=&#34;https://memo2.ma3ki.net/posts/images/2026-01-24-test2.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;test2&#34;
	
	
&gt;
Autheliaの2要素認証画面(初回)
&lt;img src=&#34;https://memo2.ma3ki.net/posts/images/2026-01-24-test3.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;test3&#34;
	
	
&gt;
Autheliaの2要素認証画面
&lt;img src=&#34;https://memo2.ma3ki.net/posts/images/2026-01-24-test4.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;test4&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;メモ&#34;&gt;メモ
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Roundcube
&lt;ul&gt;
&lt;li&gt;この構成ではpasswordプラグインでのパスワード変更は不可&lt;/li&gt;
&lt;li&gt;managesieveプラグインも認証できず動作しないが、少しソースを修正することで動作を確認した&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;試してみて
&lt;ul&gt;
&lt;li&gt;自分の使い方で実用性があるかというと微妙だが、今まで何となく使用する側だった2要素認証の仕組みを理解できたのはよかった。&lt;/li&gt;
&lt;li&gt;ClientにThunderbirdが利用できないかと試行錯誤をしていたが、任意のOAuth2クライアントに対応していないことがわかり諦めた。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
</description>
        </item>
        <item>
        <title>Rspamd GPT Plugin をさくらのAI Engine で動かしてみる</title>
        <link>https://memo2.ma3ki.net/rockylinux9/rspamd-gpt-plugin-sakura-ai-engine/</link>
        <pubDate>Thu, 01 Jan 2026 14:40:41 +0000</pubDate>
        
        <guid>https://memo2.ma3ki.net/rockylinux9/rspamd-gpt-plugin-sakura-ai-engine/</guid>
        <description>&lt;p&gt;Rspamd 3.9以降で標準的な外部AI連携機能（GPT Plugin）が利用可能になりました。&lt;br&gt;
１ヶ月程度使用してみたので久しぶりに何か書いてみます。&lt;/p&gt;
&lt;h2 id=&#34;環境&#34;&gt;環境
&lt;/h2&gt;&lt;p&gt;サーバ: さくらのVPS&lt;br&gt;
OS: Rocky Linux 9.5&lt;br&gt;
Rspamd: 3.13.0&lt;br&gt;
LLM: さくらのAI Engine&lt;/p&gt;
&lt;p&gt;メールサーバは個人ドメインのもので月2500通程度メールが届く&lt;br&gt;
さくらのAIエンジンは月3000リクエストまでは無料のプランがある&lt;/p&gt;
&lt;h2 id=&#34;設定&#34;&gt;設定
&lt;/h2&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/etc/rspamd/local.d/gpt.conf  
enabled = true;  
type = openai;  
url = https://api.ai.sakura.ad.jp/v1/chat/completions;  
api_key = さくらのAI Engine の アカウントトークン;  
model = gpt-oss-120b ;  
autolearn = true;  
timeout = 10s;  
allow_ham = true;  
reason_header = X-GPT-Reason;  
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;判定例&#34;&gt;判定例
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://memo.ma3ki.net/wp-content/uploads/2026/01/%e5%88%a4%e5%ae%9a%e4%be%8b-scaled.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;alignnone size-large wp-image-701&#34; src=&#34;https://memo.ma3ki.net/wp-content/uploads/2026/01/判定例-1024x605.png&#34; alt=&#34;&#34; width=&#34;660&#34; height=&#34;390&#34; srcset=&#34;https://memo.ma3ki.net/wp-content/uploads/2026/01/判定例-1024x605.png 1024w, https://memo.ma3ki.net/wp-content/uploads/2026/01/判定例-300x177.png 300w, https://memo.ma3ki.net/wp-content/uploads/2026/01/判定例-768x453.png 768w, https://memo.ma3ki.net/wp-content/uploads/2026/01/判定例-1536x907.png 1536w, https://memo.ma3ki.net/wp-content/uploads/2026/01/判定例-2048x1209.png 2048w&#34; sizes=&#34;auto, (max-width: 660px) 100vw, 660px&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;X-GPT-Reason に判定理由&lt;br&gt;
X-Spamd-Result に GPT_PHISHING や GPT_SPAM、GPT_HAMなどが追加される。&lt;/p&gt;
&lt;h2 id=&#34;結果&#34;&gt;結果
&lt;/h2&gt;&lt;p&gt;集計対象メール数: 2,485 通&lt;br&gt;
GPTの判定平均時間: 1.66 秒 (最長で3秒程度)&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://memo.ma3ki.net/wp-content/uploads/2026/01/%e3%81%95%e3%81%8f%e3%82%89%e3%81%aeAIEngine202512.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;alignnone wp-image-714 size-large&#34; src=&#34;https://memo.ma3ki.net/wp-content/uploads/2026/01/さくらのAIEngine202512-1024x573.png&#34; alt=&#34;&#34; width=&#34;660&#34; height=&#34;369&#34; srcset=&#34;https://memo.ma3ki.net/wp-content/uploads/2026/01/さくらのAIEngine202512-1024x573.png 1024w, https://memo.ma3ki.net/wp-content/uploads/2026/01/さくらのAIEngine202512-300x168.png 300w, https://memo.ma3ki.net/wp-content/uploads/2026/01/さくらのAIEngine202512-768x430.png 768w, https://memo.ma3ki.net/wp-content/uploads/2026/01/さくらのAIEngine202512.png 1436w&#34; sizes=&#34;auto, (max-width: 660px) 100vw, 660px&#34; /&gt;&lt;/a&gt;&lt;br&gt;
さくらのAI Engine の利用グラフ&lt;/p&gt;
&lt;h3 id=&#34;1-ham正常判定に多い理由&#34;&gt;1. 【HAM（正常）】判定に多い理由
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;英文の理由&lt;/th&gt;
          &lt;th&gt;日本語訳&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Legitimate technical mailing list discussion with no suspicious links or requests, indicating ham.&lt;/td&gt;
          &lt;td&gt;不審なリンクや要求を含まない、正当な技術系メーリングリストの議論であるため、HAM（正常）と判断&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;The email is a legitimate automated TLS report from example.com with no suspicious content.&lt;/td&gt;
          &lt;td&gt;example.com からの正当な自動生成TLSレポートであり、不審なコンテンツは含まれていない。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Legitimate job recruitment notification from a known domain (example.com) with matching sender info.&lt;/td&gt;
          &lt;td&gt;既知のドメイン（example.com）からの正当な求人通知であり、送信者情報も一致している。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Likely ham: a legitimate technical mailing list reply with matching domain and benign URLs.&lt;/td&gt;
          &lt;td&gt;正常な可能性が高い：ドメインが一致しており、無害なURLを含む正当な技術メーリングリストへの返信である。&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;2-gpt_phishingフィッシング判定に多い理由&#34;&gt;2. 【GPT_PHISHING（フィッシング）】判定に多い理由
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;英文の理由&lt;/th&gt;
          &lt;th&gt;日本語訳&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;The email pretends to be from Amazon but originates from an unrelated domain (example.com) and uses suspicious links.&lt;/td&gt;
          &lt;td&gt;Amazonを装っているが、無関係なドメイン（example.com）から送信されており、不審なリンクを使用している。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Suspicious request for account update or login using an external URL (example.com/path) that is not the official domain.&lt;/td&gt;
          &lt;td&gt;公式ドメインではない外部URL（example.com/path）を使用して、アカウント更新やログインを促す不審な要求。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Uses urgency and suspicious links (example.com) to solicit personal information, typical of phishing scams.&lt;/td&gt;
          &lt;td&gt;フィッシング詐欺に典型的な、緊急性の強調と不審なリンク（example.com）を用いた個人情報の搾取。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Matches credential harvesting patterns by directing to a non-official login page for site administration.&lt;/td&gt;
          &lt;td&gt;サイト管理用の非公式なログインページへ誘導しており、認証情報搾取（クレデンシャル・ハーベスティング）のパターンに一致する。&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;3-gpt_spamスパム判定に多い理由&#34;&gt;3. 【GPT_SPAM（スパム）】判定に多い理由
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;英文の理由&lt;/th&gt;
          &lt;th&gt;日本語訳&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;High spam probability due to excessive promotional language, marketing keywords, and unsolicited recruitment.&lt;/td&gt;
          &lt;td&gt;過度な宣伝文句、マーケティングキーワード、および未承諾の求人勧誘が含まれるため、スパムの可能性が高い。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Primarily promotional content with multiple marketing links and emphasis on discounts or offers.&lt;/td&gt;
          &lt;td&gt;主にプロモーション内容であり、多数のマーケティング用リンクや、割引・特典の強調が見られる。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Frequent use of marketing phrases and a clear intent to drive traffic to a commercial service.&lt;/td&gt;
          &lt;td&gt;マーケティング用語が頻繁に使用されており、商業サービスへ誘導しようとする明確な意図がある。&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;注意&#34;&gt;注意
&lt;/h3&gt;&lt;p&gt;GPT_PHISHING がついたもので迷惑メールと判定されたくないものが数通あったので
調査したところ、テストしていたrspamdバージョン(3.13.0)と最新のバージョンでプロンプトが
大幅に改善されていることに気づいたので、バージョンアップ(3.14.2)をしてしばらくまた様子をみたい。&lt;/p&gt;
&lt;h3 id=&#34;rspamd-3130-のプロンプト&#34;&gt;rspamd 3.13.0 のプロンプト
&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;settings.prompt = &amp;#34;Analyze this email strictly as a spam detector given the email message, subject, &amp;#34; ..
      &amp;#34;FROM and url domains. Evaluate spam probability (0-1). &amp;#34; ..
      &amp;#34;Output ONLY 3 lines:\n&amp;#34; ..
      &amp;#34;1. Numeric score (0.00-1.00)\n&amp;#34; ..
      &amp;#34;2. One-sentence reason citing whether it is spam, the strongest red flag, or why it is ham\n&amp;#34; ..
      &amp;#34;3. Empty line or mention ONLY the primary concern category if found from the list: &amp;#34; ..
        table.concat(lua_util.keys(categories_map), &amp;#39;, &amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;rspamd-3142-のプロンプト&#34;&gt;rspamd 3.14.2 のプロンプト
&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;settings.prompt = &amp;#34;Analyze this email as a spam detector. Evaluate spam probability (0-1).\n\n&amp;#34; ..
      &amp;#34;LEGITIMATE patterns to recognize:\n&amp;#34; ..
      &amp;#34;- Verification emails with time-limited codes are NORMAL and legitimate\n&amp;#34; ..
      &amp;#34;- Transactional emails (receipts, confirmations, password resets) from services\n&amp;#34; ..
      &amp;#34;- &amp;#39;Verify email&amp;#39; or &amp;#39;confirmation code&amp;#39; is NOT automatically phishing\n&amp;#34; ..
      &amp;#34;- Emails from frequent/known senders (see context) are more trustworthy\n\n&amp;#34; ..
      &amp;#34;Flag as SPAM/PHISHING only with MULTIPLE red flags:\n&amp;#34; ..
      &amp;#34;- Urgent threats or fear tactics (account closure, legal action)\n&amp;#34; ..
      &amp;#34;- Domain impersonation or suspicious lookalikes\n&amp;#34; ..
      &amp;#34;- Requests for passwords, SSN, credit card numbers\n&amp;#34; ..
      &amp;#34;- Mismatched URLs pointing to different domains than sender\n&amp;#34; ..
      &amp;#34;- Poor grammar/spelling in supposedly professional emails\n\n&amp;#34; ..
      &amp;#34;IMPORTANT: If sender is &amp;#39;frequent&amp;#39; or &amp;#39;known&amp;#39;, reduce phishing probability &amp;#34; ..
      &amp;#34;unless there are strong contradictory signals.\n\n&amp;#34; ..
      &amp;#34;Output ONLY 3 lines:\n&amp;#34; ..
      &amp;#34;1. Numeric score (0.00-1.00)\n&amp;#34; ..
      &amp;#34;2. One-sentence reason citing the strongest indicator\n&amp;#34; ..
      &amp;#34;3. Primary category if applicable: &amp;#34; ..
      table.concat(lua_util.keys(categories_map), &amp;#39;, &amp;#39;)
&lt;/code&gt;&lt;/pre&gt;</description>
        </item>
        <item>
        <title>さくらのクラウドに RockyLinux9 でメールサーバを構築する</title>
        <link>https://memo2.ma3ki.net/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%81%AB-rockylinux9-4-%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99/</link>
        <pubDate>Thu, 05 Sep 2024 15:58:43 +0000</pubDate>
        
        <guid>https://memo2.ma3ki.net/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%81%AB-rockylinux9-4-%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99/</guid>
        <description>&lt;p&gt;さくらのクラウドで自分が利用する構成の単体のメールサーバを構築する手順書兼スタートアップスクリプトを書いた。&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ma3ki/startupscripts/tree/master/originalscript/mailsystem_rockylinux9&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/ma3ki/startupscripts/tree/master/originalscript/mailsystem_rockylinux9&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;サーバを作成開始してから20分程度で完成する。&lt;/p&gt;
&lt;p&gt;SPF/DKIM/DMARC/ARC に対応、送信StartTLS にも対応し、すぐに Gmailにも送信できちゃう。mta-sts はメールサーバ移行時に忘れててトラブったことがあるので不要と判断した。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>さくらのレンタルサーバから転送するメールのSPF認証をpassさせる</title>
        <link>https://memo2.ma3ki.net/sakura-rental-server/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AE%E3%83%AC%E3%83%B3%E3%82%BF%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%81%8B%E3%82%89%E8%BB%A2%E9%80%81%E3%81%99%E3%82%8B%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AEspf/</link>
        <pubDate>Sun, 21 Apr 2024 13:21:04 +0000</pubDate>
        
        <guid>https://memo2.ma3ki.net/sakura-rental-server/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AE%E3%83%AC%E3%83%B3%E3%82%BF%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%81%8B%E3%82%89%E8%BB%A2%E9%80%81%E3%81%99%E3%82%8B%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AEspf/</guid>
        <description>&lt;p&gt;&lt;strong&gt;2026/1/15 追記) さくらのレンタルサーバは ARC に対応したため、この対応は不要です。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;さくらのレンタルサーバでメールを転送すると大抵の場合、転送先で SPF認証が fail します。&lt;/p&gt;
&lt;p&gt;理由は送信元のメールアドレスを Envelope From に設定したまま転送先にメールを送信する為です。(大抵のレンタルサーバサービスのメール転送はこの仕様です)&lt;/p&gt;
&lt;p&gt;さくらのレンタルサーバは メールの転送に maildrop を使用しているため、設定を書き換えることで転送メールの Envelope From を変更することができます。転送メールの SPF認証を pass させたい場合は、Envelope From を さくらのレンタルサーバで使用しているメールアドレスに書き換えればよいです。&lt;/p&gt;
&lt;p&gt; .mailfilter は下記のように書き換えます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$LOGNAME は さくらのレンタルサーバのメールアドレスが保存されている変数&lt;/li&gt;
&lt;li&gt;FROMは Envelope Fromの変数&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;mailto:foobar@example.com&#34; &gt;foobar@example.com&lt;/a&gt; は転送先のメールアドレス&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;FROM=&amp;#34;$LOGNAME&amp;#34;
cc &amp;#34;!foobar@example.com&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;これで転送先でSPF認証はpassします。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>389 Directory Server マルチマスタレプリケーション設定</title>
        <link>https://memo2.ma3ki.net/rockylinux8/rockylinux8-389ds-multimaster/</link>
        <pubDate>Sat, 06 Nov 2021 06:16:03 +0000</pubDate>
        
        <guid>https://memo2.ma3ki.net/rockylinux8/rockylinux8-389ds-multimaster/</guid>
        <description>&lt;p&gt;Rocky Linux 8.4 にて 389 Directory Server のマルチマスタレプリケーション設定を試した手順(※SELinuxは無効にしてます)&lt;/p&gt;
&lt;h2 id=&#34;構成&#34;&gt;構成
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;1台目(サプライヤー1)のIPアドレス 192.168.1.1&lt;/li&gt;
&lt;li&gt;2台目(サプライヤー2)のIPアドレス 192.168.1.2&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;1台目2台目共通手順&#34;&gt;1台目,2台目共通手順
&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#-- 389portの接続許可
# firewall-cmd --permanent --add-port=389/tcp
# firewall-cmd --reload

#-- 各種設定を変数に代入
# ROOT_DN=&amp;#34;cn=Directory Manager&amp;#34;
# ROOT_PASSWORD=&amp;#34;RootdnPassword&amp;#34;
# REP_DN=&amp;#34;cn=replication manager,cn=config&amp;#34;
# REP_PASSWORD=&amp;#34;ReplicaPassword&amp;#34;
# SUPIP1=192.168.1.1
# SUPIP2=192.168.1.2

#-- 389 Directory Serverのインストール
# dnf -y module enable 389-ds
# dnf -y install 389-ds-base openldap-clients

#-- version の確認
# rpm -qa 389-ds-base
389-ds-base-1.4.3.16-19.module+el8.4.0+636+837ee950.x86_64

#-- テンプレート作成
# dscreate create-template ldap.inf

#-- テンプレート編集
# sed -ri -e &amp;#34;s/;(root_password).*/\1=${ROOT_PASSWORD}\nroot_dn=${ROOT_DN}/&amp;#34; ldap.inf

#-- インスタンスを作成 (インスタンス名はデフォルトのlocalhostのまま)
# dscreate from-file ldap.inf
Starting installation...
Completed installation for localhost

#-- インスタンスを起動
# systemctl enable dirsrv@localhost.service
# systemctl start dirsrv@localhost

#-- データベースを作成
# dsconf localhost backend create --suffix=&amp;#34;dc=example,dc=com&amp;#34; --be-name=&amp;#34;userRoot&amp;#34;
The database was sucessfully created
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;2台目のみで実行&#34;&gt;2台目のみで実行
&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#-- レプリケーション用のアカウントを作成(replica-id=2)
# dsconf localhost replication enable --suffix=&amp;#34;dc=example,dc=com&amp;#34; --role=&amp;#34;master&amp;#34; --replica-id=2 --bind-dn=&amp;#34;${REP_DN}&amp;#34; --bind-passwd=&amp;#34;${REP_PASSWORD}&amp;#34;
Replication successfully enabled for &amp;#34;dc=example,dc=com&amp;#34;

#-- 389-ds のバージョンが 1.4.4.14以降の場合は role に supplier を使用する
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;1台目のみで実行&#34;&gt;1台目のみで実行
&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#-- ルートDNのエントリーを作成
# cat &amp;lt;&amp;lt;_EOL_&amp;gt; example_com.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: example.com

_EOL_

# ldapadd -x -h localhost -D &amp;#34;${ROOT_DN}&amp;#34; -w ${ROOT_PASSWORD} -f example_com.ldif
adding new entry &amp;#34;dc=example,dc=com&amp;#34;

#-- レプリケーション用のアカウントを作成(replica-id=1)
# dsconf localhost replication enable --suffix=&amp;#34;dc=example,dc=com&amp;#34; --role=&amp;#34;master&amp;#34; --replica-id=1 --bind-dn=&amp;#34;${REP_DN}&amp;#34; --bind-passwd=&amp;#34;${REP_PASSWORD}&amp;#34;
Replication successfully enabled for &amp;#34;dc=example,dc=com&amp;#34;

#-- レプリカ合意を作成し、サプライヤー2を初期化 (何故かコマンドの応答まで時間がかかる)
# dsconf localhost repl-agmt \
      create --suffix=&amp;#34;dc=example,dc=com&amp;#34; --host=&amp;#34;${SUPIP2}&amp;#34; --port=389 \
      --conn-protocol=LDAP --bind-dn=&amp;#34;${REP_DN}&amp;#34; \
      --bind-passwd=&amp;#34;${REP_PASSWORD}&amp;#34; --bind-method=SIMPLE --init \
      agreement-supplier1-to-supplier2
Successfully created replication agreement &amp;#34;agreement-supplier1-to-supplier2&amp;#34;
Agreement initialization started...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ここまでで サプライヤー1 から サプライヤー2 へのデータ更新は同期されるが、&lt;br&gt;
まだ サプライヤー2 から サプライヤー1 へのデータ更新は同期されない&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;### 2台目のみで実行
#-- レプリカ合意を作成
# dsconf localhost repl-agmt \
      create --suffix=&amp;#34;dc=example,dc=com&amp;#34; --host=&amp;#34;${SUPIP1}&amp;#34; --port=389 \
      --conn-protocol=LDAP --bind-dn=&amp;#34;${REP_DN}&amp;#34; \
      --bind-passwd=&amp;#34;${REP_PASSWORD}&amp;#34; --bind-method=SIMPLE \
      agreement-supplier2-to-supplier1
Successfully created replication agreement &amp;#34;agreement-supplier2-to-supplier1&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;これで双方向でデータ更新がされる状態となる&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
