diff --git a/scripts/install b/scripts/install index fdcdc26..6c77d73 100644 --- a/scripts/install +++ b/scripts/install @@ -1,51 +1,83 @@ #!/bin/bash -# Exit on command errors and treat unset variables as an error -set -eu - -app="movim" - -# Retrieve arguments -domain=$1 -path=${2:-/} -admin=$3 -password=$4 -language=$5 -ssoenabled=$6 -port=$7 -timezone=`cat /etc/timezone` - -# Source local helpers -source ./_common.sh +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= +source _common.sh source /usr/share/yunohost/helpers -# Check domain/path availability -sudo yunohost app checkurl "${domain}${path}" -a "$app" \ - || exit 1 +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +# 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 +password=$YNH_APP_ARG_PASSWORD +language=$YNH_APP_ARG_LANGUAGE +ssoenabled=$YNH_APP_ARG_SSOENABLED +port=$YNH_APP_ARG_PORT +timezone=$(cat /etc/timezone) + +### 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 +#================================================= + +# TODO: final_path=/var/www/$app +test ! -e "$DESTDIR" || ynh_die "This path already contains a folder" + +# 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 # Check port availability -sudo yunohost app checkport "$port" \ - || exit 1 +yunohost app checkport "$port" \ + || ynh_die "This port is already used" -# Check user availability -ynh_user_exists "$admin" \ - || ynh_die "The chosen admin user does not exist." - -# Check password not empty -[[ -n "$password" ]] \ - || ynh_die "You must set an admin password." - -# Check timezone -[[ -n "$timezone" ]] \ - || ynh_die "Could not detect timezone, please check /etc/timezone." \ - && echo "Detected timezone: $timezone" +#================================================= +# STORE SETTINGS FROM MANIFEST +#================================================= # Save app settings ynh_app_setting_set "$app" admin "$admin" ynh_app_setting_set "$app" ssoenabled "$ssoenabled" ynh_app_setting_set "$app" port "$port" -ynh_app_setting_set "$app" path "$path" +ynh_app_setting_set "$app" path "$path_url" + + +#================================================= +# STANDARD MODIFICATIONS +#================================================= + +#================================================= +# CREATE A MYSQL DATABASE +#================================================= # Generate and save random MySQL password db_pwd=$(ynh_string_random 12) @@ -58,9 +90,17 @@ db_name=movim # Create MySQL database ynh_mysql_create_db "$db_name" "$db_user" "$db_pwd" +#================================================= +# INSTALL DEPENDENCIES +#================================================= + # Install packages ynh_install_app_dependencies php5-gd php5-curl php5-imagick php5-cli php5-zmq +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= + # Download Movim source code tmp_path=/tmp/movim-git sudo rm -rf "$tmp_path" @@ -68,21 +108,35 @@ sudo rm -rf "$tmp_path" && cd "$tmp_path" && git checkout "$HEAD_COMMIT") \ || ynh_die "Unable to download Movim source code." +#================================================= +# SET CONFIGURATION FILE +#================================================= + +# TODO: add checksum # Set database configuration cp "${tmp_path}/config/"{db.example.inc.php,db.inc.php} sed -i "s@'username' => 'username'@'username' => '$db_user'@g" \ "${tmp_path}/config/db.inc.php" sed -i "s@'password' => 'password'@'password' => '$db_pwd'@g" \ "${tmp_path}/config/db.inc.php" -## FIXME: consider installation in a subpath -sed -i "s@'/ws/'@'${path%/}/ws/'@g" \ +## TODO: consider installation in a subpath +sed -i "s@'/ws/'@'${path_url%/}/ws/'@g" \ "${tmp_path}/app/assets/js/movim_websocket.js" # Move Movim source code sudo mv "$tmp_path" "$DESTDIR" +#================================================= +# CREATE DEDICATED USER +#================================================= + # Create movim system user and set permissions sudo useradd -d /var/www/movim -s /bin/sh movim + +#================================================= +# SET PERMISSIONS +#================================================= + sudo chown -R movim:www-data "$DESTDIR" sudo find "${DESTDIR}/" -type f -print0 | sudo xargs -0 chmod 0644 sudo find "${DESTDIR}/" -type d -print0 | sudo xargs -0 chmod 0755 @@ -95,14 +149,23 @@ sudo chmod 400 "${DESTDIR}/config/db.inc.php" && exec_cmd php composer.phar install --no-interaction) \ || ynh_die "Unable to install Movim dependencies." + +#================================================= +# Set Movim database and configuration +#================================================= + # Set Movim database and configuration exec_cmd php mud.php db --set exec_cmd php mud.php config --loglevel=1 \ --locale="$language" --timezone="$timezone" \ --username="$admin" --password="$password" +#================================================= +# SETUP SYSTEMD +#================================================= + # Copy init script or systemd service -sudo sed -i "s@YHURL@${domain}${path}@g" ../conf/movim.{service,init} +sudo sed -i "s@YHURL@${domain}${path_url}@g" ../conf/movim.{service,init} sudo sed -i "s@YHDIR@${DESTDIR}@g" ../conf/movim.{service,init} sudo sed -i "s@YHPORT@${port}@g" ../conf/movim.{service,init} if [ -d /run/systemd/system ]; then @@ -117,17 +180,35 @@ else sudo /etc/init.d/movim start fi +#================================================= +# PHP-FPM CONFIGURATION +#================================================= + # php-fpm configuration sed -i "s@YHTZ@$timezone@g" ../conf/php-fpm.conf sudo cp ../conf/php-fpm.conf /etc/php5/fpm/pool.d/movim.conf +#================================================= +# NGINX CONFIGURATION +#================================================= + # Nginx configuration -sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf +sed -i "s@PATHTOCHANGE@$path_url@g" ../conf/nginx.conf sed -i "s@ALIASTOCHANGE@$DESTDIR/@g" ../conf/nginx.conf sed -i "s@YHPORT@$port@g" ../conf/nginx.conf sed -i "s@//ws/@/ws/@g" ../conf/nginx.conf # Avoid duplicate / sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/movim.conf + +#================================================= +# GENERIC FINALIZATION +#================================================= + + +#================================================= +# SETUP SSOWAT +#================================================= + # SSOwat configuration if [[ "$ssoenabled" = "No" ]]; then ynh_app_setting_set "$app" skipped_uris "/" @@ -137,6 +218,10 @@ else apply_sso_patch fi +#================================================= +# RELOAD NGINX +#================================================= + # Reload services sudo service php5-fpm restart sudo service nginx reload diff --git a/scripts/remove b/scripts/remove index 2bd9960..6b8b50a 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,24 +1,45 @@ #!/bin/bash -app="movim" - -# Source local helpers -source ./_common.sh +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= +source _common.sh source /usr/share/yunohost/helpers +#================================================= +# LOAD SETTINGS +#================================================= + +app=$YNH_APP_INSTANCE_NAME + # Retrieve app settings domain=$(ynh_app_setting_get "$app" domain) -# Remove nginx and php-fpm configuration files +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= + +# Remove the dedicated nginx config sudo rm -f "/etc/nginx/conf.d/${domain}.d/movim.conf" + +#================================================= +# REMOVE PHP-FPM CONFIGURATION +#================================================= + +# Remove the dedicated php-fpm config sudo rm -f "/etc/php5/fpm/pool.d/movim.conf" # Reload services sudo service nginx reload sudo service php5-fpm restart -# Stop service and remove it +#================================================= +# STOP AND REMOVE SERVICE +#================================================= + sudo service movim stop if [ -d /run/systemd/system ]; then sudo systemctl --quiet disable movim.service @@ -36,13 +57,26 @@ fi # Remove metapackage and its dependencies ynh_remove_app_dependencies -# Drop MySQL database and user +#================================================= +# REMOVE THE MYSQL DATABASE +#================================================= + db_user=movim db_name=movim ynh_mysql_drop_db "$db_name" || true ynh_mysql_drop_user "$db_user" || true -# Remove Movim files and user +#================================================= +# REMOVE APP MAIN DIR +#================================================= + sudo rm -rf /var/www/movim + +#================================================= +# GENERIC FINALIZATION +#================================================= +# REMOVE DEDICATED USER +#================================================= + ynh_system_user_exists movim \ && sudo userdel movim diff --git a/scripts/upgrade b/scripts/upgrade index 603d936..e37c592 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,31 +1,65 @@ #!/bin/bash -# Exit on command errors and treat unset variables as an error -set -eu - -app="movim" - -# Source local helpers -source ./_common.sh +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= +source _common.sh source /usr/share/yunohost/helpers +#================================================= +# LOAD SETTINGS +#================================================= + +app=$YNH_APP_INSTANCE_NAME + # Retrieve app settings domain=$(ynh_app_setting_get "$app" domain) -path=$(ynh_app_setting_get "$app" path) +path_url=$(ynh_app_setting_get "$app" path) port=$(ynh_app_setting_get "$app" port) ssoenabled=$(ynh_app_setting_get "$app" ssoenabled) public_site=$(ynh_app_setting_get "$app" public_site) -timezone=`cat /etc/timezone` +timezone=$(cat /etc/timezone) -# Check timezone -[[ -n "$timezone" ]] \ - || ynh_die "Could not detect timezone, please check /etc/timezone." \ - && echo "Detected timezone: $timezone" +#================================================= +# ACTIVE TRAP +#================================================= + +# TODO: activate backup +# Backup the current version of the app +# ynh_backup_before_upgrade +# ynh_clean_setup () { + # restore it if the upgrade fails + # ynh_restore_upgradebackup +# } +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# CHECK THE PATH +#================================================= + +# Normalize the URL path syntax +path_url=$(ynh_normalize_url_path $path_url) + + +#================================================= +# STANDARD UPGRADE STEPS +#================================================= + +#================================================= +# UPGRADE DEPENDENCIES +#================================================= # Since Movim 0.13, zmq is required ynh_install_app_dependencies php5-zmq +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= + # Init git repository as needed if [ ! -d "${DESTDIR}/.git" ]; then tmp_path=/tmp/movim-git @@ -51,26 +85,47 @@ fi (exec_cmd git fetch origin \ && exec_cmd git reset --hard "$HEAD_COMMIT") \ || ynh_die "Unable to download Movim source code." -## FIXME: consider installation in a subpath -exec_cmd sed -i "s@'/ws/'@'${path%/}/ws/'@g" \ +## TODO: consider installation in a subpath +exec_cmd sed -i "s@'/ws/'@'${path_url%/}/ws/'@g" \ "${DESTDIR}/app/assets/js/movim_websocket.js" +#================================================= +# CREATE DEDICATED USER +#================================================= + # Create movim user if not exists and set permissions ynh_system_user_exists movim \ || sudo useradd -d /var/www/movim -s /bin/sh movim + +#================================================= +# SET PERMISSIONS +#================================================= + sudo chown -R movim:www-data "$DESTDIR" sudo find "${DESTDIR}/" -type f -print0 | sudo xargs -0 chmod 0644 sudo find "${DESTDIR}/" -type d -print0 | sudo xargs -0 chmod 0755 sudo chmod 400 "${DESTDIR}/config/db.inc.php" +#================================================= +# install PHP dependencies +#================================================= + # Update PHP dependencies using composer (exec_cmd php composer.phar config --global discard-changes true \ && exec_cmd php composer.phar install --no-interaction) \ || ynh_die "Unable to update Movim dependencies." +#================================================= +# Upgrade Movim Databas +#================================================= + # Upgrade Movim database as needed exec_cmd php mud.php db --set +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= + # Reset SSO parameters ynh_app_setting_delete "$app" protected_uris ynh_app_setting_delete "$app" skipped_uris @@ -85,6 +140,10 @@ if [ ! -z "$public_site" ]; then ynh_app_setting_set "$app" ssoenabled "$ssoenabled" fi +#================================================= +# SETUP SSOWAT +#================================================= + # SSOwat configuration if [[ "$ssoenabled" = "No" ]]; then ynh_app_setting_set "$app" skipped_uris "/" @@ -95,8 +154,13 @@ else apply_sso_patch fi + +#================================================= +# SETUP SYSTEMD +#================================================= + # Update init scripts -sudo sed -i "s@YHURL@${domain}${path}@g" ../conf/movim.{service,init} +sudo sed -i "s@YHURL@${domain}${path_url}@g" ../conf/movim.{service,init} sudo sed -i "s@YHDIR@${DESTDIR}@g" ../conf/movim.{service,init} sudo sed -i "s@YHPORT@${port}@g" ../conf/movim.{service,init} if [ -d /run/systemd/system ]; then @@ -111,17 +175,29 @@ else sudo /etc/init.d/movim start fi +#================================================= +# PHP-FPM CONFIGURATION +#================================================= + # Update php-fpm configuration sed -i "s@YHTZ@$timezone@g" ../conf/php-fpm.conf sudo cp ../conf/php-fpm.conf /etc/php5/fpm/pool.d/movim.conf +#================================================= +# NGINX CONFIGURATION +#================================================= + # Nginx configuration -sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf +sed -i "s@PATHTOCHANGE@$path_url@g" ../conf/nginx.conf sed -i "s@ALIASTOCHANGE@$DESTDIR/@g" ../conf/nginx.conf sed -i "s@YHPORT@$port@g" ../conf/nginx.conf sed -i "s@//ws/@/ws/@g" ../conf/nginx.conf # Avoid duplicate / sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/movim.conf +#================================================= +# RELOAD SERVICES +#================================================= + # Reload services sudo service movim restart sudo service php5-fpm restart