diff --git a/README.md b/README.md index 2a7b1d3..fcb88c9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ # Shell In A Box for YunoHost -https://code.google.com/p/shellinabox/ +Shell In A Box implements a web server that can export arbitrary command line tools to a web based terminal emulator. This emulator is accessible to any JavaScript and CSS enabled web browser and does not require any additional browser plugins. Most typically, login shells would be exported this way: + +Source: [code.google.com/shellinabox/](https://code.google.com/p/shellinabox/) + +### Install + +`$ sudo yunohost app install https://github.com/YunoHost-Apps/shellinabox_ynh.git` + +### Update + +`$ sudo yunohost app upgrade --verbose spip -u https://github.com/YunoHost-Apps/shellinabox_ynh.git` \ No newline at end of file diff --git a/manifest.json b/manifest.json index 580b437..c2e6528 100644 --- a/manifest.json +++ b/manifest.json @@ -2,6 +2,8 @@ "name": "Shell In A Box", "id": "shellinabox", "packaging_format": 1, + "version": "1.1.0", + "license": "free", "requirements": { "yunohost": ">> 2.3.15" }, @@ -14,7 +16,7 @@ "name": "kload", "email": "kload@kload.fr" }, - "multi_instance": "false", + "multi_instance": false, "services": [ "nginx", "shellinabox" diff --git a/scripts/backup b/scripts/backup index 383377c..9c4a1f5 100644 --- a/scripts/backup +++ b/scripts/backup @@ -1,14 +1,15 @@ #!/bin/bash -# causes the shell to exit if any subcommand or pipeline returns a non-zero status -set -e +# Exit on command errors and treat unset variables as an error +set -eu # Source YNH helpers . /usr/share/yunohost/helpers -app=${!#} +# Get multi-instances specific variables +app=$YNH_APP_INSTANCE_NAME -domain=$(sudo yunohost app setting $app domain) +domain=$(ynh_app_setting_get "$app" domain) # Backup directory location for the app from where the script is executed and # which will be compressed afterward @@ -16,4 +17,5 @@ backup_dir=$YNH_APP_BACKUP_DIR # Copy the conf files sudo mkdir -p ./conf +ynh_backup "/etc/default/${app}" "./conf/default_${app}" ynh_backup "/etc/nginx/conf.d/${domain}.d/${app}.conf" ./conf/nginx.conf \ No newline at end of file diff --git a/scripts/install b/scripts/install index 96f0382..5db480b 100644 --- a/scripts/install +++ b/scripts/install @@ -1,18 +1,23 @@ #!/bin/bash -set -e +# Exit on command errors and treat unset variables as an error +set -eu + +source /usr/share/yunohost/helpers # Source app helpers # Retrieve arguments -domain=$1 -path=$2 +domain=$YNH_APP_ARG_DOMAIN +path=$YNH_APP_ARG_PATH + +app=$YNH_APP_INSTANCE_NAME # Check domain/path availability -sudo yunohost app checkurl $domain$path -a shellinabox \ - || (echo "Path not available: $domain$path" && exit 1) +sudo yunohost app checkurl "${domain}${path}" -a "$app" \ + || ynh_die "Path not available: ${domain}${path}" # Check port availability sudo yunohost app checkport 4200 \ - || (echo "Port not available: 4200" && exit 1) + || ynh_die "Port not available: 4200" # Remove trailing "/" for next commands if [[ ! "$path" == "/" ]]; then @@ -22,6 +27,7 @@ fi sudo apt-get update -qq sudo apt-get install shellinabox -y -qq +# Add service into YunoHost sudo yunohost service add shellinabox # Copy shellinabox default configuration and restart @@ -31,4 +37,4 @@ sudo service shellinabox restart # Configure Nginx and reload sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/shellinabox.conf -sudo service nginx reload +sudo systemctl reload nginx diff --git a/scripts/remove b/scripts/remove index 67d585a..d48d9f2 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,23 +1,29 @@ #!/bin/bash -set -e +# Exit on command errors and treat unset variables as an error +set -u + +# Source app helpers +source /usr/share/yunohost/helpers + +# Get multi-instances specific variables +app=$YNH_APP_INSTANCE_NAME # Retrieve arguments -domain=$(sudo yunohost app setting shellinabox domain) -path=$(sudo yunohost app setting shellinabox path) +domain=$(ynh_app_setting_get "$app" domain) +path=$(ynh_app_setting_get "$app" path) # Stop and remove shellinabox -sudo service shellinabox stop || echo "ShellInABox already stopped" +sudo systemctl stop shellinabox || echo "ShellInABox already stopped" sudo apt-get remove --purge -y -qq shellinabox || echo "ShellInABox already uninstalled" -# Remove Shell In A Box configuration -sudo rm -f /etc/default/shellinabox - # Remove service sudo yunohost service remove shellinabox +# Remove Shell In A Box configuration +sudo rm -f "/etc/default/${app}" # Remove Nginx proxy configuration -sudo rm -f /etc/nginx/conf.d/$domain.d/shellinabox.conf +[[ -n $domain ]] && sudo rm -f "/etc/nginx/conf.d/${domain}.d/${app}.conf" # Restart nginx -sudo service nginx reload +sudo systemctl reload nginx diff --git a/scripts/restore b/scripts/restore index 9844c5f..e78bdf4 100644 --- a/scripts/restore +++ b/scripts/restore @@ -1,34 +1,59 @@ #!/bin/bash # causes the shell to exit if any subcommand or pipeline returns a non-zero status -set -e +set -eu + +# Source app helpers +source /usr/share/yunohost/helpers + +# Get multi-instances specific variables +app=$YNH_APP_INSTANCE_NAME # Retrieve arguments -app=${!#} - -domain=$(sudo yunohost app setting $app domain) -path=$(sudo yunohost app setting $app path) +domain=$(ynh_app_setting_get "$app" domain) +path=$(ynh_app_setting_get "$app" path) # Remove trailing slash to path path=${path%/} # Check domain/path availability -sudo yunohost app checkurl $domain$path -a $app \ - || (echo "Path not available: $domain$path" && exit 1) +sudo yunohost app checkurl "${domain}${path}" -a "$app" \ + || ynh_die "Path not available: ${domain}${path}" # Check port availability sudo yunohost app checkport 4200 \ - || (echo "Port not available: 4200" && exit 1) + || ynh_die "Port not available: 4200" # Check configuration files -NGINX_CONF="/etc/nginx/conf.d/${domain}.d/${app}.conf" -[[ -f $NGINX_CONF ]] && die \ -"The NGINX configuration already exists at '${NGINX_CONF}'. - You should safely delete it before restoring this app." +nginx_conf="/etc/nginx/conf.d/${domain}.d/${app}.conf" +if [ -f $nginx_conf ]; then + ynh_die "The NGINX configuration already exists at '${nginx_conf}'. + You should safely delete it before restoring this app." +fi +shellinabox_conf="/etc/default/${app}" +if [ -f $shellinabox_conf ]; then + ynh_die "The shellinabox configuration already exists at '${shellinabox_conf}'. + You should safely delete it before restoring this app." +fi + +# if shellainbox is installed +shellinabox_bin="/usr/bin/shellinaboxd" +if [ -f $shellinabox_bin ]; then + ynh_die "Good! The shellinabox is installed" +else + sudo apt-get update -qq + sudo apt-get install shellinabox -y -qq + + sudo cp -a "./conf/default_${app}" "${shellinabox_conf}" + + # Add service into YunoHost + sudo yunohost service add shellinabox + sudo service shellinabox restart +fi # Restore configuration files -sudo cp -a ./conf/nginx.conf "$NGINX_CONF" +sudo cp -a ./conf/nginx.conf "${nginx_conf}" -# Reload Nginx and regenerate SSOwat conf -sudo service nginx reload +# Reload service +sudo systemctl reload nginx sudo yunohost app ssowatconf diff --git a/scripts/upgrade b/scripts/upgrade index edde8f9..c8b336f 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,10 +1,17 @@ #!/bin/bash -set -e +# Exit on command errors and treat unset variables as an error +set -eu + +# Source app helpers +source /usr/share/yunohost/helpers + +# Get multi-instances specific variables +app=$YNH_APP_INSTANCE_NAME # Retrieve arguments -domain=$(sudo yunohost app setting shellinabox domain) -path=$(sudo yunohost app setting shellinabox path) +domain=$(ynh_app_setting_get "$app" domain) +path=$(ynh_app_setting_get "$app" path) # Remove trailing "/" for next commands if [[ ! "$path" == "/" ]]; then @@ -21,4 +28,4 @@ sudo service shellinabox restart # Configure Nginx and reload sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/shellinabox.conf -sudo service nginx reload +sudo systemctl reload nginx