From d85016c28adbdc8e91ef2dc19fec666ee960c7fe Mon Sep 17 00:00:00 2001 From: Yalh Date: Wed, 23 Jan 2019 02:06:01 +0100 Subject: [PATCH] Apply example_ynh on install --- scripts/install | 265 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 211 insertions(+), 54 deletions(-) diff --git a/scripts/install b/scripts/install index b7825f4..007a0f3 100755 --- a/scripts/install +++ b/scripts/install @@ -10,11 +10,14 @@ source _common.sh source ynh_send_readme_to_admin source /usr/share/yunohost/helpers - #================================================= # 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 @@ -25,54 +28,58 @@ ynh_abort_if_errors domain=$YNH_APP_ARG_DOMAIN path_url="/" admin=$YNH_APP_ARG_ADMIN -admin_email=$(ynh_user_get_info $admin 'mail') -admin_name=$(ynh_user_get_info $admin 'firstname') -admin_pass_reset_url="" is_public=$YNH_APP_ARG_IS_PUBLIC -random_key=$(ynh_random 64) name=$YNH_APP_ARG_NAME registration=$YNH_APP_ARG_REGISTRATION cache=$YNH_APP_ARG_CACHE size=$YNH_APP_ARG_SIZE +admin_email=$(ynh_user_get_info $admin 'mail') +admin_name=$(ynh_user_get_info $admin 'firstname') +random_key=$(ynh_random 64) +admin_pass_reset_url="" -# This is 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 you are interested the most, since this is -# guaranteed to be unique. This is a good unique identifier to define installation path, -# db names, ... +### 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 #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= +### 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 test ! -e "$final_path" || ynh_die "This path already contains a folder" -# Check web path availability -ynh_webpath_available "$domain" "$path_url" +# Normalize the url path syntax +path_url=$(ynh_normalize_url_path $path_url) + # Register (book) web path -ynh_webpath_register "$app" "$domain" "$path_url" +ynh_webpath_register $app $domain $path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= -ynh_app_setting_set "$app" domain "$domain" -ynh_app_setting_set "$app" admin_email "$admin_email" -ynh_app_setting_set "$app" is_public "$is_public" -ynh_app_setting_set "$app" random_key "$random_key" -ynh_app_setting_set "$app" admin "$admin" +ynh_app_setting_set $app domain $domain +ynh_app_setting_set $app path $path_url +ynh_app_setting_set $app admin $admin +ynh_app_setting_set $app is_public $is_public ynh_app_setting_set "$app" name "$name" ynh_app_setting_set "$app" registration "$registration" ynh_app_setting_set "$app" cache "$cache" ynh_app_setting_set "$app" size "$size" +ynh_app_setting_set "$app" admin_email "$admin_email" ynh_app_setting_set "$app" admin_name "$admin_name" +ynh_app_setting_set "$app" random_key "$random_key" #================================================= # STANDARD MODIFICATIONS @@ -80,17 +87,28 @@ ynh_app_setting_set "$app" admin_name "$admin_name" # 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 4000) - # Open this port -yunohost firewall allow Both "$port" 2>&1 -ynh_app_setting_set "$app" port "$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 + # Add erlang for Debian Jessie if [ "$(lsb_release --codename --short)" == "jessie" ]; then @@ -107,10 +125,16 @@ sudo rm erlang_solutions.asc ynh_install_app_dependencies git build-essential postgresql postgresql-contrib openssl g++ apt-transport-https erlang-inets elixir erlang-dev erlang-parsetools erlang-xmerl erlang-tools #================================================= -# DATABASE SETUP +# CREATE A POSTGRESQL DATABASE #================================================= -# Create postgresql database +### Use these lines if you need a database for the application. +### `ynh_psql_test_if_first_run` will create a master password and set up global settings. +### If you're not using these lines: +### - Remove the section "BACKUP THE POSTGRESQL DATABASE" in the backup script +### - Remove also the section "REMOVE THE POSTGRESQL DATABASE" in the remove script +### - As well as the section "RESTORE THE POSTGRESQL DATABASE" in the restore script + db_name="${app}" db_pwd=$(ynh_string_random 30) ynh_app_setting_set "$app" psql_db "$db_name" @@ -127,25 +151,24 @@ ynh_psql_execute_as_root "\connect $db_name CREATE EXTENSION IF NOT EXISTS unaccent;CREATE EXTENSION IF NOT EXISTS citext;" #================================================= -# CREATE DEDICATED USER +# DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -# Create a system user -ynh_system_user_create "$app" "$final_path" +### `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 -#================================================= -# DOWNLOAD, CHECK AND UNPACK PLEROMA SOURCE -#================================================= - -ynh_app_setting_set "$app" final_path "$final_path" +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" git clone https://git.pleroma.social/pleroma/pleroma "$final_path/$app" - #================================================= # NGINX CONFIGURATION #================================================= +### `ynh_add_nginx_config` will use the file conf/nginx.conf + # Create a dedicated nginx config ynh_add_nginx_config if [ $cache -eq 1 ] @@ -160,6 +183,37 @@ then ynh_store_file_checksum "/etc/nginx/conf.d/$domain.d/$app.conf" fi +#================================================= +# CREATE DEDICATED USER +#================================================= + +# Create a system user +ynh_system_user_create "$app" "$final_path" + +#================================================= +# PHP-FPM CONFIGURATION +#================================================= + +### `ynh_add_fpm_config` is used to set up a PHP config. +### You can remove it if your app doesn't use PHP. +### `ynh_add_fpm_config` will use the files conf/php-fpm.conf and conf/php-fpm.ini +### If you're not using these lines: +### - You can remove these files in conf/. +### - Remove the section "BACKUP THE PHP-FPM CONFIGURATION" in the backup script +### - Remove also the section "REMOVE PHP-FPM CONFIGURATION" in the remove script +### - As well as the section "RESTORE THE PHP-FPM CONFIGURATION" in the restore script +### With the reload at the end of the script. +### - And the section "PHP-FPM CONFIGURATION" in the upgrade script + +# Create a dedicated php-fpm config +ynh_add_fpm_config + +#================================================= +# SPECIFIC SETUP +#================================================= +# ... +#================================================= + #================================================= # MODIFY A CONFIG FILE #================================================= @@ -209,34 +263,137 @@ admin_pass_reset_url=$( cd $final_path/$app && sudo -u "$app" MIX_ENV=prod mix p ( cd $final_path/$app && sudo -u "$app" MIX_ENV=prod mix pleroma.user set "$admin" --admin ) #================================================= -# SETUP SSOWAT +# SETUP SYSTEMD #================================================= -if [ "$is_public" -eq 0 ] -then # Remove the public access - ynh_app_setting_delete "$app" skipped_uris -fi -# 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 - -# Give permisiion to the final_path -chown -R "$app":"$app" "$final_path" +### `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 ynh_add_systemd_config -systemctl enable "$app" -systemctl start "$app" -sleep 30 + +#================================================= +# SETUP APPLICATION WITH CURL +#================================================= + +### Use these lines only if the app installation needs to be finalized through +### web forms. We generally don't want to ask the final user, +### so we're going to use curl to automatically fill the fields and submit the +### forms. + +# Set right permissions for curl install +#chown -R $app: $final_path + +# Set the app as temporarily public for curl call +#ynh_app_setting_set $app skipped_uris "/" +# Reload SSOwat config +#yunohost app ssowatconf + +# Reload Nginx +#systemctl reload nginx + +# Installation with curl +#ynh_local_curl "/INSTALL_PATH" "key1=value1" "key2=value2" "key3=value3" + +# Remove the public access +#if [ $is_public -eq 0 ] +#then +# ynh_app_setting_delete $app skipped_uris +#fi + +#================================================= +# MODIFY A CONFIG FILE +#================================================= + +### `ynh_replace_string` is used to replace a string in a file. +### (It's compatible with sed regular expressions syntax) + +#ynh_replace_string "match_string" "replace_string" "$final_path/CONFIG_FILE" + +#================================================= +# STORE THE CONFIG FILE CHECKSUM +#================================================= + +### `ynh_store_file_checksum` is used to store the checksum of a file. +### That way, during the upgrade script, by using `ynh_backup_if_checksum_is_different`, +### you can make a backup of this file before modifying it again if the admin had modified it. + +# Calculate and store the config file checksum into the app settings +ynh_store_file_checksum "$final_path/CONFIG_FILE" + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= + +### 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 permissions to app files +chown -R "$app":"$app" "$final_path" + +#================================================= +# SETUP LOGROTATE +#================================================= + +### `ynh_use_logrotate` is used to configure a logrotate configuration for the logs of this app. +### Use this helper only if there is effectively a log file for this app. +### If you're not using this helper: +### - Remove the section "BACKUP LOGROTATE" in the backup script +### - Remove also the section "REMOVE LOGROTATE CONFIGURATION" in the remove script +### - As well as the section "RESTORE THE LOGROTATE CONFIGURATION" in the restore script +### - And the section "SETUP LOGROTATE" in the upgrade script + +# Use logrotate to manage application logfile(s) +ynh_use_logrotate + +#================================================= +# 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 $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" + +#================================================= +# SETUP SSOWAT +#================================================= + +# 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 #================================================= systemctl reload nginx +systemctl enable "$app" +systemctl start "$app" +sleep 30 + #================================================= # SEND A README FOR THE ADMIN #=================================================