From 716018e8cde9beb2cdbcf759785aeda360e52732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Mon, 26 Feb 2024 13:49:53 +0100 Subject: [PATCH 01/11] Manifestv2 --- .github/workflows/updater.sh | 107 --------------------- .github/workflows/updater.yml | 49 ---------- check_process | 30 ------ conf/app.src | 7 -- conf/config.yaml | 2 +- conf/signald.src | 7 -- conf/systemd.service | 4 +- manifest.json | 89 ------------------ manifest.toml | 107 +++++++++++++++++++++ scripts/_common.sh | 25 ++++- scripts/backup | 38 ++------ scripts/install | 160 ++++++------------------------- scripts/remove | 64 ++----------- scripts/restore | 172 ++++++++-------------------------- scripts/upgrade | 149 +++++------------------------ tests.toml | 15 +++ 16 files changed, 250 insertions(+), 775 deletions(-) delete mode 100644 .github/workflows/updater.sh delete mode 100644 .github/workflows/updater.yml delete mode 100644 check_process delete mode 100644 conf/app.src delete mode 100644 conf/signald.src delete mode 100644 manifest.json create mode 100644 manifest.toml create mode 100644 tests.toml diff --git a/.github/workflows/updater.sh b/.github/workflows/updater.sh deleted file mode 100644 index 1d476f2..0000000 --- a/.github/workflows/updater.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/bash - -#================================================= -# PACKAGE UPDATING HELPER -#================================================= - -# This script is meant to be run by GitHub Actions -# The YunoHost-Apps organisation offers a template Action to run this script periodically -# Since each app is different, maintainers can adapt its contents so as to perform -# automatic actions when a new upstream release is detected. - -#================================================= -# FETCHING LATEST RELEASE AND ITS ASSETS -#================================================= - -# Fetching information -current_version=$(cat manifest.json | jq -j '.version|split("~")[0]') -repo=$(cat manifest.json | jq -j '.upstream.code|split("https://github.com/")[1]') -# Some jq magic is needed, because the latest upstream release is not always the latest version (e.g. security patches for older versions) -version=$(curl --silent "https://api.github.com/repos/$repo/releases" | jq -r '.[] | select( .prerelease != true ) | .tag_name' | sort -V | tail -1) -assets="https://github.com/$repo/archive/refs/tags/$version.tar.gz" - -# Later down the script, we assume the version has only digits and dots -# Sometimes the release name starts with a "v", so let's filter it out. -# You may need more tweaks here if the upstream repository has different naming conventions. -if [[ ${version:0:1} == "v" || ${version:0:1} == "V" ]]; then - version=${version:1} -fi - -# Setting up the environment variables -echo "Current version: $current_version" -echo "Latest release from upstream: $version" -echo "VERSION=$version" >> $GITHUB_ENV -echo "REPO=$repo" >> $GITHUB_ENV -# For the time being, let's assume the script will fail -echo "PROCEED=false" >> $GITHUB_ENV - -# Proceed only if the retrieved version is greater than the current one -if ! dpkg --compare-versions "$current_version" "lt" "$version" ; then - echo "::warning ::No new version available" - exit 0 -# Proceed only if a PR for this new version does not already exist -elif git ls-remote -q --exit-code --heads https://github.com/$GITHUB_REPOSITORY.git ci-auto-update-v$version ; then - echo "::warning ::A branch already exists for this update" - exit 0 -fi - -#================================================= -# UPDATE SOURCE FILES -#================================================= - -# Let's download source tarball -asset_url=$assets - -echo "Handling asset at $asset_url" - -src="app" - -# Create the temporary directory -tempdir="$(mktemp -d)" - -# Download sources and calculate checksum -filename=${asset_url##*/} -curl --silent -4 -L $asset_url -o "$tempdir/$filename" -checksum=$(sha256sum "$tempdir/$filename" | head -c 64) - -# Delete temporary directory -rm -rf $tempdir - -# Get extension -if [[ $filename == *.tar.gz ]]; then - extension=tar.gz -else - extension=${filename##*.} -fi - -# Rewrite source file -cat < conf/$src.src -SOURCE_URL=$asset_url -SOURCE_SUM=$checksum -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=$extension -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=mautrix-signal.tar.gz -SOURCE_EXTRACT=false -EOT -echo "... conf/$src.src updated" - -#================================================= -# SPECIFIC UPDATE STEPS -#================================================= - -# Any action on the app's source code can be done. -# The GitHub Action workflow takes care of committing all changes after this script ends. - -#================================================= -# GENERIC FINALIZATION -#================================================= - -# Replace new version in manifest -echo "$(jq -s --indent 4 ".[] | .version = \"$version~ynh1\"" manifest.json)" > manifest.json - -# No need to update the README, yunohost-bot takes care of it - -# The Action will proceed only if the PROCEED environment variable is set to true -echo "PROCEED=true" >> $GITHUB_ENV -exit 0 diff --git a/.github/workflows/updater.yml b/.github/workflows/updater.yml deleted file mode 100644 index a56d7cb..0000000 --- a/.github/workflows/updater.yml +++ /dev/null @@ -1,49 +0,0 @@ -# This workflow allows GitHub Actions to automagically update your app whenever a new upstream release is detected. -# You need to enable Actions in your repository settings, and fetch this Action from the YunoHost-Apps organization. -# This file should be enough by itself, but feel free to tune it to your needs. -# It calls updater.sh, which is where you should put the app-specific update steps. -name: Check for new upstream releases -on: - # Allow to manually trigger the workflow - workflow_dispatch: - # Run it every day at 6:00 UTC - schedule: - - cron: '0 6 * * *' -jobs: - updater: - runs-on: ubuntu-latest - steps: - - name: Fetch the source code - uses: actions/checkout@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - - name: Run the updater script - id: run_updater - run: | - # Setting up Git user - git config --global user.name 'yunohost-bot' - git config --global user.email 'yunohost-bot@users.noreply.github.com' - # Run the updater script - /bin/bash .github/workflows/updater.sh - - name: Commit changes - id: commit - if: ${{ env.PROCEED == 'true' }} - run: | - git commit -am "Upgrade to v$VERSION" - - name: Create Pull Request - id: cpr - if: ${{ env.PROCEED == 'true' }} - uses: peter-evans/create-pull-request@v4 - with: - token: ${{ secrets.GITHUB_TOKEN }} - commit-message: Update to version ${{ env.VERSION }} - committer: 'yunohost-bot ' - author: 'yunohost-bot ' - signoff: false - base: testing - branch: ci-auto-update-v${{ env.VERSION }} - delete-branch: true - title: 'Upgrade to version ${{ env.VERSION }}' - body: | - Upgrade to v${{ env.VERSION }} - draft: false diff --git a/check_process b/check_process deleted file mode 100644 index 334fd71..0000000 --- a/check_process +++ /dev/null @@ -1,30 +0,0 @@ -;; Test complet -# auto_remove=1 - ; pre-install - sudo yunohost tools update apps - sudo yunohost app install https://github.com/YunoHost-Apps/synapse_ynh/ -a "domain=$domain&server_name=$server_name&is_free_registration=$is_free_registration&jitsi_server=$jitsi_server" --force - ; Manifest - port="8449" (PORT) - synapsenumber="1" - botname="signalbot" - encryption=0 - botadmin="@johndoe:synapsedomain.tld" (USER) - botusers="*:synapsedomain.tld" - ; Checks - pkg_linter=1 - setup_sub_dir=0 - setup_root=0 - setup_nourl=1 - setup_private=0 - setup_public=0 - upgrade=1 -# upgrade=1 from_commit=fc1ba62e6529bb529a413d5895398baa5f2029d7 - # 0.2.3~ynh1 - upgrade=1 from_commit=40c16d3c8898196c6e1a43e8f0af70c052dd41f6 - backup_restore=1 - multi_instance=1 - port_already_use=1 - change_url=0 - actions=0 - config_panel=0 -;;; Upgrade options diff --git a/conf/app.src b/conf/app.src deleted file mode 100644 index 9e82d47..0000000 --- a/conf/app.src +++ /dev/null @@ -1,7 +0,0 @@ -SOURCE_URL=https://github.com/mautrix/signal/archive/refs/tags/v0.4.3.tar.gz -SOURCE_SUM=e75636e845d4b9d84070efec510b7358b93a4fb0d6ffe4300dbdb9260725ba53 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=mautrix-signal.tar.gz -SOURCE_EXTRACT=false diff --git a/conf/config.yaml b/conf/config.yaml index 7a311a7..c1b528b 100644 --- a/conf/config.yaml +++ b/conf/config.yaml @@ -305,7 +305,7 @@ bridge: # mxid - Specific user permissions: "*": "relay" - "__BOTUSERS__": "user" + __IF_BOTUSERS__"__BOTUSERS__": "user" "__BOTADMIN__": "admin" relay: diff --git a/conf/signald.src b/conf/signald.src deleted file mode 100644 index b0c641a..0000000 --- a/conf/signald.src +++ /dev/null @@ -1,7 +0,0 @@ -SOURCE_URL=https://gitlab.com/signald/signald/-/archive/0.17.0/signald-0.17.0.tar.gz -SOURCE_SUM=225e36637daccf5f01138b7e29e3b2195bced7b13a290d163e34fe1f5d4a5d2a -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=signald.tar.gz -SOURCE_EXTRACT=true diff --git a/conf/systemd.service b/conf/systemd.service index 994d859..ced26f1 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -6,8 +6,8 @@ After=matrix-synapse.service Type=simple User=__APP__ Group=__APP__ -WorkingDirectory=__FINALPATH__/ -ExecStart=__FINALPATH__/bin/python3 -m mautrix_signal +WorkingDirectory=__INSTALL_DIR__/ +ExecStart=__INSTALL_DIR__/bin/python3 -m mautrix_signal [Install] WantedBy=multi-user.target diff --git a/manifest.json b/manifest.json deleted file mode 100644 index 894c346..0000000 --- a/manifest.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "Matrix Signal bridge", - "id": "mautrix_signal", - "packaging_format": 1, - "description": { - "en": "Matrix / Synapse puppeting bridge for Signal", - "fr": "Passerelle Matrix / Synapse pour Signal" - }, - "version": "0.4.3~ynh1", - "url": "https://github.com/mautrix/signal", - "upstream": { - "license": "AGPL-3.0-or-later", - "userdoc": "https://docs.mau.fi/bridges/python/signal/index.html", - "code": "https://github.com/mautrix/signal" - }, - "license": "AGPL-3.0-or-later", - "maintainer": { - "name": "MayeulC", - "email": "mautrix_signal_ynh@sans-nuage.fr", - "url": "https://github.com/YunoHost-Apps/mautrix_signal_ynh" - }, - "requirements": { - "yunohost": ">= 11.0.0" - }, - "multi_instance": true, - "services": [ - "postgresql" - ], - "arguments": { - "install": [ - { - "name": "synapsenumber", - "type": "string", - "ask": { - "en": "Choose the local synapse instance number to communicate with mautrix_signal", - "fr": "Choisissez le numéro de l'instance synapse qui doit communiquer avec mautrix_signal" - }, - "example": "2 (for instance synapse__2)", - "help": { - "en": "If you installed synapse only once time, then leave default value 1.", - "fr": "Si vous n'avez installé qu'une fois synapse, gardez la valeur par défaut 1." - }, - "default": "1" - }, - { - "name": "botname", - "type": "string", - "ask": { - "en": "Choose a local synapse user name for the Signal bot", - "fr": "Choisissez un nom d'utilisateur synapse local pour le robot Signal" - }, - "example": "signalbot", - "help": { - "en": "A system user will be created. Invite @signalbot:localsynapse.servername from an authorized Matrix account to start bridging. Give the matrix server_name, not the full domain/url.", - "fr": "Un utilisateur système sera créé. Inviter @signalbot:localsynapse.servername depuis un compte Matrix autorisé pour démarrer une passerelle. Donner le nom du serveur matrix, pas le domaine/url complet." - }, - "default": "signalbot" - }, - { - "name": "botadmin", - "type": "string", - "ask": { - "en": "Choose the Matrix account administrator of the Signal bot", - "fr": "Choisissez le compte Matrix administrateur du robot Signal" - }, - "example": "@johndoe:localsynapse.servername or @johndoe:matrix.org", - "help": { - "en": "The Signal bot administrator does not need to be a local synapse account.", - "fr": "Le compte administrateur du robot Signal peut ne pas être un compte local synapse." - }, - "default": "Your main Matrix account" - }, - { - "name": "botusers", - "type": "string", - "ask": { - "en": "Choose Matrix user(s) authorized to bridge with the Signal bot", - "fr": "Choisissez le/les compte(s) Matrix autorisés à utiliser la passerelle Signal" - }, - "example": "admin or domain or @johndoe:server.name or server.name or *", - "default": "domain", - "help": { - "en": "Either the administrator only (admin), all local Synapse users (domain), a remote or local user (@johndoe:server.name), a remote server (matrix.org), or all remote/local servers (*) can be authorized. Give the Matrix server_name, not the full domain/URL.", - "fr": "L'administrateur seulement (admin), tous les comptes Synapse locaux (domain), un compte local ou distant (@johndoe:server.name), un serveur distant (matrix.org), ou tous les serveurs remote/local (*). Donner le nom du serveur Matrix, pas le domaine/URL complet." - } - } - ] - } -} diff --git a/manifest.toml b/manifest.toml new file mode 100644 index 0000000..1723816 --- /dev/null +++ b/manifest.toml @@ -0,0 +1,107 @@ +#:schema https://raw.githubusercontent.com/YunoHost/apps/master/schemas/manifest.v2.schema.json + +packaging_format = 2 + +id = "mautrix_signal" +name = "Matrix Signal bridge" +description.en = "Matrix / Synapse puppeting bridge for Signal" +description.fr = "Passerelle Matrix / Synapse pour Signal" + +version = "0.4.3~ynh1" + +maintainers = ["MayeulC"] + +[upstream] +license = "AGPL-3.0-or-later" +userdoc = "https://docs.mau.fi/bridges/python/signal/index.html" +code = "https://github.com/mautrix/signal" +website = "https://github.com/mautrix/signal" +fund = "https://github.com/sponsors/tulir" + +[integration] +yunohost = ">= 11.2" +architectures = "all" +multi_instance = true +ldap = "not_relevant" +sso = "not_relevant" +disk = "50M" # FIXME: replace with an **estimate** minimum disk requirement. e.g. 20M, 400M, 1G, ... +ram.build = "50M" # FIXME: replace with an **estimate** minimum ram requirement. e.g. 50M, 400M, 1G, ... +ram.runtime = "50M" # FIXME: replace with an **estimate** minimum ram requirement. e.g. 50M, 400M, 1G, ... + +[install] + [install.synapsenumber] + ask.en = "Choose the local synapse instance number to communicate with mautrix_signal" + ask.fr = "Choisissez le numéro de l'instance synapse qui doit communiquer avec mautrix_signal" + help.en = "If you installed synapse only once time, then leave default value 1." + help.fr = "Si vous n'avez installé qu'une fois synapse, gardez la valeur par défaut 1." + type = "string" + example = "2 (for instance synapse__2)" + default = "1" + + [install.botname] + ask.en = "Choose a local synapse user name for the Signal bot" + ask.fr = "Choisissez un nom d'utilisateur synapse local pour le robot Signal" + help.en = "A system user will be created. Invite @signalbot:localsynapse.servername from an authorized Matrix account to start bridging. Give the matrix server_name, not the full domain/url." + help.fr = "Un utilisateur système sera créé. Inviter @signalbot:localsynapse.servername depuis un compte Matrix autorisé pour démarrer une passerelle. Donner le nom du serveur matrix, pas le domaine/url complet." + type = "string" + example = "signalbot" + default = "signalbot" + + [install.botadmin] + ask.en = "Choose the Matrix account administrator of the Signal bot" + ask.fr = "Choisissez le compte Matrix administrateur du robot Signal" + help.en = "The Signal bot administrator does not need to be a local synapse account." + help.fr = "Le compte administrateur du robot Signal peut ne pas être un compte local synapse." + type = "string" + example = "@johndoe:localsynapse.servername or @johndoe:matrix.org" + default = "Your main Matrix account" + + [install.botusers] + ask.en = "Choose Matrix user(s) authorized to bridge with the Signal bot" + ask.fr = "Choisissez le/les compte(s) Matrix autorisés à utiliser la passerelle Signal" + help.en = "Either the administrator only (admin), all local Synapse users (domain), a remote or local user (@johndoe:server.name), a remote server (matrix.org), or all remote/local servers (*) can be authorized. Give the Matrix server_name, not the full domain/URL." + help.fr = "L'administrateur seulement (admin), tous les comptes Synapse locaux (domain), un compte local ou distant (@johndoe:server.name), un serveur distant (matrix.org), ou tous les serveurs remote/local (*). Donner le nom du serveur Matrix, pas le domaine/URL complet." + type = "string" + example = "admin or domain or @johndoe:server.name or server.name or *" + default = "domain" + +[resources] + [resources.sources] + [resources.sources.main] + url = "https://github.com/mautrix/signal/archive/refs/tags/v0.4.3.tar.gz" + sha256 = "e75636e845d4b9d84070efec510b7358b93a4fb0d6ffe4300dbdb9260725ba53" + autoupdate.strategy = "latest_github_release" + + [resources.sources.signald] + url = "https://gitlab.com/signald/signald/-/archive/0.17.0/signald-0.17.0.tar.gz" + sha256 = "225e36637daccf5f01138b7e29e3b2195bced7b13a290d163e34fe1f5d4a5d2a" + + [resources.system_user] + + [resources.install_dir] + + [resources.permissions] + + [resources.ports] + main.default = 8449 + + [resources.apt] + packages = [ + "postgresql", + "python3", + "python3-dev", + "build-essential", + "libolm-dev", + ] + + [resources.apt.extras.signal] + repo = "https://updates.signald.org unstable main" + key = "https://updates.signald.org/apt-signing-key.asc" + packages = [ + "libunixsocket-java", + "signald", + "signaldctl", + ] + + [resources.database] + type = "postgresql" diff --git a/scripts/_common.sh b/scripts/_common.sh index 38213d8..a39c092 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -4,14 +4,33 @@ # COMMON VARIABLES #================================================= -# dependencies used by the app (must be on a single line) -pkg_dependencies="postgresql python3 python3-dev build-essential libolm-dev" -extra_dependencies="libunixsocket-java signald signaldctl" +signald_data="/var/lib/signald" +signald_exe="/usr/bin/signald" +signald_user="signald" + +enable_relaybot=true #================================================= # PERSONAL HELPERS #================================================= +_install_rustup() { + export PATH="$PATH:$install_dir/.cargo/bin:$install_dir/.local/bin:/usr/local/sbin" + + if [ -e "$install_dir/.rustup" ]; then + ynh_exec_as "$app" env "PATH=$PATH" rustup update + else + ynh_exec_as "$app" bash -c 'curl -sSf -L https://static.rust-lang.org/rustup.sh | sh -s -- -y --default-toolchain=stable --profile=minimal' + fi +} + +_mautrix_signal_build_venv() { + python3 -m venv "$install_dir/venv" + "$install_dir/venv/bin/pip3" install --upgrade pip setuptools wheel + "$install_dir/venv/bin/pip3" install --upgrade \ + "$install_dir/src/mautrix-signal.tar.gz[metrics,e2be,formattednumbers,qrlink,stickers]" +} + #================================================= # EXPERIMENTAL HELPERS #================================================= diff --git a/scripts/backup b/scripts/backup index 15cfb27..3486259 100755 --- a/scripts/backup +++ b/scripts/backup @@ -10,28 +10,6 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_clean_setup () { - true -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -ynh_print_info --message="Loading installation settings..." - -app=$YNH_APP_INSTANCE_NAME - -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -signald_data="/var/lib/signald" -#signald_exe="/usr/bin/signald" - #================================================= # DECLARE DATA AND CONF FILES TO BACKUP #================================================= @@ -41,28 +19,24 @@ ynh_print_info --message="Declaring files to be backed up..." # BACKUP THE APP MAIN DIR #================================================= -ynh_backup --src_path="$final_path" +ynh_backup --src_path="$install_dir" #================================================= -# SPECIFIC BACKUP -#================================================= -# BACKUP LOGROTATE -#================================================= - -ynh_backup --src_path="/etc/logrotate.d/$app" - -#================================================= -# BACKUP SYSTEMD +# SYSTEM CONFIGURATION #================================================= ynh_backup --src_path="/etc/systemd/system/$app.service" +ynh_backup --src_path="/etc/logrotate.d/$app" + #================================================= # BACKUP VARIOUS FILES #================================================= ynh_backup --src_path="$signald_data" +ynh_backup --src_path="/var/log/$app/" + #================================================= # BACKUP THE POSTGRESQL DATABASE #================================================= diff --git a/scripts/install b/scripts/install index d790183..c78fa72 100755 --- a/scripts/install +++ b/scripts/install @@ -9,32 +9,18 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_clean_setup () { - true -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors #================================================= -# RETRIEVE ARGUMENTS FROM THE MANIFEST +# INITIALIZE AND STORE SETTINGS #================================================= -synapsenumber=$YNH_APP_ARG_SYNAPSENUMBER -botname=$YNH_APP_ARG_BOTNAME bot_synapse_adm=true encryption=false -botadmin=$YNH_APP_ARG_BOTADMIN -botusers=$YNH_APP_ARG_BOTUSERS -app=$YNH_APP_INSTANCE_NAME - -if [ "$botusers" == "admin" ] -then - botusers=$botadmin +if [[ -z "${botusers}" ]] || [ "$botusers" == "admin" ]; then + if_botusers="# " +else + if_botusers="" fi # ToDo check (in manifest?) if the selected synapse instance is not already connected to a mautrix_bridge bridge @@ -44,177 +30,91 @@ then else synapse_instance="synapse__$synapsenumber" fi -server_name=$(ynh_app_setting_get --app $synapse_instance --key server_name) -domain=$(ynh_app_setting_get --app $synapse_instance --key domain) +#REMOVEME? server_name=$(ynh_app_setting_get --app $synapse_instance --key server_name) +#REMOVEME? domain=$(ynh_app_setting_get --app $synapse_instance --key domain) mautrix_version=$(ynh_app_upstream_version) -enable_relaybot=true bot_synapse_db_user="@$botname:$server_name" synapse_db_name="matrix_$synapse_instance" -signald_user="signald" # This is actually chosen by the signald dependency -#================================================= -# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS -#================================================= -ynh_script_progression --message="Validating installation parameters..." --weight=1 - -final_path=/opt/yunohost/$app -test ! -e "$final_path" || ynh_die --message="This path already contains a folder" - -#================================================= -# STORE SETTINGS FROM MANIFEST -#================================================= -ynh_script_progression --message="Storing installation settings..." --weight=7 - -ynh_app_setting_set --app=$app --key=botname --value=$botname ynh_app_setting_set --app=$app --key=bot_synapse_adm --value=$bot_synapse_adm ynh_app_setting_set --app=$app --key=encryption --value=$encryption -ynh_app_setting_set --app=$app --key=botadmin --value=$botadmin -ynh_app_setting_set --app=$app --key=botusers --value=$botusers ynh_app_setting_set --app=$app --key=synapse_instance --value=$synapse_instance ynh_app_setting_set --app=$app --key=server_name --value=$server_name -ynh_app_setting_set --app=$app --key=domain --value=$domain ynh_app_setting_set --app=$app --key=mautrix_version --value=$mautrix_version -#================================================= -# STANDARD MODIFICATIONS -#================================================= -# FIND AND OPEN A PORT -#================================================= -ynh_script_progression --message="Finding an available port..." --weight=1 -# Find a free port for communication between your local synapse instance (home server) and its app service mautrix_bridge. -port=$(ynh_find_port --port=8449) -ynh_app_setting_set --app=$app --key=port --value=$port - -#================================================= -# INSTALL DEPENDENCIES -#================================================= -ynh_script_progression --message="Installing dependencies..." --weight=10 - -ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies -ynh_install_extra_app_dependencies --repo="https://updates.signald.org unstable main" --package="$extra_dependencies" --key="https://updates.signald.org/apt-signing-key.asc" -sleep 3 - -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Configuring system user..." --weight=1 - -# Create a system user # Add the user to the signald group. The signald group was created when the signald # package was installed from the extra repository # resolved by https://gitlab.com/signald/signald/-/commit/278240f3f1cc40a3b444c958b68ca3d6908e98a8 -ynh_system_user_create --username=$app --home_dir="$final_path" --groups="$signald_user" - -#================================================= -# CREATE A POSTGRESQL DATABASE -#================================================= -ynh_script_progression --message="Creating a PostgreSQL database..." --weight=3 - -db_name=$(ynh_sanitize_dbid --db_name=$app) -db_user=$db_name -ynh_app_setting_set --app=$app --key=db_name --value=$db_name -ynh_psql_test_if_first_run -ynh_psql_setup_db --db_user=$db_user --db_name=$db_name -db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) +usermod -a -G "$signald_user" "$app" #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= ynh_script_progression --message="Setting up source files..." --weight=3 -ynh_app_setting_set --app=$app --key=final_path --value=$final_path # Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source --dest_dir="$final_path/src" +ynh_setup_source --dest_dir="$install_dir/src" -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:$app "$final_path" +chmod -R o-rwx "$install_dir" +chown -R "$app:$app" "$install_dir" + +mkdir -p /var/log/$app -#================================================= -# SPECIFIC SETUP #================================================= # ADD A CONFIGURATION #================================================= ynh_script_progression --message="Adding a configuration file..." --weight=2 -ynh_add_config --template="../conf/config.yaml" --destination="$final_path/config.yaml" +ynh_add_config --template="config.yaml" --destination="$install_dir/config.yaml" -chmod 400 "$final_path/config.yaml" -chown $app:$app "$final_path/config.yaml" +chmod 400 "$install_dir/config.yaml" +chown "$app:$app" "$install_dir/config.yaml" #================================================= # INSTALL MAUTRIX-BRIDGE PYTHON MODULE #================================================= ynh_script_progression --message="Installing Mautrix-Bridge Python Module..." --weight=6 -if [ $YNH_ARCH == "armhf" ] || [ $YNH_ARCH == "armel" ] -then -# Install rustup is not already installed -# We need this to be able to install cryptgraphy -export PATH="$PATH:$final_path/.cargo/bin:$final_path/.local/bin:/usr/local/sbin" - if [ -e $final_path/.rustup ]; then - sudo -u "$app" env PATH=$PATH rustup update - else - sudo -u "$app" bash -c 'curl -sSf -L https://static.rust-lang.org/rustup.sh | sh -s -- -y --default-toolchain=stable --profile=minimal' - fi +if [ "$YNH_ARCH" == "armhf" ] || [ "$YNH_ARCH" == "armel" ]; then + # Install rustup is not already installed + # We need this to be able to install cryptgraphy + _install_rustup fi - -mkdir -p /var/log/$app - -python3 -m venv $final_path -export HOME=$final_path -$final_path/bin/pip3 install --upgrade pip setuptools wheel -$final_path/bin/pip3 install --upgrade $final_path/src/mautrix-signal.tar.gz[metrics,e2be,formattednumbers,qrlink,stickers] +_mautrix_signal_build_venv #================================================= # REGISTER SYNAPSE APP-SERVICE #================================================= ynh_script_progression --message="Registering Synapse app-service" --weight=1 -$final_path/bin/python3 -m mautrix_signal -g -c $final_path/config.yaml -r /etc/matrix-$synapse_instance/app-service/$app.yaml -/opt/yunohost/matrix-$synapse_instance/update_synapse_for_appservice.sh || ynh_die --message="Synapse can't restart with the appservice configuration" +"$install_dir/venv/bin/python3" -m mautrix_signal -g -c "$install_dir/config.yaml" -r "/etc/matrix-$synapse_instance/app-service/$app.yaml" +"/opt/yunohost/matrix-$synapse_instance/update_synapse_for_appservice.sh" || ynh_die --message="Synapse can't restart with the appservice configuration" -chown -R $app:$app "$final_path" +chown -R "$app:$app" "$install_dir" ynh_store_file_checksum --file="/etc/matrix-$synapse_instance/app-service/$app.yaml" -ynh_store_file_checksum --file="$final_path/config.yaml" +ynh_store_file_checksum --file="$install_dir/config.yaml" #================================================= -# SETUP SYSTEMD +# SYSTEM CONFIGURATION #================================================= -ynh_script_progression --message="Configuring a systemd service..." --weight=3 +ynh_script_progression --message="Adding system configurations related to $app..." --weight=1 # Create a dedicated systemd config ynh_add_systemd_config - -#================================================= -# GENERIC FINALIZATION -#================================================= -# SETUP LOGROTATE -#================================================= -ynh_script_progression --message="Configuring log rotation..." --weight=3 +yunohost service add "$app" --description="$app daemon for bridging Signal and Matrix messages" --log=/var/log/$app/$app.log # Use logrotate to manage application logfile(s) ynh_use_logrotate -chmod -R 600 "/var/log/$app" -chmod 700 "/var/log/$app" -chown -R $app:$app /var/log/$app - -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 - -yunohost service add $app --description="$app daemon for bridging Signal and Matrix messages" --log=/var/log/$app/$app.log #================================================= # START SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Starting a systemd service..." --weight=2 +ynh_script_progression --message="Starting $app's systemd service..." --weight=2 # Start a systemd service -ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" +ynh_systemd_action --service_name="$app" --action="start" --log_path="/var/log/$app/$app.log" #================================================= # END OF SCRIPT diff --git a/scripts/remove b/scripts/remove index d54e9c7..870dc1b 100755 --- a/scripts/remove +++ b/scripts/remove @@ -12,58 +12,33 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." --weight=1 -app=$YNH_APP_INSTANCE_NAME - -botname=$(ynh_app_setting_get --app=$app --key=botname) -synapse_instance=$(ynh_app_setting_get --app=$app --key=synapse_instance) -server_name=$(ynh_app_setting_get --app=$app --key=server_name) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -db_user=$db_name -final_path=$(ynh_app_setting_get --app=$app --key=final_path) synapse_db_name="matrix_$synapse_instance" bot_synapse_db_user="@$botname:$server_name" -signald_data="/var/lib/signald" -signald_exe="/usr/bin/signald" -signald_user="signald" #================================================= -# STANDARD REMOVE -#================================================= -# REMOVE SERVICE INTEGRATION IN YUNOHOST +# REMOVE SYSTEM CONFIGURATIONS #================================================= +ynh_script_progression --message="Removing system configurations related to $app..." --weight=1 # Remove the service from the list of services known by YunoHost (added from `yunohost service add`) -if ynh_exec_warn_less yunohost service status $app >/dev/null -then - ynh_script_progression --message="Removing $app service integration..." --weight=3 - yunohost service remove $app +if ynh_exec_warn_less yunohost service status "$app" >/dev/null; then + ynh_script_progression --message="Removing $app service integration..." --weight=3 + yunohost service remove "$app" fi -#================================================= -# STOP AND REMOVE SERVICE -#================================================= -ynh_script_progression --message="Stopping and removing the systemd service..." --weight=1 - # Remove the dedicated systemd config ynh_remove_systemd_config -#================================================= -# REMOVE LOGROTATE CONFIGURATION -#================================================= -ynh_script_progression --message="Removing logrotate configuration..." --weight=1 - # Remove the app-specific logrotate config ynh_remove_logrotate #================================================= # REMOVE THE POSTGRESQL DATABASE #================================================= -ynh_script_progression --message="Removing the PostgreSQL database..." --weight=4 +#REMOVEME? ynh_script_progression --message="Removing the PostgreSQL database..." --weight=4 # Remove a database if it exists, along with the associated user -ynh_psql_remove_db --db_user=$db_user --db_name=$db_name ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP OWNED BY ""$app"";" ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP USER ""$app"";" ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP OWNED BY ""$bot_synapse_db_user"";" @@ -73,22 +48,6 @@ ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP USER ""$botname ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP OWNED BY ""$signald_user"";" ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP USER ""$signald_user"";" -#================================================= -# REMOVE APP MAIN DIR -#================================================= -ynh_script_progression --message="Removing app main directory..." --weight=1 - -# Remove the app directory securely -ynh_secure_remove --file="$final_path" - -#================================================= -# REMOVE DEPENDENCIES -#================================================= -ynh_script_progression --message="Removing dependencies..." --weight=8 - -# Remove metapackage and its dependencies -ynh_remove_app_dependencies - #================================================= # SPECIFIC REMOVE #================================================= @@ -106,17 +65,6 @@ ynh_secure_remove --file="/etc/matrix-$synapse_instance/app-service/$app.yaml" # Remove the log files ynh_secure_remove --file="/var/log/$app" -#================================================= -# GENERIC FINALIZATION -#================================================= -# REMOVE DEDICATED USER -#================================================= -ynh_script_progression --message="Removing the dedicated system user..." --weight=5 - -# Delete a system user -ynh_system_user_delete --username=$app -ynh_system_user_delete --username=$signald_user - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/restore b/scripts/restore index 6b8a72c..778dce8 100755 --- a/scripts/restore +++ b/scripts/restore @@ -10,131 +10,26 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_clean_setup () { - true -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -ynh_script_progression --message="Loading installation settings..." --weight=1 - -app=$YNH_APP_INSTANCE_NAME - -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -db_user=$db_name -server_name=$(ynh_app_setting_get --app=$app --key=server_name) -botname=$(ynh_app_setting_get --app=$app --key=botname) -synapse_instance=$(ynh_app_setting_get --app=$app --key=synapse_instance) -bot_synapse_adm=$(ynh_app_setting_get --app=$app --key=bot_synapse_adm) -encryption=$(ynh_app_setting_get --app=$app --key=encryption) -botusers=$(ynh_app_setting_get --app=$app --key=botusers) -botadmin=$(ynh_app_setting_get --app=$app --key=botadmin) -previous_mautrix_version=$(ynh_app_setting_get --app=$app --key=mautrix_version) -port=$(ynh_app_setting_get --app=$app --key=port) mautrix_version=$(ynh_app_upstream_version) synapse_db_name="matrix_$synapse_instance" bot_synapse_db_user="@$botname:$server_name" -signald_data="/var/lib/signald" -#signald_exe="/usr/bin/signald" -signald_user="signald" # This is actually chosen by the signald dependency - -#================================================= -# CHECK IF THE APP CAN BE RESTORED -#================================================= -ynh_script_progression --message="Validating restoration parameters..." --weight=1 - -test ! -d $final_path \ - || ynh_die --message="There is already a directory: $final_path " - -#================================================= -# STANDARD RESTORATION STEPS -#================================================= -# RECREATE THE DEDICATED USER -#================================================= -ynh_script_progression --message="Recreating the dedicated system user..." --weight=1 - -# Create the dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir="$final_path" #================================================= # RESTORE THE APP MAIN DIR #================================================= ynh_script_progression --message="Restoring the app main directory..." --weight=1 -ynh_restore_file --origin_path="$final_path" +ynh_restore_file --origin_path="$install_dir" -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:$app "$final_path" - -#================================================= -# SPECIFIC RESTORATION -#================================================= -# REINSTALL DEPENDENCIES -#================================================= -ynh_script_progression --message="Reinstalling dependencies..." --weight=1 - -# Define and install dependencies -ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies -ynh_exec_warn_less ynh_install_extra_app_dependencies --repo="https://updates.signald.org unstable main" --package="$extra_dependencies" --key="https://updates.signald.org/apt-signing-key.asc" - -#================================================= -# RECREATE THE DEDICATED USER -#================================================= -ynh_script_progression --message="Recreating the dedicated system user..." --weight=1 - -# Create the dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir="$final_path" --groups="$signald_user" +chmod -R o-rwx "$install_dir" +chown -R "$app:$app" "$install_dir" #================================================= # RESTORE THE POSTGRESQL DATABASE #================================================= ynh_script_progression --message="Restoring the PostgreSQL database..." --weight=8 -ynh_psql_test_if_first_run -db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) -ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd -ynh_psql_execute_file_as_root --file="./db.sql" --database=$db_name - -#================================================= -# INSTALL MAUTRIX-BRIDGE PYTHON MODULE -#================================================= -ynh_script_progression --message="Installing Mautrix-Bridge Python Module..." --weight=6 - -if [ $YNH_ARCH == "armhf" ] || [ $YNH_ARCH == "armel" ] -then -# Install rustup is not already installed -# We need this to be able to install cryptgraphy -export PATH="$PATH:$final_path/.cargo/bin:$final_path/.local/bin:/usr/local/sbin" - if [ -e $final_path/.rustup ]; then - sudo -u "$app" env PATH=$PATH rustup update - else - sudo -u "$app" bash -c 'curl -sSf -L https://static.rust-lang.org/rustup.sh | sh -s -- -y --default-toolchain=stable --profile=minimal' - fi -fi - - -mkdir -p /var/log/$app - -python3 -m venv $final_path -export HOME=$final_path -$final_path/bin/pip3 install --upgrade pip setuptools wheel - -#================================================= -# REGISTER SYNAPSE APP-SERVICE -#================================================= -ynh_script_progression --message="Registering Synapse app-service" --weight=1 - -$final_path/bin/python3 -m mautrix_signal -g -c $final_path/config.yaml -r /etc/matrix-$synapse_instance/app-service/$app.yaml -/opt/yunohost/matrix-$synapse_instance/update_synapse_for_appservice.sh || ynh_die "Synapse can't restart with the appservice configuration" +ynh_psql_connect_as --user="$db_user" --password="$db_pwd" --database="$db_name" < ./db.sql #================================================= # RESTORE VARIOUS FILES @@ -144,44 +39,57 @@ ynh_systemd_action --service_name=signald --action="stop" ynh_restore_file --origin_path="$signald_data" ynh_systemd_action --service_name=signald --action="start" +ynh_restore_file --origin_path="/var/log/$app/" + #================================================= -# RESTORE SYSTEMD +# INSTALL MAUTRIX-BRIDGE PYTHON MODULE #================================================= -ynh_script_progression --message="Restoring the systemd configuration..." --weight=1 +ynh_script_progression --message="Installing Mautrix-Bridge Python Module..." --weight=6 + +if [ "$YNH_ARCH" == "armhf" ] || [ "$YNH_ARCH" == "armel" ]; then + # Install rustup is not already installed + # We need this to be able to install cryptgraphy + _install_rustup +fi + +_mautrix_signal_build_venv + +#================================================= +# REGISTER SYNAPSE APP-SERVICE +#================================================= +ynh_script_progression --message="Registering Synapse app-service" --weight=1 + +"$install_dir/venv/bin/python3" -m mautrix_signal -g -c "$install_dir/config.yaml" -r "/etc/matrix-$synapse_instance/app-service/$app.yaml" +"/opt/yunohost/matrix-$synapse_instance/update_synapse_for_appservice.sh" || ynh_die "Synapse can't restart with the appservice configuration" + +#================================================= +# RESTORE SYSTEM CONFIGURATIONS +#================================================= +ynh_script_progression --message="Restoring system configurations related to $app..." --weight=1 ynh_restore_file --origin_path="/etc/systemd/system/$app.service" -systemctl enable $app.service --quiet - -#================================================= -# RESTORE THE LOGROTATE CONFIGURATION -#================================================= -ynh_script_progression --message="Restoring the logrotate configuration..." --weight=1 +systemctl enable "$app.service" --quiet +yunohost service add "$app" --description="$app daemon for bridging Signal and Matrix messages" --log="/var/log/$app/$app.log" ynh_restore_file --origin_path="/etc/logrotate.d/$app" -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 - -yunohost service add $app --description="$app daemon for bridging Signal and Matrix messages" --log="/var/log/$app/$app.log" - #================================================= # START SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Starting a systemd service..." --weight=1 +ynh_script_progression --message="Starting $app's systemd service..." --weight=1 # Start a systemd service -ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" +ynh_systemd_action --service_name="$app" --action="start" --log_path="/var/log/$app/$app.log" + # Wait until the synapse user is created sleep 30 - # (Note that, by default, non-admins might not have your homeserver's permission to create communities.) - if [ "$bot_synapse_adm" = true ] - then - ynh_psql_execute_as_root --database=$synapse_db_name --sql="UPDATE users SET admin = 1 WHERE name = \"$botname\";" +# (Note that, by default, non-admins might not have your homeserver's permission to create communities.) +if [ "$bot_synapse_adm" = true ]; then + ynh_psql_execute_as_root --database="$synapse_db_name" --sql="UPDATE users SET admin = 1 WHERE name = \"$botname\";" # #yunohost app action run $synapse_instance set_admin_user -a username=$botname - fi -ynh_systemd_action --service_name=$app --action="restart" +fi + +ynh_systemd_action --service_name="$app" --action="restart" --log_path="/var/log/$app/$app.log" #================================================= # END OF SCRIPT diff --git a/scripts/upgrade b/scripts/upgrade index f62d522..bfba57d 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -9,51 +9,8 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# LOAD SETTINGS -#================================================= -ynh_script_progression --message="Loading installation settings..." --weight=1 - -app=$YNH_APP_INSTANCE_NAME - -botname=$(ynh_app_setting_get --app=$app --key=botname) -encryption=$(ynh_app_setting_get --app=$app --key=encryption) -botadmin=$(ynh_app_setting_get --app=$app --key=botadmin) -botusers=$(ynh_app_setting_get --app=$app --key=botusers) -domain=$(ynh_app_setting_get --app=$app --key=domain) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -previous_mautrix_version=$(ynh_app_setting_get --app=$app --key=mautrix_version) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -db_user=$db_name -db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) -port=$(ynh_app_setting_get --app=$app --key=port) -synapse_instance=$(ynh_app_setting_get --app=$app --key=synapse_instance) -server_name=$(ynh_app_setting_get --app=$app --key=server_name) mautrix_version=$(ynh_app_upstream_version) synapse_db_name="matrix_$synapse_instance" -signald_user="signald" # This is actually chosen by the signald dependency -enable_relaybot=true - -#================================================= -# CHECK VERSION -#================================================= -ynh_script_progression --message="Checking version..." --weight=1 - -upgrade_type=$(ynh_check_app_version_changed) - -#================================================= -# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP -#================================================= -ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=5 - -# Backup the current version of the app -ynh_backup_before_upgrade -ynh_clean_setup () { - # Restore it if the upgrade fails - ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors #================================================= # STANDARD UPGRADE STEPS @@ -69,133 +26,69 @@ ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app #================================================= ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 -# Upgrade from >0.2.0 -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) - -# Upgrade from <=0.2.0 -if [ -z "$db_name" ] -then - db_name=$(ynh_app_setting_get --app=$app --key=$app) - ynh_app_setting_set --app=$app --key=db_name --value=$db_name -fi -if [ -z "$db_pwd" ] -then - db_pwd=$(ynh_app_setting_get --app=$app --key=mautrix_bridge_db_pwd) - ynh_app_setting_set --app=$app --key=db_pwd --value=$db_pwd -fi - # Fix possible permission issues with a previous signald version, esp. with stickers mkdir -p /var/lib/signald/{avatars,attachments,stickers} -chown $signald_user:$signald_user /var/lib/signald/{avatars,attachments,stickers} +chown "$signald_user:$signald_user" /var/lib/signald/{avatars,attachments,stickers} chmod -R g+rwX /var/lib/signald/{avatars,attachments,stickers} -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 - -# Create a dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir="$final_path" --groups="$signald_user" - #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= +ynh_script_progression --message="Upgrading source files..." --weight=1 -if [ "$upgrade_type" == "UPGRADE_APP" ] -then - ynh_script_progression --message="Upgrading source files..." --weight=1 +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source --dest_dir="$install_dir/src" --full_replace=1 - # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir="$final_path/src" -fi +chmod -R o-rwx "$install_dir" +chown -R "$app:$app" "$install_dir" -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:$app "$final_path" - -#================================================= -# UPGRADE DEPENDENCIES -#================================================= -ynh_script_progression --message="Upgrading dependencies..." --weight=5 - -ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies -ynh_install_extra_app_dependencies --repo="https://updates.signald.org unstable main" --package="$extra_dependencies" --key="https://updates.signald.org/apt-signing-key.asc" - -#================================================= -# SPECIFIC UPGRADE #================================================= # UPDATE A CONFIG FILE #================================================= ynh_script_progression --message="Updating a configuration file..." --weight=2 -ynh_add_config --template="../conf/config.yaml" --destination="$final_path/config.yaml" +ynh_add_config --template="config.yaml" --destination="$install_dir/config.yaml" -chmod 400 "$final_path/config.yaml" -chown $app:$app "$final_path/config.yaml" +chmod 400 "$install_dir/config.yaml" +chown "$app:$app" "$install_dir/config.yaml" #================================================= # UPGRADE MAUTRIX-BRIDGE PYTHON MODULE #================================================= ynh_script_progression --message="Upgrading Mautrix-Bridge Python Module..." --weight=2 -if [ $YNH_ARCH == "armhf" ] || [ $YNH_ARCH == "armel" ] -then -# Install rustup is not already installed -# We need this to be able to install cryptgraphy -export PATH="$PATH:$final_path/.cargo/bin:$final_path/.local/bin:/usr/local/sbin" - if [ -e $final_path/.rustup ]; then - sudo -u "$app" env PATH=$PATH rustup update - else - sudo -u "$app" bash -c 'curl -sSf -L https://static.rust-lang.org/rustup.sh | sh -s -- -y --default-toolchain=stable --profile=minimal' - fi +if [ "$YNH_ARCH" == "armhf" ] || [ "$YNH_ARCH" == "armel" ]; then + # Install rustup is not already installed + # We need this to be able to install cryptgraphy + _install_rustup fi -python3 -m venv $final_path -export HOME=$final_path -$final_path/bin/pip3 install --upgrade pip setuptools wheel -$final_path/bin/pip3 install --upgrade $final_path/src/mautrix-signal.tar.gz[metrics,e2be,formattednumbers,qrlink,stickers] +_mautrix_signal_build_venv #================================================= # REGISTER SYNAPSE APP-SERVICE #================================================= ynh_script_progression --message="Registering Synapse app-service" --weight=1 -$final_path/bin/python3 -m mautrix_signal -g -c $final_path/config.yaml -r /etc/matrix-$synapse_instance/app-service/$app.yaml +"$install_dir/venv/bin/python3" -m mautrix_signal -g -c "$install_dir/config.yaml" -r "/etc/matrix-$synapse_instance/app-service/$app.yaml" /opt/yunohost/matrix-$synapse_instance/update_synapse_for_appservice.sh || ynh_die "Synapse can't restart with the appservice configuration" # Set permissions on app files -chown -R $app:$app "$final_path" +chown -R "$app:$app" "$install_dir" ynh_store_file_checksum --file="/etc/matrix-$synapse_instance/app-service/$app.yaml" -ynh_store_file_checksum --file="$final_path/config.yaml" +ynh_store_file_checksum --file="$install_dir/config.yaml" #================================================= -# SETUP SYSTEMD +# REAPPLY SYSTEM CONFIGURATIONS #================================================= -ynh_script_progression --message="Upgrading systemd configuration..." --weight=4 +ynh_script_progression --message="Upgrading system configurations related to $app..." --weight=1 # Create a dedicated systemd config ynh_add_systemd_config - -#================================================= -# GENERIC FINALIZATION -#================================================= -# SETUP LOGROTATE -#================================================= -ynh_script_progression --message="Upgrading logrotate configuration..." --weight=1 +yunohost service add "$app" --description="$app daemon for bridging Signal and Matrix messages" --log="/var/log/$app/$app.log" # Use logrotate to manage app-specific logfile(s) ynh_use_logrotate --nonappend -chmod -R 600 "/var/log/$app" -chmod 700 "/var/log/$app" -chown -R $app:$app /var/log/$app - -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 - -yunohost service add $app --description="$app daemon for bridging Signal and Matrix messages" --log="/var/log/$app/$app.log" #================================================= # START SYSTEMD SERVICE @@ -203,7 +96,7 @@ yunohost service add $app --description="$app daemon for bridging Signal and Mat ynh_script_progression --message="Starting a systemd service..." --weight=1 # Start a systemd service -ynh_systemd_action --service_name=$app --action="start" +ynh_systemd_action --service_name="$app" --action="start" #================================================= # END OF SCRIPT diff --git a/tests.toml b/tests.toml new file mode 100644 index 0000000..8c8a1e1 --- /dev/null +++ b/tests.toml @@ -0,0 +1,15 @@ +#:schema https://raw.githubusercontent.com/YunoHost/apps/master/schemas/tests.v1.schema.json +test_format = 1.0 + +[default] + + preinstall = """ + sudo yunohost tools update apps + sudo yunohost app install --force https://github.com/YunoHost-Apps/synapse_ynh/ \ + -a "domain=$domain&server_name=$server_name&is_free_registration=$is_free_registration&jitsi_server=$jitsi_server" + """ + + args.botadmin = "@johndoe:synapsedomain.tld" + args.botusers = "synapsedomain.tld" + + test_upgrade_from.40c16d3c8898196c6e1a43e8f0af70c052dd41f6.name = "0.2.3~ynh1" From 82dc091dbd18e57b42ea8d9396d82b07d31bf45b Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 26 Feb 2024 12:58:42 +0000 Subject: [PATCH 02/11] Auto-update README --- README.md | 1 + README_fr.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 6708754..ebcb3b9 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,7 @@ In case you need to upload your logs somewhere, be aware that they contain your ## Documentation and resources +* Official app website: * Official user documentation: * Upstream app code repository: * YunoHost Store: diff --git a/README_fr.md b/README_fr.md index 29ed1a8..25b4a85 100644 --- a/README_fr.md +++ b/README_fr.md @@ -91,6 +91,7 @@ Si vous devez téléverser vos fichiers log quelque-part, soyez avertis qu'ils c ## Documentations et ressources +* Site officiel de l’app : * Documentation officielle utilisateur : * Dépôt de code officiel de l’app : * YunoHost Store: From f62934acefcb17571cbabb5ae9960e09c088140c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Mon, 26 Feb 2024 14:04:53 +0100 Subject: [PATCH 03/11] Fix doc --- doc/{DISCLAIMER.md => ADMIN.md} | 41 +++++++++++++----------- doc/{DISCLAIMER_fr.md => ADMIN_fr.md} | 46 +++++++++++++++------------ doc/DESCRIPTION.md | 5 ++- doc/DESCRIPTION_fr.md | 5 +-- 4 files changed, 56 insertions(+), 41 deletions(-) rename doc/{DISCLAIMER.md => ADMIN.md} (76%) rename doc/{DISCLAIMER_fr.md => ADMIN_fr.md} (71%) diff --git a/doc/DISCLAIMER.md b/doc/ADMIN.md similarity index 76% rename from doc/DISCLAIMER.md rename to doc/ADMIN.md index 956d04e..5f346a6 100644 --- a/doc/DISCLAIMER.md +++ b/doc/ADMIN.md @@ -1,11 +1,13 @@ ## List of known public services -* Ask on one of the following rooms: #mautrix_yunohost:matrix.fdn.fr or #signal:maunium.net +* Ask on one of the following rooms: `#mautrix_yunohost:matrix.fdn.fr` or `#signal:maunium.net` ## Bridging usage -** Note that several Signal and Matrix users can be bridged, each Signal account has its own bot administration room. If they are in a same Signal group, only one matrix room will be created. ** + +**Note that several Signal and Matrix users can be bridged, each Signal account has its own bot administration room. If they are in a same Signal group, only one matrix room will be created.** ### Bridge a Signal user and a Matrix user + * First your Matrix user or Synapse Server has to be authorized in the Configuration of the bridge (see below) * Then, invite the bot (default @signalbot:yoursynapse.domain) in this new Mautrix-Signal bot administration room. * If the Bot does bot accept, see the [troubleshooting page](https://docs.mau.fi/bridges/general/troubleshooting.html) @@ -13,6 +15,7 @@ See also [upstream wiki Authentication page](https://docs.mau.fi/bridges/python/signal/authentication.html) #### Linking the Bridge as a secondary device + * Type ``!sg link`` * Open Signal App of your primary device * Open Settings => Linked Devices => + => Capture the QR code with the camera @@ -20,16 +23,18 @@ See also [upstream wiki Authentication page](https://docs.mau.fi/bridges/python/ * Accept invitations to the bridged chat rooms #### Registering the Bridge as a primary device + * Type ``!sg register ``, where ```` is your phone number in the international format with no space, e.g. ``!sg register +33612345678`` * Answer in the bot room with the verification code that you reveived in SMS. * Set a profile name with ``!sg set-profile-name `` ### Double puppeting + * Log in with ``login-matrix `` * After logging in, the default Matrix puppet of your Signal account should leave rooms and your account should join all rooms the puppet was in automatically. - ### Relaybot: Bridge a group for several Matrix and several Signal users to chat together + * Create a room on the signal side * Your bridged users will be invited on the Matrix side once they are invited on the Signal side * You can invite more people over on the Matrix side @@ -39,36 +44,36 @@ It is not yet possible to bridge to an existing signal room, or create a new sig ## Configuration of the bridge The bridge is [roughly configured at installation](https://github.com/YunoHost-Apps/mautrix_signal_ynh/blob/master/conf/config.yaml), e.g. allowed admin and user of the bot. Finer configuration can be done by modifying the -following configuration file with SSH: +following configuration file with SSH: ```/opt/yunohost/mautrix_signal/config.yaml``` and then restarting the mautrix_signal service. ## Documentation - * Official "Mautrix-Signal" documentation: https://docs.mau.fi/bridges/python/signal/index.html - * Matrix room (Matrix Bridges in Yunohost): #mautrix_yunohost:matrix.fdn.fr - * Matrix room (upstream app): #signal:maunium.net -In case you need to upload your logs somewhere, be aware that they contain your contacts' and your phone numbers. Strip them out with -``| sed -r 's/[0-9]{10,}/📞/g' `` - * "Mautrix-Signal" bridge is based on the [signal daemon](https://gitlab.com/signald/signald) project. - * YunoHost documentation: If more specific documentation is needed, feel free to contribute. +* Official "Mautrix-Signal" documentation: +* Matrix room (Matrix Bridges in Yunohost): #mautrix_yunohost:matrix.fdn.fr +* Matrix room (upstream app): #signal:maunium.net +In case you need to upload your logs somewhere, be aware that they contain your contacts' and your phone numbers. Strip them out with +```| sed -r 's/[0-9]{10,}/📞/g'``` +* "Mautrix-Signal" bridge is based on the [signal daemon](https://gitlab.com/signald/signald) project. +* YunoHost documentation: If more specific documentation is needed, feel free to contribute. ## YunoHost specific features -#### Multi-user support +### Multi-user support -* Bot users are not related to Yunohost users. Any Matrix account or Synapse server autorized in the configuration of the bridge can invite/use the bot. +* Bot users are not related to Yunohost users. Any Matrix account or Synapse server autorized in the configuration of the bridge can invite/use the bot. * The Signal bot is a local Matrix-Synapse user, but accessible through federation (synapse public or private). -* Several Signal and Matrix users can be bridged with one bridge, each user has its own bot administration room. +* Several Signal and Matrix users can be bridged with one bridge, each user has its own bot administration room. * If several bot users are in a same Signal group, only one Matrix room will be created by the bridge. -* See https://github.com/YunoHost-Apps/synapse_ynh#multi-users-support +* See -#### Multi-instance support +### Multi-instance support -* Multi-instance installation should work. Several bridge instances could be installed for one Matrix-Synapse instance so that one Matrix user can bridge several Signal accounts. +* Multi-instance installation should work. Several bridge instances could be installed for one Matrix-Synapse instance so that one Matrix user can bridge several Signal accounts. * Several bridge instances could be installed for each Matrix-Synapse instance to benefit from it. But one bridge can be used by users from several Matrix-Synapse instances. ## Limitations -* It looks like media are not bridged. +* It looks like media are not bridged. * Signal chats are not grouped in a Matrix community (as opposed to the Mautrix-WhatsApp or Mautrix-Facebook bridges) diff --git a/doc/DISCLAIMER_fr.md b/doc/ADMIN_fr.md similarity index 71% rename from doc/DISCLAIMER_fr.md rename to doc/ADMIN_fr.md index 3bb81f8..f24e12b 100644 --- a/doc/DISCLAIMER_fr.md +++ b/doc/ADMIN_fr.md @@ -1,11 +1,13 @@ ## Liste de passerelles publiques -* Demandez sur un des salons suivants: #mautrix_yunohost:matrix.fdn.fr or #signal:maunium.net +* Demandez sur un des salons suivants: `#mautrix_yunohost:matrix.fdn.fr` or `#signal:maunium.net` ## Usages de la passerelle -** Notez que plusieurs comptes Signal et Matrix peuvent être relayés, chaque compte Signal connecté a son propre Salon d'Administration. Si plusieurs utilisateur.ice.s du Robot sont dans un même groupe Signal, seul un Salon Matrix sera créé par la passerelle. ** + +**Notez que plusieurs comptes Signal et Matrix peuvent être relayés, chaque compte Signal connecté a son propre Salon d'Administration. Si plusieurs utilisateur.ice.s du Robot sont dans un même groupe Signal, seul un Salon Matrix sera créé par la passerelle.** ### Relayer TOUTES les conversations entre UN compte Signal et UN compte Matrix + * Prérequis : votre compte Matrix ou le serveur sur lequel il est hébergé doit être autorisé dans la configuration de la passerelle (voir ci-dessous) * Invitez le Robot (par défaut @signalbot:synapse.votredomaine) à une nouvelle conversation. * Ce nouveau salon d'administration du Robot Mautrix-Signal est appelé "Administration Room". @@ -13,6 +15,7 @@ Voir aussi [upstream wiki Authentication page](https://docs.mau.fi/bridges/python/signal/authentication.html) #### Relier la passerelle comme un appareil secondaire + * Tapez ``!sg link`` * Ouvrez l'application Signal de votre appareil principal * Ouvrez Paramètres => Appareils reliés => + => filmer le QR @@ -20,44 +23,47 @@ Voir aussi [upstream wiki Authentication page](https://docs.mau.fi/bridges/pytho * Acceptez les invitations aux salons #### Enregistrer la passerelle comme appareil principal + * Tapez ``!sg register ``, où ```` est votre numéro de téléphone au format international sans espace, p.ex. ``!sg register +33612345678`` * Répondez dans le salon d'administration avec le code de vérification reçu par SMS. * Définissez une nom de profil ``!sg set-profile-name `` ### Robot-Relai "Relaybot": Relayer les conversations de TOUS les comptes Matrix et TOUS les comptes Signal présents dans UN groupe/salon + * Pas implémenté pour l'instant ## Configuration de la passerelle -La passerelle est [configurée avec les paramètres standards adaptés pour votre YunoHost et l'instance Matrix-Synapse sélectionnée](https://github.com/YunoHost-Apps/mautrix_signal_ynh/blob/master/conf/config.yaml). Vous pouvez par exemple ajouter des administrateur.ice.s et utilisateur.ice.s du Robot autorisés en modifiant le fichier de configuration par liaison SSH: -``` sudo nano /opt/yunohost/mautrix_signal/config.yaml``` -puis en redémarrant le service: -``` sudo yunohost service restart mautrix_signal``` +La passerelle est [configurée avec les paramètres standards adaptés pour votre YunoHost et l'instance Matrix-Synapse sélectionnée](https://github.com/YunoHost-Apps/mautrix_signal_ynh/blob/master/conf/config.yaml). Vous pouvez par exemple ajouter des administrateur.ice.s et utilisateur.ice.s du Robot autorisés en modifiant le fichier de configuration par liaison SSH: +```sudo nano /opt/yunohost/mautrix_signal/config.yaml``` +puis en redémarrant le service: +```sudo yunohost service restart mautrix_signal``` ## Documentation - * Documentation officielle "Mautrix-Signal": https://docs.mau.fi/bridges/python/signal/index.html - * Salon Matrix sur les Passerelles dans Yunohost): #mautrix_yunohost:matrix.fdn.fr - * Salon Matrix (application principale): #signal:maunium.net -Si vous devez téléverser vos fichiers log quelque-part, soyez avertis qu'ils contiennent des informations sur vos contacts et vos numéros de téléphone. Effacez-les avec -``| sed -r 's/[0-9]{10,}/📞/g' `` - * La passerelle "Mautrix-Signal" repose sur l'implémentation du [daemon signald](https://gitlab.com/signald/signald) . - * Documentation YunoHost: Si une documentation spécifique est nécessaire, n'hésitez pas à contribuer. +* Documentation officielle "Mautrix-Signal": +* Salon Matrix sur les Passerelles dans Yunohost): #mautrix_yunohost:matrix.fdn.fr +* Salon Matrix (application principale): #signal:maunium.net +Si vous devez téléverser vos fichiers log quelque-part, soyez avertis qu'ils contiennent des informations sur vos contacts et vos numéros de téléphone. Effacez-les avec : +```| sed -r 's/[0-9]{10,}/📞/g'``` +* La passerelle "Mautrix-Signal" repose sur l'implémentation du [daemon signald](https://gitlab.com/signald/signald). +* Documentation YunoHost: Si une documentation spécifique est nécessaire, n'hésitez pas à contribuer. ## Caractéristiques spécifiques YunoHost -#### Support multi-comptes -* Les utilisateur.ice.s du Robot ne sont pas liés aux comptes Yunohost. N'importe quel compte Matrix ou serveur Synapse autorisés dans la configuration de la passerelle peut inviter/utiliser le Robot. +### Support multi-comptes + +* Les utilisateur.ice.s du Robot ne sont pas liés aux comptes Yunohost. N'importe quel compte Matrix ou serveur Synapse autorisés dans la configuration de la passerelle peut inviter/utiliser le Robot. * Le robot Signal est un utilisateur Matrix-Synapse local, mais accessible via la fédération (Synapse public ou privé). -* Plusieurs comptes Signal et Matrix peuvent être liés avec une seule passerelle, chaque compte a son propre salon d'administration. +* Plusieurs comptes Signal et Matrix peuvent être liés avec une seule passerelle, chaque compte a son propre salon d'administration. * Si plusieurs utilisateur.ice.s du Robot sont dans un même groupe Signal, seul un Salon Matrix sera créé par la passerelle. Autrement dit, la passerelle construit un seul miroir du réseau de discussion existant sur Signal (utilisateurs et salons). -* Voir https://github.com/YunoHost-Apps/synapse_ynh#multi-users-support +* Voir -#### Support multi-instance +### Support multi-instance -* L'installation multi-instance devrait fonctionner. Plusieurs instances de passerelles pourraient être installées pour une instance de Matrix-Synapse. Cela permet à un compte matrix de se relier à plusieurs comptes Signal. +* L'installation multi-instance devrait fonctionner. Plusieurs instances de passerelles pourraient être installées pour une instance de Matrix-Synapse. Cela permet à un compte matrix de se relier à plusieurs comptes Signal. * Plusieurs instances de passerelles pourraient être installées pour que chaque instance de Matrix-Synapse puisse en bénéficier. Mais une passerelle peut être utilisée par les comptes de plusieurs instances Matrix-Synapse. ## Limitations -* Les appels Audio/Video ne sont pas relayés. Seule une notification apparait. +* Les appels Audio/Video ne sont pas relayés. Seule une notification apparait. diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md index 4fcdbd1..d3721dd 100644 --- a/doc/DESCRIPTION.md +++ b/doc/DESCRIPTION.md @@ -1 +1,4 @@ -A puppeting bridge between Matrix and Signal packaged as a YunoHost service. Messages, notifications (and sometimes media) are bridged between a Signal user and a Matrix user. Currently the Matrix user can NOT invite other Matrix user in a bridged Signal room, so only someone with a Signal account can participate to Signal group conversations. The ["Mautrix-Signal"](https://docs.mau.fi/bridges/python/signal/index.html) bridge consists in a Synapse App Service and relies on postgresql (mysql also possible). Therefore, [Synapse for YunoHost](https://github.com/YunoHost-Apps/synapse_ynh) should be installed beforehand. +A puppeting bridge between Matrix and Signal packaged as a YunoHost service. Messages, notifications (and sometimes media) are bridged between a Signal user and a Matrix user. +Currently the Matrix user can NOT invite other Matrix user in a bridged Signal room, so only someone with a Signal account can participate to Signal group conversations. + +The ["Mautrix-Signal"](https://docs.mau.fi/bridges/python/signal/index.html) bridge consists in a Synapse App Service and relies on postgresql (mysql also possible). Therefore, [Synapse for YunoHost](https://github.com/YunoHost-Apps/synapse_ynh) should be installed beforehand. diff --git a/doc/DESCRIPTION_fr.md b/doc/DESCRIPTION_fr.md index b338f91..d5f03f7 100644 --- a/doc/DESCRIPTION_fr.md +++ b/doc/DESCRIPTION_fr.md @@ -1,4 +1,5 @@ -Une passerelle entre Matrix et Signal empaquetée comme un service YunoHost. Les messages, médias et notifications sont relayées entre un compte Signal et un compte Matrix. +Une passerelle entre Matrix et Signal empaquetée comme un service YunoHost. Les messages, médias et notifications sont relayées entre un compte Signal et un compte Matrix. + La passerelle ["Mautrix-Signal"](https://docs.mau.fi/bridges/python/signal/index.html) consiste en un Service d'Application Matrix-Synapse et repose sur une base-de-données postgresql. C'est pourquoi [Synapse for YunoHost](https://github.com/YunoHost-Apps/synapse_ynh) doit être préalablemnet installé. -** Attention : sauvegardez et restaurez toujours les deux applications Yunohost matrix-synapse et mautrix_signal en même temps!** +**Attention : sauvegardez et restaurez toujours les deux applications Yunohost matrix-synapse et mautrix_signal en même temps!** From 28851fd223f66395a167c4d377d20cf8efd3bc16 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 26 Feb 2024 13:05:01 +0000 Subject: [PATCH 04/11] Auto-update README --- README.md | 82 +++------------------------------------------------- README_fr.md | 71 ++------------------------------------------- 2 files changed, 7 insertions(+), 146 deletions(-) diff --git a/README.md b/README.md index ebcb3b9..e418abe 100644 --- a/README.md +++ b/README.md @@ -16,87 +16,13 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in ## Overview -A puppeting bridge between Matrix and Signal packaged as a YunoHost service. Messages, notifications (and sometimes media) are bridged between a Signal user and a Matrix user. Currently the Matrix user can NOT invite other Matrix user in a bridged Signal room, so only someone with a Signal account can participate to Signal group conversations. The ["Mautrix-Signal"](https://docs.mau.fi/bridges/python/signal/index.html) bridge consists in a Synapse App Service and relies on postgresql (mysql also possible). Therefore, [Synapse for YunoHost](https://github.com/YunoHost-Apps/synapse_ynh) should be installed beforehand. +A puppeting bridge between Matrix and Signal packaged as a YunoHost service. Messages, notifications (and sometimes media) are bridged between a Signal user and a Matrix user. +Currently the Matrix user can NOT invite other Matrix user in a bridged Signal room, so only someone with a Signal account can participate to Signal group conversations. + +The ["Mautrix-Signal"](https://docs.mau.fi/bridges/python/signal/index.html) bridge consists in a Synapse App Service and relies on postgresql (mysql also possible). Therefore, [Synapse for YunoHost](https://github.com/YunoHost-Apps/synapse_ynh) should be installed beforehand. **Shipped version:** 0.4.3~ynh1 -## Disclaimers / important information - -## List of known public services - -* Ask on one of the following rooms: #mautrix_yunohost:matrix.fdn.fr or #signal:maunium.net - -## Bridging usage -** Note that several Signal and Matrix users can be bridged, each Signal account has its own bot administration room. If they are in a same Signal group, only one matrix room will be created. ** - -### Bridge a Signal user and a Matrix user -* First your Matrix user or Synapse Server has to be authorized in the Configuration of the bridge (see below) -* Then, invite the bot (default @signalbot:yoursynapse.domain) in this new Mautrix-Signal bot administration room. - * If the Bot does bot accept, see the [troubleshooting page](https://docs.mau.fi/bridges/general/troubleshooting.html) -* Send ``!sg help`` to the bot in the created room to know how to control the bot. -See also [upstream wiki Authentication page](https://docs.mau.fi/bridges/python/signal/authentication.html) - -#### Linking the Bridge as a secondary device -* Type ``!sg link`` -* Open Signal App of your primary device -* Open Settings => Linked Devices => + => Capture the QR code with the camera -* By defaults, only conversations with very recent messages will be bridged -* Accept invitations to the bridged chat rooms - -#### Registering the Bridge as a primary device -* Type ``!sg register ``, where ```` is your phone number in the international format with no space, e.g. ``!sg register +33612345678`` -* Answer in the bot room with the verification code that you reveived in SMS. -* Set a profile name with ``!sg set-profile-name `` - -### Double puppeting -* Log in with ``login-matrix `` -* After logging in, the default Matrix puppet of your Signal account should leave rooms and your account should join all rooms the puppet was in automatically. - - -### Relaybot: Bridge a group for several Matrix and several Signal users to chat together -* Create a room on the signal side -* Your bridged users will be invited on the Matrix side once they are invited on the Signal side -* You can invite more people over on the Matrix side -* Have one of the bridged users (who has the right permission) type `!sg set-relay` on the Matrix side. Their signal account will relay messages from other Matrix users -It is not yet possible to bridge to an existing signal room, or create a new signal room from the Matrix side. - -## Configuration of the bridge - -The bridge is [roughly configured at installation](https://github.com/YunoHost-Apps/mautrix_signal_ynh/blob/master/conf/config.yaml), e.g. allowed admin and user of the bot. Finer configuration can be done by modifying the -following configuration file with SSH: -```/opt/yunohost/mautrix_signal/config.yaml``` -and then restarting the mautrix_signal service. - -## Documentation - - * Official "Mautrix-Signal" documentation: https://docs.mau.fi/bridges/python/signal/index.html - * Matrix room (Matrix Bridges in Yunohost): #mautrix_yunohost:matrix.fdn.fr - * Matrix room (upstream app): #signal:maunium.net -In case you need to upload your logs somewhere, be aware that they contain your contacts' and your phone numbers. Strip them out with -``| sed -r 's/[0-9]{10,}/📞/g' `` - * "Mautrix-Signal" bridge is based on the [signal daemon](https://gitlab.com/signald/signald) project. - * YunoHost documentation: If more specific documentation is needed, feel free to contribute. - -## YunoHost specific features - -#### Multi-user support - -* Bot users are not related to Yunohost users. Any Matrix account or Synapse server autorized in the configuration of the bridge can invite/use the bot. -* The Signal bot is a local Matrix-Synapse user, but accessible through federation (synapse public or private). -* Several Signal and Matrix users can be bridged with one bridge, each user has its own bot administration room. -* If several bot users are in a same Signal group, only one Matrix room will be created by the bridge. -* See https://github.com/YunoHost-Apps/synapse_ynh#multi-users-support - -#### Multi-instance support - -* Multi-instance installation should work. Several bridge instances could be installed for one Matrix-Synapse instance so that one Matrix user can bridge several Signal accounts. -* Several bridge instances could be installed for each Matrix-Synapse instance to benefit from it. But one bridge can be used by users from several Matrix-Synapse instances. - -## Limitations - -* It looks like media are not bridged. -* Signal chats are not grouped in a Matrix community (as opposed to the Mautrix-WhatsApp or Mautrix-Facebook bridges) - ## Documentation and resources * Official app website: diff --git a/README_fr.md b/README_fr.md index 25b4a85..7c3fea1 100644 --- a/README_fr.md +++ b/README_fr.md @@ -16,79 +16,14 @@ Si vous n’avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) po ## Vue d’ensemble -Une passerelle entre Matrix et Signal empaquetée comme un service YunoHost. Les messages, médias et notifications sont relayées entre un compte Signal et un compte Matrix. +Une passerelle entre Matrix et Signal empaquetée comme un service YunoHost. Les messages, médias et notifications sont relayées entre un compte Signal et un compte Matrix. + La passerelle ["Mautrix-Signal"](https://docs.mau.fi/bridges/python/signal/index.html) consiste en un Service d'Application Matrix-Synapse et repose sur une base-de-données postgresql. C'est pourquoi [Synapse for YunoHost](https://github.com/YunoHost-Apps/synapse_ynh) doit être préalablemnet installé. -** Attention : sauvegardez et restaurez toujours les deux applications Yunohost matrix-synapse et mautrix_signal en même temps!** +**Attention : sauvegardez et restaurez toujours les deux applications Yunohost matrix-synapse et mautrix_signal en même temps!** **Version incluse :** 0.4.3~ynh1 -## Avertissements / informations importantes - -## Liste de passerelles publiques - -* Demandez sur un des salons suivants: #mautrix_yunohost:matrix.fdn.fr or #signal:maunium.net - -## Usages de la passerelle -** Notez que plusieurs comptes Signal et Matrix peuvent être relayés, chaque compte Signal connecté a son propre Salon d'Administration. Si plusieurs utilisateur.ice.s du Robot sont dans un même groupe Signal, seul un Salon Matrix sera créé par la passerelle. ** - -### Relayer TOUTES les conversations entre UN compte Signal et UN compte Matrix -* Prérequis : votre compte Matrix ou le serveur sur lequel il est hébergé doit être autorisé dans la configuration de la passerelle (voir ci-dessous) -* Invitez le Robot (par défaut @signalbot:synapse.votredomaine) à une nouvelle conversation. -* Ce nouveau salon d'administration du Robot Mautrix-Signal est appelé "Administration Room". -* Envoyez ``help`` au Robot dans le "Administration Room" pour une liste des commandes d'administration de la passerelle. -Voir aussi [upstream wiki Authentication page](https://docs.mau.fi/bridges/python/signal/authentication.html) - -#### Relier la passerelle comme un appareil secondaire -* Tapez ``!sg link`` -* Ouvrez l'application Signal de votre appareil principal -* Ouvrez Paramètres => Appareils reliés => + => filmer le QR -* Par défaut, seules les conversations avec des messages très récents seront mises-en-miroir -* Acceptez les invitations aux salons - -#### Enregistrer la passerelle comme appareil principal -* Tapez ``!sg register ``, où ```` est votre numéro de téléphone au format international sans espace, p.ex. ``!sg register +33612345678`` -* Répondez dans le salon d'administration avec le code de vérification reçu par SMS. -* Définissez une nom de profil ``!sg set-profile-name `` - -### Robot-Relai "Relaybot": Relayer les conversations de TOUS les comptes Matrix et TOUS les comptes Signal présents dans UN groupe/salon -* Pas implémenté pour l'instant - -## Configuration de la passerelle - -La passerelle est [configurée avec les paramètres standards adaptés pour votre YunoHost et l'instance Matrix-Synapse sélectionnée](https://github.com/YunoHost-Apps/mautrix_signal_ynh/blob/master/conf/config.yaml). Vous pouvez par exemple ajouter des administrateur.ice.s et utilisateur.ice.s du Robot autorisés en modifiant le fichier de configuration par liaison SSH: -``` sudo nano /opt/yunohost/mautrix_signal/config.yaml``` -puis en redémarrant le service: -``` sudo yunohost service restart mautrix_signal``` - -## Documentation - - * Documentation officielle "Mautrix-Signal": https://docs.mau.fi/bridges/python/signal/index.html - * Salon Matrix sur les Passerelles dans Yunohost): #mautrix_yunohost:matrix.fdn.fr - * Salon Matrix (application principale): #signal:maunium.net -Si vous devez téléverser vos fichiers log quelque-part, soyez avertis qu'ils contiennent des informations sur vos contacts et vos numéros de téléphone. Effacez-les avec -``| sed -r 's/[0-9]{10,}/📞/g' `` - * La passerelle "Mautrix-Signal" repose sur l'implémentation du [daemon signald](https://gitlab.com/signald/signald) . - * Documentation YunoHost: Si une documentation spécifique est nécessaire, n'hésitez pas à contribuer. - -## Caractéristiques spécifiques YunoHost - -#### Support multi-comptes -* Les utilisateur.ice.s du Robot ne sont pas liés aux comptes Yunohost. N'importe quel compte Matrix ou serveur Synapse autorisés dans la configuration de la passerelle peut inviter/utiliser le Robot. -* Le robot Signal est un utilisateur Matrix-Synapse local, mais accessible via la fédération (Synapse public ou privé). -* Plusieurs comptes Signal et Matrix peuvent être liés avec une seule passerelle, chaque compte a son propre salon d'administration. -* Si plusieurs utilisateur.ice.s du Robot sont dans un même groupe Signal, seul un Salon Matrix sera créé par la passerelle. Autrement dit, la passerelle construit un seul miroir du réseau de discussion existant sur Signal (utilisateurs et salons). -* Voir https://github.com/YunoHost-Apps/synapse_ynh#multi-users-support - -#### Support multi-instance - -* L'installation multi-instance devrait fonctionner. Plusieurs instances de passerelles pourraient être installées pour une instance de Matrix-Synapse. Cela permet à un compte matrix de se relier à plusieurs comptes Signal. -* Plusieurs instances de passerelles pourraient être installées pour que chaque instance de Matrix-Synapse puisse en bénéficier. Mais une passerelle peut être utilisée par les comptes de plusieurs instances Matrix-Synapse. - -## Limitations - -* Les appels Audio/Video ne sont pas relayés. Seule une notification apparait. - ## Documentations et ressources * Site officiel de l’app : From 5f35b5f54bd1c4f61b911a1761aa1f6415e9e912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Mon, 26 Feb 2024 14:05:59 +0100 Subject: [PATCH 05/11] fix install,remove --- manifest.toml | 1 - scripts/install | 4 ++-- scripts/remove | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/manifest.toml b/manifest.toml index 1723816..3e9acfe 100644 --- a/manifest.toml +++ b/manifest.toml @@ -15,7 +15,6 @@ maintainers = ["MayeulC"] license = "AGPL-3.0-or-later" userdoc = "https://docs.mau.fi/bridges/python/signal/index.html" code = "https://github.com/mautrix/signal" -website = "https://github.com/mautrix/signal" fund = "https://github.com/sponsors/tulir" [integration] diff --git a/scripts/install b/scripts/install index c78fa72..96d76ff 100755 --- a/scripts/install +++ b/scripts/install @@ -30,8 +30,8 @@ then else synapse_instance="synapse__$synapsenumber" fi -#REMOVEME? server_name=$(ynh_app_setting_get --app $synapse_instance --key server_name) -#REMOVEME? domain=$(ynh_app_setting_get --app $synapse_instance --key domain) +server_name=$(ynh_app_setting_get --app $synapse_instance --key server_name) +domain=$(ynh_app_setting_get --app $synapse_instance --key domain) mautrix_version=$(ynh_app_upstream_version) bot_synapse_db_user="@$botname:$server_name" synapse_db_name="matrix_$synapse_instance" diff --git a/scripts/remove b/scripts/remove index 870dc1b..21778bf 100755 --- a/scripts/remove +++ b/scripts/remove @@ -36,7 +36,7 @@ ynh_remove_logrotate #================================================= # REMOVE THE POSTGRESQL DATABASE #================================================= -#REMOVEME? ynh_script_progression --message="Removing the PostgreSQL database..." --weight=4 +ynh_script_progression --message="Removing the PostgreSQL configuration..." --weight=4 # Remove a database if it exists, along with the associated user ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP OWNED BY ""$app"";" From 487f6bfbb92f95ebc95a4fed21896344cca6ee83 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 26 Feb 2024 13:07:52 +0000 Subject: [PATCH 06/11] Auto-update README --- README.md | 1 - README_fr.md | 1 - 2 files changed, 2 deletions(-) diff --git a/README.md b/README.md index e418abe..23bcdb9 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,6 @@ The ["Mautrix-Signal"](https://docs.mau.fi/bridges/python/signal/index.html) bri **Shipped version:** 0.4.3~ynh1 ## Documentation and resources -* Official app website: * Official user documentation: * Upstream app code repository: * YunoHost Store: diff --git a/README_fr.md b/README_fr.md index 7c3fea1..6dffa75 100644 --- a/README_fr.md +++ b/README_fr.md @@ -26,7 +26,6 @@ La passerelle ["Mautrix-Signal"](https://docs.mau.fi/bridges/python/signal/index **Version incluse :** 0.4.3~ynh1 ## Documentations et ressources -* Site officiel de l’app : * Documentation officielle utilisateur : * Dépôt de code officiel de l’app : * YunoHost Store: From 6291f491e4851d039f0004f9d28fe20253564e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Mon, 26 Feb 2024 14:16:20 +0100 Subject: [PATCH 07/11] Fix source --- manifest.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/manifest.toml b/manifest.toml index 3e9acfe..1e61330 100644 --- a/manifest.toml +++ b/manifest.toml @@ -69,6 +69,9 @@ ram.runtime = "50M" # FIXME: replace with an **estimate** minimum ram requiremen [resources.sources.main] url = "https://github.com/mautrix/signal/archive/refs/tags/v0.4.3.tar.gz" sha256 = "e75636e845d4b9d84070efec510b7358b93a4fb0d6ffe4300dbdb9260725ba53" + rename = "mautrix-signal.tar.gz" + extract = false + autoupdate.strategy = "latest_github_release" [resources.sources.signald] From b457686aa9aac9f1bf174d3118b5fdbb0d0d2b9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Mon, 26 Feb 2024 14:56:12 +0100 Subject: [PATCH 08/11] Add missing keys in upgrade --- scripts/upgrade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/upgrade b/scripts/upgrade index bfba57d..6af3ff0 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -11,6 +11,8 @@ source /usr/share/yunohost/helpers mautrix_version=$(ynh_app_upstream_version) synapse_db_name="matrix_$synapse_instance" +server_name=$(ynh_app_setting_get --app $synapse_instance --key server_name) +domain=$(ynh_app_setting_get --app $synapse_instance --key domain) #================================================= # STANDARD UPGRADE STEPS From 0a7c8ecfee338df31b5d89e85f8b3772c05a862c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Mon, 26 Feb 2024 14:57:22 +0100 Subject: [PATCH 09/11] Test with quotes --- scripts/remove | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/remove b/scripts/remove index 21778bf..6e62f1e 100755 --- a/scripts/remove +++ b/scripts/remove @@ -39,14 +39,14 @@ ynh_remove_logrotate ynh_script_progression --message="Removing the PostgreSQL configuration..." --weight=4 # Remove a database if it exists, along with the associated user -ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP OWNED BY ""$app"";" -ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP USER ""$app"";" -ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP OWNED BY ""$bot_synapse_db_user"";" -ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP USER ""$bot_synapse_db_user"";" -ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP OWNED BY ""$botname"";" -ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP USER ""$botname"";" -ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP OWNED BY ""$signald_user"";" -ynh_psql_execute_as_root --database=$synapse_db_name --sql="DROP USER ""$signald_user"";" +ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP OWNED BY \"$app\";" +ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP USER \"$app\";" +ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP OWNED BY \"$bot_synapse_db_user\";" +ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP USER \"$bot_synapse_db_user\";" +ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP OWNED BY \"$botname\";" +ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP USER \"$botname\";" +ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP OWNED BY \"$signald_user\";" +ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP USER \"$signald_user\";" #================================================= # SPECIFIC REMOVE From e2f1ae5ab429ad2de54c5c5527307464edbe0f5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Mon, 26 Feb 2024 17:41:47 +0100 Subject: [PATCH 10/11] Fix if_botuser --- scripts/install | 2 +- scripts/upgrade | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 96d76ff..93245d5 100755 --- a/scripts/install +++ b/scripts/install @@ -17,7 +17,7 @@ source /usr/share/yunohost/helpers bot_synapse_adm=true encryption=false -if [[ -z "${botusers}" ]] || [ "$botusers" == "admin" ]; then +if [[ -z "$botusers" ]] || [ "$botusers" == "admin" ]; then if_botusers="# " else if_botusers="" diff --git a/scripts/upgrade b/scripts/upgrade index 6af3ff0..ff3b0da 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -49,6 +49,12 @@ chown -R "$app:$app" "$install_dir" #================================================= ynh_script_progression --message="Updating a configuration file..." --weight=2 +if [[ -z "$botusers" ]] || [ "$botusers" == "admin" ]; then + if_botusers="# " +else + if_botusers="" +fi + ynh_add_config --template="config.yaml" --destination="$install_dir/config.yaml" chmod 400 "$install_dir/config.yaml" From 3ce6d96359c34911f9d842b635ee26c5d49ca2ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Mon, 26 Feb 2024 17:50:01 +0100 Subject: [PATCH 11/11] Cleanup remove --- scripts/remove | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/scripts/remove b/scripts/remove index 6e62f1e..403f0c0 100755 --- a/scripts/remove +++ b/scripts/remove @@ -38,15 +38,8 @@ ynh_remove_logrotate #================================================= ynh_script_progression --message="Removing the PostgreSQL configuration..." --weight=4 -# Remove a database if it exists, along with the associated user +# Remove permissions of app to the synapse db ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP OWNED BY \"$app\";" -ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP USER \"$app\";" -ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP OWNED BY \"$bot_synapse_db_user\";" -ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP USER \"$bot_synapse_db_user\";" -ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP OWNED BY \"$botname\";" -ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP USER \"$botname\";" -ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP OWNED BY \"$signald_user\";" -ynh_psql_execute_as_root --database="$synapse_db_name" --sql="DROP USER \"$signald_user\";" #================================================= # SPECIFIC REMOVE