diff --git a/README.md b/README.md index 47afb8e..e88b801 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,76 @@ -# OnlyOffice for YunoHost +# OnlyOffice Server for YunoHost [![Integration level](https://dash.yunohost.org/integration/onlyoffice.svg)](https://dash.yunohost.org/appci/app/onlyoffice) [![Install OnlyOffice with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=onlyoffice) -> *This package allow you to install OnlyOffice quickly and simply on a YunoHost server. +> *This package allows you to install OnlyOffice Document Server quickly and simply on a YunoHost server. If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.* ## Overview -OnlyOffice Document Server +Online collaborative edition of OnlyOffice documents requires: +1) a server part, with two installation options: + a) **This package installs an OnlyOffice Document Server**. + b) The [Community Document Server for Nextcloud](https://apps.nextcloud.com/apps/documentserver_community) + +2) a client part, such as: + a) The [ONLYOFFICE connector for Nextcloud](https://apps.nextcloud.com/apps/onlyoffice) + b) The [ONLYOFFICE Desktop Editors](https://www.onlyoffice.com/fr/download-desktop.aspx) + +The Nextcloud addicts may follow [this tutorial](https://github.com/YunoHost-Apps/nextcloud_ynh#configure-onlyoffice-integration) to install 1)b) and 2)a) on one Nextcloud instance. However, performance and architecture are limited. **Shipped version:** 5.2.8 +## Screenshots + +![](Link to a screenshot for this app) + +## Demo + +* A free 30 days demo of Document Server is available from OnlyOffice connector for Nextcloud: + * Install Nextcloud and the ONLYOFFICE app (connector) + * Go in the Nextcloud administrator settings, section ONLYOFFICE + * Tick the box `Connection to demo ONLYOFFICE Document Server`` in Server Parameters +* Some testing is also possible using [ONLYOFFICE Desktop Editors](https://www.onlyoffice.com/fr/download-desktop.aspx) + +## Prerequisite +You should not install ``onlyoffice`` on your main YunoHost domain, especially if you want to use it with a ``nextcloud`` installed on the same domain. +* Add a new domain for OnlyOffice in YunoHost + * If your main YunoHost domain was provided by YunoHost, e.g. ``domain.nohost.me``, then you don't have to buy/register a new domain name + * Just click on ``I already have a domain`` + * Type e.g. ``office.domain.nohost.me`` and click on ``Add`` +* Add a Let's Encrypt certificate for this domain + +## Configuration of OnlyOffice Server +* Suppose: + * ``yunohost.domain`` is your main YunoHost domain + * you have configured ``office.yunohost.domain`` for OnlyOffice, see Prerequisite above + * you have Nextcloud installed on ``yunohost.domain/nextcloud`` or ``nextcloud.yunohost.domain`` +* Install ``onlyoffice`` using CLI or web admin + * Choose a domain name for OnlyOffice that is different from your Nextcloud domain, e.g. ``office.yunohost.domain`` (or ``office.domain.nohost.me``, see previous section) + * Choose a path for OnlyOffice, e.g. ``/`` if you install on ``office.yunohost.domain`` (do not install any further app on this domain) + * The domain of your Nextcloud instance, e.g. ``yunohost.domain/nextcloud`` or ``nextcloud.yunohost.domain`` + * Is it a public application? **If you want to connect it to Nextcloud, OnlyOffice should be public**: then select ``Yes`` or ``tick the box`` + +## How to edit OnlyOffice documents? +### Web Edition in Nextcloud +Prerequisite: **OnlyOffice should be public**, see previous section. +* In Nextcloud apps store, install ``ONLYOFFICE``, i.e. the [OnlyOffice connector for Nextcloud](https://apps.nextcloud.com/apps/onlyoffice) +* Go in the Nextcloud ``settings``>``Administration``>``ONLYOFFICE``>``Server settings``>``Address of the Document Server`` +* Give the installation domain of your ``onlyoffice``, e.g. ``https://office.yunohost.domain/`` and click ``Save`` +* Create a new document and enjoy! + +### Desktop Edition on PC +* Download and install a [ONLYOFFICE Desktop Editor](https://www.onlyoffice.com/fr/download-desktop.aspx) +* Start the Editor and Go to ``Connect to cloud``>``Add cloud`` + * Select ``ONLYOFFICE`` and give the installation domain of your ``onlyoffice``, e.g. ``office.yunohost.domain`` + * or (only if you connected ``onlyoffice`` to Nextcloud, see previous section) + * Select ``Nextcloud`` and give your nextcloud installation domain, e.g. ``yunohost.domain/nextcloud`` +* Create a new document and enjoy! + +## Documentation + ## YunoHost specific features +#### Multi-users support #### Supported architectures @@ -19,12 +78,21 @@ OnlyOffice Document Server * ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/onlyoffice%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/onlyoffice/) * Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/onlyoffice%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/onlyoffice/) +## Limitations + +* + +## Additional information + +* + ## Links * Report a bug: https://github.com/YunoHost-Apps/onlyoffice_ynh/issues * App website: https://www.onlyoffice.com - * Github App website: https://github.com/ONLYOFFICE/CommunityServer + * Github App website: https://github.com/ONLYOFFICE/DocumentServer * YunoHost website: https://yunohost.org/ + * YunoHost documentation: If specific documentation is needed, feel free to contribute. --- diff --git a/manifest.json b/manifest.json index 2a32d25..f04df52 100644 --- a/manifest.json +++ b/manifest.json @@ -3,10 +3,10 @@ "id": "onlyoffice", "packaging_format": 1, "description": { - "en": "OnlyOffice Document Server.", - "fr": "Serveur de documents OnlyOffice." + "en": "Create and edit documents collaboratively", + "fr": "Créez et éditer des documents collaborativement" }, - "version": "5.2.8~ynh1", + "version": "5.5.3~ynh1", "url": "https://www.onlyoffice.com", "license": "GPL-3.0-or-later", "maintainer": { @@ -14,7 +14,7 @@ "email": "liberodark@gmail.com" }, "requirements": { - "yunohost": ">= 3.5" + "yunohost": ">= 3.8.4" }, "multi_instance": false, "services": [ @@ -29,7 +29,11 @@ "en": "Choose a domain name for OnlyOffice", "fr": "Choisissez un nom de domaine pour OnlyOffice" }, - "example": "example.com" + "example": "office.yunohost.domain", + "help": { + "en": "You should not install OnlyOffice on your main YunoHost domain, especially if you want to use it with a nextcloud installed on the same domain.", + "fr": "Evitez d'installer OnlyOffice sur votre domaine Yunohost principal, surtout si vous voulez l'utiliser avec une instance Nextcloud installée sur le même domaine." + } }, { "name": "path", @@ -38,25 +42,37 @@ "en": "Choose a path for OnlyOffice", "fr": "Choisissez un chemin pour OnlyOffice" }, - "example": "/onlyoffice", + "example": "/onlyoffice or /", + "help": { + "en": "Root path / if you chose a subdomain, e.g. office.yunohost.domain.", + "fr": "Choisissez le chemin racine / si vous avez choisi un sous-domaine, ex. office.yunohost.domain." + }, "default": "/onlyoffice" }, { "name": "nextclouddomain", "type": "string", "ask": { - "en": "The domain of your Nextcloud instance", - "fr": "Le domain de votre instance Nextcloud" + "en": "The domain of the Nextcloud to connect to OnlyOffice", + "fr": "Le domaine du Nextcloud à connecter à OnlyOffice" }, - "example": "example.com", - "default": "example.com" + "example": "yunohost.domain/nextcloud or nextcloud.yunohost.domain", + "help": { + "en": "Install the OnlyOffice connector to edit documents from Nextcloud.", + "fr": "Installez le connecteur OnlyOffice pour éditer des documents dans Nextcloud." + }, + "default": "yunohost.domain/nextcloud" }, { "name": "is_public", "type": "boolean", "ask": { - "en": "Is it a public application?", - "fr": "Est-ce une application publique ?" + "en": "Is it a public application? If you want to connect the app to Nextcloud: check/true!", + "fr": "Est-ce une application publique ? Si vous voulez connecter l'app à Nextcloud : cochez/true!" + }, + "help": { + "en": "You will only be able to connect OnlyOffice to Nextcloud if both apps are public!", + "fr": "Nextcloud et OnlyOffice doivent être des applications publiques si vous voulez les connecter!" }, "default": true } diff --git a/scripts/install b/scripts/install index b350864..835f4d0 100644 --- a/scripts/install +++ b/scripts/install @@ -7,7 +7,6 @@ #================================================= source _common.sh -source ynh_add_extra_apt_repos__3 source /usr/share/yunohost/helpers #================================================= @@ -124,17 +123,21 @@ ynh_system_user_create --username=$app #================================================= ynh_print_info --message="Configuring Onlyoffice..." -echo onlyoffice-documentserver onlyoffice/ds-port select $port | sudo debconf-set-selections -echo onlyoffice-documentserver onlyoffice/db-host string 127.0.0.1 | sudo debconf-set-selections -echo onlyoffice-documentserver onlyoffice/db-user string $db_user | sudo debconf-set-selections +echo onlyoffice-documentserver onlyoffice/ds-port select $port | debconf-set-selections +echo onlyoffice-documentserver onlyoffice/db-host string 127.0.0.1 | debconf-set-selections +echo onlyoffice-documentserver onlyoffice/db-user string $db_user | debconf-set-selections echo onlyoffice-documentserver onlyoffice/db-pwd password $db_pwd | debconf-set-selections -echo onlyoffice-documentserver onlyoffice/db-name string $db_name | sudo debconf-set-selections +echo onlyoffice-documentserver onlyoffice/db-name string $db_name | debconf-set-selections #================================================= # INSTALL ONLYOFFICE #================================================= ynh_print_info --message="Install OnlyOffice..." +# The onlyoffice dev had the magnificent idea to add a "nginx restart" during +# the install/configure of their package, which is awful since that will +# restart nginx and the whole webadmin and maybe even the yunohost command +# running the install ... ynh_add_app_dependencies --package="onlyoffice-documentserver" #================================================= @@ -159,6 +162,14 @@ supervisorctl restart all sleep 30 +#================================================= +# REGENERATE FONTS +#================================================= +ynh_print_info --message="Generating fonts..." + +/usr/bin/documentserver-generate-allfonts.sh + + #================================================= # GENERIC FINALIZATION #================================================= diff --git a/scripts/remove b/scripts/remove index 703afdd..6d06f9b 100644 --- a/scripts/remove +++ b/scripts/remove @@ -7,7 +7,6 @@ #================================================= source _common.sh -source ynh_add_extra_apt_repos__3 source /usr/share/yunohost/helpers #================================================= @@ -37,7 +36,16 @@ supervisorctl stop all ynh_print_info --message="Removing OnlyOffice..." ynh_secure_remove --file=/var/lib/dpkg/info/onlyoffice-documentserver.prerm + +# Here you will wonder what the fuck this is, and the answer is : this is a +# fucking stupid hack because onlyoffice's dev deviced to put a "supervisorctl +# update" inside their postrm, but when their postrm is ran, supervisorctl is +# already removed ... so their removal fails which breaks dpkg. +# So instead, we trick it with this stupid link to /bin/true which is removed +# right after. +ln -s /bin/true /usr/local/bin/supervisorctl ynh_package_autopurge onlyoffice-documentserver +ynh_secure_remove /usr/local/bin/supervisorctl #================================================= # REMOVE THE POSTGRESQL DATABASE diff --git a/scripts/restore b/scripts/restore index 1467c11..1557668 100644 --- a/scripts/restore +++ b/scripts/restore @@ -7,7 +7,6 @@ #================================================= source ../settings/scripts/_common.sh -source ../settings/scripts/ynh_add_extra_apt_repos__3 source /usr/share/yunohost/helpers #================================================= @@ -99,11 +98,11 @@ ynh_psql_execute_file_as_root --file="./db.sql" --database=$db_name #================================================= ynh_print_info --message="Configuring Onlyoffice..." -echo onlyoffice-documentserver onlyoffice/ds-port select $port | sudo debconf-set-selections -echo onlyoffice-documentserver onlyoffice/db-host string 127.0.0.1 | sudo debconf-set-selections -echo onlyoffice-documentserver onlyoffice/db-user string $db_user | sudo debconf-set-selections +echo onlyoffice-documentserver onlyoffice/ds-port select $port | debconf-set-selections +echo onlyoffice-documentserver onlyoffice/db-host string 127.0.0.1 | debconf-set-selections +echo onlyoffice-documentserver onlyoffice/db-user string $db_user | debconf-set-selections echo onlyoffice-documentserver onlyoffice/db-pwd password $db_pwd | debconf-set-selections -echo onlyoffice-documentserver onlyoffice/db-name string $db_name | sudo debconf-set-selections +echo onlyoffice-documentserver onlyoffice/db-name string $db_name | debconf-set-selections #================================================= # REINSTALL ONLYOFFICE @@ -119,6 +118,13 @@ ynh_print_info --message="Restoring the configuration..." ynh_restore_file --origin_path="/etc/onlyoffice" +#================================================= +# REGENERATE FONTS +#================================================= +ynh_print_info --message="Generating fonts..." + +/usr/bin/documentserver-generate-allfonts.sh + #================================================= # GENERIC FINALIZATION #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index f8e177e..0c6a391 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -7,7 +7,6 @@ #================================================= source _common.sh -source ynh_add_extra_apt_repos__3 source /usr/share/yunohost/helpers #================================================= @@ -21,6 +20,8 @@ domain=$(ynh_app_setting_get --app=$app --key=domain) path_url=$(ynh_app_setting_get --app=$app --key=path) is_public=$(ynh_app_setting_get --app=$app --key=is_public) db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name +db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) port=$(ynh_app_setting_get --app=$app --key=port) nextclouddomain=$(ynh_app_setting_get --app=$app --key=nextclouddomain) @@ -126,11 +127,11 @@ ynh_install_extra_repo --repo="deb http://download.onlyoffice.com/repo/debian sq ynh_print_info --message="Configuring Onlyoffice..." ynh_backup_if_checksum_is_different --file="/etc/onlyoffice/documentserver/default.json" -echo onlyoffice-documentserver onlyoffice/ds-port select $port | sudo debconf-set-selections -echo onlyoffice-documentserver onlyoffice/db-host string 127.0.0.1 | sudo debconf-set-selections -echo onlyoffice-documentserver onlyoffice/db-user string $db_user | sudo debconf-set-selections +echo onlyoffice-documentserver onlyoffice/ds-port select $port | debconf-set-selections +echo onlyoffice-documentserver onlyoffice/db-host string 127.0.0.1 | debconf-set-selections +echo onlyoffice-documentserver onlyoffice/db-user string $db_user | debconf-set-selections echo onlyoffice-documentserver onlyoffice/db-pwd password $db_pwd | debconf-set-selections -echo onlyoffice-documentserver onlyoffice/db-name string $db_name | sudo debconf-set-selections +echo onlyoffice-documentserver onlyoffice/db-name string $db_name | debconf-set-selections #================================================= # UPGRADE ONLYOFFICE @@ -152,6 +153,13 @@ ynh_replace_string --match_string="\"rejectUnauthorized\": true" --replace_strin # Recalculate and store the checksum of the file for the next upgrade. ynh_store_file_checksum --file="/etc/onlyoffice/documentserver/default.json" +#================================================= +# REGENERATE FONTS +#================================================= +ynh_print_info --message="Generating fonts..." + +/usr/bin/documentserver-generate-allfonts.sh + #================================================= # GENERIC FINALIZATION #================================================= diff --git a/scripts/ynh_add_extra_apt_repos__3 b/scripts/ynh_add_extra_apt_repos__3 deleted file mode 100644 index 3276f00..0000000 --- a/scripts/ynh_add_extra_apt_repos__3 +++ /dev/null @@ -1,294 +0,0 @@ -#!/bin/bash - -# Pin a repository. -# -# usage: ynh_pin_repo --package=packages --pin=pin_filter [--priority=priority_value] [--name=name] [--append] -# | arg: -p, --package - Packages concerned by the pin. Or all, *. -# | arg: -i, --pin - Filter for the pin. -# | arg: -p, --priority - Priority for the pin -# | arg: -n, --name - Name for the files for this repo, $app as default value. -# | arg: -a, --append - Do not overwrite existing files. -# -# See https://manpages.debian.org/stretch/apt/apt_preferences.5.en.html for information about pinning. -# -ynh_pin_repo () { - # Declare an array to define the options of this helper. - local legacy_args=pirna - declare -Ar args_array=( [p]=package= [i]=pin= [r]=priority= [n]=name= [a]=append ) - local package - local pin - local priority - local name - local append - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - package="${package:-*}" - priority=${priority:-50} - name="${name:-$app}" - append=${append:-0} - - if [ $append -eq 1 ] - then - append="tee -a" - else - append="tee" - fi - - mkdir -p "/etc/apt/preferences.d" - echo "Package: $package -Pin: $pin -Pin-Priority: $priority" \ - | $append "/etc/apt/preferences.d/$name" -} - -# Add a repository. -# -# usage: ynh_add_repo --uri=uri --suite=suite --component=component [--name=name] [--append] -# | arg: -u, --uri - Uri of the repository. -# | arg: -s, --suite - Suite of the repository. -# | arg: -c, --component - Component of the repository. -# | arg: -n, --name - Name for the files for this repo, $app as default value. -# | arg: -a, --append - Do not overwrite existing files. -# -# Example for a repo like deb http://forge.yunohost.org/debian/ stretch stable -# uri suite component -# ynh_add_repo --uri=http://forge.yunohost.org/debian/ --suite=stretch --component=stable -# -ynh_add_repo () { - # Declare an array to define the options of this helper. - local legacy_args=uscna - declare -Ar args_array=( [u]=uri= [s]=suite= [c]=component= [n]=name= [a]=append ) - local uri - local suite - local component - local name - local append - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - name="${name:-$app}" - append=${append:-0} - - if [ $append -eq 1 ] - then - append="tee -a" - else - append="tee" - fi - - mkdir -p "/etc/apt/sources.list.d" - # Add the new repo in sources.list.d - echo "deb $uri $suite $component" \ - | $append "/etc/apt/sources.list.d/$name.list" -} - -# Add an extra repository correctly, pin it and get the key. -# -# usage: ynh_install_extra_repo --repo="repo" [--key=key_url] [--priority=priority_value] [--name=name] [--append] -# | arg: -r, --repo - Complete url of the extra repository. -# | arg: -k, --key - url to get the public key. -# | arg: -p, --priority - Priority for the pin -# | arg: -n, --name - Name for the files for this repo, $app as default value. -# | arg: -a, --append - Do not overwrite existing files. -ynh_install_extra_repo () { - # Declare an array to define the options of this helper. - local legacy_args=rkpna - declare -Ar args_array=( [r]=repo= [k]=key= [p]=priority= [n]=name= [a]=append ) - local repo - local key - local priority - local name - local append - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - name="${name:-$app}" - append=${append:-0} - key=${key:-0} - priority=${priority:-} - - if [ $append -eq 1 ] - then - append="--append" - wget_append="tee -a" - else - append="" - wget_append="tee" - fi - - # Split the repository into uri, suite and components. - # Remove "deb " at the beginning of the repo. - repo="${repo#deb }" - - # Get the uri - local uri="$(echo "$repo" | awk '{ print $1 }')" - - # Get the suite - local suite="$(echo "$repo" | awk '{ print $2 }')" - - # Get the components - local component="${repo##$uri $suite }" - - # Add the repository into sources.list.d - ynh_add_repo --uri="$uri" --suite="$suite" --component="$component" --name="$name" $append - - # Pin the new repo with the default priority, so it won't be used for upgrades. - # Build $pin from the uri without http and any sub path - local pin="${uri#*://}" - pin="${pin%%/*}" - # Set a priority only if asked - if [ -n "$priority" ] - then - priority="--priority=$priority" - fi - ynh_pin_repo --package="*" --pin="origin \"$pin\"" $priority --name="$name" $append - - # Get the public key for the repo - if [ -n "$key" ] - then - mkdir -p "/etc/apt/trusted.gpg.d" - wget -q "$key" -O - | gpg --dearmor | $wget_append /etc/apt/trusted.gpg.d/$name.gpg > /dev/null - fi - - # Update the list of package with the new repo - ynh_package_update -} - -# Remove an extra repository and the assiociated configuration. -# -# usage: ynh_remove_extra_repo [--name=name] -# | arg: -n, --name - Name for the files for this repo, $app as default value. -ynh_remove_extra_repo () { - # Declare an array to define the options of this helper. - local legacy_args=n - declare -Ar args_array=( [n]=name= ) - local name - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - name="${name:-$app}" - - ynh_secure_remove "/etc/apt/sources.list.d/$name.list" - ynh_secure_remove "/etc/apt/preferences.d/$name" - ynh_secure_remove "/etc/apt/trusted.gpg.d/$name.gpg" - ynh_secure_remove "/etc/apt/trusted.gpg.d/$name.asc" - - # Update the list of package to exclude the old repo - ynh_package_update -} - -# Install packages from an extra repository properly. -# -# usage: ynh_install_extra_app_dependencies --repo="repo" --package="dep1 dep2" [--key=key_url] [--name=name] -# | arg: -r, --repo - Complete url of the extra repository. -# | arg: -p, --package - The packages to install from this extra repository -# | arg: -k, --key - url to get the public key. -# | arg: -n, --name - Name for the files for this repo, $app as default value. -ynh_install_extra_app_dependencies () { - # Declare an array to define the options of this helper. - local legacy_args=rpkn - declare -Ar args_array=( [r]=repo= [p]=package= [k]=key= [n]=name= ) - local repo - local package - local key - local name - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - name="${name:-$app}" - key=${key:-0} - - # Set a key only if asked - if [ -n "$key" ] - then - key="--key=$key" - fi - # Add an extra repository for those packages - ynh_install_extra_repo --repo="$repo" $key --priority=995 --name=$name - - # Install requested dependencies from this extra repository. - ynh_add_app_dependencies --package="$package" - - # Remove this extra repository after packages are installed - ynh_remove_extra_repo --name=$app -} - -#================================================= - -# patched version of ynh_install_app_dependencies to be used with ynh_add_app_dependencies - -# Define and install dependencies with a equivs control file -# This helper can/should only be called once per app -# -# usage: ynh_install_app_dependencies dep [dep [...]] -# | arg: dep - the package name to install in dependence -# You can give a choice between some package with this syntax : "dep1|dep2" -# Example : ynh_install_app_dependencies dep1 dep2 "dep3|dep4|dep5" -# This mean in the dependence tree : dep1 & dep2 & (dep3 | dep4 | dep5) -# -# Requires YunoHost version 2.6.4 or higher. -ynh_install_app_dependencies () { - local dependencies=$@ - dependencies="$(echo "$dependencies" | sed 's/\([^\<=\>]\)\ \([^(]\)/\1, \2/g')" - dependencies=${dependencies//|/ | } - local manifest_path="../manifest.json" - if [ ! -e "$manifest_path" ]; then - manifest_path="../settings/manifest.json" # Into the restore script, the manifest is not at the same place - fi - - local version=$(grep '\"version\": ' "$manifest_path" | cut -d '"' -f 4) # Retrieve the version number in the manifest file. - if [ ${#version} -eq 0 ]; then - version="1.0" - fi - local dep_app=${app//_/-} # Replace all '_' by '-' - - # Handle specific versions - if [[ "$dependencies" =~ [\<=\>] ]] - then - # Replace version specifications by relationships syntax - # https://www.debian.org/doc/debian-policy/ch-relationships.html - # Sed clarification - # [^(\<=\>] ignore if it begins by ( or < = >. To not apply twice. - # [\<=\>] matches < = or > - # \+ matches one or more occurence of the previous characters, for >= or >>. - # [^,]\+ matches all characters except ',' - # Ex: package>=1.0 will be replaced by package (>= 1.0) - dependencies="$(echo "$dependencies" | sed 's/\([^(\<=\>]\)\([\<=\>]\+\)\([^,]\+\)/\1 (\2 \3)/g')" - fi - - cat > /tmp/${dep_app}-ynh-deps.control << EOF # Make a control file for equivs-build -Section: misc -Priority: optional -Package: ${dep_app}-ynh-deps -Version: ${version} -Depends: ${dependencies} -Architecture: all -Description: Fake package for $app (YunoHost app) dependencies - This meta-package is only responsible of installing its dependencies. -EOF - ynh_package_install_from_equivs /tmp/${dep_app}-ynh-deps.control \ - || ynh_die --message="Unable to install dependencies" # Install the fake package and its dependencies - rm /tmp/${dep_app}-ynh-deps.control - ynh_app_setting_set --app=$app --key=apt_dependencies --value="$dependencies" -} - -ynh_add_app_dependencies () { - # Declare an array to define the options of this helper. - local legacy_args=pr - declare -Ar args_array=( [p]=package= [r]=replace) - local package - local replace - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - replace=${replace:-0} - - local current_dependencies="" - if [ $replace -eq 0 ] - then - local dep_app=${app//_/-} # Replace all '_' by '-' - if ynh_package_is_installed --package="${dep_app}-ynh-deps" - then - current_dependencies="$(dpkg-query --show --showformat='${Depends}' ${dep_app}-ynh-deps) " - fi - - current_dependencies=${current_dependencies// | /|} - fi - - ynh_install_app_dependencies "${current_dependencies}${package}" -}