2015-08-23 17:33:13 +02:00
#!/bin/bash
2017-02-05 16:11:01 +01:00
2018-04-30 20:24:17 +02:00
#=================================================
# GENERIC START
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
2017-02-15 17:53:40 +01:00
2018-04-30 20:24:17 +02:00
source _common.sh
source /usr/share/yunohost/helpers
2015-08-23 17:33:13 +02:00
2018-04-30 20:24:17 +02:00
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
2019-04-04 18:32:01 +02:00
ynh_clean_setup () {
### Remove this function if there's nothing to clean before calling the remove script.
true
}
2018-04-30 20:24:17 +02:00
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#=================================================
# RETRIEVE ARGUMENTS FROM THE MANIFEST
#=================================================
2015-08-23 17:33:13 +02:00
2017-02-15 17:53:40 +01:00
domain=$YNH_APP_ARG_DOMAIN
2018-04-30 20:24:17 +02:00
path_url="/"
2017-02-15 17:53:40 +01:00
admin=$YNH_APP_ARG_ADMIN
2020-12-07 13:53:19 +01:00
email=$(yunohost user info $admin | grep "mail:" | cut -d' ' -f2)
2018-04-30 20:24:17 +02:00
upload="256M"
2020-10-14 04:28:54 +02:00
random_string="$(ynh_string_random)$(ynh_string_random)$(ynh_string_random)"
2020-10-14 05:09:43 +02:00
database=`expr $YNH_APP_ARG_DATABASE`
2018-04-30 20:24:17 +02:00
app=$YNH_APP_INSTANCE_NAME
2015-08-23 17:33:13 +02:00
2018-04-30 20:24:17 +02:00
#=================================================
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
#=================================================
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Validating installation parameters..."
2017-02-05 16:11:01 +01:00
2018-04-30 20:24:17 +02:00
final_path=/var/www/$app
2020-04-23 00:03:42 +02:00
test ! -e "$final_path" || ynh_die --message="This path already contains a folder"
2017-02-05 16:11:01 +01:00
2018-04-30 20:24:17 +02:00
# Register (book) web path
2020-04-23 00:03:42 +02:00
ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url
2015-08-23 17:33:13 +02:00
2019-04-04 18:32:01 +02:00
#=================================================
# STORE SETTINGS FROM MANIFEST
#=================================================
2020-11-13 16:59:16 +01:00
ynh_script_progression --message="Storing installation settings..."
2019-04-04 18:32:01 +02:00
2020-04-23 00:03:42 +02:00
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=email --value=$email
ynh_app_setting_set --app=$app --key=upload --value=$upload
ynh_app_setting_set --app=$app --key=database --value=$database
2020-10-14 04:28:54 +02:00
ynh_app_setting_set --app=$app --key=random_string --value=$random_string
2018-04-30 20:24:17 +02:00
2019-04-04 18:32:01 +02:00
#=================================================
# STANDARD MODIFICATIONS
2018-04-30 20:24:17 +02:00
#=================================================
# INSTALL DEPENDENCIES
#=================================================
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Installing dependencies..."
2019-04-04 18:32:01 +02:00
2020-10-14 04:28:54 +02:00
if [ $database -eq 2 ]; then
ynh_install_app_dependencies $pkg_dependencies
fi
2015-08-23 17:33:13 +02:00
2019-04-04 18:32:01 +02:00
#=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
# 1 - Hubzilla
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Setting up Hubzilla source files..."
2019-04-04 18:32:01 +02:00
2021-02-14 00:02:55 +01:00
git clone https://framagit.org/hubzilla/core.git "$final_path"
2020-04-23 00:03:42 +02:00
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
2019-04-04 18:32:01 +02:00
# Download, check integrity, uncompress and patch the source from app.src
2021-02-14 00:02:55 +01:00
# ynh_setup_source --dest_dir="$final_path"
2019-04-04 18:32:01 +02:00
# 2 - Hubzilla Addons
# Make addon Directory and unpack the Hubzilla addons to this directory
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Create addon directory inside Hubzilla root folder..."
2021-02-14 00:02:55 +01:00
# mkdir $final_path/addon
# ynh_script_progression --message="Setting up Hubzilla addons source files..."
# ynh_setup_source --dest_dir="$final_path/addon" --source_id="app_addons"
2020-10-14 04:28:54 +02:00
2021-02-14 00:17:07 +01:00
pushd "$final_path"
2021-02-14 00:53:04 +01:00
mkdir -p extend/addon/hzaddons
mkdir addon
git clone https://framagit.org/hubzilla/addons.git $final_path/extend/addon/hzaddons
filelist=(`ls extend/addon/hzaddons`)
cd addon
for a in "${filelist[@]}" ; do
base=`basename $a`
if [ $base = '.git' ]; then
#echo 'ignoring git'
continue;
fi
if [ ! -d ../extend/addon/hzaddons/$base ]; then
#echo $a 'not a directory'
continue;
fi
if [ -x $base ]; then
#echo $base 'file exists'
continue;
fi
echo linking $base
ln -s ../extend/addon/hzaddons/$base $base
2021-02-14 01:09:24 +01:00
done
2021-02-14 00:53:04 +01:00
2021-02-14 00:17:07 +01:00
popd
2018-04-30 20:24:17 +02:00
2019-04-04 18:32:01 +02:00
# 3 - Some extra folders
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Creating smarty3 folder for personal data..."
2020-04-23 00:03:42 +02:00
mkdir -p "${final_path}/store/[data]/smarty3"
chmod -R 777 $final_path/store
2015-08-23 17:33:13 +02:00
# Copy the template install/htconfig.sample.php to .htconfig.php
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Moving .htconfig.php to root of Hubzilla ..."
2020-10-14 05:20:23 +02:00
config="$final_path/.htconfig.php"
2020-10-14 04:28:54 +02:00
cp $final_path/install/htconfig.sample.php $config
2019-04-04 18:32:01 +02:00
# Create php.log inside Hubzilla for logs
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Create php.log for the Hubzilla debuging..."
2020-04-23 00:03:42 +02:00
touch "$final_path/php.log"
2015-08-23 17:33:13 +02:00
2020-10-14 04:28:54 +02:00
#=================================================
# CREATE A DATABASE
#=================================================
if [ $database -eq 1 ]; then
ynh_script_progression --message="Creating a MySQL database..."
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_script_progression --message="Importing database..."
ynh_mysql_connect_as --user="$db_name" --password="$db_pwd" --database="$db_name" < $final_path/install/schema_mysql.sql
elif [ $database -eq 2 ]; then
# Create postgresql database
ynh_script_progression --message="Creating a postgresql database..."
ynh_replace_string --match_string="db_type = 0;" --replace_string="db_type = 1;" --target_file="$config"
db_name=$(ynh_sanitize_dbid --db_name=$app)
db_user=$app
ynh_psql_test_if_first_run
ynh_psql_setup_db --db_user=$db_user --db_name=$db_name
ynh_app_setting_set --app=$app --key=db_name --value=$db_name
ynh_script_progression --message="Importing database..."
ynh_psql_connect_as --user="$db_name" --password="$db_pwd" --database="$db_name" < $final_path/install/schema_postgres.sql
else
ynh_die --message="Some problem occured in creating the database, contact maintainer"
fi
2019-04-04 18:32:01 +02:00
#=================================================
# MODIFY A CONFIG FILE
#=================================================
2020-10-14 04:28:54 +02:00
phpversion=$(ynh_app_setting_get --app=$app --key=phpversion)
ynh_replace_string --match_string="your.mysqlhost.com" --replace_string="localhost" --target_file="$config"
ynh_replace_string --match_string= "mysqlpassword" --replace_string="$db_pwd" --target_file="$config"
ynh_replace_string --match_string="mysqlusername" --replace_string="$db_name" --target_file="$config"
ynh_replace_string --match_string= "mysqldatabasename" --replace_string="$db_name" --target_file="$config"
ynh_replace_string --match_string= "mysite.example" --replace_string="$domain" --target_file="$config"
ynh_replace_string --match_string= "if the auto install failed, put a unique random string here" --replace_string="$random_string" --target_file="$config"
2020-10-14 07:20:18 +02:00
sed -i "s/\['admin_email'\] = '';/\['admin_email'\] = '$email';/g" "$config"
2020-10-14 04:28:54 +02:00
ynh_replace_string --match_string= "//error_reporting(E_ERROR | E_WARNING | E_PARSE );" --replace_string="error_reporting(E_ERROR | E_WARNING | E_PARSE );" --target_file="$config"
ynh_replace_string --match_string= "//ini_set('error_log','php.out');" --replace_string="ini_set('error_log','php.log');" --target_file="$config"
ynh_replace_string --match_string= "//ini_set('log_errors','1');" --replace_string="ini_set('log_errors','1');" --target_file="$config"
ynh_replace_string --match_string= "//ini_set('display_errors', '0');" --replace_string="ini_set('display_errors', '0');" --target_file="$config"
2020-10-14 07:20:18 +02:00
sed -i "s/\['php_path'\] = 'php';/\['php_path'\] = 'php$phpversion';/g" "$config"
2018-04-30 20:24:17 +02:00
2017-07-20 07:09:07 +02:00
# addon ldap config
2020-11-13 16:59:16 +01:00
ynh_script_progression --message="Push LDAP configuration to .htconfig.php..."
2020-10-14 04:28:54 +02:00
cat ../conf/ldap_conf.php >> $final_path/.htconfig.php
2015-08-23 17:33:13 +02:00
2018-04-30 20:24:17 +02:00
#=================================================
# NGINX CONFIGURATION
#=================================================
2020-11-13 16:59:16 +01:00
ynh_script_progression --message="Configuring NGINX web server..."
2019-04-04 18:32:01 +02:00
### `ynh_add_nginx_config` will use the file conf/nginx.conf
2018-04-30 20:24:17 +02:00
2020-11-13 16:59:16 +01:00
# Create a dedicated NGINX config
2018-04-30 20:24:17 +02:00
ynh_add_nginx_config
#=================================================
# CREATE DEDICATED USER
#=================================================
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Configuring system user..."
2018-04-30 20:24:17 +02:00
# Create a system user
2020-04-23 00:03:42 +02:00
ynh_system_user_create --username=$app
2018-04-30 20:24:17 +02:00
#=================================================
# PHP-FPM CONFIGURATION
#=================================================
2020-11-13 16:59:16 +01:00
ynh_script_progression --message="Configuring PHP-FPM..."
2019-04-04 18:32:01 +02:00
2020-11-13 16:59:16 +01:00
# Create a dedicated PHP-FPM config
2020-10-14 04:28:54 +02:00
ynh_add_fpm_config --package="$extra_php_dependencies"
2018-04-30 20:24:17 +02:00
2019-04-04 18:32:01 +02:00
# Set right permissions for Hubzilla
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Set right for Hubzilla..."
2018-04-30 20:24:17 +02:00
chown -R $app: $final_path
2017-02-15 18:09:01 +01:00
2019-04-04 18:32:01 +02:00
# Set up cron job
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Setting up cron job..."
2020-04-23 00:03:42 +02:00
ynh_replace_string --match_string="YNH_WWW_PATH" --replace_string="$final_path" --target_file="../conf/poller-cron"
ynh_replace_string --match_string="__USER__" --replace_string="$app" --target_file="../conf/poller-cron"
2020-10-14 04:28:54 +02:00
ynh_replace_string --match_string="__PHP_VERSION__" --replace_string="$phpversion" --target_file="../conf/poller-cron"
cp ../conf/poller-cron /etc/cron.d/$app
2017-02-05 16:11:01 +01:00
2018-04-30 20:24:17 +02:00
#=================================================
2019-04-04 18:32:01 +02:00
# STORE THE CONFIG FILE CHECKSUM
2018-04-30 20:24:17 +02:00
#=================================================
2017-02-17 15:45:54 +01:00
2018-04-30 20:24:17 +02:00
# Calculate and store the config file checksum into the app settings
2020-10-14 04:28:54 +02:00
ynh_store_file_checksum --file="$config"
2015-08-23 17:33:13 +02:00
2018-04-30 20:24:17 +02:00
#=================================================
# SETUP LOGROTATE
#=================================================
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Configuring log rotation..."
2019-04-04 18:32:01 +02:00
2018-04-30 20:24:17 +02:00
# Use logrotate to manage application logfile(s)
ynh_use_logrotate "$final_path/php.log"
2017-02-17 13:01:42 +01:00
2018-11-08 11:08:11 +01:00
#=================================================
# SETUP FAIL2BAN
#=================================================
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Add Fail2Ban..."
2020-04-23 00:03:42 +02:00
ynh_add_fail2ban_config --logpath="$final_path/php.log" --failregex="^.*auth\.php.*failed login attempt.*from IP <HOST>.*$" --max_retry="5"
2018-11-08 11:08:11 +01:00
2019-04-04 18:32:01 +02:00
#=================================================
# SETUP SSOWAT
#=================================================
# As Hubzilla is social network and have its own permission there is no need to keep Hubzilla behind SSO
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Configuring SSOwat..."
2020-04-23 00:03:42 +02:00
ynh_app_setting_set --app=$app --key=unprotected_uris --value="/"
2019-04-04 18:32:01 +02:00
#=================================================
# RELOAD NGINX
#=================================================
2020-11-13 16:59:16 +01:00
ynh_script_progression --message="Reloading NGINX web server..."
2019-04-04 18:32:01 +02:00
2020-04-23 00:03:42 +02:00
ynh_systemd_action --service_name=nginx --action=reload
2019-04-04 18:32:01 +02:00
#=================================================
# END OF SCRIPT
#=================================================
2020-10-14 04:28:54 +02:00
ynh_script_progression --message="Installation of $app completed"