mirror of
https://github.com/YunoHost-Apps/wekan_ynh.git
synced 2024-09-03 20:36:09 +02:00
commit
e8ded7548d
14 changed files with 493 additions and 3006 deletions
58
README.md
58
README.md
|
@ -1,19 +1,25 @@
|
||||||
# Wekan for Yunohost
|
# Wekan for Yunohost
|
||||||
|
|
||||||
|
[![Integration level](https://dash.yunohost.org/integration/wekan.svg)](https://dash.yunohost.org/appci/app/wekan)
|
||||||
|
[![Install Wekan with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wekan)
|
||||||
|
|
||||||
|
> *This package allow you to install wekan 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
|
||||||
Wekan is an open-source kanban board (task manager and organizer)
|
Wekan is an open-source kanban board (task manager and organizer)
|
||||||
|
|
||||||
[![Integration level](https://dash.yunohost.org/integration/wekan.svg)](https://dash.yunohost.org/appci/app/wekan)
|
**Shipped version:** 2.09
|
||||||
[![Install Wordpress with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wekan)
|
|
||||||
|
|
||||||
## Screenshot
|
## Screenshots
|
||||||
|
|
||||||
![](screenshot.jpg)
|
![](screenshot.jpg)
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
- This app only works on x86, 64bits architecture ! In particular, it won't work on 32 bit machines or ARM. See the discussion [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/1#issuecomment-401612500). On the long term, [support for ARM64 might happen](https://blog.wekan.team/2018/01/wekan-progress-on-x64-and-arm/index.html)...
|
- This app **only works on x86, 64bits architecture** ! In particular, it won't work on 32 bit machines or ARM. See the discussion [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/1#issuecomment-401612500). On the long term, [support for ARM64 might happen](https://blog.wekan.team/2018/01/wekan-progress-on-x64-and-arm/index.html)...
|
||||||
|
|
||||||
- There is currently no SSO/LDAP integration though it might be integrated at some point in the app, now that it's supported in Meteor/Wekan. c.f. discussion in [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/4). In the meantime, users can create accounts (in fact, they can create infinite number of accounts) manually, and need to login manually specifically in Wekan.
|
- There is currently **no SSO/LDAP integration** though it might be integrated at some point in the app, now that it's supported in Meteor/Wekan. c.f. discussion in [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/4). In the meantime, users can create accounts (in fact, they can create infinite number of accounts) manually, and need to login manually specifically in Wekan.
|
||||||
|
|
||||||
## Infos
|
## Infos
|
||||||
|
|
||||||
|
@ -28,3 +34,45 @@ Wekan is an open-source kanban board (task manager and organizer)
|
||||||
**Private/Public mode:** In private mode, only authorized YunoHost members can access to the wekan.
|
**Private/Public mode:** In private mode, only authorized YunoHost members can access to the wekan.
|
||||||
|
|
||||||
**SSO/LDAP:** SSO and LDAP are not configured.
|
**SSO/LDAP:** SSO and LDAP are not configured.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
First registered user will be admin, and next ones normal users. If you want other admins too, you can change their permission to admin at Wekan Admin Panel.
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
* Official documentation: https://github.com/wekan/wekan/wiki
|
||||||
|
|
||||||
|
## YunoHost specific features
|
||||||
|
|
||||||
|
#### Supported architectures
|
||||||
|
|
||||||
|
* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/wekan%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/wekan/)
|
||||||
|
* ARMv8-A - Not supported
|
||||||
|
* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/wekan%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/wekan/)
|
||||||
|
|
||||||
|
## Limitations
|
||||||
|
|
||||||
|
* Any known limitations.
|
||||||
|
|
||||||
|
## Links
|
||||||
|
|
||||||
|
* Report a bug: https://github.com/YunoHost-Apps/wekan_ynh/issues
|
||||||
|
* App website: https://wekan.github.io/
|
||||||
|
* Github App website: https://github.com/wekan/wekan
|
||||||
|
* YunoHost website: https://yunohost.org/
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Developers info
|
||||||
|
----------------
|
||||||
|
|
||||||
|
**Only if you want to use a testing branch for coding, instead of merging directly into master.**
|
||||||
|
Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/wekan_ynh/tree/testing).
|
||||||
|
|
||||||
|
To try the testing branch, please proceed like that.
|
||||||
|
```
|
||||||
|
sudo yunohost app install https://github.com/YunoHost-Apps/wekan_ynh/tree/testing --debug
|
||||||
|
or
|
||||||
|
sudo yunohost app upgrade wekan -u https://github.com/YunoHost-Apps/wekan_ynh/tree/testing --debug
|
||||||
|
```
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
# See here for more informations
|
|
||||||
# https://github.com/YunoHost/package_check#syntax-check_process-file
|
|
||||||
;; Test complet
|
;; Test complet
|
||||||
; Manifest
|
; Manifest
|
||||||
domain="domain.tld" (DOMAIN)
|
domain="domain.tld" (DOMAIN)
|
||||||
|
@ -22,9 +20,10 @@
|
||||||
Level 1=auto
|
Level 1=auto
|
||||||
Level 2=auto
|
Level 2=auto
|
||||||
Level 3=auto
|
Level 3=auto
|
||||||
# Level 4:
|
# Level 4: If the app supports LDAP and SSOwat, turn level 4 to '1' and add a link to an issue or a part of your code to show it.
|
||||||
|
# If the app does not use LDAP nor SSOwat, and can't use them, turn level 4 to 'na' and explain as well.
|
||||||
|
#LDAP to be implemented in wekan_ynh: https://github.com/wekan/wekan/wiki/LDAP
|
||||||
Level 4=0
|
Level 4=0
|
||||||
# Level 5:
|
|
||||||
Level 5=auto
|
Level 5=auto
|
||||||
Level 6=auto
|
Level 6=auto
|
||||||
Level 7=auto
|
Level 7=auto
|
||||||
|
|
|
@ -5,4 +5,4 @@ SOURCE_SUM=1956dd19f17d76a6d820a15bcf93a3eb12172f9f5cb1dd40d9925b977e8f930d
|
||||||
SOURCE_SUM_PRG=sha256sum
|
SOURCE_SUM_PRG=sha256sum
|
||||||
ARCH_FORMAT=tar.gz
|
ARCH_FORMAT=tar.gz
|
||||||
SOURCE_IN_SUBDIR=true
|
SOURCE_IN_SUBDIR=true
|
||||||
SOURCE_FILENAME=wekan-1.07.tar.gz
|
SOURCE_FILENAME=
|
||||||
|
|
|
@ -7,11 +7,10 @@ After=network.target mongodb.service
|
||||||
Type=simple
|
Type=simple
|
||||||
User=__APP__
|
User=__APP__
|
||||||
Group=__APP__
|
Group=__APP__
|
||||||
ExecStartPre=__NODEJS__
|
|
||||||
Environment="PATH=__ENV_PATH__"
|
Environment="PATH=__ENV_PATH__"
|
||||||
Environment=NODE_ENV=production
|
Environment=NODE_ENV=production
|
||||||
Environment=MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__
|
Environment=MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__
|
||||||
Environment=ROOT_URL=https://__DOMAIN____URI__ PORT=__PORT__
|
Environment=ROOT_URL=https://__DOMAIN_URI__ PORT=__PORT__
|
||||||
WorkingDirectory=__FINALPATH__
|
WorkingDirectory=__FINALPATH__
|
||||||
ExecStart=/opt/node_n/bin/node __FINALPATH__/main.js
|
ExecStart=/opt/node_n/bin/node __FINALPATH__/main.js
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
"name": "Wekan",
|
"name": "Wekan",
|
||||||
"id": "wekan",
|
"id": "wekan",
|
||||||
"packaging_format": 1,
|
"packaging_format": 1,
|
||||||
"version": "1.07~ynh2",
|
|
||||||
"description": {
|
"description": {
|
||||||
"en": "Trello-like kanban",
|
"en": "Trello-like kanban",
|
||||||
"fr": "Un kanban similaire à Trello"
|
"fr": "Un kanban similaire à Trello"
|
||||||
},
|
},
|
||||||
|
"version": "2.09~ynh1",
|
||||||
"url": "https://wekan.io",
|
"url": "https://wekan.io",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"maintainer": {
|
"maintainer": {
|
||||||
|
@ -19,8 +19,7 @@
|
||||||
},
|
},
|
||||||
"multi_instance": true,
|
"multi_instance": true,
|
||||||
"services": [
|
"services": [
|
||||||
"nginx",
|
"nginx"
|
||||||
"mongod"
|
|
||||||
],
|
],
|
||||||
"arguments": {
|
"arguments": {
|
||||||
"install" : [
|
"install" : [
|
||||||
|
|
13
scripts/_common.sh
Normal file
13
scripts/_common.sh
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# PERSONAL HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# EXPERIMENTAL HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# FUTURE OFFICIAL HELPERS
|
||||||
|
#=================================================
|
|
@ -1,217 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
log() {
|
|
||||||
echo "${1}"
|
|
||||||
}
|
|
||||||
|
|
||||||
info() {
|
|
||||||
log "[INFO] ${1}"
|
|
||||||
}
|
|
||||||
|
|
||||||
warn() {
|
|
||||||
log "[WARN] ${1}"
|
|
||||||
}
|
|
||||||
|
|
||||||
err() {
|
|
||||||
log "[ERR] ${1}"
|
|
||||||
}
|
|
||||||
to_logs() {
|
|
||||||
|
|
||||||
# When yunohost --verbose or bash -x
|
|
||||||
if $_ISVERBOSE; then
|
|
||||||
cat
|
|
||||||
else
|
|
||||||
cat > /dev/null
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
read_json () {
|
|
||||||
sudo python3 -c "import sys, json;print(json.load(open('$1'))['$2'])"
|
|
||||||
}
|
|
||||||
|
|
||||||
read_manifest () {
|
|
||||||
if [ -f '../manifest.json' ] ; then
|
|
||||||
read_json '../manifest.json' "$1"
|
|
||||||
else
|
|
||||||
read_json '../settings/manifest.json' "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
abort_if_up_to_date () {
|
|
||||||
version=$(read_json "/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" 'version' 2> /dev/null || echo '20160501-7')
|
|
||||||
last_version=$(read_manifest 'version')
|
|
||||||
if [ "${version}" = "${last_version}" ]; then
|
|
||||||
info "Up-to-date, nothing to do"
|
|
||||||
ynh_die "" 0
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# NODEJS
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
# INFOS
|
|
||||||
# n (Node version management) utilise la variable PATH pour stocker le path de la version de node à utiliser.
|
|
||||||
# C'est ainsi qu'il change de version
|
|
||||||
# ynh_install_nodejs installe la version de nodejs demandée en argument, avec n
|
|
||||||
# ynh_use_nodejs active une version de nodejs dans le script courant
|
|
||||||
# 3 variables sont mises à disposition, et 2 sont stockées dans la config de l'app
|
|
||||||
# - nodejs_path: Le chemin absolu de cette version de node
|
|
||||||
# Utilisé pour des appels directs à node.
|
|
||||||
# - nodejs_version: Simplement le numéro de version de nodejs pour cette application
|
|
||||||
# - nodejs_use_version: Un alias pour charger une version de node dans le shell courant.
|
|
||||||
# Utilisé pour démarrer un service ou un script qui utilise node ou npm
|
|
||||||
# Dans ce cas, c'est $PATH qui contient le chemin de la version de node. Il doit être propagé sur les autres shell si nécessaire.
|
|
||||||
|
|
||||||
n_install_dir="/opt/node_n"
|
|
||||||
node_version_path="/opt/node_n/n/versions/node"
|
|
||||||
# N_PREFIX est le dossier de n, il doit être chargé dans les variables d'environnement pour n.
|
|
||||||
export N_PREFIX="$n_install_dir"
|
|
||||||
|
|
||||||
ynh_use_nodejs () {
|
|
||||||
nodejs_version=$(ynh_app_setting_get $app nodejs_version)
|
|
||||||
|
|
||||||
load_n_path="[[ :$PATH: == *\":$n_install_dir/bin:\"* ]] || PATH=\"$n_install_dir/bin:$PATH\"; N_PREFIX="$n_install_dir""
|
|
||||||
|
|
||||||
nodejs_use_version="$n_install_dir/bin/n -q $nodejs_version"
|
|
||||||
|
|
||||||
# "Load" a version of node
|
|
||||||
eval $load_n_path; $nodejs_use_version
|
|
||||||
|
|
||||||
# Get the absolute path of this version of node
|
|
||||||
nodejs_path="$(n bin $nodejs_version)"
|
|
||||||
|
|
||||||
# Make an alias for node use
|
|
||||||
ynh_node_exec="eval $load_n_path; n use $nodejs_version"
|
|
||||||
}
|
|
||||||
|
|
||||||
ynh_install_nodejs () {
|
|
||||||
# Use n, https://github.com/tj/n to manage the nodejs versions
|
|
||||||
nodejs_version="$1"
|
|
||||||
local n_install_script="https://git.io/n-install"
|
|
||||||
|
|
||||||
# Create $n_install_dir
|
|
||||||
mkdir -p "$n_install_dir"
|
|
||||||
|
|
||||||
# Load n path in PATH
|
|
||||||
CLEAR_PATH="$n_install_dir/bin:$PATH"
|
|
||||||
# Remove /usr/local/bin in PATH in case of node has already setup.
|
|
||||||
PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@')
|
|
||||||
|
|
||||||
# Move an existing node binary, to avoid to block n.
|
|
||||||
test -x /usr/bin/node && mv /usr/bin/node /usr/bin/node_n
|
|
||||||
test -x /usr/bin/npm && mv /usr/bin/npm /usr/bin/npm_n
|
|
||||||
|
|
||||||
# If n is not previously setup, install it
|
|
||||||
n --version > /dev/null 2>&1 || \
|
|
||||||
(curl -sL $n_install_script | N_PREFIX=$N_PREFIX bash -s -- -y - 2>&1 )
|
|
||||||
|
|
||||||
# Modify the default N_PREFIX in n script
|
|
||||||
ynh_replace_string "^N_PREFIX=\${N_PREFIX-.*}$" "N_PREFIX=\${N_PREFIX-$N_PREFIX}" "$n_install_dir/bin/n"
|
|
||||||
|
|
||||||
# Restore /usr/local/bin in PATH
|
|
||||||
PATH=$CLEAR_PATH
|
|
||||||
|
|
||||||
# And replace the old node binary.
|
|
||||||
test -x /usr/bin/node_n && mv /usr/bin/node_n /usr/bin/node
|
|
||||||
test -x /usr/bin/npm_n && mv /usr/bin/npm_n /usr/bin/npm
|
|
||||||
|
|
||||||
# Install the requested version of nodejs
|
|
||||||
n $nodejs_version
|
|
||||||
|
|
||||||
# Find the last "real" version for this major version of node.
|
|
||||||
real_nodejs_version=$(find $node_version_path/$nodejs_version* -maxdepth 0 | sort --version-sort | tail --lines=1)
|
|
||||||
real_nodejs_version=$(basename $real_nodejs_version)
|
|
||||||
|
|
||||||
# Create a symbolic link for this major version. If the file doesn't already exist
|
|
||||||
if [ ! -e "$node_version_path/$nodejs_version" ]
|
|
||||||
then
|
|
||||||
ln --symbolic --force --no-target-directory $node_version_path/$real_nodejs_version $node_version_path/$nodejs_version
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Store the ID of this app and the version of node requested for it
|
|
||||||
echo "$YNH_APP_ID:$nodejs_version" | tee --append "$n_install_dir/ynh_app_version"
|
|
||||||
|
|
||||||
# Store nodejs_version into the config of this app
|
|
||||||
ynh_app_setting_set $app nodejs_version $nodejs_version
|
|
||||||
|
|
||||||
# Build the update script and set the cronjob
|
|
||||||
ynh_cron_upgrade_node
|
|
||||||
|
|
||||||
ynh_use_nodejs
|
|
||||||
}
|
|
||||||
|
|
||||||
ynh_remove_nodejs () {
|
|
||||||
ynh_use_nodejs
|
|
||||||
|
|
||||||
# Remove the line for this app
|
|
||||||
sed --in-place "/$YNH_APP_ID:$nodejs_version/d" "$n_install_dir/ynh_app_version"
|
|
||||||
|
|
||||||
# If none another app uses this version of nodejs, remove it.
|
|
||||||
if ! grep --quiet "$nodejs_version" "$n_install_dir/ynh_app_version"
|
|
||||||
then
|
|
||||||
n rm $nodejs_version
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If none another app uses n, remove n
|
|
||||||
if [ ! -s "$n_install_dir/ynh_app_version" ]
|
|
||||||
then
|
|
||||||
ynh_secure_remove "$n_install_dir"
|
|
||||||
ynh_secure_remove "/usr/local/n"
|
|
||||||
sed --in-place "/N_PREFIX/d" /root/.bashrc
|
|
||||||
rm -f /etc/cron.daily/node_update
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
ynh_cron_upgrade_node () {
|
|
||||||
# Build the update script
|
|
||||||
cat > "$n_install_dir/node_update.sh" << EOF
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
version_path="$node_version_path"
|
|
||||||
n_install_dir="$n_install_dir"
|
|
||||||
|
|
||||||
# Log the date
|
|
||||||
date
|
|
||||||
|
|
||||||
# List all real installed version of node
|
|
||||||
all_real_version="\$(find \$version_path/* -maxdepth 0 -type d | sed "s@\$version_path/@@g")"
|
|
||||||
|
|
||||||
# Keep only the major version number of each line
|
|
||||||
all_real_version=\$(echo "\$all_real_version" | sed 's/\..*\$//')
|
|
||||||
|
|
||||||
# Remove double entries
|
|
||||||
all_real_version=\$(echo "\$all_real_version" | sort --unique)
|
|
||||||
|
|
||||||
# Read each major version
|
|
||||||
while read version
|
|
||||||
do
|
|
||||||
echo "Update of the version \$version"
|
|
||||||
sudo \$n_install_dir/bin/n \$version
|
|
||||||
|
|
||||||
# Find the last "real" version for this major version of node.
|
|
||||||
real_nodejs_version=\$(find \$version_path/\$version* -maxdepth 0 | sort --version-sort | tail --lines=1)
|
|
||||||
real_nodejs_version=\$(basename \$real_nodejs_version)
|
|
||||||
|
|
||||||
# Update the symbolic link for this version
|
|
||||||
sudo ln --symbolic --force --no-target-directory \$version_path/\$real_nodejs_version \$version_path/\$version
|
|
||||||
done <<< "\$(echo "\$all_real_version")"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x "$n_install_dir/node_update.sh"
|
|
||||||
|
|
||||||
# Build the cronjob
|
|
||||||
cat > "/etc/cron.daily/node_update" << EOF
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
$n_install_dir/node_update.sh >> $n_install_dir/node_update.log
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x "/etc/cron.daily/node_update"
|
|
||||||
}
|
|
||||||
|
|
||||||
ynh_version_gt ()
|
|
||||||
{
|
|
||||||
dpkg --compare-versions "$1" gt "$2"
|
|
||||||
}
|
|
|
@ -5,37 +5,66 @@
|
||||||
#=================================================
|
#=================================================
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
|
source ../settings/scripts/_common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# MANAGE SCRIPT FAILURE
|
# MANAGE SCRIPT FAILURE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
|
ynh_clean_setup () {
|
||||||
|
### Remove this function if there's nothing to clean before calling the remove script.
|
||||||
|
true
|
||||||
|
}
|
||||||
# Exit if an error occurs during the execution of the script
|
# Exit if an error occurs during the execution of the script
|
||||||
ynh_abort_if_errors
|
ynh_abort_if_errors
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# LOAD SETTINGS
|
# LOAD SETTINGS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Loading installation settings..."
|
||||||
|
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
final_path=$(ynh_app_setting_get $app final_path)
|
final_path=$(ynh_app_setting_get $app final_path)
|
||||||
domain=$(ynh_app_setting_get $app domain)
|
domain=$(ynh_app_setting_get $app domain)
|
||||||
|
db_name=$(ynh_app_setting_get $app db_name)
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STANDARD BACKUP STEPS
|
# STANDARD BACKUP STEPS
|
||||||
#=================================================
|
#=================================================
|
||||||
# BACKUP OF THE MAIN DIR OF THE APP
|
# BACKUP THE APP MAIN DIR
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Backing up the main app directory..."
|
||||||
|
|
||||||
ynh_backup "$final_path"
|
ynh_backup "$final_path"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# BACKUP THE NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Backing up nginx web server configuration..."
|
||||||
|
|
||||||
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
|
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# BACKUP THE MONGODB DATABASE
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Backing up the MongoDB database..."
|
||||||
|
|
||||||
|
mongodump --db "$db_name" -o "./dump"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SPECIFIC BACKUP
|
||||||
|
#=================================================
|
||||||
|
# BACKUP SYSTEMD
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Backing up systemd configuration..."
|
||||||
|
|
||||||
ynh_backup "/etc/systemd/system/$app.service"
|
ynh_backup "/etc/systemd/system/$app.service"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# BACKUP OF MONGODB
|
# END OF SCRIPT
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
mongodump --db "$app" -o "./dump"
|
ynh_print_info "Backup script completed for $app. (YunoHost will then actually copy those files to the archive)."
|
||||||
|
|
||||||
|
|
196
scripts/install
196
scripts/install
|
@ -1,39 +1,60 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC START
|
# GENERIC START
|
||||||
#=================================================
|
#=================================================
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
source _future.sh
|
|
||||||
|
source _common.sh
|
||||||
source ynh_systemd_action
|
source ynh_systemd_action
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# MANAGE SCRIPT FAILURE
|
# MANAGE SCRIPT FAILURE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
|
ynh_clean_setup () {
|
||||||
|
### Remove this function if there's nothing to clean before calling the remove script.
|
||||||
|
true
|
||||||
|
}
|
||||||
# Exit if an error occurs during the execution of the script
|
# Exit if an error occurs during the execution of the script
|
||||||
ynh_abort_if_errors
|
ynh_abort_if_errors
|
||||||
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RETRIEVE ARGUMENTS FROM THE MANIFEST
|
# RETRIEVE ARGUMENTS FROM THE MANIFEST
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
domain=$YNH_APP_ARG_DOMAIN
|
domain=$YNH_APP_ARG_DOMAIN
|
||||||
path_url=$YNH_APP_ARG_PATH
|
path_url=$YNH_APP_ARG_PATH
|
||||||
is_public=$YNH_APP_ARG_IS_PUBLIC
|
is_public=$YNH_APP_ARG_IS_PUBLIC
|
||||||
|
|
||||||
|
### If it's a multi-instance app, meaning it can be installed several times independently
|
||||||
|
### The id of the app as stated in the manifest is available as $YNH_APP_ID
|
||||||
|
### The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...)
|
||||||
|
### The app instance name is available as $YNH_APP_INSTANCE_NAME
|
||||||
|
### - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample
|
||||||
|
### - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2
|
||||||
|
### - ynhexample__{N} for the subsequent installations, with N=3,4, ...
|
||||||
|
### The app instance name is probably what interests you most, since this is
|
||||||
|
### guaranteed to be unique. This is a good unique identifier to define installation path,
|
||||||
|
### db names, ...
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
|
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Validating installation parameters..."
|
||||||
|
|
||||||
# Check machine architecture (in particular, we don't support ARM and 32bit machines)
|
# Check machine architecture (in particular, we don't support ARM and 32bit machines)
|
||||||
[[ $(uname -m) == "x86_64" ]] || ynh_die "Sorry, but this app can only be installed on a x86, 64 bits machine :("
|
[[ $(uname -m) == "x86_64" ]] || ynh_die "Sorry, but this app can only be installed on a x86, 64 bits machine :("
|
||||||
|
|
||||||
|
### If the app uses nginx as web server (written in HTML/PHP in most cases), the final path should be "/var/www/$app".
|
||||||
|
### If the app provides an internal web server (or uses another application server such as uwsgi), the final path should be "/opt/yunohost/$app"
|
||||||
final_path=/var/www/$app
|
final_path=/var/www/$app
|
||||||
test ! -e "$final_path" || ynh_die "This path already contains a folder"
|
test ! -e "$final_path" || ynh_die "This path already contains a folder"
|
||||||
|
|
||||||
|
# Normalize the url path syntax
|
||||||
path_url=$(ynh_normalize_url_path $path_url)
|
path_url=$(ynh_normalize_url_path $path_url)
|
||||||
|
|
||||||
# Register (book) web path
|
# Register (book) web path
|
||||||
|
@ -42,19 +63,41 @@ ynh_webpath_register $app $domain $path_url
|
||||||
#=================================================
|
#=================================================
|
||||||
# STORE SETTINGS FROM MANIFEST
|
# STORE SETTINGS FROM MANIFEST
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Storing installation settings..."
|
||||||
|
|
||||||
|
ynh_app_setting_set $app domain $domain
|
||||||
|
ynh_app_setting_set $app path $path_url
|
||||||
ynh_app_setting_set $app is_public $is_public
|
ynh_app_setting_set $app is_public $is_public
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# STANDARD MODIFICATIONS
|
||||||
#=================================================
|
#=================================================
|
||||||
# FIND AND OPEN A PORT
|
# FIND AND OPEN A PORT
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Configuring firewall..."
|
||||||
|
|
||||||
|
### Use these lines if you have to open a port for the application
|
||||||
|
### `ynh_find_port` will find the first available port starting from the given port.
|
||||||
|
### If you're not using these lines:
|
||||||
|
### - Remove the section "CLOSE A PORT" in the remove script
|
||||||
|
|
||||||
# Find a free port
|
# Find a free port
|
||||||
port=$(ynh_find_port 8081)
|
port=$(ynh_find_port 8095)
|
||||||
|
# Open this port
|
||||||
|
#ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port
|
||||||
ynh_app_setting_set $app port $port
|
ynh_app_setting_set $app port $port
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# INSTALL DEPENDENCIES
|
# INSTALL DEPENDENCIES
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Installing dependencies..."
|
||||||
|
|
||||||
|
### `ynh_install_app_dependencies` allows you to add any "apt" dependencies to the package.
|
||||||
|
### Those deb packages will be installed as dependencies of this package.
|
||||||
|
### If you're not using this helper:
|
||||||
|
### - Remove the section "REMOVE DEPENDENCIES" in the remove script
|
||||||
|
### - As well as the section "REINSTALL DEPENDENCIES" in the restore script
|
||||||
|
### - And the section "UPGRADE DEPENDENCIES" in the upgrade script
|
||||||
|
|
||||||
ynh_print_info "Installing nodejs ..."
|
ynh_print_info "Installing nodejs ..."
|
||||||
ynh_install_nodejs 8.9.3
|
ynh_install_nodejs 8.9.3
|
||||||
|
@ -63,57 +106,99 @@ ynh_print_info "Installing mongodb dependencies ..."
|
||||||
ynh_install_app_dependencies "mongodb mongodb-server"
|
ynh_install_app_dependencies "mongodb mongodb-server"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
# Start MONGODB
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
ynh_print_info "Setting up Wekan's sources ..."
|
|
||||||
ynh_app_setting_set $app final_path $final_path
|
|
||||||
# Download, check integrity, uncompress and patch the source from app.src
|
|
||||||
# For this app sources are in app subdirectory
|
|
||||||
ynh_setup_source "$final_path"
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# NGINX CONFIGURATION
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
# Create a dedicated nginx config
|
|
||||||
ynh_print_info "Configuring nginx ..."
|
|
||||||
ynh_add_nginx_config
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# CREATE DEDICATED USER
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
# Create a system user
|
|
||||||
ynh_system_user_create $app "$final_path"
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# SPECIFIC SETUP
|
|
||||||
#=================================================
|
|
||||||
# Install wekan dependencies
|
|
||||||
ynh_print_info "Installing npm dependencies ..."
|
|
||||||
chown -R $app $final_path
|
|
||||||
pushd $final_path/programs/server
|
|
||||||
ynh_use_nodejs
|
|
||||||
npm install
|
|
||||||
popd
|
|
||||||
|
|
||||||
# Start mogodb
|
# Start mogodb
|
||||||
ynh_print_info "Starting mongodb ..."
|
ynh_print_info "Starting mongodb ..."
|
||||||
systemctl enable mongodb
|
systemctl enable mongodb
|
||||||
systemctl restart mongodb
|
systemctl restart mongodb
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CREATE A MONGODB DATABASE
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Creating a MongoDB database..."
|
||||||
|
|
||||||
|
### Use these lines if you need a database for the application.
|
||||||
|
### `ynh_mysql_setup_db` will create a database, an associated user and a ramdom password.
|
||||||
|
### The password will be stored as 'mysqlpwd' into the app settings,
|
||||||
|
### and will be available as $db_pwd
|
||||||
|
### If you're not using these lines:
|
||||||
|
### - Remove the section "BACKUP THE MYSQL DATABASE" in the backup script
|
||||||
|
### - Remove also the section "REMOVE THE MYSQL DATABASE" in the remove script
|
||||||
|
### - As well as the section "RESTORE THE MYSQL DATABASE" in the restore script
|
||||||
|
|
||||||
|
db_name=$(ynh_sanitize_dbid $app)
|
||||||
|
ynh_app_setting_set $app db_name $db_name
|
||||||
|
#ynh_mysql_setup_db $db_name $db_name
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Setting up source files..."
|
||||||
|
|
||||||
|
### `ynh_setup_source` is used to install an app from a zip or tar.gz file,
|
||||||
|
### downloaded from an upstream source, like a git repository.
|
||||||
|
### `ynh_setup_source` use the file conf/app.src
|
||||||
|
|
||||||
|
ynh_app_setting_set $app final_path $final_path
|
||||||
|
# Download, check integrity, uncompress and patch the source from app.src
|
||||||
|
ynh_setup_source "$final_path"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Configuring nginx web server..."
|
||||||
|
|
||||||
|
### `ynh_add_nginx_config` will use the file conf/nginx.conf
|
||||||
|
|
||||||
|
# Create a dedicated nginx config
|
||||||
|
ynh_add_nginx_config
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CREATE DEDICATED USER
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Configuring system user..."
|
||||||
|
|
||||||
|
# Create a system user
|
||||||
|
ynh_system_user_create $app "$final_path"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SPECIFIC SETUP
|
||||||
|
#=================================================
|
||||||
|
# INSTALL WEKAN NPM DEPENDENCIES
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Installing wekan npm dependencies ..."
|
||||||
|
|
||||||
|
# Install wekan dependencies
|
||||||
|
chown -R $app $final_path
|
||||||
|
pushd $final_path/programs/server
|
||||||
|
ynh_use_nodejs
|
||||||
|
npm install
|
||||||
|
popd
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# SETUP SYSTEMD
|
# SETUP SYSTEMD
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Configuring a systemd service..."
|
||||||
|
|
||||||
|
### `ynh_systemd_config` is used to configure a systemd script for an app.
|
||||||
|
### It can be used for apps that use sysvinit (with adaptation) or systemd.
|
||||||
|
### Have a look at the app to be sure this app needs a systemd script.
|
||||||
|
### `ynh_systemd_config` will use the file conf/systemd.service
|
||||||
|
### If you're not using these lines:
|
||||||
|
### - You can remove those files in conf/.
|
||||||
|
### - Remove the section "BACKUP SYSTEMD" in the backup script
|
||||||
|
### - Remove also the section "STOP AND REMOVE SERVICE" in the remove script
|
||||||
|
### - As well as the section "RESTORE SYSTEMD" in the restore script
|
||||||
|
### - And the section "SETUP SYSTEMD" in the upgrade script
|
||||||
|
|
||||||
# Create a dedicated systemd config
|
# Create a dedicated systemd config
|
||||||
ynh_print_info "Adding wekan systemd service ..."
|
ynh_print_info "Adding wekan systemd service ..."
|
||||||
ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service"
|
ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service"
|
||||||
ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service"
|
ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service"
|
||||||
ynh_replace_string "__DB_NAME__" "$app" "../conf/systemd.service"
|
ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service"
|
||||||
ynh_replace_string "__URI__" "$path_url" "../conf/systemd.service"
|
|
||||||
ynh_replace_string "__PORT__" "$port" "../conf/systemd.service"
|
ynh_replace_string "__PORT__" "$port" "../conf/systemd.service"
|
||||||
ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service"
|
|
||||||
ynh_add_systemd_config
|
ynh_add_systemd_config
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
|
@ -122,31 +207,46 @@ ynh_add_systemd_config
|
||||||
# SECURE FILES AND DIRECTORIES
|
# SECURE FILES AND DIRECTORIES
|
||||||
#=================================================
|
#=================================================
|
||||||
ynh_print_info "Fixing permissions ..."
|
ynh_print_info "Fixing permissions ..."
|
||||||
|
|
||||||
|
### For security reason, any app should set the permissions to root: before anything else.
|
||||||
|
### Then, if write authorization is needed, any access should be given only to directories
|
||||||
|
### that really need such authorization.
|
||||||
# Set strong right permissions to app files
|
# Set strong right permissions to app files
|
||||||
chown -R $app: "$final_path"
|
chown -R $app: "$final_path"
|
||||||
chmod -R 640 "$final_path"
|
chmod -R 640 "$final_path"
|
||||||
find "$final_path" -type d -print0 | xargs -0 chmod 750
|
find "$final_path" -type d -print0 | xargs -0 chmod 750
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# ADD SERVICE IN ADMIN PANEL
|
# ADVERTISE SERVICE IN ADMIN PANEL
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
|
### `yunohost service add` is a CLI yunohost command to add a service in the admin panel.
|
||||||
|
### You'll find the service in the 'services' section of YunoHost admin panel.
|
||||||
|
### This CLI command would be useless if the app does not have any services (systemd or sysvinit)
|
||||||
|
### If you're not using these lines:
|
||||||
|
### - You can remove these files in conf/.
|
||||||
|
### - Remove the section "REMOVE SERVICE FROM ADMIN PANEL" in the remove script
|
||||||
|
### - As well as the section ADVERTISE SERVICE IN ADMIN PANEL" in the restore script
|
||||||
|
|
||||||
yunohost service add mongodb --log "/var/log/mongodb/mongodb.log"
|
yunohost service add mongodb --log "/var/log/mongodb/mongodb.log"
|
||||||
yunohost service add $app
|
yunohost service add $app
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# SETUP SSOWAT
|
# SETUP SSOWAT
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Configuring SSOwat..."
|
||||||
|
|
||||||
# Make app public if necessary or protect it
|
# Make app public if necessary
|
||||||
if [ $is_public -eq 1 ]
|
if [ $is_public -eq 1 ]
|
||||||
then
|
then
|
||||||
# unprotected_uris allows SSO credentials to be passed anyway.
|
# unprotected_uris allows SSO credentials to be passed anyway.
|
||||||
ynh_app_setting_set "$app" unprotected_uris "/"
|
ynh_app_setting_set $app unprotected_uris "/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RELOAD NGINX
|
# RELOAD NGINX
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Reloading nginx web server..."
|
||||||
|
|
||||||
systemctl reload nginx
|
systemctl reload nginx
|
||||||
|
|
||||||
|
@ -156,3 +256,9 @@ systemctl reload nginx
|
||||||
|
|
||||||
ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Finishing add-custom-html-before-body-end migration"
|
ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Finishing add-custom-html-before-body-end migration"
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# END OF SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_print_info "Installation of $app completed"
|
||||||
|
|
|
@ -1,72 +1,109 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC STARTING
|
# GENERIC START
|
||||||
#=================================================
|
#=================================================
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
source _future.sh
|
|
||||||
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# LOAD SETTINGS
|
# LOAD SETTINGS
|
||||||
#=================================================
|
#=================================================
|
||||||
readonly app=$YNH_APP_INSTANCE_NAME
|
ynh_print_info "Loading installation settings..."
|
||||||
readonly domain=$(ynh_app_setting_get "$app" domain)
|
|
||||||
readonly final_path=$(ynh_app_setting_get "$app" final_path)
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
|
domain=$(ynh_app_setting_get $app domain)
|
||||||
|
port=$(ynh_app_setting_get $app port)
|
||||||
|
db_name=$(ynh_app_setting_get $app db_name)
|
||||||
|
|
||||||
|
final_path=$(ynh_app_setting_get $app final_path)
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STANDARD REMOVE
|
# STANDARD REMOVE
|
||||||
#=================================================
|
#=================================================
|
||||||
# STOP AND REMOVE SERVICE
|
# REMOVE SERVICE FROM ADMIN PANEL
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
ynh_remove_systemd_config
|
# Remove a service from the admin panel, added by `yunohost service add`
|
||||||
|
if yunohost service status | grep -q $app
|
||||||
#=================================================
|
|
||||||
# DISABLE SERVICE IN ADMIN PANEL
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
if yunohost service status | grep -q $app # Test l'existence du service dans Yunohost
|
|
||||||
then
|
then
|
||||||
echo "Remove $app service"
|
ynh_print_info "Removing $app service"
|
||||||
yunohost service remove $app
|
yunohost service remove $app
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# REMOVE DB
|
# STOP AND REMOVE SERVICE
|
||||||
#=================================================
|
#=================================================
|
||||||
mongo $app --eval "db.dropDatabase()"
|
ynh_print_info "Stopping and removing the systemd service"
|
||||||
|
|
||||||
|
# Remove the dedicated systemd config
|
||||||
|
ynh_remove_systemd_config
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# REMOVE THE MONGODB DATABASE
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Removing the MongoDB database"
|
||||||
|
|
||||||
|
# Remove a database if it exists, along with the associated user
|
||||||
|
mongo $db_name --eval "db.dropDatabase()"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# REMOVE DEPENDENCIES
|
# REMOVE DEPENDENCIES
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Removing dependencies"
|
||||||
|
|
||||||
|
# Remove metapackage and its dependencies
|
||||||
ynh_remove_app_dependencies
|
ynh_remove_app_dependencies
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# REMOVE NODEJS
|
# REMOVE NODEJS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Removing nodejs"
|
||||||
|
|
||||||
ynh_remove_nodejs
|
ynh_remove_nodejs
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# REMOVE THE MAIN DIR OF THE APP
|
# REMOVE APP MAIN DIR
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Removing app main directory"
|
||||||
|
|
||||||
ynh_secure_remove "/var/www/$app"
|
# Remove the app directory securely
|
||||||
|
ynh_secure_remove "$final_path"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# REMOVE THE NGINX CONFIGURATION
|
# REMOVE NGINX CONFIGURATION
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Removing nginx web server configuration"
|
||||||
|
|
||||||
|
# Remove the dedicated nginx config
|
||||||
ynh_remove_nginx_config
|
ynh_remove_nginx_config
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC FINALISATION
|
# CLOSE A PORT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
if yunohost firewall list | grep -q "\- $port$"
|
||||||
|
then
|
||||||
|
ynh_print_info "Closing port $port"
|
||||||
|
ynh_exec_warn_less yunohost firewall disallow TCP $port
|
||||||
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC FINALIZATION
|
||||||
#=================================================
|
#=================================================
|
||||||
# REMOVE DEDICATED USER
|
# REMOVE DEDICATED USER
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Removing the dedicated system user"
|
||||||
|
|
||||||
|
# Delete a system user
|
||||||
ynh_system_user_delete $app
|
ynh_system_user_delete $app
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# END OF SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_print_info "Removal of $app completed"
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
#=================================================
|
#=================================================
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
source ../settings/scripts/_future.sh
|
|
||||||
|
source ../settings/scripts/_common.sh
|
||||||
source ../settings/scripts/ynh_systemd_action
|
source ../settings/scripts/ynh_systemd_action
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
@ -13,12 +14,17 @@ source /usr/share/yunohost/helpers
|
||||||
# MANAGE SCRIPT FAILURE
|
# MANAGE SCRIPT FAILURE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
|
ynh_clean_setup () {
|
||||||
|
#### Remove this function if there's nothing to clean before calling the remove script.
|
||||||
|
true
|
||||||
|
}
|
||||||
# Exit if an error occurs during the execution of the script
|
# Exit if an error occurs during the execution of the script
|
||||||
ynh_abort_if_errors
|
ynh_abort_if_errors
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# LOAD SETTINGS
|
# LOAD SETTINGS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Loading settings..."
|
||||||
|
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
|
@ -26,11 +32,13 @@ domain=$(ynh_app_setting_get $app domain)
|
||||||
path_url=$(ynh_app_setting_get $app path)
|
path_url=$(ynh_app_setting_get $app path)
|
||||||
is_public=$(ynh_app_setting_get $app is_public)
|
is_public=$(ynh_app_setting_get $app is_public)
|
||||||
final_path=$(ynh_app_setting_get $app final_path)
|
final_path=$(ynh_app_setting_get $app final_path)
|
||||||
|
db_name=$(ynh_app_setting_get $app db_name)
|
||||||
port=$(ynh_app_setting_get $app final_path)
|
port=$(ynh_app_setting_get $app final_path)
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# CHECK IF THE APP CAN BE RESTORED
|
# CHECK IF THE APP CAN BE RESTORED
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Validating restoration parameters..."
|
||||||
|
|
||||||
ynh_webpath_available $domain $path_url \
|
ynh_webpath_available $domain $path_url \
|
||||||
|| ynh_die "Path not available: ${domain}${path_url}"
|
|| ynh_die "Path not available: ${domain}${path_url}"
|
||||||
|
@ -38,75 +46,81 @@ test ! -d $final_path \
|
||||||
|| ynh_die "There is already a directory: $final_path "
|
|| ynh_die "There is already a directory: $final_path "
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STANDARD RESTORE STEPS
|
# STANDARD RESTORATION STEPS
|
||||||
#=================================================
|
#=================================================
|
||||||
ynh_restore
|
# RESTORE THE NGINX CONFIGURATION
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# CREATE DEDICATED USER
|
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
# Create a system user
|
ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RESTORE THE APP MAIN DIR
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Restoring the app main directory..."
|
||||||
|
|
||||||
|
ynh_restore_file "$final_path"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RECREATE THE DEDICATED USER
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Recreating the dedicated system user..."
|
||||||
|
|
||||||
|
# Create the dedicated user (if not existing)
|
||||||
ynh_system_user_create $app "$final_path"
|
ynh_system_user_create $app "$final_path"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RESTORE USER RIGHTS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
# Restore permissions on app files
|
||||||
|
chown -R $app: "$final_path"
|
||||||
|
chmod -R 640 "$final_path"
|
||||||
|
find "$final_path" -type d -print0 | xargs -0 chmod 750
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# INSTALL DEPENDENCIES
|
# SPECIFIC RESTORATION
|
||||||
#=================================================
|
#=================================================
|
||||||
|
# REINSTALL DEPENDENCIES
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Reinstalling dependencies..."
|
||||||
|
|
||||||
|
# Define and install dependencies
|
||||||
ynh_install_nodejs 8.9.3
|
ynh_install_nodejs 8.9.3
|
||||||
|
|
||||||
# Install mongodb
|
# Install mongodb
|
||||||
ynh_install_app_dependencies "mongodb mongodb-server"
|
ynh_install_app_dependencies "mongodb mongodb-server"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RESTORE DB
|
# RESTORE THE MONGODB DATABASE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Restoring the MongoDB database..."
|
||||||
|
|
||||||
# Start mogodb
|
# Start mogodb
|
||||||
systemctl enable mongodb
|
systemctl enable mongodb
|
||||||
systemctl start mongodb
|
systemctl start mongodb
|
||||||
mongorestore --db $app ./dump/$app
|
mongorestore --db $db_name ./dump/$db_name
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# SPECIFIC SETUP
|
# RESTORE SYSTEMD
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Restoring the systemd configuration..."
|
||||||
|
|
||||||
# Install wekan dependencies
|
ynh_restore_file "/etc/systemd/system/$app.service"
|
||||||
#chown -R $app $final_path
|
systemctl enable $app.service
|
||||||
#pushd $final_path/programs/server
|
|
||||||
#ynh_use_nodejs
|
|
||||||
#npm install
|
|
||||||
#popd
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC FINALIZATION
|
# ADVERTISE SERVICE IN ADMIN PANEL
|
||||||
#=================================================
|
#=================================================
|
||||||
# SECURE FILES AND DIRECTORIES
|
|
||||||
#=================================================
|
|
||||||
# Set strong right permissions to app files
|
|
||||||
chown -R $app: "$final_path"
|
|
||||||
chmod -R 640 "$final_path"
|
|
||||||
find "$final_path" -type d -print0 | xargs -0 chmod 750
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# ADD SERVICE IN ADMIN PANEL
|
|
||||||
#=================================================
|
|
||||||
yunohost service add mongodb --log "/var/log/mongodb/mongodb.log"
|
yunohost service add mongodb --log "/var/log/mongodb/mongodb.log"
|
||||||
yunohost service add $app
|
yunohost service add $app
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# SETUP SSOWAT
|
# GENERIC FINALIZATION
|
||||||
#=================================================
|
|
||||||
|
|
||||||
# Make app public if necessary or protect it
|
|
||||||
if [ $is_public -eq 1 ]
|
|
||||||
then
|
|
||||||
# unprotected_uris allows SSO credentials to be passed anyway.
|
|
||||||
ynh_app_setting_set "$app" unprotected_uris "/"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RELOAD NGINX
|
# RELOAD NGINX
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Reloading nginx web server..."
|
||||||
|
|
||||||
systemctl reload nginx
|
systemctl reload nginx
|
||||||
|
|
||||||
|
@ -116,3 +130,9 @@ systemctl reload nginx
|
||||||
|
|
||||||
ynh_systemd_action --action=start --service_name=$app --log_path="systemd"
|
ynh_systemd_action --action=start --service_name=$app --log_path="systemd"
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# END OF SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_print_info "Restoration completed for $app"
|
||||||
|
|
|
@ -6,13 +6,15 @@
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
source _future.sh
|
source _common.sh
|
||||||
|
source ynh_package_version
|
||||||
source ynh_systemd_action
|
source ynh_systemd_action
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# LOAD SETTINGS
|
# LOAD SETTINGS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Loading installation settings..."
|
||||||
|
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
|
@ -20,11 +22,19 @@ domain=$(ynh_app_setting_get $app domain)
|
||||||
path_url=$(ynh_app_setting_get $app path)
|
path_url=$(ynh_app_setting_get $app path)
|
||||||
is_public=$(ynh_app_setting_get $app is_public)
|
is_public=$(ynh_app_setting_get $app is_public)
|
||||||
final_path=$(ynh_app_setting_get $app final_path)
|
final_path=$(ynh_app_setting_get $app final_path)
|
||||||
|
db_name=$(ynh_app_setting_get $app db_name)
|
||||||
port=$(ynh_app_setting_get $app port)
|
port=$(ynh_app_setting_get $app port)
|
||||||
|
|
||||||
|
if [ -z "$db_name" ]
|
||||||
|
then
|
||||||
|
db_name=$app
|
||||||
|
ynh_app_setting_set "$app" db_name "$db_name"
|
||||||
|
fi
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# Check version
|
# CHECK VERSION
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
abort_if_up_to_date
|
abort_if_up_to_date
|
||||||
# previous function is what defines 'version', more precisely the 'previous version'
|
# previous function is what defines 'version', more precisely the 'previous version'
|
||||||
previous_version="${version}"
|
previous_version="${version}"
|
||||||
|
@ -32,35 +42,42 @@ previous_version="${version}"
|
||||||
#=================================================
|
#=================================================
|
||||||
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
|
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Backing up the app before upgrading (may take a while)..."
|
||||||
|
|
||||||
ynh_backup_before_upgrade # Backup the current version of the app
|
# Backup the current version of the app
|
||||||
|
ynh_backup_before_upgrade
|
||||||
ynh_clean_setup () {
|
ynh_clean_setup () {
|
||||||
ynh_restore_upgradebackup # restore it if the upgrade fails
|
# restore it if the upgrade fails
|
||||||
|
ynh_restore_upgradebackup
|
||||||
}
|
}
|
||||||
ynh_abort_if_errors # Exit if an error occurs during the execution of the script
|
# Exit if an error occurs during the execution of the script
|
||||||
|
ynh_abort_if_errors
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# ENSURE DOWNWARD COMPATIBILITY
|
# ENSURE DOWNWARD COMPATIBILITY
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Ensuring downward compatibility..."
|
||||||
|
|
||||||
if ynh_version_gt "0.45-2" "${previous_version}" ; then
|
if ynh_version_gt "0.45-2" "${previous_version}" ; then
|
||||||
ynh_replace_string "Environment=ROOT_URL=http://127.0.0.1:$port$path_url" "Environment=ROOT_URL=https://$domain$path_url/" "/etc/systemd/system/$app.service"
|
ynh_replace_string "Environment=ROOT_URL=http://127.0.0.1:$port$path_url" "Environment=ROOT_URL=https://$domain$path_url/" "/etc/systemd/system/$app.service"
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ynh_version_gt "0.45-3" "${previous_version}" ; then
|
if ynh_version_gt "0.45-3" "${previous_version}" ; then
|
||||||
yunohost service add $app
|
yunohost service add $app
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ynh_version_gt "0.77-2" "${previous_version}" ; then
|
if ynh_version_gt "0.77-2" "${previous_version}" ; then
|
||||||
ynh_install_nodejs 8.9.3
|
ynh_install_nodejs 8.9.3
|
||||||
|
ynh_use_nodejs
|
||||||
# Create a dedicated systemd config
|
# Create a dedicated systemd config
|
||||||
ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service"
|
ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service"
|
||||||
ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service"
|
ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service"
|
||||||
ynh_replace_string "__DB_NAME__" "$app" "../conf/systemd.service"
|
ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service"
|
||||||
ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service"
|
|
||||||
ynh_replace_string "__PORT__" "$port" "../conf/systemd.service"
|
ynh_replace_string "__PORT__" "$port" "../conf/systemd.service"
|
||||||
ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service"
|
|
||||||
ynh_add_systemd_config
|
ynh_add_systemd_config
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then
|
if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then
|
||||||
|
|
||||||
# Replace mongodb packages
|
# Replace mongodb packages
|
||||||
|
@ -70,50 +87,79 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then
|
||||||
ynh_install_app_dependencies "mongodb mongodb-server"
|
ynh_install_app_dependencies "mongodb mongodb-server"
|
||||||
yunohost service remove mongod
|
yunohost service remove mongod
|
||||||
yunohost service add mongodb --log "/var/log/mongodb/mongodb.log"
|
yunohost service add mongodb --log "/var/log/mongodb/mongodb.log"
|
||||||
|
ynh_use_nodejs
|
||||||
|
|
||||||
# Gotta regen the systemd config because mongodb service name changed
|
# Gotta regen the systemd config because mongodb service name changed
|
||||||
nodejs_version=$(ynh_app_setting_get $app nodejs_version)
|
ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service"
|
||||||
nodejs_use_version="$n_install_dir/bin/n -q $nodejs_version"
|
ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service"
|
||||||
ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service"
|
ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service"
|
||||||
ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service"
|
|
||||||
ynh_replace_string "__DB_NAME__" "$app" "../conf/systemd.service"
|
|
||||||
ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service"
|
|
||||||
ynh_replace_string "__PORT__" "$port" "../conf/systemd.service"
|
ynh_replace_string "__PORT__" "$port" "../conf/systemd.service"
|
||||||
ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service"
|
|
||||||
ynh_add_systemd_config
|
ynh_add_systemd_config
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CHECK THE PATH
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
# Normalize the URL path syntax
|
||||||
|
path_url=$(ynh_normalize_url_path $path_url)
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STANDARD UPGRADE STEPS
|
# STANDARD UPGRADE STEPS
|
||||||
#=================================================
|
#=================================================
|
||||||
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Upgrading source files..."
|
||||||
|
|
||||||
# Download, check integrity, uncompress and patch the source from app.src
|
# Download, check integrity, uncompress and patch the source from app.src
|
||||||
# For this app sources are in app subdirectory
|
|
||||||
ynh_setup_source "$final_path"
|
ynh_setup_source "$final_path"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CREATE DEDICATED USER
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Making sure dedicated system user exists..."
|
||||||
|
|
||||||
|
# Create a dedicated user (if not existing)
|
||||||
|
ynh_system_user_create $app
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC FINALIZATION
|
# GENERIC FINALIZATION
|
||||||
#=================================================
|
#=================================================
|
||||||
# SECURE FILES AND DIRECTORIES
|
# SECURE FILES AND DIRECTORIES
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
# Set strong right permissions to app files
|
# Set permissions on app files
|
||||||
chown -R $app: "$final_path"
|
chown -R $app: "$final_path"
|
||||||
chmod -R 640 "$final_path"
|
chmod -R 640 "$final_path"
|
||||||
find "$final_path" -type d -print0 | xargs -0 chmod 750
|
find "$final_path" -type d -print0 | xargs -0 chmod 750
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# INSTALL WEKAN NPM DEPENDENCIES
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Installing wekan npm dependencies ..."
|
||||||
|
|
||||||
# Relaunch a npm install
|
# Relaunch a npm install
|
||||||
pushd $final_path/programs/server
|
pushd $final_path/programs/server
|
||||||
ynh_use_nodejs
|
ynh_use_nodejs
|
||||||
npm install
|
npm install
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SETUP SSOWAT
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info "Upgrading SSOwat configuration..."
|
||||||
|
|
||||||
|
# Make app public if necessary
|
||||||
|
if [ $is_public -eq 1 ]
|
||||||
|
then
|
||||||
|
# unprotected_uris allows SSO credentials to be passed anyway
|
||||||
|
ynh_app_setting_set $app unprotected_uris "/"
|
||||||
|
fi
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RELOAD NGINX
|
# RELOAD NGINX
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_print_info "Reloading nginx web server..."
|
||||||
|
|
||||||
systemctl reload nginx
|
systemctl reload nginx
|
||||||
|
|
||||||
|
@ -123,3 +169,9 @@ systemctl reload nginx
|
||||||
|
|
||||||
ynh_systemd_action --action=restart --service_name=$app --log_path="systemd"
|
ynh_systemd_action --action=restart --service_name=$app --log_path="systemd"
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# END OF SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_print_info "Upgrade of $app completed"
|
||||||
|
|
26
scripts/ynh_package_version
Normal file
26
scripts/ynh_package_version
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
read_json () {
|
||||||
|
sudo python3 -c "import sys, json;print(json.load(open('$1'))['$2'])"
|
||||||
|
}
|
||||||
|
|
||||||
|
read_manifest () {
|
||||||
|
if [ -f '../manifest.json' ] ; then
|
||||||
|
read_json '../manifest.json' "$1"
|
||||||
|
else
|
||||||
|
read_json '../settings/manifest.json' "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
abort_if_up_to_date () {
|
||||||
|
version=$(read_json "/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" 'version' 2> /dev/null || echo '20160501-7')
|
||||||
|
last_version=$(read_manifest 'version')
|
||||||
|
if [ "${version}" = "${last_version}" ]; then
|
||||||
|
info "Up-to-date, nothing to do"
|
||||||
|
ynh_die "" 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ynh_version_gt ()
|
||||||
|
{
|
||||||
|
dpkg --compare-versions "$1" gt "$2"
|
||||||
|
}
|
Loading…
Reference in a new issue