Мост Matrix-XMPP
Updated 30 September 2019
Preparing a LXC container
We suggest that you set up the bridge in a separate container you shall have prepared according to the manual.
Prosody configuration
Configure the external component, matrix.xmpp.example.org according to the documentation, as well as muc.xmpp.example.org, the conference component.
Installing matrix-bifrost
Install the nodeenv package:
emerge -a dev-python/nodeenv
Fetch the latest version of matrix-bifrost
from github and copy it to /var/calculate:
git clone https://github.com/matrix-org/matrix-bifrost /var/calculate/matrix-bifrost
Create and activate virtual environment NodeJS-10.15.3 in the application directory:
nodeenv --node=10.15.3 node-10
source node-10/bin/activate
Install the application while in /var/calculate/matrix-bifrost:
npm install
npm run build
Bridge configuration
Copy config.sample.yaml
to config.yaml
and configure the bridge with the following parameters:
matrix.example.orgis the Matrix serverxmpp.example.orgis the Jabber servermatrix.xmpp.example.orgis the external Jabber componentmuc.xmpp.example.orgis the conference Jabber componentxmpp_is the prefix used to address Jabber users and conferences
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"
Create a registration file for the service located on matrix-xmpp.example.org:
npm run genreg -- -u http://matrix-xmpp.example.org:9555 -f registration_xmpp.yaml
Replace the _purple_ prefix with 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
Copy registration_xmpp.yaml to the /var/calculate/synapse directory on the Matrix server.
scp registration_xmpp.yaml root@synapse:/var/calculate/synapse/
Add the registration file to the configuration of Synapse:
... # A list of application service config file to use app_service_config_files: - registration_xmpp.yaml ...
Restart Synapse:
/etc/init.d/synapse restart
Starting the bridge
Create an OpenRC script to manage the Matrix XMPP bridge daemon:
#!/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 }
Set the privileges:
chmod 0755 /etc/init.d/matrix-xmpp-bridge
Launch the daemon:
/etc/init.d/matrix-xmpp-bridge start
Add it to autostart:
rc-update add matrix-xmpp-bridge
Connecting XMPP to Matrix
Connecting XMPP users with Matrix users
A Matrix user's JID in XMPP is [HTML_REMOVED]_[HTML_REMOVED]@matrix.xmpp.example.org.
To open a dialog with user user:matrix.example.org while on XMPP, start it with user_matrix.example.org@matrix.xmpp.example.org.
An XMPP user's MXID is @xmpp_<XMPP_nick>=40<jabber_server>:matrix.example.org.
To open a dialog with XMPP user foo@xmpp.example.org while on Matrix, start it with ~~@xmpp_foo=40xmpp.example.org:matrix.example.org~.
Connecting a Matrix room to XMPP chats
The alias of an XMPP chat in Matrix is #xmpp_(name):matrix.example.org
To create a room connected to XMPP chat ~room@muc.xmpp.example.org while on Matrix, join the room #xmpp_room:matrix.example.org~.
Connecting an XMPP chat room to an existing Matrix room
Ask for the MXID of the command you want to connect mychat@muc.xmpp.example.org (! with:PHAqztyseimYIVPwqu:matrix.example.org)
Create a chat, mychat@muc.xmpp.example.org in XMPP.
Add processing for room ! to the registration file:
PHAqztyseimYIVPwqu:matrix.example.org
... namespaces: ... rooms: - exclusive: false regex: '!PHAqztyseimYIVPwqu:matrix.example.org'
Copy registration_xmpp.yaml to the /var/calculate/synapse directory on the Matrix server.
scp registration_xmpp.yaml root@synapse:/var/calculate/synapse/
Restart the Synapse server.
/etc/init.d/synapse restart
Restart the bridge:
/etc/init.d/matrix-xmpp-bridge restart
Connect the current Matrix room to XMPP chat room mychat@muc.xmpp.example.org by sending the following message to it:
!purple bridge xmpp-js muc.xmpp.example.org mychat