diff --git a/scripts/install b/scripts/install index 8385c72..6721af2 100644 --- a/scripts/install +++ b/scripts/install @@ -1,238 +1,194 @@ #!/bin/bash -app=phpBB +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Retrieve argument -domain=$1 -path=$2 -is_public=$3 -admin_login=$4 -admin_pwd=$5 -admin_email=$6 -lang=$7 -curl_inst=$8 +source _common.sh +source /usr/share/yunohost/helpers -#sudo yunohost app setting $app domain -v $domain +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= -# Removal of trailing / -path=${path%/} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors -# Check domain/path availability -sudo yunohost app checkurl $domain$path -a $app -if [[ ! $? -eq 0 ]]; then - exit 1 -fi +#================================================= +# RETRIEVE ARGUMENTS FROM THE MANIFEST +#================================================= -db_user=$app -#db_pwd=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{24\}\).*/\1/p') -db_pwd=$admin_pwd +domain=$YNH_APP_ARG_DOMAIN +path_url=$YNH_APP_ARG_PATH +admin=$YNH_APP_ARG_ADMIN +is_public=$YNH_APP_ARG_IS_PUBLIC +language=$YNH_APP_ARG_LANGUAGE -# Initialize database and store mysql password for upgrade -sudo yunohost app initdb $db_user -p $db_pwd -sudo yunohost app setting $app mysqlpwd -v $db_pwd -sudo yunohost app setting $app admin_login -v $admin_login -sudo yunohost app setting $app admin_pwd -v $admin_pwd -sudo yunohost app setting $app admin_email -v $admin_email +# 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, ... +app=$YNH_APP_INSTANCE_NAME + +#================================================= +# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS +#================================================= -# Copy files to the right place final_path=/var/www/$app -sudo rm -rf $final_path -sudo mkdir -p $final_path -sudo cp -a ../sources/phpBB/* $final_path/ +test ! -e "$final_path" || ynh_die "This path already contains a folder" -# We add french language pack -if [ "$lang" = "fr" ]; - then sudo cp -a ../sources/french_language/* $final_path/ +# 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 +ynh_app_setting_set $app is_public $is_public +ynh_app_setting_set $app language $language + +#================================================= +# STANDARD MODIFICATIONS +#================================================= + + +#================================================= +# INSTALL DEPENDENCIES +#================================================= + +ynh_install_app_dependencies deb1 deb2 + +#================================================= +# CREATE A MYSQL DATABASE +#================================================= +# If your app uses a MySQL database, you can use these lines to bootstrap +# a database, an associated user and save the password in app settings + +db_name=$(ynh_sanitize_dbid $app) +ynh_app_setting_set $app db_name $db_name +ynh_mysql_setup_db $db_name $db_name + +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= + +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" + +#================================================= +# NGINX CONFIGURATION +#================================================= + +# Create a dedicated nginx config +ynh_add_nginx_config + +#================================================= +# CREATE DEDICATED USER +#================================================= + +# Create a system user +ynh_system_user_create $app + +#================================================= +# PHP-FPM CONFIGURATION +#================================================= + +# Create a dedicated php-fpm config +ynh_add_fpm_config + +#================================================= +# SPECIFIC SETUP +#================================================= +# ... +#================================================= + +#================================================= +# SETUP APPLICATION WITH CURL +#================================================= + +# 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" + +#================================================= +# MODIFY A CONFIG FILE +#================================================= + +ynh_replace_string "match_string" "replace_string" "$final_path/CONFIG_FILE" + +#================================================= +# STORE THE CHECKSUM OF THE CONFIG FILE +#================================================= + +# 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 +#================================================= + +# Set permissions to app files +chown -R root: $final_path + +#================================================= +# SETUP LOGROTATE +#================================================= + +# Use logrotate to manage application logfile(s) +ynh_use_logrotate + +#================================================= +# ADVERTISE SERVICE IN ADMIN PANEL +#================================================= + +yunohost service add NAME_INIT.D --log "/var/log/FILE.log" + +#================================================= +# SETUP SSOWAT +#================================================= + +if [ $is_public -eq 0 ] +then # Remove the public access + ynh_app_setting_delete $app skipped_uris fi - -# Set permissions to working directory -sudo chown -R www-data:www-data $final_path - -# Special adjustements for phpBB BEFORE installation (according to documentation) -sudo chmod 666 $final_path/config.php -sudo chmod 777 $final_path/store -sudo chmod 777 $final_path/cache -sudo chmod 777 $final_path/files -sudo chmod 777 $final_path/images/avatars/upload - -# phpBB requires imagemagick to manipulate pictures -sudo apt-get update -qq > /dev/null 2>&1 -sudo apt-get install -y imagemagick > /dev/null 2>&1 - -# Modify Nginx configuration file and copy it to Nginx conf directory -sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf -sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf -sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf - -sed -i "s@NAMETOCHANGE@$app@g" ../conf/php-fpm.conf -finalphpconf=/etc/php5/fpm/pool.d/$domain\_$app.conf -sudo cp ../conf/php-fpm.conf $finalphpconf -sudo chown root: $finalphpconf -sudo chmod 644 $finalphpconf - - # Make app public if necessary -sudo yunohost app setting $app is_public -v "$is_public" -if [ "$is_public" = "Yes" ]; +if [ $is_public -eq 1 ] then - sudo yunohost app setting $app skipped_uris -v "/" + # unprotected_uris allows SSO credentials to be passed anyway. + ynh_app_setting_set $app unprotected_uris "/" fi +#================================================= +# RELOAD NGINX +#================================================= -# Reload Nginx and regenerate SSOwat conf -sudo service php5-fpm reload -sudo service nginx reload -sudo yunohost app ssowatconf - -# Use cURL for automatic configuration [BROKEN - TO BE FIXED] -if [ "$curl_inst" = "Yes" ]; -then - -###### BEGINNING OF IF ######################## - -# Configuration of phpBB via cURL - -#echo -e "\n 1 - Requirements"; -sudo curl -kL -H "Host: $domain" -X POST "https://127.0.0.1$path/install/index.php?mode=install&sub=requirements" \ ---data "img_imagick=/usr/bin" \ ---data "submit=Start install" \ -> /dev/null 2>&1 - -#echo -e "\n 2 - database"; -sudo curl -kL -H "Host: $domain" -X POST "https://127.0.0.1$path/install/index.php?mode=install&sub=database" \ ---data "img_imagick=/usr/bin" \ ---data "language=en" \ ---data "testdb=false" \ ---data "dbms=mysqli" \ ---data "dbhost=localhost" \ ---data "dbport=" \ ---data "dbname=$db_user" \ ---data "dbuser=$db_user" \ ---data "table_prefix=phpbb_" \ ---data "dbpasswd=$db_pwd" \ ---data "submit=Proceed to next step" \ -> /dev/null 2>&1 - -#echo -e "\n 3 - admin"; -sudo curl -kL -H "Host: $domain" -X POST "https://127.0.0.1$path/install/index.php?mode=install&sub=administrator" \ ---data "img_imagick=/usr/bin" \ ---data "default_lang=$lang" \ ---data "check=false" \ ---data "admin_name=$admin_login" \ ---data "admin_pass1=$admin_pwd" \ ---data "admin_pass2=$admin_pwd" \ ---data "board_email=$admin_email" \ ---data "img_imagick=/usr/bin" \ ---data "language=en" \ ---data "dbms=mysqli" \ ---data "dbhost=localhost" \ ---data "dbport=" \ ---data "dbname=$db_user" \ ---data "dbuser=$db_user" \ ---data "dbpasswd=$db_pwd" \ ---data "table_prefix=phpbb_" \ ---data "submit=Proceed to next step" \ -> /dev/null 2>&1 - -#echo -e "\n 4 - config_file"; -sudo curl -kL -H "Host: $domain" -X POST "https://127.0.0.1$path/install/index.php?mode=install&sub=config_file" \ ---data "img_imagick=/usr/bin" \ ---data "language=en" \ ---data "dbms=mysqli" \ ---data "dbhost=localhost" \ ---data "dbport=" \ ---data "dbname=$db_user" \ ---data "dbuser=$db_user" \ ---data "dbpasswd=$db_pwd" \ ---data "table_prefix=phpbb_" \ ---data "default_lang=$lang" \ ---data "admin_name=$admin_login" \ ---data "admin_pass1=$admin_pwd" \ ---data "admin_pass2=$admin_pwd" \ ---data "board_email=$admin_email" \ ---data "submit=Proceed to next step" \ -> /dev/null 2>&1 - -#echo -e "\n 5 - advanced"; -sudo curl -kL -H "Host: $domain" -X POST "https://127.0.0.1$path/install/index.php?mode=install&sub=advanced" \ ---data "email_enable=1" \ ---data "smtp_delivery=0" \ ---data "smtp_host=" \ ---data "smtp_auth=PLAIN" \ ---data "smtp_user=" \ ---data "smtp_pass=" \ ---data "cookie_secure=1" \ ---data "force_server_vars=0" \ ---data "server_protocol=https://" \ ---data "server_name=$domain" \ ---data "server_port=443" \ ---data "script_path=$path" \ ---data "img_imagick=/usr/bin" \ ---data "language=en" \ ---data "dbms=mysqli" \ ---data "dbhost=localhost" \ ---data "dbport=" \ ---data "dbname=$db_user" \ ---data "dbuser=$db_user" \ ---data "dbpasswd=$db_pwd" \ ---data "table_prefix=phpbb_" \ ---data "default_lang=$lang" \ ---data "admin_name=$admin_login" \ ---data "admin_pass1=$admin_pwd" \ ---data "admin_pass2=$admin_pwd" \ ---data "board_email=$admin_email" \ ---data "submit=Proceed to next step" \ -> /dev/null 2>&1 - -#echo -e "\n 6 - create database"; -sudo curl -kL -H "Host: $domain" -X POST "https://127.0.0.1$path/install/index.php?mode=install&sub=create_table" \ ---data "language=en" \ ---data "dbms=mysqli" \ ---data "dbhost=localhost" \ ---data "dbport=" \ ---data "dbuser=$db_user" \ ---data "dbpasswd=$db_pwd" \ ---data "dbname=$db_user" \ ---data "table_prefix=phpbb_" \ ---data "default_lang=$lang" \ ---data "admin_name=$admin_login" \ ---data "admin_pass1=$admin_pwd" \ ---data "admin_pass2=$admin_pwd" \ ---data "board_email=$admin_email" \ ---data "img_imagick=/usr/bin" \ ---data "ftp_path=" \ ---data "ftp_user=" \ ---data "ftp_pass=" \ ---data "email_enable=1" \ ---data "smtp_delivery=0" \ ---data "smtp_host=" \ ---data "smtp_auth=PLAIN" \ ---data "smtp_user=" \ ---data "smtp_pass=" \ ---data "cookie_secure=1" \ ---data "force_server_vars=0" \ ---data "server_protocol=https://" \ ---data "server_name=$domain" \ ---data "server_port=443" \ ---data "script_path=$path" \ ---data "submit=Proceed to next step" \ -> /dev/null 2>&1 - -# We need to rename the install folder -sudo mv $final_path/install $final_path/install_old - -###### END OF IF ######################## - - -fi; - - - - -# Special adjustements of phpBB AFTER installation (according to documentation) -sudo chmod 644 $final_path/config.php - -sudo chmod 777 $final_path/store -sudo chmod 777 $final_path/cache -sudo chmod 777 $final_path/files -sudo chmod 777 $final_path/images/avatars/upload +systemctl reload nginx