From 932e99a459d70f72b9017b3951b09d238ea9ec2d Mon Sep 17 00:00:00 2001 From: anmol Date: Mon, 29 Oct 2018 02:37:01 +0530 Subject: [PATCH] Made app compatible with yunohost 3 --- check_process | 39 ++++++++++++++ conf/nginx.conf | 4 +- manifest.json | 23 +++++--- scripts/_common.sh | 13 +++++ scripts/install | 131 ++++++++++++++++++++++++++++++++++++--------- scripts/remove | 45 +++++++++++++++- 6 files changed, 219 insertions(+), 36 deletions(-) create mode 100644 check_process create mode 100644 scripts/_common.sh diff --git a/check_process b/check_process new file mode 100644 index 0000000..8a3848a --- /dev/null +++ b/check_process @@ -0,0 +1,39 @@ +# See here for more information +# 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) + path="/path" (PATH) + admin="john" (USER) + ; Checks + pkg_linter=1 + setup_sub_dir=1 + setup_root=1 + setup_nourl=0 + setup_private=0 + setup_public=0 + upgrade=1 + backup_restore=0 + multi_instance=0 + incorrect_path=1 + port_already_use=1 + change_url=0 +;;; Levels + Level 1=auto + Level 2=auto + Level 3=auto +# 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. + Level 4=0 + Level 5=auto + Level 6=auto + Level 7=auto + Level 8=0 + Level 9=0 + Level 10=0 +;;; Options +Email= +Notification=none diff --git a/conf/nginx.conf b/conf/nginx.conf index 8093da3..909f13d 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,6 +1,6 @@ -location PATHTOCHANGE/ { +location __PATH__ { - proxy_pass https://127.0.0.1:10000/; + proxy_pass https://127.0.0.1:__PORT__/; proxy_redirect off; #Proxy Settings diff --git a/manifest.json b/manifest.json index d771e92..6224c0f 100644 --- a/manifest.json +++ b/manifest.json @@ -5,16 +5,25 @@ "en": "Webmin", "fr": "Webmin" }, - "developer": { - "name": "", - "email": "", - "url": "http://www.webmin.com" + "version": "1.890", + "url": "http://www.webmin.com", + "license": "free", + "maintainer": { + "name": "Anmol Sharma", + "email": "anmol@datamol.org" + }, + "requirements": { + "yunohost": ">= 3.0.0" }, "multi_instance": "false", + "services": [ + "nginx" + ], "arguments": { "install" : [ { "name": "domain", + "type": "domain", "ask": { "en": "Choose a domain for Webmin" }, @@ -22,6 +31,7 @@ }, { "name": "path", + "type": "path", "ask": { "en": "Choose a path for Webmin" }, @@ -30,11 +40,12 @@ }, { "name": "admin", + "type": "user", "ask": { "en": "Choose the Webmin administrator (must be an existing YunoHost user)" }, - "example": "homer" + "example": "johndoe" } ] } -} \ No newline at end of file +} diff --git a/scripts/_common.sh b/scripts/_common.sh new file mode 100644 index 0000000..bb04a03 --- /dev/null +++ b/scripts/_common.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# ============= FUTURE YUNOHOST HELPER ============= +# Delete a file checksum from the app settings +# +# $app should be defined when calling this helper +# +# usage: ynh_remove_file_checksum file +# | arg: file - The file for which the checksum will be deleted +ynh_delete_file_checksum () { + local checksum_setting_name=checksum_${1//[\/ ]/_} # Replace all '/' and ' ' by '_' + ynh_app_setting_delete $app $checksum_setting_name +} \ No newline at end of file diff --git a/scripts/install b/scripts/install index 0e91851..15ad98c 100644 --- a/scripts/install +++ b/scripts/install @@ -1,26 +1,101 @@ #!/bin/bash -# Retrieve arguments -domain=$1 -path=$2 -user=$3 +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Remove trailing "/" for next commands -path=${path%/} +source _common.sh +source /usr/share/yunohost/helpers -# Check user parameter -sudo yunohost user list --json | grep -q "\"username\": \"$user\"" -if [[ ! $? -eq 0 ]]; then - echo "Wrong user" - exit 1 -fi -sudo yunohost app setting webmin admin_user -v $user +#================================================= +# 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 +ynh_abort_if_errors + +#================================================= +# RETRIEVE ARGUMENTS FROM THE MANIFEST +#================================================= + +domain=$YNH_APP_ARG_DOMAIN +path_url=$YNH_APP_ARG_PATH +admin=$YNH_APP_ARG_ADMIN + +### 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 + +# Normalize the url path syntax +path_url=$(ynh_normalize_url_path $path_url) + +# Check web path availability +ynh_webpath_available $domain $path_url +# Register (book) web path +ynh_webpath_register $app $domain $path_url + +#================================================= +# STORE SETTINGS FROM MANIFEST +#================================================= + +ynh_app_setting_set $app domain $domain +ynh_app_setting_set $app path $path_url +ynh_app_setting_set $app admin $admin + +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# FIND AND OPEN A PORT +#================================================= + +### 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 +port=$(ynh_find_port 10000) +# Open this port +yunohost firewall allow --no-upnp TCP $port 2>&1 +ynh_app_setting_set $app port $port + + +#================================================= +# INSTALL 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_install_app_dependencies perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python + +#================================================= +# NGINX CONFIGURATION +#================================================= + +### `ynh_add_nginx_config` will use the file conf/nginx.conf + +# Create a dedicated nginx config +ynh_add_nginx_config -# Check domain/path availability -sudo yunohost app checkurl $domain$path -a webmin -if [[ ! $? -eq 0 ]]; then - exit 1 -fi sudo sh -c "echo 'deb http://download.webmin.com/download/repository sarge contrib' > /etc/apt/sources.list.d/webmin.list" sudo sh -c "echo 'deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib' >> /etc/apt/sources.list.d/webmin.list" @@ -32,14 +107,18 @@ sudo rm jcameron-key.asc sudo apt-get update sudo apt-get install -y webmin +#================================================= +# SETUP SSOWAT +#================================================= + +# Restrict access to admin only +yunohost app addaccess --users=$admin $app - - -sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf -sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/webmin.conf - - -# Reload Nginx and regenerate SSOwat conf +#================================================= +# RELOAD NGINX AND START WEBMIN +#================================================= +systemctl enable webmin +systemctl start webmin sudo service nginx reload -sudo yunohost app ssowatconf + diff --git a/scripts/remove b/scripts/remove index e43a560..cfcd355 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,10 +1,51 @@ #!/bin/bash +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# LOAD SETTINGS +#================================================= + +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get $app domain) +port=$(ynh_app_setting_get $app port) + +#================================================= +# REMOVE DEPENDENCIES +#================================================= + +# Remove metapackage and its dependencies +ynh_remove_app_dependencies + +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= + +# Remove the dedicated nginx config +ynh_remove_nginx_config + +#================================================= +# CLOSE A PORT +#================================================= + +if yunohost firewall list | grep -q "\- $port$" +then + echo "Close port $port" >&2 + yunohost firewall disallow TCP $port 2>&1 +fi + adminuser=$(sudo yunohost app setting webmin admin_user) -sudo delgroup $adminuser root sudo apt-get remove --purge webmin sudo rm -r /etc/apt/sources.list.d/webmin.list sudo rm -f /etc/nginx/conf.d/$domain.d/webmin.conf -sudo service nginx reload +