Created by: ston1th 2019-05-29 18:15:33
Updated by: ston1th 2020-11-10 00:06:45
Visibility: Public

OpenBSD Matrix Server

Install Packages

pkg_add -z python-3.6.6
pkg_add libffi py3-pip py3-setuptools sqlite3 py3-virtualenv libxslt jpeg

Synapse

Create user:

groupadd _synapse
useradd -m -g _synapse -d /usr/local/_synapse -s /bin/ksh _synapse

Virtualenv:

su _synapse
virtualenv-3 -p python3.6 ~/.synapse
. /usr/local/_synapse/.synapse/bin/activate
pip install lxml
pip install matrix-synapse
python3 -m synapse.app.homeserver \
    --server-name matrix.example.com \
    --config-path homeserver.yaml \
    --generate-config \
    --report-stats=no

Synapse Config:

vi homeserver.yaml

# web_client_location: "/path/to/web/root" ?
public_baseurl: https://matrix.example.com/

url_preview_ip_range_blacklist:
- '0.0.0.0/8'
- '10.0.0.0/8'
- '100.64.0.0/10'
- '127.0.0.0/8'
- '169.254.0.0/16'
- '172.16.0.0/12'
- '192.0.0.0/24'
- '192.0.2.0/24'
- '192.168.0.0/16'
- '198.18.0.0/15'
- '198.51.100.0/24'
- '203.0.113.0/24'
- '224.0.0.0/3'
- '::1/128'
- 'fe80::/64'
- 'fc00::/7'

push:
  include_content: false

use_presence: false

  - port: 8008
    tls: false
    bind_addresses: ['0.0.0.0']

bcrypt_rounds: 13

password_config:
   enabled: true
   # Uncomment and change to a secret random string for extra security.
   # DO NOT CHANGE THIS AFTER INITIAL SETUP!
   pepper: "$(openssl rand -hex 16)"

Service:

cat <<'EOF'> /usr/local/sbin/synapse
#!/bin/sh

cd ~ 
. ~/.synapse/bin/activate
synctl $1
EOF
chmod 755 /usr/local/sbin/synapse

cat <<'EOF'> /etc/rc.d/synapse
#!/bin/sh

daemon="/usr/local/sbin/synapse"
daemon_user="_synapse"

. /etc/rc.d/rc.subr

rc_bg=YES
rc_reload=NO
pexp="/usr/local/_synapse/.synapse/bin/python3.6 -B -m synapse.app.homeserver --daemonize -c homeserver.yaml"

rc_start() {
        ${rcexec} "${daemon} start >/dev/null 2>&1"
}

rc_stop() {
        ${rcexec} "${daemon} stop >/dev/null 2>&1"
}

rc_cmd $1
EOF
chmod 555 /etc/rc.d/synapse
rcctl enable synapse
rcctl start synapse

Create user

su _synapse
. ~/.synapse/bin/activate
register_new_matrix_user -c ~/homeserver.yaml http://127.0.0.1:8008

Add DNS record

matrix          IN A <your ip>
_matrix._tcp.matrix.example.com.    IN SRV 10 0 8448 matrix.example.com.

nginx

vHost:

server {
  listen 80;
  server_name matrix.example.com;
  location /.well-known/acme-challenge {
    alias /acme;
  }
  location / {
    return 301 https://matrix.example.com$request_uri;
  }
}

server {
  listen 443 ssl http2;
  server_name matrix.example.com;

  ssl_certificate /etc/ssl/example.com.fullchain.pem;
  ssl_certificate_key /etc/ssl/private/example.com.key;

  access_log /var/www/logs/matrix_access.log;
  error_log /var/www/logs/matrix_error.log;

  location /.well-known/matrix {
    alias /matrix;
  }
  location /_matrix {
    proxy_pass http://127.0.0.1:8008;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

server {
  listen 8448 ssl http2;
  server_name matrix.example.com;

  ssl_certificate /etc/ssl/example.com.fullchain.pem;
  ssl_certificate_key /etc/ssl/private/example.com.key;

  access_log /var/www/logs/matrix_fed_access.log;
  error_log /var/www/logs/matrix_fed_error.log;

  location / {
    proxy_pass http://127.0.0.1:8008;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

.well-known:

mkdir /var/www/matrix
echo '{"m.server":"matrix.example.com:8448"}' >/var/www/matrix/server

Sydent

NOTE: this section is TBD!

Create user:

groupadd _sydent
useradd -m -g _sydent -d /usr/local/_sydent -s /bin/ksh _sydent

Virtualenv:

su _sydent
virtualenv-3 -p python3.6 ~/.sydent
. ~/.sydent/bin/activate
pip install https://github.com/matrix-org/sydent/tarball/master

python3 -m sydent.sydent -h

python3 -m synapse.app.homeserver \
    --server-name matrix.example.com \
    --config-path homeserver.yaml \
    --generate-config \
    --report-stats=yes

Sydent Config:

vi 

Service:

cat <<'EOF'> /usr/local/sbin/sydent
#!/bin/sh

cd ~ 
. ~/.sydent/bin/activate
python3 -m sydent.sydent
EOF
chmod 755 /usr/local/sbin/sydent

cat <<'EOF'> /etc/rc.d/sydent
#!/bin/sh

daemon="/usr/local/sbin/sydent"
daemon_user="_sydent"

. /etc/rc.d/rc.subr

rc_bg=YES
rc_reload=NO

rc_start() {
        ${rcexec} "${daemon} start >/dev/null 2>&1"
}

rc_stop() {
        ${rcexec} "${daemon} stop >/dev/null 2>&1"
}

rc_cmd $1
EOF
chmod 555 /etc/rc.d/sydent
rcctl enable sydent
rcctl start sydent

Sources

https://matrix.org/federationtester/