Мост Matrix-XMPP
Обновлено 30 сентября 2019
Подготовка LXC-контейнера
Мы рекомендуем выполнить настройку моста в отдельном контейнере, настроив его согласно инструкции.
Настройка внешнего компонента Prosody
Настройте внеший компонет matrix.xmpp.example.org согласно документации, а также компонент конференции muc.xmpp.example.org.
Установка matrix-bifrost
Установите nodeenv:
emerge -a dev-python/nodeenv
Скачайте последнюю версию matrix-bifrost
из github в каталог /var/calculate:
git clone https://github.com/matrix-org/matrix-bifrost /var/calculate/matrix-bifrost
Создайте и активируйте виртуальное окружение NodeJS-10.15.3 в каталоге приложения:
nodeenv --node=10.15.3 node-10
source node-10/bin/activate
Выполните установку приложения из каталога /var/calculate/matrix-bifrost:
npm install
npm run build
Настройка моста
Скопируйте файл настроек config.sample.yaml
в config.yaml
и выполните настройку моста, где:
matrix.example.org- имя matrix-сервераxmpp.example.org- имя jabber-сервераmatrix.xmpp.example.org- имя внешнего компонента jabber-сервераmuc.xmpp.example.org- имя компонента конференции jabber-сервераxmpp_- префикс, используемый для обозначения jabber-пользователей и конференций
bridge: # Your homeserver server_name. domain: "matrix.example.org" # A internally reachable endpoint for the CS api of the homeserver. homeserverUrl: "https://matrix.example.org" # Prefix of all users of the bridge. userPrefix: "xmpp_" purple: # For selecting a specific backend. One of "node-purple", "xmpp.js". Defaults to "node-purple" backend: "xmpp.js" backendOpts: # endpoint to reach the component on. The default port is 5347 service: "xmpp://xmpp.example.org:5347" # domin assigned to the component. domain: "matrix.xmpp.example.org" # password needed by the component. password: "secret" portal: # List of regexes to match a alias that can be turned into a bridge. aliases: # This matches _purple_ followed by anything "^xmpp_(.+)$": # Use the prpl-jabber protocol. protocol: "xmpp.js" properties: # Set room to the first regex match room: "regex:1" # Set the server to be conf.localhost server: "muc.xmpp.example.org" # Automatically register users with accounts if they join/get invited # a room with a protocol they are not bound to. # This is REQUIRED for xmpp.js to work. autoRegistration: enabled: true protocolSteps: # For xmpp.js, please use: xmpp-js: type: "implicit" parameters: username: "<T_MXID_SANE>@matrix.xmpp.example.org"
Выполните генерацию регистрационного файла сервиса, который находится на хосте matrix-xmpp.example.org:
npm run genreg -- -u http://matrix-xmpp.example.org:9555 -f registration_xmpp.yaml
Исправьте префикс _purple_ на xmpp_
id: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef hs_token: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef as_token: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef namespaces: users: - exclusive: true regex: '@xmpp_.*' aliases: - exclusive: true regex: '#xmpp_.*' rooms: [] url: 'http://matrix-xmpp.example.org:9555' sender_localpart: xmpp_bot rate_limited: true protocols: - xmpp
Скопируйте полученный файл registration_xmpp.yaml в каталог /var/calculate/synapse Matrix-сервера.
scp registration_xmpp.yaml root@synapse:/var/calculate/synapse/
Добавьте файл регистраций сервиса в настройку Synapse:
... # A list of application service config file to use app_service_config_files: - registration_xmpp.yaml ...
Перезапустите Synapse:
/etc/init.d/synapse restart
Запуск моста
Создайте сценарий OpenRC для управления демоном Matrix XMPP bridge:
#!/sbin/openrc-run # Copyright 1999-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ name="Matrix-XMPP daemon" description="Matrix XMPP bridge daemon" command=/var/calculate/matrix-bifrost/node-10/bin/node command_args="build/src/Program.js -c config.yaml -p 9555 -f registration_xmpp.yaml" directory=/var/calculate/matrix-bifrost pidfile="/run/matrixxmpp.pid" command_background=true depend() { need net }
Установите права на запуск:
chmod 0755 /etc/init.d/matrix-xmpp-bridge
Запустите демон:
/etc/init.d/matrix-xmpp-bridge start
Добавьте демон в автозагрузку:
rc-update add matrix-xmpp-bridge
Соединение XMPP с Matrix
Соединение пользователей XMPP с пользователями Matrix
JID пользователя Matrix в XMPP выглядит следующим образом <логин_Matrix>_<сервер Matrix>@matrix.xmpp.example.org.
Для открытия диалога с пользователем user:matrix.example.org из XMPP, начните диалог с user_matrix.example.org@matrix.xmpp.example.org.
MXID пользователя XMPP выглядит следующим образом @xmpp_<XMPP_nick>=40<jabber_server>:matrix.example.org.
Для открытия диалога с пользователем XMPP foo@xmpp.example.org из Matrix, начните диалог с @xmpp_foo=40xmpp.example.org:matrix.example.org.
Соединение комнат Matrix с XMPP-чатами
Псевдоним чата XMPP в Matrix выглядит следующим образом #xmpp_(имя):matrix.example.org
Для того, чтобы создать комнату, связанную с чатом XMPP room@muc.xmpp.example.org из Matrix, присоединитесь к комнате #xmpp_room:matrix.example.org.
Подключение чата XMPP к уже существующей комнате Matrix
Получите MXID команды, с которой хотите связать mychat@muc.xmpp.example.org (!PHAqztyseimYIVPwqu:matrix.example.org)
Создайте чат mychat@muc.xmpp.example.org в XMPP.
В регистрационный файл добавьте обработку для комнаты !PHAqztyseimYIVPwqu:matrix.example.org
... namespaces: ... rooms: - exclusive: false regex: '!PHAqztyseimYIVPwqu:matrix.example.org'
Скопируйте полученный файл registration_xmpp.yaml в каталог /var/calculate/synapse Matrix-сервера.
scp registration_xmpp.yaml root@synapse:/var/calculate/synapse/
Перезапустите сервер Synapse
/etc/init.d/synapse restart
Перезапустите мост Matrix-XMPP
/etc/init.d/matrix-xmpp-bridge restart
Соедините текущую комнату Matrix с чатом XMPP mychat@muc.xmpp.example.org, отправив в неё сообщение:
!purple bridge xmpp-js muc.xmpp.example.org mychat