|
@@ -10,6 +10,8 @@
|
10
|
10
|
#
|
11
|
11
|
# synapse matrix server
|
12
|
12
|
#
|
|
13
|
+# https://matrix.org/blog/2016/02/10/advanced-synapse-setup-with-lets-encrypt/
|
|
14
|
+#
|
13
|
15
|
# License
|
14
|
16
|
# =======
|
15
|
17
|
#
|
|
@@ -36,12 +38,141 @@ SHOW_ON_ABOUT=1
|
36
|
38
|
SYNAPSE_PORT=8448
|
37
|
39
|
SYNAPSE_PASSWORD=
|
38
|
40
|
SYNAPSE_DIR=/etc/matrix-synapse
|
|
41
|
+MATRIX_IRC_REPO="https://github.com/matrix-org/matrix-appservice-irc"
|
39
|
42
|
|
40
|
43
|
synapse_variables=(ONION_ONLY
|
41
|
44
|
MY_USERNAME
|
42
|
45
|
SYNAPSE_PASSWORD
|
43
|
46
|
DEFAULT_DOMAIN_NAME)
|
44
|
47
|
|
|
48
|
+function install_matrix_irc_bridge {
|
|
49
|
+ if [ ! -d /etc/matrix-synapse ]; then
|
|
50
|
+ return
|
|
51
|
+ fi
|
|
52
|
+ if [ ! -d /etc/ngircd ]; then
|
|
53
|
+ return
|
|
54
|
+ fi
|
|
55
|
+
|
|
56
|
+ function_check install_nodejs
|
|
57
|
+ install_nodejs synapse
|
|
58
|
+
|
|
59
|
+ if [ ! -d $INSTALL_DIR ]; then
|
|
60
|
+ mkdir -p $INSTALL_DIR
|
|
61
|
+ fi
|
|
62
|
+
|
|
63
|
+ cd $INSTALL_DIR
|
|
64
|
+ git_clone $MATRIX_IRC_REPO $INSTALL_DIR/matrix_irc_bridge
|
|
65
|
+ cd $INSTALL_DIR/matrix_irc_bridge
|
|
66
|
+ npm install
|
|
67
|
+ if [ ! -f config.sample.yaml ]; then
|
|
68
|
+ exit 623835
|
|
69
|
+ fi
|
|
70
|
+
|
|
71
|
+ IRC_PASSWORD=$(cat /etc/ngircd/ngircd.conf | grep "Password =" | head -n 1 | awk -F '=' '{print $2}')
|
|
72
|
+
|
|
73
|
+ echo 'homeserver:' > $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
74
|
+ echo ' url: "http://localhost:8008"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
75
|
+ echo ' domain: "localhost"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
76
|
+ echo 'ircService:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
77
|
+ echo ' servers:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
78
|
+ echo " localhost:" >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
79
|
+ echo " name: \"${PROJECT_NAME} IRC\"" >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
80
|
+ echo " port: ${IRC_PORT}" >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
81
|
+ echo ' ssl: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
82
|
+ echo ' sslselfsign: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
83
|
+ echo ' password: "${IRC_PASSWORD}"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
84
|
+ echo ' sendConnectionMessages: true' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
85
|
+ echo ' quitDebounce:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
86
|
+ echo ' enabled: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
87
|
+ echo ' quitsPerSecond: 5' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
88
|
+ echo ' delayMs: 3600000 # 1h' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
89
|
+ echo ' botConfig:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
90
|
+ echo ' enabled: true' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
91
|
+ echo ' nick: "MatrixBot"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
92
|
+ echo ' joinChannelsIfNoUsers: true' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
93
|
+ echo ' privateMessages:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
94
|
+ echo ' enabled: true' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
95
|
+ echo ' federate: true' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
96
|
+ echo ' dynamicChannels:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
97
|
+ echo ' enabled: true' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
98
|
+ echo ' createAlias: true' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
99
|
+ echo ' published: true' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
100
|
+ echo ' joinRule: public' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
101
|
+ echo ' federate: true' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
102
|
+ echo ' aliasTemplate: "#irc_$CHANNEL"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
103
|
+ echo ' membershipLists:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
104
|
+ echo ' enabled: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
105
|
+ echo ' floodDelayMs: 10000' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
106
|
+ echo ' global:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
107
|
+ echo ' ircToMatrix:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
108
|
+ echo ' initial: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
109
|
+ echo ' incremental: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
110
|
+ echo ' matrixToIrc:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
111
|
+ echo ' initial: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
112
|
+ echo ' incremental: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
113
|
+ echo ' rooms:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
114
|
+ echo ' - room: "!fuasirouddJoxtwfge:localhost"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
115
|
+ echo ' matrixToIrc:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
116
|
+ echo ' initial: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
117
|
+ echo ' incremental: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
118
|
+ echo ' channels:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
119
|
+ echo " - channel: \"#${PROJECT_NAME}\"" >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
120
|
+ echo ' ircToMatrix:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
121
|
+ echo ' initial: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
122
|
+ echo ' incremental: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
123
|
+ echo ' mappings:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
124
|
+ echo ' "#thepub": ["!kieouiJuedJoxtVdaG:localhost"]' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
125
|
+ echo ' matrixClients:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
126
|
+ echo ' userTemplate: "@irc_$NICK"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
127
|
+ echo ' displayName: "$NICK (IRC)"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
128
|
+ echo ' ircClients:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
129
|
+ echo ' nickTemplate: "$DISPLAY[m]"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
130
|
+ echo ' allowNickChanges: true' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
131
|
+ echo ' maxClients: 30' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
132
|
+ echo ' idleTimeout: 10800' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
133
|
+ echo ' reconnectIntervalMs: 5000' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
134
|
+ echo ' lineLimit: 3' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
135
|
+ echo ' ident:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
136
|
+ echo ' enabled: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
137
|
+ echo ' port: 1113' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
138
|
+ echo ' logging:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
139
|
+ echo ' level: "debug"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
140
|
+ echo ' logfile: "debug.log"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
141
|
+ echo ' errfile: "errors.log"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
142
|
+ echo ' toConsole: true' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
143
|
+ echo ' maxFileSizeBytes: 134217728 # 128 MB' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
144
|
+ echo ' maxFiles: 5' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
145
|
+ echo ' databaseUri: "nedb://data"' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
146
|
+ echo ' debugApi:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
147
|
+ echo ' enabled: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
148
|
+ echo ' port: 11100' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
149
|
+ echo ' provisioning:' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
150
|
+ echo ' enabled: false' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
151
|
+ echo ' requestTimeoutSeconds: 300' >> $INSTALL_DIR/matrix_irc_bridge/config.yaml
|
|
152
|
+
|
|
153
|
+ /usr/bin/node $INSTALL_DIR/matrix_irc_bridge/app.js -r -f /etc/matrix-synapse/my_registration_file.yaml -u "http://${DEFAULT_DOMAIN_NAME}:9999" -c $INSTALL_DIR/matrix_irc_bridge/config.yaml -l my_bot
|
|
154
|
+
|
|
155
|
+ if ! grep "my_registration_file.yaml" homeserver.yaml; then
|
|
156
|
+ echo 'app_service_config_files: ["my_registration_file.yaml"]' >> homeserver.yaml
|
|
157
|
+ fi
|
|
158
|
+
|
|
159
|
+ echo '[Unit]' > /etc/systemd/system/matrix_irc_bridge.service
|
|
160
|
+ echo 'Description=Matrix IRC Bridge' >> /etc/systemd/system/matrix_irc_bridge.service
|
|
161
|
+ echo '' >> /etc/systemd/system/matrix_irc_bridge.service
|
|
162
|
+ echo '[Service]' >> /etc/systemd/system/matrix_irc_bridge.service
|
|
163
|
+ echo 'Type=simple' >> /etc/systemd/system/matrix_irc_bridge.service
|
|
164
|
+ echo 'User=matrix-synapse' >> /etc/systemd/system/matrix_irc_bridge.service
|
|
165
|
+ echo "WorkingDirectory=$INSTALL_DIR/matrix_irc_bridge" >> /etc/systemd/system/matrix_irc_bridge.service
|
|
166
|
+ echo "ExecStart=/usr/bin/node $INSTALL_DIR/matrix_irc_bridge/app.js -c $INSTALL_DIR/matrix_irc_bridge/config.yaml -f /etc/matrix-synapse/my_registration_file.yaml -p 9999" >> /etc/systemd/system/matrix_irc_bridge.service
|
|
167
|
+ echo 'Restart=always' >> /etc/systemd/system/matrix_irc_bridge.service
|
|
168
|
+ echo 'RestartSec=3' >> /etc/systemd/system/matrix_irc_bridge.service
|
|
169
|
+ echo '' >> /etc/systemd/system/matrix_irc_bridge.service
|
|
170
|
+ echo '[Install]' >> /etc/systemd/system/matrix_irc_bridge.service
|
|
171
|
+ echo 'WantedBy=multi-user.target' >> /etc/systemd/system/matrix_irc_bridge.service
|
|
172
|
+ systemctl enable matrix_irc_bridge
|
|
173
|
+ systemctl start matrix_irc_bridge
|
|
174
|
+}
|
|
175
|
+
|
45
|
176
|
function can_install_synapse {
|
46
|
177
|
check_architecture=$(uname -a)
|
47
|
178
|
if [[ "$check_architecture" == *"amd64"* || "$check_architecture" == *"i386"* ]]; then
|
|
@@ -178,6 +309,14 @@ function remove_synapse {
|
178
|
309
|
rm /etc/apt/sources.list.d/synapse.list
|
179
|
310
|
apt-get update
|
180
|
311
|
|
|
312
|
+ if [ -f /etc/systemd/system/matrix_irc_bridge.service ]; then
|
|
313
|
+ systemctl stop matrix_irc_bridge
|
|
314
|
+ systemctl disable matrix_irc_bridge
|
|
315
|
+ rm /etc/systemd/system/matrix_irc_bridge.service
|
|
316
|
+ remove_nodejs synapse
|
|
317
|
+ rm -rf $INSTALL_DIR/matrix_irc_bridge
|
|
318
|
+ fi
|
|
319
|
+
|
181
|
320
|
remove_completion_param install_synapse
|
182
|
321
|
sed -i '/synapse/d' $COMPLETION_FILE
|
183
|
322
|
sed -i '/Synapse/d' /home/$MY_USERNAME/README
|
|
@@ -220,6 +359,19 @@ function install_synapse {
|
220
|
359
|
if [ ! -d /etc/matrix-synapse ]; then
|
221
|
360
|
exit 653835
|
222
|
361
|
fi
|
|
362
|
+
|
|
363
|
+ apt-get -yq install matrix-synapse-angular-client
|
|
364
|
+ cp -av /etc/matrix-synapse/conf.d/webclient.yaml \
|
|
365
|
+ /etc/matrix-synapse/conf.d/webclient.yaml.orig
|
|
366
|
+ sed -e 's|,$||g' -i /etc/matrix-synapse/conf.d/webclient.yaml
|
|
367
|
+ cp -av /etc/init.d/matrix-synapse /etc/init.d/matrix-synapse.orig
|
|
368
|
+ sed -e 's|chown $USER:nogroup $PIDFILE.*|chown $USER:nogroup $PIDFILE /var/lib/$NAME/media|g' -i /etc/init.d/matrix-synapse
|
|
369
|
+ diff -u /etc/init.d/matrix-synapse.orig /etc/init.d/matrix-synapse
|
|
370
|
+ cp -av /etc/matrix-synapse/homeserver.yaml /etc/matrix-synapse/homeserver.yaml.orig
|
|
371
|
+ sed -i 's|enable_registration: False|enable_registration: True|g' -i /etc/matrix-synapse/homeserver.yaml
|
|
372
|
+ rm -f /etc/matrix-synapse/conf.d/*.orig /etc/matrix-synapse/conf.d/*~
|
|
373
|
+
|
|
374
|
+ update_default_domain
|
223
|
375
|
systemctl stop matrix-synapse
|
224
|
376
|
systemctl start matrix-synapse
|
225
|
377
|
|
|
@@ -260,6 +412,8 @@ function install_synapse {
|
260
|
412
|
fi
|
261
|
413
|
fi
|
262
|
414
|
|
|
415
|
+ #install_matrix_irc_bridge
|
|
416
|
+
|
263
|
417
|
APP_INSTALLED=1
|
264
|
418
|
}
|
265
|
419
|
|