From 59188a4c5ff9b686114fe8e32e28bc37263def10 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Fri, 25 Jun 2021 23:33:37 +0200 Subject: [PATCH 01/21] Fix --- check_process | 8 +------- manifest.json | 2 +- scripts/install | 2 +- scripts/upgrade | 12 +----------- 4 files changed, 4 insertions(+), 20 deletions(-) diff --git a/check_process b/check_process index 68361f7..55387ca 100644 --- a/check_process +++ b/check_process @@ -1,11 +1,6 @@ -# See here for more informations -# https://github.com/YunoHost/package_check#syntax-check_process-file - -# Move this file from check_process.default to check_process when you have filled it. - ;; Test complet ; Manifest - domain="domain.tld" (DOMAIN) + domain="domain.tld" password="pass" nextcloud_domain="nextcloud.tld" ; Checks @@ -18,7 +13,6 @@ upgrade=1 backup_restore=1 multi_instance=0 - port_already_use=0 change_url=0 ;;; Options Email= diff --git a/manifest.json b/manifest.json index 937b0fc..6848ea7 100644 --- a/manifest.json +++ b/manifest.json @@ -14,7 +14,7 @@ "email": "rafi59_dev@srvmaison.fr.nf" }, "requirements": { - "yunohost": ">= 4.1.4.3" + "yunohost": ">= 4.2.4" }, "multi_instance": false, "services": [ diff --git a/scripts/install b/scripts/install index 339e753..e8afb1f 100644 --- a/scripts/install +++ b/scripts/install @@ -74,7 +74,7 @@ ynh_app_setting_set --app=$app --key=port --value=$port # config directory which of course doesn't exists and we want to disable SSL # because we're in a reverse proxy context... mkdir -p /etc/loolwsd -ynh_add_config ../conf/loolwsd.xml /etc/loolwsd/loolwsd.xml +ynh_add_config --template="../conf/loolwsd.xml" --destination="/etc/loolwsd/loolwsd.xml" #================================================= # INSTALL DEPENDENCIES diff --git a/scripts/upgrade b/scripts/upgrade index d2a5fe4..4dcafaf 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -27,15 +27,6 @@ nextcloud_domain=$(ynh_app_setting_get --app="$app" --key=nextcloud_domain) #================================================= ynh_script_progression --message="Ensuring downward compatibility..." -# Fix is_public as a boolean value -if [ "$is_public" = "Yes" ]; then - ynh_app_setting_set --app=$app --key=is_public --value=1 - is_public=1 -elif [ "$is_public" = "No" ]; then - ynh_app_setting_set --app=$app --key=is_public --value=0 - is_public=0 -fi - # If db_name doesn't exist, create it if [ -z "$path_url" ]; then path_url="/" @@ -86,7 +77,6 @@ ynh_add_nginx_config ynh_script_progression --message="Upgrading dependencies..." DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) - ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" #================================================= @@ -95,7 +85,7 @@ ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos # UPGRADE CONFIG #================================================= -ynh_add_config "../conf/loolwsd.xml" "/etc/loolwsd/loolwsd.xml" +ynh_add_config --template="../conf/loolwsd.xml" --destination="/etc/loolwsd/loolwsd.xml" #================================================= # GENERIC FINALIZATION From 854048a9e3c4192e4597b978a98da28790425328 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 08:19:34 +0200 Subject: [PATCH 02/21] Fix --- .github/ISSUE_TEMPLATE.md | 55 ++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 16 +++++ doc/.DS_Store | Bin 0 -> 6148 bytes doc/DISCLAIMER.md | 26 +++++++++ ...ollabora_Online_-_versions_integration.png | Bin 0 -> 83855 bytes manifest.json | 14 ++--- pull_request_template.md | 16 ----- scripts/install | 22 ++++--- scripts/remove | 18 ++---- scripts/restore | 12 ++-- scripts/upgrade | 20 +++---- 11 files changed, 133 insertions(+), 66 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 doc/.DS_Store create mode 100644 doc/DISCLAIMER.md create mode 100644 doc/screenshots/Collabora_Online_-_versions_integration.png delete mode 100644 pull_request_template.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..2729a6b --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,55 @@ +--- +name: Bug report +about: When creating a bug report, please use the following template to provide all the relevant information and help debugging efficiently. + +--- + +**How to post a meaningful bug report** +1. *Read this whole template first.* +2. *Determine if you are on the right place:* + - *If you were performing an action on the app from the webadmin or the CLI (install, update, backup, restore, change_url...), you are on the right place!* + - *Otherwise, the issue may be due to the app itself. Refer to its documentation or repository for help.* + - *When in doubt, post here and we will figure it out together.* +3. *Delete the italic comments as you write over them below, and remove this guide.* +--- + +### Describe the bug + +*A clear and concise description of what the bug is.* + +### Context + +- Hardware: *VPS bought online / Old laptop or computer / Raspberry Pi at home / Internet Cube with VPN / Other ARM board / ...* +- YunoHost version: x.x.x +- I have access to my server: *Through SSH | through the webadmin | direct access via keyboard / screen | ...* +- Are you in a special context or did you perform some particular tweaking on your YunoHost instance?: *no / yes* + - If yes, please explain: +- Using, or trying to install package version/branch: +- If upgrading, current package version: *can be found in the admin, or with `yunohost app info $app_id`* + +### Steps to reproduce + +- *If you performed a command from the CLI, the command itself is enough. For example:* + ```sh + sudo yunohost app install the_app + ``` +- *If you used the webadmin, please perform the equivalent command from the CLI first.* +- *If the error occurs in your browser, explain what you did:* + 1. *Go to '...'* + 2. *Click on '...'* + 3. *Scroll down to '...'* + 4. *See error* + +### Expected behavior + +*A clear and concise description of what you expected to happen. You can remove this section if the command above is enough to understand your intent.* + +### Logs + +*When an operation fails, YunoHost provides a simple way to share the logs.* +- *In the webadmin, the error message contains a link to the relevant log page. On that page, you will be able to 'Share with Yunopaste'. If you missed it, the logs of previous operations are also available under Tools > Logs.* +- *In command line, the command to share the logs is displayed at the end of the operation and looks like `yunohost log display [log name] --share`. If you missed it, you can find the log ID of a previous operation using `yunohost log list`.* + +*After sharing the log, please copypaste directly the link provided by YunoHost (to help readability, no need to copypaste the entire content of the log here, just the link is enough...)* + +*If applicable and useful, add screenshots to help explain your problem.* diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..ef70e18 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,16 @@ +## Problem + +- *Description of why you made this PR* + +## Solution + +- *And how do you fix that problem* + +## PR Status + +- [ ] Code finished and ready to be reviewed/tested +- [ ] The fix/enhancement were manually tested (if applicable) + +## Automatic tests + +Automatic tests can be triggered on https://ci-apps-dev.yunohost.org/ *after creating the PR*, by commenting "!testme", "!gogogadgetoci" or "By the power of systemd, I invoke The Great App CI to test this Pull Request!". (N.B. : for this to work you need to be a member of the Yunohost-Apps organization) diff --git a/doc/.DS_Store b/doc/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c90376b56b73b627c519d1a34c5d8c9abb7004dc GIT binary patch literal 6148 zcmeHKyG{c^3>-s>NNG}1?l15Mt0;UyegFv&DbPhqfch%Fi%(bFB<-Yt6!=#P*lfL7ulP#UTPH8)y|&RG>0a|qcjG!J4AG8> j(T=(Cc6=8_S=W5c^IkY62A%n!6ZJFTy2zx!wH5dQ#>Eyj literal 0 HcmV?d00001 diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..1324a48 --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,26 @@ +## Configuration + +**Settings:** +The settings of Collabora are at `https://office.domain.tld/loleaflet/dist/admin/admin.html`. + +- User: admin +- Password: The password set during the installation. (If you forgot it, you can find it again in `/etc/loolwsd/loolwsd.xml`). + +## Connexion to Nextcloud + +If you want to connect with Nextcloud, you have to install the [Collabora Online](https://apps.nextcloud.com/apps/richdocuments) app in Nextcloud, and configure it with the domain of your Collabora installation. + +*:warning: There are several Collabora Online apps. Be sure **not** to install the `Collabora Online - Built-in CODE server` apps, which are a lightwheigt version of this Collabora package. :warning:* + +## Limitations + +**ARM platform not supported.** If you want to run Collabora on Nextcloud, there is a lightweight version of the Collabora server for ARM, called [Collabora Online - Built-in CODE Server (ARM64)](https://apps.nextcloud.com/apps/richdocumentscode_arm64) which can easily connect with the [Collabora Online](https://apps.nextcloud.com/apps/richdocuments) app. + +**CODE has a warning limitation** + +![](https://www.libreoffice.org/assets/Uploads/LibreOffice-Online-limit.png) + +## Additionnal informations + +**Upgrade this package:** +You can use your YunoHost admin interface, or the command line: `sudo yunohost app upgrade collabora -u https://github.com/YunoHost-Apps/collabora_ynh --debug` diff --git a/doc/screenshots/Collabora_Online_-_versions_integration.png b/doc/screenshots/Collabora_Online_-_versions_integration.png new file mode 100644 index 0000000000000000000000000000000000000000..591a9fab4065549adae45828f248e215a8841cfe GIT binary patch literal 83855 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
~CT!(3i9DmBPg; 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 - yunohost firewall disallow TCP $port 2>&1 -fi - #================================================= # SPECIFIC REMOVE #================================================= @@ -75,4 +65,4 @@ ynh_secure_remove --file="/var/log/$app" # END OF SCRIPT #================================================= -ynh_script_progression --message="Removal of $app completed" +ynh_script_progression --message="Removal of $app completed" --last diff --git a/scripts/restore b/scripts/restore index 5078f9f..fd8b94a 100644 --- a/scripts/restore +++ b/scripts/restore @@ -23,7 +23,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading settings..." +ynh_script_progression --message="Loading settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME @@ -33,7 +33,7 @@ path_url=$(ynh_app_setting_get --app=$app --key=path) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= -ynh_script_progression --message="Validating restoration parameters..." +ynh_script_progression --message="Validating restoration parameters..." --weight=1 ynh_webpath_available --domain=$domain --path_url=$path_url \ || ynh_die --message="Path not available: ${domain}${path_url}" @@ -51,7 +51,7 @@ ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # REINSTALL DEPENDENCIES #================================================= -ynh_script_progression --message="Reinstalling dependencies..." +ynh_script_progression --message="Reinstalling dependencies..." --weight=10 DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" @@ -59,7 +59,7 @@ ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos #================================================= # RESTORE CONFIGURATION #================================================= -ynh_script_progression --message="Restoring the configuration..." +ynh_script_progression --message="Restoring the configuration..." --weight=3 ynh_restore_file --origin_path="/etc/loolwsd/loolwsd.xml" @@ -75,7 +75,7 @@ ynh_systemd_action --service_name="loolwsd" --action="restart" --log_path="syste #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading NGINX web server..." +ynh_script_progression --message="Reloading NGINX web server..." --weight=2 ynh_systemd_action --service_name=nginx --action=reload @@ -83,4 +83,4 @@ ynh_systemd_action --service_name=nginx --action=reload # END OF SCRIPT #================================================= -ynh_script_progression --message="Restoration completed for $app" +ynh_script_progression --message="Restoration completed for $app" --last diff --git a/scripts/upgrade b/scripts/upgrade index 4dcafaf..5333c6d 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -12,7 +12,7 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." +ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME @@ -25,7 +25,7 @@ nextcloud_domain=$(ynh_app_setting_get --app="$app" --key=nextcloud_domain) #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= -ynh_script_progression --message="Ensuring downward compatibility..." +ynh_script_progression --message="Ensuring downward compatibility..." --weight=2 # If db_name doesn't exist, create it if [ -z "$path_url" ]; then @@ -42,7 +42,7 @@ fi #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= -ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." +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 @@ -59,22 +59,22 @@ ynh_abort_if_errors #================================================= # STOP SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Stopping a systemd service..." +ynh_script_progression --message="Stopping a systemd service..." --weight=5 ynh_systemd_action --service_name="loolwsd" --action="stop" --log_path="systemd" --line_match="Stopped LibreOffice Online WebSocket Daemon." #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading nginx web server configuration..." +ynh_script_progression --message="Upgrading NGINX web server configuration..." -# Create a dedicated nginx config +# Create a dedicated NGINX config ynh_add_nginx_config #================================================= # UPGRADE DEPENDENCIES #================================================= -ynh_script_progression --message="Upgrading dependencies..." +ynh_script_progression --message="Upgrading dependencies..." --weight=10 DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" @@ -92,14 +92,14 @@ ynh_add_config --template="../conf/loolwsd.xml" --destination="/etc/loolwsd/lool #================================================= # START SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Starting a systemd service..." +ynh_script_progression --message="Starting a systemd service..." --weight=3 ynh_systemd_action --service_name="loolwsd" --action="restart" --log_path="systemd" --line_match="Ready to accept connections" #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading NGINX web server..." +ynh_script_progression --message="Reloading NGINX web server..." --weight=1 ynh_systemd_action --service_name=nginx --action=reload @@ -107,4 +107,4 @@ ynh_systemd_action --service_name=nginx --action=reload # END OF SCRIPT #================================================= -ynh_script_progression --message="Upgrade of $app completed" +ynh_script_progression --message="Upgrade of $app completed" --last From 16f7334424fd757c21c92409ece2e548e30f7b70 Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Sat, 26 Jun 2021 06:19:40 +0000 Subject: [PATCH 03/21] Auto-update README --- README.md | 57 +++++++++++++++++++++-------------------- README_fr.md | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 27 deletions(-) create mode 100644 README_fr.md diff --git a/README.md b/README.md index 4d245de..70a5d16 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,34 @@ -# Collabora for YunoHost + + +# Collabora Online for YunoHost [![Integration level](https://dash.yunohost.org/integration/collabora.svg)](https://dash.yunohost.org/appci/app/collabora) ![](https://ci-apps.yunohost.org/ci/badges/collabora.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/collabora.maintain.svg) -[![Install Collabora with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=collabora) +[![Install Collabora Online with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=collabora) -> *This package allow you to install Collabora 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.* +*[Lire ce readme en français.](./README_fr.md)* + +> *This package allows you to install Collabora Online quickly and simply on a YunoHost server. +If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* ## Overview -[Collabora](https://www.collaboraoffice.com/code/) is an online office suite usable with Nextcloud. +LibreOffice-based online office suite with collaborative editing + +**Shipped version:** 6.4.4~ynh1 + -**Shipped version:** 6.4.4 ## Screenshots -![](https://www.collaboraoffice.com/wp-content/uploads/2019/07/Collabora_Online_-_versions_integration.png) +![](./doc/screenshots/Collabora_Online_-_versions_integration.png) + +## Disclaimers / important information ## Configuration + **Settings:** The settings of Collabora are at `https://office.domain.tld/loleaflet/dist/admin/admin.html`. @@ -24,22 +36,11 @@ The settings of Collabora are at `https://office.domain.tld/loleaflet/dist/admin - Password: The password set during the installation. (If you forgot it, you can find it again in `/etc/loolwsd/loolwsd.xml`). ## Connexion to Nextcloud + If you want to connect with Nextcloud, you have to install the [Collabora Online](https://apps.nextcloud.com/apps/richdocuments) app in Nextcloud, and configure it with the domain of your Collabora installation. *:warning: There are several Collabora Online apps. Be sure **not** to install the `Collabora Online - Built-in CODE server` apps, which are a lightwheigt version of this Collabora package. :warning:* -## Documentation - - * Official documentation: https://www.collaboraoffice.com/code/ - * YunoHost documentation: https://yunohost.org/#/app_collabora - -#### Multi-users support - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/collabora%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/collabora/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/collabora%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/collabora/) - ## Limitations **ARM platform not supported.** If you want to run Collabora on Nextcloud, there is a lightweight version of the Collabora server for ARM, called [Collabora Online - Built-in CODE Server (ARM64)](https://apps.nextcloud.com/apps/richdocumentscode_arm64) which can easily connect with the [Collabora Online](https://apps.nextcloud.com/apps/richdocuments) app. @@ -53,17 +54,17 @@ If you want to connect with Nextcloud, you have to install the [Collabora Online **Upgrade this package:** You can use your YunoHost admin interface, or the command line: `sudo yunohost app upgrade collabora -u https://github.com/YunoHost-Apps/collabora_ynh --debug` -## Links +## Documentation and resources - * Report a bug: https://github.com/YunoHost-Apps/collabora_ynh/issues - * Collabora website: https://www.collaboraoffice.com/ - * YunoHost website: https://yunohost.org/ +* Official app website: https://collaboraoffice.com +* Official user documentation: https://yunohost.org/#/app_collabora +* Official admin documentation: https://www.collaboraoffice.com/code/ +* YunoHost documentation for this app: https://yunohost.org/app_collabora +* Report a bug: https://github.com/YunoHost-Apps/collabora_ynh/issues ---- +## Developer info -## Developers infos - -Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/collabora_ynh/tree/testing). +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/collabora_ynh/tree/testing). To try the testing branch, please proceed like that. ``` @@ -71,3 +72,5 @@ sudo yunohost app install https://github.com/YunoHost-Apps/collabora_ynh/tree/te or sudo yunohost app upgrade collabora -u https://github.com/YunoHost-Apps/collabora_ynh/tree/testing --debug ``` + +**More info regarding app packaging:** https://yunohost.org/packaging_apps \ No newline at end of file diff --git a/README_fr.md b/README_fr.md new file mode 100644 index 0000000..88bb451 --- /dev/null +++ b/README_fr.md @@ -0,0 +1,72 @@ +# Collabora Online pour YunoHost + +[![Niveau d'intégration](https://dash.yunohost.org/integration/collabora.svg)](https://dash.yunohost.org/appci/app/collabora) ![](https://ci-apps.yunohost.org/ci/badges/collabora.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/collabora.maintain.svg) +[![Installer Collabora Online avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=collabora) + +*[Read this readme in english.](./README.md)* +*[Lire ce readme en français.](./README_fr.md)* + +> *Ce package vous permet d'installer Collabora Online rapidement et simplement sur un serveur YunoHost. +Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* + +## Vue d'ensemble + +Suite office en ligne et collaborative, basée sur LibreOffice + +**Version incluse :** 6.4.4~ynh1 + + + +## Captures d'écran + +![](./doc/screenshots/Collabora_Online_-_versions_integration.png) + +## Avertissements / informations importantes + +## Configuration + +**Settings:** +The settings of Collabora are at `https://office.domain.tld/loleaflet/dist/admin/admin.html`. + +- User: admin +- Password: The password set during the installation. (If you forgot it, you can find it again in `/etc/loolwsd/loolwsd.xml`). + +## Connexion to Nextcloud + +If you want to connect with Nextcloud, you have to install the [Collabora Online](https://apps.nextcloud.com/apps/richdocuments) app in Nextcloud, and configure it with the domain of your Collabora installation. + +*:warning: There are several Collabora Online apps. Be sure **not** to install the `Collabora Online - Built-in CODE server` apps, which are a lightwheigt version of this Collabora package. :warning:* + +## Limitations + +**ARM platform not supported.** If you want to run Collabora on Nextcloud, there is a lightweight version of the Collabora server for ARM, called [Collabora Online - Built-in CODE Server (ARM64)](https://apps.nextcloud.com/apps/richdocumentscode_arm64) which can easily connect with the [Collabora Online](https://apps.nextcloud.com/apps/richdocuments) app. + +**CODE has a warning limitation** + +![](https://www.libreoffice.org/assets/Uploads/LibreOffice-Online-limit.png) + +## Additionnal informations + +**Upgrade this package:** +You can use your YunoHost admin interface, or the command line: `sudo yunohost app upgrade collabora -u https://github.com/YunoHost-Apps/collabora_ynh --debug` + +## Documentations et ressources + +* Site officiel de l'app : https://collaboraoffice.com +* Documentation officielle utilisateur : https://yunohost.org/#/app_collabora +* Documentation officielle de l'admin : https://www.collaboraoffice.com/code/ +* Documentation YunoHost pour cette app : https://yunohost.org/app_collabora +* Signaler un bug : https://github.com/YunoHost-Apps/collabora_ynh/issues + +## Informations pour les développeurs + +Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/collabora_ynh/tree/testing). + +Pour essayer la branche testing, procédez comme suit. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/collabora_ynh/tree/testing --debug +ou +sudo yunohost app upgrade collabora -u https://github.com/YunoHost-Apps/collabora_ynh/tree/testing --debug +``` + +**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file From 30c1ced03784bef696de1c6a2efec190fae8eb3c Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 08:27:29 +0200 Subject: [PATCH 04/21] Fix --- doc/DISCLAIMER.md | 5 ----- doc/DISCLAIMER_fr.md | 21 +++++++++++++++++++++ scripts/install | 1 - 3 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 doc/DISCLAIMER_fr.md diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md index 1324a48..2f7dbd4 100644 --- a/doc/DISCLAIMER.md +++ b/doc/DISCLAIMER.md @@ -19,8 +19,3 @@ If you want to connect with Nextcloud, you have to install the [Collabora Online **CODE has a warning limitation** ![](https://www.libreoffice.org/assets/Uploads/LibreOffice-Online-limit.png) - -## Additionnal informations - -**Upgrade this package:** -You can use your YunoHost admin interface, or the command line: `sudo yunohost app upgrade collabora -u https://github.com/YunoHost-Apps/collabora_ynh --debug` diff --git a/doc/DISCLAIMER_fr.md b/doc/DISCLAIMER_fr.md new file mode 100644 index 0000000..1b723d4 --- /dev/null +++ b/doc/DISCLAIMER_fr.md @@ -0,0 +1,21 @@ +## Configuration + +**Paramètres :** +Les paramètres de Collabora sont à `https://office.domain.tld/loleaflet/dist/admin/admin.html`. + +- Utilisateur : administrateur +- Mot de passe : Le mot de passe défini lors de l'installation. (Si vous l'avez oublié, vous pouvez le retrouver dans `/etc/loolwsd/loolwsd.xml`). + +## Connexion à Nextcloud + +Si vous souhaitez vous connecter à Nextcloud, vous devez installer l'application [Collabora Online](https://apps.nextcloud.com/apps/richdocuments) dans Nextcloud, et la configurer avec le domaine de votre installation Collabora. + +* : avertissement : il existe plusieurs applications Collabora Online. Assurez-vous **de ne pas** installer les applications `Collabora Online - Built-in CODE server`, qui sont une version allégée de ce package Collabora. :Attention:* + +## Limites + +**Plateforme ARM non prise en charge.** Si vous souhaitez exécuter Collabora sur Nextcloud, il existe une version allégée du serveur Collabora pour ARM, appelée [Collabora Online - Built-in CODE Server (ARM64)](https://apps.nextcloud.com/apps/richdocumentscode_arm64) qui peut facilement se connecter à l'application [Collabora Online](https://apps.nextcloud.com/apps/richdocuments). + +**CODE a une limitation d'avertissement** + +![](https://www.libreoffice.org/assets/Uploads/LibreOffice-Online-limit.png) diff --git a/scripts/install b/scripts/install index 91c5559..081d0c5 100644 --- a/scripts/install +++ b/scripts/install @@ -62,7 +62,6 @@ ynh_script_progression --message="Finding an available port..." --weight=1 # Find a free port port=$(ynh_find_port --port=9980) - ynh_app_setting_set --app=$app --key=port --value=$port #================================================= From d9b88ef9b10de63733a0454da21925796be3ff9f Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Sat, 26 Jun 2021 06:30:34 +0000 Subject: [PATCH 05/21] Auto-update README --- README.md | 5 ----- README_fr.md | 25 ++++++++++--------------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 70a5d16..579694f 100644 --- a/README.md +++ b/README.md @@ -49,11 +49,6 @@ If you want to connect with Nextcloud, you have to install the [Collabora Online ![](https://www.libreoffice.org/assets/Uploads/LibreOffice-Online-limit.png) -## Additionnal informations - -**Upgrade this package:** -You can use your YunoHost admin interface, or the command line: `sudo yunohost app upgrade collabora -u https://github.com/YunoHost-Apps/collabora_ynh --debug` - ## Documentation and resources * Official app website: https://collaboraoffice.com diff --git a/README_fr.md b/README_fr.md index 88bb451..7b3713b 100644 --- a/README_fr.md +++ b/README_fr.md @@ -25,31 +25,26 @@ Suite office en ligne et collaborative, basée sur LibreOffice ## Configuration -**Settings:** -The settings of Collabora are at `https://office.domain.tld/loleaflet/dist/admin/admin.html`. +**Paramètres :** +Les paramètres de Collabora sont à `https://office.domain.tld/loleaflet/dist/admin/admin.html`. -- User: admin -- Password: The password set during the installation. (If you forgot it, you can find it again in `/etc/loolwsd/loolwsd.xml`). +- Utilisateur : administrateur +- Mot de passe : Le mot de passe défini lors de l'installation. (Si vous l'avez oublié, vous pouvez le retrouver dans `/etc/loolwsd/loolwsd.xml`). -## Connexion to Nextcloud +## Connexion à Nextcloud -If you want to connect with Nextcloud, you have to install the [Collabora Online](https://apps.nextcloud.com/apps/richdocuments) app in Nextcloud, and configure it with the domain of your Collabora installation. +Si vous souhaitez vous connecter à Nextcloud, vous devez installer l'application [Collabora Online](https://apps.nextcloud.com/apps/richdocuments) dans Nextcloud, et la configurer avec le domaine de votre installation Collabora. -*:warning: There are several Collabora Online apps. Be sure **not** to install the `Collabora Online - Built-in CODE server` apps, which are a lightwheigt version of this Collabora package. :warning:* +* : avertissement : il existe plusieurs applications Collabora Online. Assurez-vous **de ne pas** installer les applications `Collabora Online - Built-in CODE server`, qui sont une version allégée de ce package Collabora. :Attention:* -## Limitations +## Limites -**ARM platform not supported.** If you want to run Collabora on Nextcloud, there is a lightweight version of the Collabora server for ARM, called [Collabora Online - Built-in CODE Server (ARM64)](https://apps.nextcloud.com/apps/richdocumentscode_arm64) which can easily connect with the [Collabora Online](https://apps.nextcloud.com/apps/richdocuments) app. +**Plateforme ARM non prise en charge.** Si vous souhaitez exécuter Collabora sur Nextcloud, il existe une version allégée du serveur Collabora pour ARM, appelée [Collabora Online - Built-in CODE Server (ARM64)](https://apps.nextcloud.com/apps/richdocumentscode_arm64) qui peut facilement se connecter à l'application [Collabora Online](https://apps.nextcloud.com/apps/richdocuments). -**CODE has a warning limitation** +**CODE a une limitation d'avertissement** ![](https://www.libreoffice.org/assets/Uploads/LibreOffice-Online-limit.png) -## Additionnal informations - -**Upgrade this package:** -You can use your YunoHost admin interface, or the command line: `sudo yunohost app upgrade collabora -u https://github.com/YunoHost-Apps/collabora_ynh --debug` - ## Documentations et ressources * Site officiel de l'app : https://collaboraoffice.com From 0d83f77ba9908629876c75e7533746ec0db7e479 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 08:39:07 +0200 Subject: [PATCH 06/21] Update remove --- scripts/remove | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/scripts/remove b/scripts/remove index e9e3e6b..f632d0a 100644 --- a/scripts/remove +++ b/scripts/remove @@ -44,11 +44,6 @@ ynh_remove_nginx_config #================================================= # SPECIFIC REMOVE #================================================= -# REMOVE THE CRON FILE -#================================================= - -# Remove a cron file -ynh_secure_remove --file="/etc/cron.d/$app" # Remove a directory securely ynh_secure_remove --file="/etc/apt/sources.list.d/collabora.list" @@ -56,11 +51,6 @@ ynh_secure_remove --file="/etc/apt/sources.list.d/collabora.list" # Remove a directory securely ynh_secure_remove --file="/etc/loolwsd" -# Remove the log files -ynh_secure_remove --file="/var/log/$app" - -#================================================= -# GENERIC FINALIZATION #================================================= # END OF SCRIPT #================================================= From 18c8df547bea17105933454cc962dbfb43b962ef Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 08:40:29 +0200 Subject: [PATCH 07/21] Update install --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 081d0c5..ae738ca 100644 --- a/scripts/install +++ b/scripts/install @@ -107,7 +107,7 @@ ynh_systemd_action --service_name="loolwsd" --action="restart" --log_path="syste #================================================= ynh_script_progression --message="Configuring permissions..." --weight=1 -ynh_permission_update --show_tile="false" +ynh_permission_update --permission="main" --add="visitors" --show_tile="false" #================================================= # RELOAD NGINX From 64ad6b23fc95ccc45f1ab44c28bf35e37e692a77 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 08:51:43 +0200 Subject: [PATCH 08/21] Update install --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index ae738ca..3b7860e 100644 --- a/scripts/install +++ b/scripts/install @@ -81,7 +81,7 @@ ynh_add_config --template="../conf/loolwsd.xml" --destination="/etc/loolwsd/lool ynh_script_progression --message="Installing dependencies..." --weight=10 DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) -ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" +ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" 2>/dev/null #================================================= # NGINX CONFIGURATION From 4d596d4b7e9aa8fdbdb53da85511104e6a3ebdee Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 08:57:38 +0200 Subject: [PATCH 09/21] Update remove --- scripts/remove | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/remove b/scripts/remove index f632d0a..f6739f2 100644 --- a/scripts/remove +++ b/scripts/remove @@ -45,9 +45,6 @@ ynh_remove_nginx_config # SPECIFIC REMOVE #================================================= -# Remove a directory securely -ynh_secure_remove --file="/etc/apt/sources.list.d/collabora.list" - # Remove a directory securely ynh_secure_remove --file="/etc/loolwsd" From 3d7ce637f3db07cc26e092ab8edb487b7a056b3c Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 09:23:07 +0200 Subject: [PATCH 10/21] Fix --- scripts/backup | 6 ++++++ scripts/install | 7 +++++++ scripts/remove | 19 +++++++++++++++++++ scripts/restore | 17 +++++++++++++++-- scripts/upgrade | 7 ++++++- 5 files changed, 53 insertions(+), 3 deletions(-) diff --git a/scripts/backup b/scripts/backup index 5591094..f3d024e 100644 --- a/scripts/backup +++ b/scripts/backup @@ -40,6 +40,12 @@ ynh_print_info --message="Declaring files to be backed up..." ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" +#================================================= +# BACKUP SYSTEMD +#================================================= + +ynh_backup --src_path="/usr/lib/systemd/system/loolwsd.service" + #================================================= # SPECIFIC BACKUP #================================================= diff --git a/scripts/install b/scripts/install index 3b7860e..8b0d851 100644 --- a/scripts/install +++ b/scripts/install @@ -91,6 +91,13 @@ ynh_script_progression --message="Configuring NGINX web server..." --weight=3 # Create a dedicated NGINX config ynh_add_nginx_config +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 + +yunohost service add $app --description="Collabora online office suite" --log="/var/log/$app/$app.log" + #================================================= # GENERIC FINALIZATION #================================================= diff --git a/scripts/remove b/scripts/remove index f6739f2..da00d34 100644 --- a/scripts/remove +++ b/scripts/remove @@ -19,6 +19,25 @@ app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) port=$(ynh_app_setting_get --app=$app --key=port) +#================================================= +# REMOVE SERVICE INTEGRATION IN YUNOHOST +#================================================= + +# 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=1 + 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 --service="loolwsd" + #================================================= # STANDARD REMOVE #================================================= diff --git a/scripts/restore b/scripts/restore index fd8b94a..122a026 100644 --- a/scripts/restore +++ b/scripts/restore @@ -56,6 +56,14 @@ ynh_script_progression --message="Reinstalling dependencies..." --weight=10 DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" +#================================================= +# RESTORE SYSTEMD +#================================================= +ynh_script_progression --message="Restoring the systemd configuration..." --weight=1 + +ynh_restore_file --origin_path="/usr/lib/systemd/system/loolwsd.service" +systemctl enable $app.service --quiet + #================================================= # RESTORE CONFIGURATION #================================================= @@ -63,6 +71,13 @@ ynh_script_progression --message="Restoring the configuration..." --weight=3 ynh_restore_file --origin_path="/etc/loolwsd/loolwsd.xml" +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 + +yunohost service add $app --description="Collabora online office suite" --log="/var/log/$app/$app.log" + #================================================= # START SYSTEMD SERVICE #================================================= @@ -70,8 +85,6 @@ ynh_script_progression --message="Starting a systemd service..." ynh_systemd_action --service_name="loolwsd" --action="restart" --log_path="systemd" --line_match="Ready to accept connections" -#================================================= -# GENERIC FINALIZATION #================================================= # RELOAD NGINX #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 5333c6d..a4614db 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -88,7 +88,12 @@ ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos ynh_add_config --template="../conf/loolwsd.xml" --destination="/etc/loolwsd/loolwsd.xml" #================================================= -# GENERIC FINALIZATION +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 + +yunohost service add $app --description="Collabora online office suite" --log="/var/log/$app/$app.log" + #================================================= # START SYSTEMD SERVICE #================================================= From 84de7996e8298d503495d306ddf55c6de2963cd5 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 09:36:09 +0200 Subject: [PATCH 11/21] fix --- scripts/restore | 2 +- scripts/upgrade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/restore b/scripts/restore index 122a026..cb1341e 100644 --- a/scripts/restore +++ b/scripts/restore @@ -62,7 +62,7 @@ ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos ynh_script_progression --message="Restoring the systemd configuration..." --weight=1 ynh_restore_file --origin_path="/usr/lib/systemd/system/loolwsd.service" -systemctl enable $app.service --quiet +systemctl enable loolwsd.service --quiet #================================================= # RESTORE CONFIGURATION diff --git a/scripts/upgrade b/scripts/upgrade index a4614db..9397210 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -66,7 +66,7 @@ ynh_systemd_action --service_name="loolwsd" --action="stop" --log_path="systemd" #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading NGINX web server configuration..." +ynh_script_progression --message="Upgrading NGINX web server configuration..." --weight=1 # Create a dedicated NGINX config ynh_add_nginx_config From 418a06644af6b2083405c3eed7569c6c5e2c880b Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 09:43:20 +0200 Subject: [PATCH 12/21] Update install --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 8b0d851..c10b7be 100644 --- a/scripts/install +++ b/scripts/install @@ -96,7 +96,7 @@ ynh_add_nginx_config #================================================= ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 -yunohost service add $app --description="Collabora online office suite" --log="/var/log/$app/$app.log" +yunohost service add "loolwsd" --description="Collabora online office suite" --log="/var/log/$app/$app.log" #================================================= # GENERIC FINALIZATION From 0753e8bd93b4b85815dc4a209460201a3ed3a67b Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 09:50:57 +0200 Subject: [PATCH 13/21] Fix --- scripts/backup | 6 ------ scripts/restore | 10 +--------- scripts/upgrade | 2 +- 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/scripts/backup b/scripts/backup index f3d024e..5591094 100644 --- a/scripts/backup +++ b/scripts/backup @@ -40,12 +40,6 @@ ynh_print_info --message="Declaring files to be backed up..." ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" -#================================================= -# BACKUP SYSTEMD -#================================================= - -ynh_backup --src_path="/usr/lib/systemd/system/loolwsd.service" - #================================================= # SPECIFIC BACKUP #================================================= diff --git a/scripts/restore b/scripts/restore index cb1341e..8e0ecee 100644 --- a/scripts/restore +++ b/scripts/restore @@ -56,14 +56,6 @@ ynh_script_progression --message="Reinstalling dependencies..." --weight=10 DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" -#================================================= -# RESTORE SYSTEMD -#================================================= -ynh_script_progression --message="Restoring the systemd configuration..." --weight=1 - -ynh_restore_file --origin_path="/usr/lib/systemd/system/loolwsd.service" -systemctl enable loolwsd.service --quiet - #================================================= # RESTORE CONFIGURATION #================================================= @@ -76,7 +68,7 @@ ynh_restore_file --origin_path="/etc/loolwsd/loolwsd.xml" #================================================= ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 -yunohost service add $app --description="Collabora online office suite" --log="/var/log/$app/$app.log" +yunohost service add "loolwsd" --description="Collabora online office suite" --log="/var/log/$app/$app.log" #================================================= # START SYSTEMD SERVICE diff --git a/scripts/upgrade b/scripts/upgrade index 9397210..d26a96b 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -92,7 +92,7 @@ ynh_add_config --template="../conf/loolwsd.xml" --destination="/etc/loolwsd/lool #================================================= ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 -yunohost service add $app --description="Collabora online office suite" --log="/var/log/$app/$app.log" +yunohost service add "loolwsd" --description="Collabora online office suite" --log="/var/log/$app/$app.log" #================================================= # START SYSTEMD SERVICE From a402b57b4c34d6b67dc6306de618da88c330944d Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 10:32:42 +0200 Subject: [PATCH 14/21] Update restore --- scripts/restore | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/scripts/restore b/scripts/restore index 8e0ecee..dedbafe 100644 --- a/scripts/restore +++ b/scripts/restore @@ -46,6 +46,13 @@ ynh_webpath_available --domain=$domain --path_url=$path_url \ ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" +#================================================= +# RESTORE CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the configuration..." --weight=3 + +ynh_restore_file --origin_path="/etc/loolwsd/loolwsd.xml" + #================================================= # SPECIFIC RESTORATION #================================================= @@ -56,12 +63,7 @@ ynh_script_progression --message="Reinstalling dependencies..." --weight=10 DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" -#================================================= -# RESTORE CONFIGURATION -#================================================= -ynh_script_progression --message="Restoring the configuration..." --weight=3 - -ynh_restore_file --origin_path="/etc/loolwsd/loolwsd.xml" +systemctl daemon-reload #================================================= # INTEGRATE SERVICE IN YUNOHOST From c33697b61f25a0dae72ffdb6c6879830b6f9f391 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 10:55:07 +0200 Subject: [PATCH 15/21] Fix --- scripts/restore | 2 +- scripts/upgrade | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/restore b/scripts/restore index dedbafe..52cae1d 100644 --- a/scripts/restore +++ b/scripts/restore @@ -61,7 +61,7 @@ ynh_restore_file --origin_path="/etc/loolwsd/loolwsd.xml" ynh_script_progression --message="Reinstalling dependencies..." --weight=10 DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) -ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" +ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" 2>/dev/null systemctl daemon-reload diff --git a/scripts/upgrade b/scripts/upgrade index d26a96b..86ba288 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -61,7 +61,7 @@ ynh_abort_if_errors #================================================= ynh_script_progression --message="Stopping a systemd service..." --weight=5 -ynh_systemd_action --service_name="loolwsd" --action="stop" --log_path="systemd" --line_match="Stopped LibreOffice Online WebSocket Daemon." +ynh_systemd_action --service_name="loolwsd" --action="stop" --log_path="systemd" --line_match="Stopped Collabora Online WebSocket Daemon" #================================================= # NGINX CONFIGURATION @@ -77,7 +77,7 @@ ynh_add_nginx_config ynh_script_progression --message="Upgrading dependencies..." --weight=10 DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) -ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" +ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" 2>/dev/null #================================================= # SPECIFIC UPGRADE From aefed9949c6f3d9089390804889404cb89f7d4bd Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 11:00:55 +0200 Subject: [PATCH 16/21] Fix --- scripts/restore | 2 +- scripts/upgrade | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/scripts/restore b/scripts/restore index 52cae1d..99616c7 100644 --- a/scripts/restore +++ b/scripts/restore @@ -63,7 +63,7 @@ ynh_script_progression --message="Reinstalling dependencies..." --weight=10 DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" 2>/dev/null -systemctl daemon-reload +systemctl daemon-reload loolwsd.service #================================================= # INTEGRATE SERVICE IN YUNOHOST diff --git a/scripts/upgrade b/scripts/upgrade index 86ba288..cf43bf1 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -71,6 +71,12 @@ ynh_script_progression --message="Upgrading NGINX web server configuration..." - # Create a dedicated NGINX config ynh_add_nginx_config +#================================================= +# UPGRADE CONFIG +#================================================= + +ynh_add_config --template="../conf/loolwsd.xml" --destination="/etc/loolwsd/loolwsd.xml" + #================================================= # UPGRADE DEPENDENCIES #================================================= @@ -79,14 +85,6 @@ ynh_script_progression --message="Upgrading dependencies..." --weight=10 DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" 2>/dev/null -#================================================= -# SPECIFIC UPGRADE -#================================================= -# UPGRADE CONFIG -#================================================= - -ynh_add_config --template="../conf/loolwsd.xml" --destination="/etc/loolwsd/loolwsd.xml" - #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= From 6aa856cadc2de80a4cfede5d90c3c3583c58f485 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 26 Jun 2021 11:15:02 +0200 Subject: [PATCH 17/21] Update restore --- scripts/restore | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/restore b/scripts/restore index 99616c7..aee7195 100644 --- a/scripts/restore +++ b/scripts/restore @@ -63,8 +63,6 @@ ynh_script_progression --message="Reinstalling dependencies..." --weight=10 DEBIAN_VERSION_NUMBER=$(cat /etc/debian_version | head -n 1 | cut -f1 -d .) ynh_install_extra_app_dependencies --repo="deb https://collaboraoffice.com/repos/CollaboraOnline/CODE-debian${DEBIAN_VERSION_NUMBER} ./ " --package="$pkg_dependencies" --key="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C54D189F4BA284D" 2>/dev/null -systemctl daemon-reload loolwsd.service - #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= From 39940a19f73dd38dcbc0214c431b858c58d3534f Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 29 Jun 2021 12:03:26 +0200 Subject: [PATCH 18/21] Update remove --- scripts/remove | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/remove b/scripts/remove index da00d34..f3867c2 100644 --- a/scripts/remove +++ b/scripts/remove @@ -24,10 +24,10 @@ port=$(ynh_app_setting_get --app=$app --key=port) #================================================= # 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 +if ynh_exec_warn_less yunohost service status "loolwsd" >/dev/null then - ynh_script_progression --message="Removing $app service integration..." --weight=1 - yunohost service remove $app + ynh_script_progression --message="Removing loolwsd service integration..." --weight=1 + yunohost service remove "loolwsd" fi #================================================= From bacfdbafc9cfb40c435ffbc5ab4203bdb016919f Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 29 Jun 2021 15:14:15 +0200 Subject: [PATCH 19/21] Update install --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index c10b7be..1305c61 100644 --- a/scripts/install +++ b/scripts/install @@ -114,7 +114,7 @@ ynh_systemd_action --service_name="loolwsd" --action="restart" --log_path="syste #================================================= ynh_script_progression --message="Configuring permissions..." --weight=1 -ynh_permission_update --permission="main" --add="visitors" --show_tile="false" +ynh_permission_update --permission="main" --show_tile="false" #================================================= # RELOAD NGINX From 0be0f798f163364a4f21438d434ccc5fe68da279 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Wed, 7 Jul 2021 19:47:00 +0200 Subject: [PATCH 20/21] Update install --- scripts/install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/install b/scripts/install index 1305c61..1e85d23 100644 --- a/scripts/install +++ b/scripts/install @@ -96,7 +96,7 @@ ynh_add_nginx_config #================================================= ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 -yunohost service add "loolwsd" --description="Collabora online office suite" --log="/var/log/$app/$app.log" +#yunohost service add "loolwsd" --description="Collabora online office suite" --log="/var/log/$app/$app.log" #================================================= # GENERIC FINALIZATION @@ -114,7 +114,7 @@ ynh_systemd_action --service_name="loolwsd" --action="restart" --log_path="syste #================================================= ynh_script_progression --message="Configuring permissions..." --weight=1 -ynh_permission_update --permission="main" --show_tile="false" +ynh_permission_update --permission="main" --add="visitors" --show_tile="false" #================================================= # RELOAD NGINX From 84ad617b5a00ec804508e93f4f8075ea8699e498 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Wed, 7 Jul 2021 19:50:56 +0200 Subject: [PATCH 21/21] Update install --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 1e85d23..c10b7be 100644 --- a/scripts/install +++ b/scripts/install @@ -96,7 +96,7 @@ ynh_add_nginx_config #================================================= ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 -#yunohost service add "loolwsd" --description="Collabora online office suite" --log="/var/log/$app/$app.log" +yunohost service add "loolwsd" --description="Collabora online office suite" --log="/var/log/$app/$app.log" #================================================= # GENERIC FINALIZATION