from pyinfra import host from pyinfra.operations import apt, server, files from pyinfra.facts.server import LinuxName files_path = "files/matrix-synapse/" ## don't exexute on a local mashine if host.name != "@local": ## edit fstab to set wxallowd ''' files.line( name="edit fstab to set wxallowd", path="/etc/fstab", # line="var ffs rw,nodev,", # line="var ffs rw,wxallowed,nodev,", # line="var /var ffs rw,wxallowed,nodev 0 0", # line="var /var ext4 rw,wxallowed,nodev 0 0", ) ''' ## change mount option for /var for now ''' [matrix] mount: /var: wrong fs type, bad option, bad superblock on var, missing codepage or helper program, or other error. [matrix] dmesg(1) may have more information after failed mount system call. [matrix] Error: executed 0 commands ''' ''' server.shell( name="change mount option for /var for now", # commands="mount -uo wxallowed /var", commands="mount -o wxallowed /var", ) ''' ## check on which Distribution the script is executed if host.get_fact(LinuxName) == "Debian": ## enable prerelease chanel to install matrix-synapse on Debian server.shell( name="enable prerelease chanel to install matrix-synapse on Debian", commands=["wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg", "echo \"deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main prerelease\" | tee /etc/apt/sources.list.d/matrix-org.list", ], ) ## update apt repositories apt.update( name="update apt repositories", # _doas=True, # _doas_user="pyinfra", # _sudo=True, # _sudo_user="pyinfra", ) apt.packages( name="install build-essential python3-dev libffi-def python3-pip python3-setuptools sqlite3 libssl-dev virtualenv libjpeg-dev libxslt1-dev libicu-dev as prerequisites for matrix-synapse-py3", packages=["build-essential", "python3-dev", "libffi-dev", "python3-pip", "python3-setuptools", "sqlite3", "libssl-dev", "virtualenv", "libjpeg-dev", "libxslt1-dev", "libicu-dev", ], ) apt.packages( name="install synapse", # packages=["synapse"], packages=["matrix-synapse-py3"], ) apt.packages( name="install libxml (for link previews)", # packages=["py3-libxml"], packages=["python3-lxml"], ) apt.packages( name="install opendoas", packages=["opendoas"], ) # elif host.get_fact(LinuxName) == "": else: print("matrix-synapse deploy.py don't support: \"" +host.get_fact(LinuxName) +"\" yet") exit("exit from matrix-synapse/deploy.py") ## copy doas config doas_conf_path = files_path +"doas.conf" files.put( name="copy doas config", src=doas_conf_path, dest="/etc/doas.conf", ) ## generate synapse config server.shell( name="generate synapse config", # commands=["/opt/venvs/matrix-synapse/bin/python3 -m synapse.app.homeserver -c /var/synapse/homeserver.yaml --generate-config --server-name chat.heizhaus.org --report-stats=no --generate-keys --keys-directory /var/synapse", commands=[ ## --generate-config and --generate-keys can't be in the same line/command "/opt/venvs/matrix-synapse/bin/python3 -m synapse.app.homeserver -c /var/synapse/homeserver.yaml --generate-config --server-name chat.heizhaus.org --report-stats=no --keys-directory /var/synapse", "/opt/venvs/matrix-synapse/bin/python3 -m synapse.app.homeserver -c /var/synapse/homeserver.yaml --generate-keys --keys-directory /var/synapse", "touch /var/synapse/homeserver.yaml", "cd /var/synapse", ], # ) #!!! change user to _synapse !!!# # _su_user="matrix-synapse", # _su_user="_synapse", ) # os.chdir("/var/synapse") ''' [matrix] This account is currently not available. [matrix] Error: executed 0 commands ''' # creates="/var/synapse/homeserver.yaml", # chdir="/var/synapse/", # becom_user="_synapse", ## copy synapse config homeserver_py_path = files_path +"homeserver.yaml" files.put( name="copy synapse config", src=homeserver_py_path, dest="/var/synapse/homeserver.yaml", ) ## copy logging config log_conf_path = files_path + "chat.heizhaus.org.log.config" files.put( name="copy logging config", src=log_conf_path, dest="/var/synapse/chat.heizhaus.org.log.config", ) ## add synapse commands to PATH dotprofile_path = files_path +"dotprofile" files.put( name="add synapse commands to PATH", src=dotprofile_path, dest="/root/.profile", ) ## change owner for /var/synapse # user_name = "_synapse" # group_name = "_synapse" user_name = "matrix-synapse" group_name = "matrix-synapse" server.shell( name="chown -R " +user_name +":" +group_name +" /var/synapse", commands="chown -R " +user_name +":" +group_name +" /var/synapse && chmod -R 0770 /var/synapse", ) ## set server name server_name = "chat.heizhaus.org" files.replace( name="set server name", path="/etc/matrix-synapse/conf.d/server_name.yaml", text="server_name: ", replace="server_name: " +server_name, ) ## enable and restart matrix server.service( name="enable and restart matrix", # service="synapse", service="matrix-synapse.service", enabled=True, restarted=True, ) # server.shell( # name="enable and restart matrix", # commands="systemctl enable synapse && systemctl restart synapse", # ) ## add synapse backup script backup_sh_path = files_path +"borgbackup.sh" files.put( name="add synapse backup script", src=backup_sh_path, dest="/etc/daily.d/borgbackup.sh" )