From 548e6f0b0d5342396800ca3a9d4d9c0946233858 Mon Sep 17 00:00:00 2001 From: Geoff Montel Date: Wed, 2 Oct 2019 13:59:27 +0200 Subject: [PATCH] ShellCheck of the scripts using shellcheck to proofcheck the sanity of the scripts. Note that there are two sourcing failed on example scripts. Best would be to apply shellcheck for a new YEP ? See https://forum.yunohost.org/c/contribute-room/apps-packaging/ topic about this. --- scripts/_common.sh | 2 +- scripts/backup | 12 ++++++------ scripts/change_url | 13 +++++++------ scripts/install | 48 +++++++++++++++++++++++----------------------- scripts/remove | 18 ++++++++--------- scripts/restore | 32 +++++++++++++++---------------- scripts/upgrade | 39 +++++++++++++++++++------------------ 7 files changed, 83 insertions(+), 81 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 8bb05b4..aebfb73 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -5,7 +5,7 @@ #================================================= # dependencies used by the app -pkg_dependencies="deb1 deb2" +export pkg_dependencies="deb1 deb2" #================================================= # PERSONAL HELPERS diff --git a/scripts/backup b/scripts/backup index d985aba..e32783d 100755 --- a/scripts/backup +++ b/scripts/backup @@ -7,7 +7,7 @@ #================================================= #Keep this path for calling _common.sh inside the execution's context of backup and restore scripts -source ../settings/scripts/_common.sh +source _common.sh source /usr/share/yunohost/helpers #================================================= @@ -28,9 +28,9 @@ ynh_script_progression --message="Loading installation settings..." --time --wei app=$YNH_APP_INSTANCE_NAME -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -domain=$(ynh_app_setting_get --app=$app --key=domain) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) +domain=$(ynh_app_setting_get --app="$app" --key=domain) +db_name=$(ynh_app_setting_get --app="$app" --key=db_name) #================================================= # STANDARD BACKUP STEPS @@ -39,7 +39,7 @@ db_name=$(ynh_app_setting_get --app=$app --key=db_name) #================================================= ynh_script_progression --message="Stopping a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" +ynh_systemd_action --service_name="$app" --action="stop" --log_path="/var/log/$app/$app.log" #================================================= # BACKUP THE APP MAIN DIR @@ -104,7 +104,7 @@ ynh_backup --src_path="/etc/cron.d/$app" #================================================= ynh_script_progression --message="Starting a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" +ynh_systemd_action --service_name="$app" --action="start" --log_path="/var/log/$app/$app.log" #================================================= # END OF SCRIPT diff --git a/scripts/change_url b/scripts/change_url index 17a1e41..ca1ec40 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -27,7 +27,8 @@ app=$YNH_APP_INSTANCE_NAME ynh_script_progression --message="Loading installation settings..." --time --weight=1 # Needed for helper "ynh_add_nginx_config" -final_path=$(ynh_app_setting_get --app=$app --key=final_path) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) +export final_path # Add settings here as needed by your application #db_name=$(ynh_app_setting_get --app=$app --key=db_name) @@ -57,7 +58,7 @@ fi #================================================= ynh_script_progression --message="Stopping a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" +ynh_systemd_action --service_name="$app" --action="stop" --log_path="/var/log/$app/$app.log" #================================================= # MODIFY URL IN NGINX CONF @@ -72,8 +73,8 @@ then # Make a backup of the original nginx config file if modified ynh_backup_if_checksum_is_different --file="$nginx_conf_path" # Set global variables for nginx helper - domain="$old_domain" - path_url="$new_path" + export domain="$old_domain" + export path_url="$new_path" # Create a dedicated nginx config ynh_add_nginx_config fi @@ -83,7 +84,7 @@ if [ $change_domain -eq 1 ] then # Delete file checksum for the old conf file location ynh_delete_file_checksum --file="$nginx_conf_path" - mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf + mv "$nginx_conf_path" "/etc/nginx/conf.d/$new_domain.d/$app.conf" # Store file checksum for the new config file location ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" fi @@ -101,7 +102,7 @@ fi #================================================= ynh_script_progression --message="Starting a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" +ynh_systemd_action --service_name="$app" --action="start" --log_path="/var/log/$app/$app.log" #================================================= # RELOAD NGINX diff --git a/scripts/install b/scripts/install index bca2fd3..d72ee41 100755 --- a/scripts/install +++ b/scripts/install @@ -29,7 +29,7 @@ path_url=$YNH_APP_ARG_PATH admin=$YNH_APP_ARG_ADMIN is_public=$YNH_APP_ARG_IS_PUBLIC language=$YNH_APP_ARG_LANGUAGE -password=$YNH_APP_ARG_PASSWORD +#password=$YNH_APP_ARG_PASSWORD # If useful later ? ### 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 @@ -62,18 +62,18 @@ final_path=/var/www/$app test ! -e "$final_path" || ynh_die --message="This path already contains a folder" # Register (book) web path -ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url +ynh_webpath_register --app="$app" --domain="$domain" --path_url="$path_url" #================================================= # STORE SETTINGS FROM MANIFEST #================================================= ynh_script_progression --message="Storing installation settings..." --time --weight=1 -ynh_app_setting_set --app=$app --key=domain --value=$domain -ynh_app_setting_set --app=$app --key=path --value=$path_url -ynh_app_setting_set --app=$app --key=admin --value=$admin -ynh_app_setting_set --app=$app --key=is_public --value=$is_public -ynh_app_setting_set --app=$app --key=language --value=$language +ynh_app_setting_set --app="$app" --key=domain --value="$domain" +ynh_app_setting_set --app="$app" --key=path --value="$path_url" +ynh_app_setting_set --app="$app" --key=admin --value="$admin" +ynh_app_setting_set --app="$app" --key=is_public --value="$is_public" +ynh_app_setting_set --app="$app" --key=language --value="$language" #================================================= # STANDARD MODIFICATIONS @@ -90,8 +90,8 @@ ynh_script_progression --message="Configuring firewall..." --time --weight=1 # Find a free port port=$(ynh_find_port --port=8095) # Open this port -ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port -ynh_app_setting_set --app=$app --key=port --value=$port +ynh_exec_warn_less yunohost firewall allow --no-upnp TCP "$port" +ynh_app_setting_set --app="$app" --key=port --value="$port" #================================================= # INSTALL DEPENDENCIES @@ -106,7 +106,7 @@ ynh_script_progression --message="Installing dependencies..." --time --weight=1 ### - As well as the section "REINSTALL DEPENDENCIES" in the restore script ### - And the section "UPGRADE DEPENDENCIES" in the upgrade script -ynh_install_app_dependencies $pkg_dependencies +ynh_install_app_dependencies "$pkg_dependencies" #================================================= # CREATE A MYSQL DATABASE @@ -122,10 +122,10 @@ ynh_script_progression --message="Creating a MySQL database..." --time --weight= ### - 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 --db_name=$app) +db_name=$(ynh_sanitize_dbid --db_name="$app") db_user=$db_name -ynh_app_setting_set --app=$app --key=db_name --value=$db_name -ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name +ynh_app_setting_set --app="$app" --key=db_name --value="$db_name" +ynh_mysql_setup_db --db_user="$db_user" --db_name="$db_name" #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -136,7 +136,7 @@ ynh_script_progression --message="Setting up source files..." --time --weight=1 ### downloaded from an upstream source, like a git repository. ### `ynh_setup_source` use the file conf/app.src -ynh_app_setting_set --app=$app --key=final_path --value=$final_path +ynh_app_setting_set --app="$app" --key=final_path --value="$final_path" # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$final_path" @@ -156,7 +156,7 @@ ynh_add_nginx_config ynh_script_progression --message="Configuring system user..." --time --weight=1 # Create a system user -ynh_system_user_create --username=$app +ynh_system_user_create --username="$app" #================================================= # PHP-FPM CONFIGURATION @@ -212,11 +212,11 @@ ynh_add_systemd_config ### forms. # Set right permissions for curl install -chown -R $app: $final_path +chown -R "$app": "$final_path" # Set the app as temporarily public for curl call ynh_script_progression --message="Configuring SSOwat..." --time --weight=1 -ynh_app_setting_set --app=$app --key=skipped_uris --value="/" +ynh_app_setting_set --app="$app" --key=skipped_uris --value="/" # Reload SSOwat config yunohost app ssowatconf @@ -228,9 +228,9 @@ ynh_script_progression --message="Finalizing installation..." --time --weight=1 ynh_local_curl "/INSTALL_PATH" "key1=value1" "key2=value2" "key3=value3" # Remove the public access -if [ $is_public -eq 0 ] +if [ "$is_public" -eq 0 ] then - ynh_app_setting_delete --app=$app --key=skipped_uris + ynh_app_setting_delete --app="$app" --key=skipped_uris fi #================================================= @@ -264,7 +264,7 @@ ynh_store_file_checksum --file="$final_path/CONFIG_FILE" ### that really need such authorization. # Set permissions to app files -chown -R root: $final_path +chown -R root: "$final_path" #================================================= # SETUP LOGROTATE @@ -294,7 +294,7 @@ ynh_use_logrotate ### - 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 $app --log "/var/log/$app/$app.log" +yunohost service add "$app" --log "/var/log/$app/$app.log" # if using yunohost version 3.2 or more in the 'manifest.json', a description can be added #yunohost service add $app --description "$app daemon for XXX" --log "/var/log/$app/$app.log" @@ -312,7 +312,7 @@ ynh_script_progression --message="Starting a systemd service..." --time --weight ### - And the section "STOP SYSTEMD SERVICE" and "START SYSTEMD SERVICE" in the change_url script # Start a systemd service -ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" +ynh_systemd_action --service_name="$app" --action="start" --log_path="/var/log/$app/$app.log" #================================================= # SETUP FAIL2BAN @@ -328,10 +328,10 @@ ynh_add_fail2ban_config --logpath="/var/log/nginx/${domain}-error.log" --failreg ynh_script_progression --message="Configuring SSOwat..." --time --weight=1 # Make app public if necessary -if [ $is_public -eq 1 ] +if [ "$is_public" -eq 1 ] then # unprotected_uris allows SSO credentials to be passed anyway. - ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" + ynh_app_setting_set --app="$app" --key=unprotected_uris --value="/" fi #================================================= diff --git a/scripts/remove b/scripts/remove index 2d53976..8eeca7d 100755 --- a/scripts/remove +++ b/scripts/remove @@ -16,11 +16,11 @@ ynh_script_progression --message="Loading installation settings..." --time --wei app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get --app=$app --key=domain) -port=$(ynh_app_setting_get --app=$app --key=port) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) +#domain=$(ynh_app_setting_get --app="$app" --key=domain) If useful? +port=$(ynh_app_setting_get --app="$app" --key=port) +db_name=$(ynh_app_setting_get --app="$app" --key=db_name) db_user=$db_name -final_path=$(ynh_app_setting_get --app=$app --key=final_path) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) #================================================= # STANDARD REMOVE @@ -29,10 +29,10 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # Remove a service from the admin panel, added by `yunohost service add` -if ynh_exec_warn_less yunohost service status $app >/dev/null +if ynh_exec_warn_less yunohost service status "$app" >/dev/null then ynh_script_progression --message="Removing $app service..." --time --weight=1 - yunohost service remove $app + yunohost service remove "$app" fi #================================================= @@ -49,7 +49,7 @@ ynh_remove_systemd_config ynh_script_progression --message="Removing the MySQL database..." --time --weight=1 # Remove a database if it exists, along with the associated user -ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name +ynh_mysql_remove_db --db_user="$db_user" --db_name="$db_name" #================================================= # REMOVE DEPENDENCIES @@ -98,7 +98,7 @@ ynh_remove_logrotate if yunohost firewall list | grep -q "\- $port$" then ynh_script_progression --message="Closing port $port..." - ynh_exec_warn_less yunohost firewall disallow TCP $port + ynh_exec_warn_less yunohost firewall disallow TCP "$port" fi #================================================= @@ -132,7 +132,7 @@ ynh_secure_remove --file="/var/log/$app/" ynh_script_progression --message="Removing the dedicated system user..." --time --weight=1 # Delete a system user -ynh_system_user_delete --username=$app +ynh_system_user_delete --username="$app" #================================================= # END OF SCRIPT diff --git a/scripts/restore b/scripts/restore index 9b68d49..395a34a 100755 --- a/scripts/restore +++ b/scripts/restore @@ -7,7 +7,7 @@ #================================================= #Keep this path for calling _common.sh inside the execution's context of backup and restore scripts -source ../settings/scripts/_common.sh +source _common.sh source /usr/share/yunohost/helpers #================================================= @@ -28,10 +28,10 @@ ynh_script_progression --message="Loading settings..." --time --weight=1 app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get --app=$app --key=domain) -path_url=$(ynh_app_setting_get --app=$app --key=path) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) +domain=$(ynh_app_setting_get --app="$app" --key=domain) +path_url=$(ynh_app_setting_get --app="$app" --key=path) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) +db_name=$(ynh_app_setting_get --app="$app" --key=db_name) db_user=$db_name #================================================= @@ -39,9 +39,9 @@ db_user=$db_name #================================================= ynh_script_progression --message="Validating restoration parameters..." --time --weight=1 -ynh_webpath_available --domain=$domain --path_url=$path_url \ +ynh_webpath_available --domain="$domain" --path_url="$path_url" \ || ynh_die --message="Path not available: ${domain}${path_url}" -test ! -d $final_path \ +test ! -d "$final_path" \ || ynh_die --message="There is already a directory: $final_path " #================================================= @@ -65,14 +65,14 @@ ynh_restore_file --origin_path="$final_path" ynh_script_progression --message="Recreating the dedicated system user..." --time --weight=1 # Create the dedicated user (if not existing) -ynh_system_user_create --username=$app +ynh_system_user_create --username="$app" #================================================= # RESTORE USER RIGHTS #================================================= # Restore permissions on app files -chown -R root: $final_path +chown -R root: "$final_path" #================================================= # RESTORE THE PHP-FPM CONFIGURATION @@ -97,16 +97,16 @@ ynh_systemd_action --action=restart --service_name=fail2ban ynh_script_progression --message="Reinstalling dependencies..." --time --weight=1 # Define and install dependencies -ynh_install_app_dependencies $pkg_dependencies +ynh_install_app_dependencies "$pkg_dependencies" #================================================= # RESTORE THE MYSQL DATABASE #================================================= ynh_script_progression --message="Restoring the MySQL database..." --time --weight=1 -db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) -ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd -ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql +db_pwd=$(ynh_app_setting_get --app="$app" --key=mysqlpwd) +ynh_mysql_setup_db --db_user="$db_user" --db_name="$db_name" --db_pwd="$db_pwd" +ynh_mysql_connect_as --user="$db_user" --password="$db_pwd" --database="$db_name" < ./db.sql #================================================= # RESTORE SYSTEMD @@ -114,20 +114,20 @@ ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./ ynh_script_progression --message="Restoring the systemd configuration..." --time --weight=1 ynh_restore_file --origin_path="/etc/systemd/system/$app.service" -systemctl enable $app.service +systemctl enable "$app.service" #================================================= # ADVERTISE SERVICE IN ADMIN PANEL #================================================= -yunohost service add $app --log "/var/log/$app/$app.log" +yunohost service add "$app" --log "/var/log/$app/$app.log" #================================================= # START SYSTEMD SERVICE #================================================= ynh_script_progression --message="Starting a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" +ynh_systemd_action --service_name="$app" --action="start" --log_path="/var/log/$app/$app.log" #================================================= # RESTORE THE CRON FILE diff --git a/scripts/upgrade b/scripts/upgrade index 243e85b..0694974 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -16,13 +16,14 @@ ynh_script_progression --message="Loading installation settings..." --time --wei app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get --app=$app --key=domain) -path_url=$(ynh_app_setting_get --app=$app --key=path) -admin=$(ynh_app_setting_get --app=$app --key=admin) -is_public=$(ynh_app_setting_get --app=$app --key=is_public) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -language=$(ynh_app_setting_get --app=$app --key=language) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) +domain=$(ynh_app_setting_get --app="$app" --key=domain) +path_url=$(ynh_app_setting_get --app="$app" --key=path) +is_public=$(ynh_app_setting_get --app="$app" --key=is_public) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) +db_name=$(ynh_app_setting_get --app="$app" --key=db_name) +# If used: +#admin=$(ynh_app_setting_get --app="$app" --key=admin) +#language=$(ynh_app_setting_get --app="$app" --key=language) #================================================= # CHECK VERSION @@ -43,23 +44,23 @@ ynh_script_progression --message="Ensuring downward compatibility..." --time --w # Fix is_public as a boolean value if [ "$is_public" = "Yes" ]; then - ynh_app_setting_set --app=$app --key=is_public --value=1 + 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 + 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 "$db_name" ]; then - db_name=$(ynh_sanitize_dbid --db_name=$app) - ynh_app_setting_set --app=$app --key=db_name --value=$db_name + db_name=$(ynh_sanitize_dbid --db_name="$app") + ynh_app_setting_set --app="$app" --key=db_name --value="$db_name" fi # If final_path doesn't exist, create it if [ -z "$final_path" ]; then final_path=/var/www/$app - ynh_app_setting_set --app=$app --key=final_path --value=$final_path + ynh_app_setting_set --app="$app" --key=final_path --value="$final_path" fi #================================================= @@ -86,7 +87,7 @@ ynh_abort_if_errors # instead of /foo .... # If nobody installed your app before 2.7, then you may # safely remove this line -path_url=$(ynh_normalize_url_path --path_url=$path_url) +path_url=$(ynh_normalize_url_path --path_url="$path_url") #================================================= # STANDARD UPGRADE STEPS @@ -95,7 +96,7 @@ path_url=$(ynh_normalize_url_path --path_url=$path_url) #================================================= ynh_script_progression --message="Stopping a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" +ynh_systemd_action --service_name="$app" --action="stop" --log_path="/var/log/$app/$app.log" #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -122,7 +123,7 @@ ynh_add_nginx_config #================================================= ynh_script_progression --message="Upgrading dependencies..." --time --weight=1 -ynh_install_app_dependencies $pkg_dependencies +ynh_install_app_dependencies "$pkg_dependencies" #================================================= # CREATE DEDICATED USER @@ -130,7 +131,7 @@ ynh_install_app_dependencies $pkg_dependencies ynh_script_progression --message="Making sure dedicated system user exists..." --time --weight=1 # Create a dedicated user (if not existing) -ynh_system_user_create --username=$app +ynh_system_user_create --username="$app" #================================================= # PHP-FPM CONFIGURATION @@ -187,7 +188,7 @@ ynh_add_fail2ban_config --logpath="/var/log/nginx/${domain}-error.log" --failreg #================================================= # Set permissions on app files -chown -R root: $final_path +chown -R root: "$final_path" #================================================= # SETUP SSOWAT @@ -198,7 +199,7 @@ ynh_script_progression --message="Upgrading SSOwat configuration..." --time --we if [ $is_public -eq 1 ] then # unprotected_uris allows SSO credentials to be passed anyway - ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" + ynh_app_setting_set --app="$app" --key=unprotected_uris --value="/" fi #================================================= @@ -206,7 +207,7 @@ fi #================================================= ynh_script_progression --message="Starting a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" +ynh_systemd_action --service_name="$app" --action="start" --log_path="/var/log/$app/$app.log" #================================================= # RELOAD NGINX