Prosodyのインストール

提供: Akionux-wiki
Share/Save/Bookmark
移動: 案内検索

概要

ProsodyXMPPサーバーの一つ。

テスト環境

Slackware Linux x86_64 14.1にてSlackBuildsを用いてインストールを行なった。

インストール

依存関係

  • network/prosody
    • development/lua
    • libraries/luasocket
    • libraries/luaexpat
    • libraries/lua-filesystem
    • libraries/luasec
    • libraries/luadbi (storage_sqlモジュール使用時)

Slackbuildを実行する前にすること

prosodyユーザー・グループを作成

# groupadd -g 274 prosody
# useradd -u 274 -g 274 -s /sbin/nologin -d /var/lib/prosody prosody

設定

ホスト名

/etc/prosody/prosody.cfg.luaを編集する。 VirtualHostでホスト名を設定する。

VirtualHost "yourdomain.net"

VirtualHostということなので、いくつもホストを持つことができる。

SSL

秘密鍵と証明書を指定する。 certificateにはfullchainを指定する[1]

        ssl = {
                key = "/etc/letsencrypt/live/yourdomain.net/privkey.pem";
                certificate = "/etc/letsencrypt/live/yourdomain.net/fullchain.pem";
        }

ユーザーの作成

prosodyctlコマンドでユーザーを追加できる

sudo prosodyctl adduser me@example.com

または

sudo prosodyctl register me example.com mypassword

任意のユーザー登録を受け付ける場合は /etc/prosody/prosody.cfg.lua

allow_registration = true;

としてユーザー登録を有効にする。

pidファイルの準備

pidファイル用のディレクトリを作成

sudo mkdir /var/run/prosody
sudo chown prosody:prosody /var/run/prosody

/etc/prosody/prosody.cfg.luaでpidfileを設定

pidfile = "/var/run/prosody/prosody.pid" -- this is the default on Debian

ログ

sudo mkdir /var/log/prosody
sudo chown prosody:prosody /var/log/prosody 
log = {
        info = "/var/log/prosody/prosody.log"; -- Change 'info' to 'debug' for verbose logging
        error = "/var/log/prosody/prosody.err";
        -- "*syslog"; -- Uncomment this for logging to syslog
        -- "*console"; -- Log to the console, useful for debugging with daemonize=false
}

ストレージ

ここでは、ストレージにMySQL(MariaDB)を使う場合を想定する。 データベースを作成し、prosodyユーザーに権限を与え、パスワードsecretを設定

mysql -u root -p
MariaDB [(none)]> create database prosody;
MariaDB [(none)]> grant create, select, insert, update, delete, alter, lock tables, index on prosody.* to 'prosody'@'localhost' identified  by 'secret';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> \q

/etc/prosody/prosody.cfg.luaを編集

storage = "sql" -- Default is "internal"

-- For the "sql" backend, you can uncomment *one* of the below to configure:
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.
sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }

実行

起動スクリプトを実行できるようにする:

sudo chmod u+x /etc/rc.d/rc.prosody

起動スクリプトを実行する:

sudo /etc/rc.d/rc.prosody start

コミュニティモジュール

Prosody IM community modulesにコアモジュール以外のコミュニティで開発されているモジュールがある。 ここではそのコミュニティモジュールが使えるようにする。

適当な場所にprosody-modulesを置く:

cd /usr/share
sudo hg clone https://hg.prosody.im/prosody-modules/ prosody-modules

/etc/prosody/prosody.cfg.luaを編集して、plugin_pathsへ置いたパスを入れる:

sudo vim /etc/prosody/prosody.cfg.lua
-- These paths are searched in the order specified, and before the default path
plugin_paths = { "/usr/share/prosody-modules/" }

例えばユーザーを招待するadhocコマンドを有効にするmod_inviteを有効にするには、/etc/prosody/prosody.cfg.lua

modules_enabled = {
        -- Other specific functionality
                "invite"; -- Allows users with an account to generate single-use invite URLs using an ad-hoc command.
};

というように書く。

リポジトリからpullするには、

sudo hg pull https://hg.prosody.im/prosody-modules/
sudo hg update

というようにする。

ファイルアップロード

mod_http_uploadはファイルアップロードを可能にするモジュール。

まず、ファイルアップロード先のディレクトリを作成しておく:

sudo -u prosody mkdir /var/lib/prosody/upload

http_uploadを有効にする:

modules_enabled = {
    -- ...
    "http_upload"; -- Implements XEP-0363, which lets clients upload files over HTTP
    -- ...
}

http_upload_file_size_limitでアップロードファイルの最大サイズ、http_upload_pathでアップロード先パスを指定する:

http_upload_file_size_limit = 10000000 -- byte
http_upload_path = "/var/lib/prosody/upload"

メッセージアーカイブ管理

mod_mamXEP-0313: Message Archive Management (MAM)を実装し、mod_mam_archiveはMAMのためにメッセージをアーカイブするモジュール。 modules_enabledへ次のように追加する:

modules_enabled = {
    -- ...
    "mam"; -- Implementation of XEP-0313: Message Archive Management
    "mam_archive"; -- Implementation of XEP-0136: Message Archiving for mod_mam
    "mam_adhoc"; -- Ad-hoc interface to Message Archive Management Settings
    "mam_muc"; -- XEP-0313: Message Archive Management for MUC
    -- ...
}

mod_mam_adhocはユーザがAd-hocコマンドによりアーカイブ設定ができるようにするモジュール。

mam_mucはチャットルームのMAMの実装。次のようにMUCに対して設定する:

Component "conference.example.org" "muc"
modules_enabled = {
    "mam_muc"; -- Does logging to storage backend configured below
    "http_muc_log"; -- Storage module using mod\_muc\_log data with new stanza archive API
}
storage = {
    muc_log = "muc_log";
}

ここで、mod_http_muc_logはチャットのログを見るためのWebインターフェースを提供する。 さらに、MUCのアーカイブをする場合はそれ用のディレクトリを作成しておく必要があるようだ:

sudo mkdir -p /var/lib/prosody/conference%2eexample%2eorg/muc_log

プッシュ通知

mod_cloud_notifyはプッシュ通知(XEP-0357: Push Notifications)を実装する。

"cloud_notify"; -- XEP-0357: Cloud push notifications

ネットワーク切断時の対策

mod_smacksはネットワークが不安定で切断されたときにセッションを回復するXMPPの仕様、XEP-0198: Stream Managementを実装する。

"smacks"; -- Reliability and fast reconnects for XMPP

メッセージカーボン

mod_carbonsは、同一ユーザが複数のデバイスでログインしている場合に全ての接続中のデバイスへメッセージを配信するという仕様XEP-0280: Message Carbonsを実装。

"carbons"; -- Message Carbons

ブロック

blockingは特定のユーザとの会話をブロックできるようにする(XEP-0191: Blocking Command)。privacy_listsというモジュールも有効にする必要がある(0.10未満の場合、privacy_listsでなくて、privacy)。

"privacy_lists"; -- Privacy lists (XEP-0016) support
"blocking"; -- XEP-0191: Simple Communications Blocking support

招待

mod_inviteは新しいユーザを招待する機能を提供するモジュール。 modules_enabledへ次のように追加する:

modules_enabled = {
    -- ...
    "invite"; -- Allows users with an account to generate single-use invite URLs using an ad-hoc command.
    -- ...
}

ユーザの招待は、Ad-hocコマンドを使って行なう。 Ad-hocコマンドの"Invite user"を実行すると、URLが出力されるので、そのURLを招待したい人に伝え、招待された人はURLをブラウザで開き、ユーザ名およびパスワードを入力してユーザを作成するという手順になる。

ウェブ管理

mod_admin_webはウェブ管理インターフェースを提供するモジュール。 mod_admin_web/admin_webでスクリプトを実行しておく:

cd mod_admin_web/admin_web
sudo ./get_deps.sh

modules_enabledへ次のように追加する:

VirtualHost "example.com"
   modules_enabled = {
       .....
       "admin_web";
       .....
   }

http://example.com:5280/adminまたはhttps://example.com:5281/adminからアクセスする。

メッセージログ

mod_message_loggingはメッセージをテキストでログする[2]

"message_logging"; -- Log/archive all user messages

message_logging_dirで出力先ディレクトリを指定する。

message_logging_dir = "/var/log/prosody"

SQLデータベースへログする場合はmod_log_messages_sqlを使う。

トラブルシューティング

ipv6が使えないためにうまく起動できない

次のようなエラーが出た:

Apr 16 05:27:48 general info    Hello and welcome to Prosody version 0.9.8
Apr 16 05:27:48 general info    Prosody is using the select backend for connection handling
Apr 16 05:27:48 socket  warn    server.lua, [::]:5222: Address family not supported by protocol
Apr 16 05:27:48 portmanager     error   Failed to open server port 5222 on ::, Address family not supported by protocol
Apr 16 05:27:48 portmanager     info    Activated service 'c2s' on [*]:5222
Apr 16 05:27:48 portmanager     info    Activated service 'legacy_ssl' on no ports
Apr 16 05:27:48 socket  warn    server.lua, [::]:5269: Address family not supported by protocol
Apr 16 05:27:48 portmanager     error   Failed to open server port 5269 on ::, Address family not supported by protocol
Apr 16 05:27:48 portmanager     info    Activated service 's2s' on [*]:5269
Apr 16 05:27:48 mod_posix       info    Prosody is about to detach from the console, disabling further console output

/etc/modprobe.d/blacklist.confのipv6モジュールを無効化するオプションをコメントアウトすることで解決した。

#options ipv6 disable=1

もしくはprosodyにipv4を使うよう設定する

References

  1. #612 How to use letsencrypt with prosody? (open) - Prosody IM Issue Tracker https://prosody.im/issues/issue/612
  2. Message archiving - Prosody.im https://prosody.im/doc/archiving