diff --git a/conf/app.src b/conf/app.src index 4acfbf25..890fc497 100644 --- a/conf/app.src +++ b/conf/app.src @@ -4,3 +4,4 @@ SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR= SOURCE_FILENAME= +SOURCE_EXTRACT=true diff --git a/conf/htconfig.sample.php b/conf/htconfig.sample.php index 3516184b..8e27d63b 100644 --- a/conf/htconfig.sample.php +++ b/conf/htconfig.sample.php @@ -13,11 +13,11 @@ // Then set the following for your MySQL installation $db_host = 'localhost'; // Use 'localhost' or ':/path/to/socket.file' if you aren't using a remote server -$db_port = 0; // leave 0 for default or set your port +$db_port = 3306; // leave 0 for default or set your port $db_user = '__DB_USER__'; $db_pass = '__DB_PWD'; $db_data = '__DB_NAME__'; -$db_type = 0; // use 1 for postgres, 0 for mysql +$db_type = mysql; // use 1 for postgres, 0 for mysql /* * Notice: Many of the following settings will be available in the admin panel @@ -35,13 +35,13 @@ $db_type = 0; // use 1 for postgres, 0 for mysql // Choose a legal default timezone. If you are unsure, use "America/Los_Angeles". // It can be changed later and only applies to timestamps for anonymous viewers. -App::$config['system']['timezone'] = 'America/Los_Angeles'; +App::$config['system']['timezone'] = '__TIME_ZONE__'; // What is your site name? DO NOT ADD A TRAILING SLASH! -App::$config['system']['baseurl'] = 'https://mysite.example'; +App::$config['system']['baseurl'] = 'https://__DOMAIN__'; App::$config['system']['sitename'] = "Hubzilla"; -App::$config['system']['location_hash'] = 'if the auto install failed, put a unique random string here'; +App::$config['system']['location_hash'] = '__RANDOM_STRING__'; // These lines set additional security headers to be sent with all responses @@ -66,11 +66,11 @@ App::$config['system']['ssl_cookie_protection'] = 1; App::$config['system']['register_policy'] = REGISTER_OPEN; App::$config['system']['register_text'] = ''; -App::$config['system']['admin_email'] = ''; +App::$config['system']['admin_email'] = '__EMAIL__'; // Location of PHP command line processor -App::$config['system']['php_path'] = 'php'; +App::$config['system']['php_path'] = '/usr/bin/php__PHPVERSION__'; // Configure how we communicate with directory servers. diff --git a/conf/nginx.conf b/conf/nginx.conf index 3f7a8f6e..2ffae27c 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -14,13 +14,12 @@ location __PATH__/ { charset utf-8; - location ~* \.php$ - { - try_files $uri =404; - fastcgi_pass unix:/var/run/php/php__PHPVERSION__-fpm-__NAME__.sock; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + location ~* \.php${ + try_files $uri =404; + fastcgi_pass unix:/var/run/php/php__PHPVERSION__-fpm-__NAME__.sock; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # make sure webfinger and other well known services aren't blocked diff --git a/scripts/_common.sh b/scripts/_common.sh index 094cab6f..e75d0440 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,7 +7,7 @@ # dependencies used by the app YNH_PHP_VERSION="8.0" -pkg_dependencies="postgresql php${YNH_PHP_VERSION}-mbstring php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-imagick php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-zip php${YNH_PHP_VERSION}-pgsql php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-gd" +pkg_dependencies="php${YNH_PHP_VERSION}-mbstring php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-imagick php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-zip php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-gd" #================================================= # PERSONAL HELPERS @@ -17,31 +17,6 @@ pkg_dependencies="postgresql php${YNH_PHP_VERSION}-mbstring php${YNH_PHP_VERSION # EXPERIMENTAL HELPERS #================================================= -ynh_smart_mktemp () { - local min_size="${1:-300}" - # Transform the minimum size from megabytes to kilobytes - min_size=$(( $min_size * 1024 )) - - # Check if there's enough free space in a directory - is_there_enough_space () { - local free_space=$(df --output=avail "$1" | sed 1d) - test $free_space -ge $min_size - } - - if is_there_enough_space /tmp; then - local tmpdir=/tmp - elif is_there_enough_space /var; then - local tmpdir=/var - elif is_there_enough_space /; then - local tmpdir=/ - elif is_there_enough_space /home; then - local tmpdir=/home - else - ynh_die "Insufficient free space to continue..." - fi - - echo "$(mktemp --directory --tmpdir="$tmpdir")" -} #================================================= # FUTURE OFFICIAL HELPERS #================================================= diff --git a/scripts/backup b/scripts/backup index 524c6ccb..a0f68c71 100644 --- a/scripts/backup +++ b/scripts/backup @@ -31,7 +31,6 @@ 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) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) -database=$(ynh_app_setting_get --app=$app --key=database) #================================================= # DECLARE DATA AND CONF FILES TO BACKUP @@ -56,20 +55,6 @@ ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" -#================================================= -# BACKUP OF THE DATABASE -#================================================= - -if [ $database -eq 1 ]; then - # Backup MySQL database - ynh_print_info --message="Backup of the MySQL database..." - ynh_mysql_dump_db --database="$db_name" > db.sql -elif [ $database -eq 2 ]; then - # Backup PostgreSQL database - ynh_print_info --message="Backup of the PostgreSQL database..." - ynh_psql_dump_db --database="$db_name" > db.sql -fi - #================================================= # SPECIFIC BACKUP #================================================= @@ -91,6 +76,13 @@ ynh_backup --src_path="/etc/cron.d/$app" ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf" ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf" +#================================================= +# BACKUP THE MYSQL DATABASE +#================================================= +ynh_print_info --message="Backing up the MySQL database..." + +ynh_mysql_dump_db --database="$db_name" > db.sql + #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/install b/scripts/install index c65e6e08..8027f093 100755 --- a/scripts/install +++ b/scripts/install @@ -28,9 +28,8 @@ domain=$YNH_APP_ARG_DOMAIN path_url="/" admin=$YNH_APP_ARG_ADMIN email=$(ynh_user_get_info --username=$admin --key=mail) -upload="256M" random_string=$(ynh_string_random --length=64) -database=`expr $YNH_APP_ARG_DATABASE` +time_zone=$ app=$YNH_APP_INSTANCE_NAME @@ -55,7 +54,6 @@ 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 ynh_app_setting_set --app=$app --key=random_string --value=$random_string #================================================= @@ -73,7 +71,7 @@ ynh_system_user_create --username=$app --home_dir="$final_path" #================================================= ynh_script_progression --message="Installing dependencies..." -ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies +ynh_install_app_dependencies $pkg_dependencies #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -146,32 +144,15 @@ chmod -R o-rwx "$final_path" chown -R $app:www-data "$final_path" #================================================= -# CREATE A DATABASE +# CREATE A MYSQL DATABASE #================================================= +ynh_script_progression --message="Creating a MySQL database..." --weight=1 -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 +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_mysql_connect_as --user="$db_user" --password="$db_pwd" --database="$db_name" < $final_path/install/schema_mysql.sql #================================================= # MODIFY A CONFIG FILE @@ -179,13 +160,10 @@ fi 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" -sed -i "s/\['admin_email'\] = '';/\['admin_email'\] = '$email';/g" "$config" +config=$final_path/.htconfig.php + + + 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" @@ -193,7 +171,7 @@ ynh_replace_string --match_string= "//ini_set('display_errors', '0');" --replace sed -i "s/\['php_path'\] = 'php';/\['php_path'\] = 'php$phpversion';/g" "$config" -#ynh_add_config --template="../conf/htconfig.sample.php" --destination="$final_path/.htconfig.php" +ynh_add_config --template="../conf/htconfig.sample.php" --destination="$final_path/.htconfig.php" # addon ldap config diff --git a/scripts/remove b/scripts/remove index 3232b7ca..9dcf6f5c 100755 --- a/scripts/remove +++ b/scripts/remove @@ -20,38 +20,22 @@ domain=$(ynh_app_setting_get --app=$app --key=domain) 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) -database=$(ynh_app_setting_get --app=$app --key=database) #================================================= # STANDARD REMOVE #================================================= -# REMOVE THE DATABASE +# REMOVE THE MYSQL DATABASE #================================================= +ynh_script_progression --message="Removing the MySQL database..." --weight=1 -if [ $database -eq 1 ]; then - # Removing MySQL database - ynh_script_progression --message="Removing MySQL database..." - ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name -elif [ $database -eq 2 ]; then - # Removing PostgreSQL database - ynh_script_progression --message="Removing postgresql database..." - ynh_psql_remove_db --db_user=$db_user --db_name=$db_name -fi - -#================================================= -# REMOVE DEPENDENCIES -#================================================= -ynh_script_progression --message="Removing dependencies..." - -# Remove metapackage and its dependencies -ynh_remove_app_dependencies +# Remove a database if it exists, along with the associated user +ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name #================================================= # REMOVE APP MAIN DIR #================================================= ynh_script_progression --message="Removing app main directory..." -# Remove the app directory securely ynh_secure_remove --file="$final_path" #================================================= @@ -70,6 +54,13 @@ ynh_script_progression --message="Removing PHP-FPM configuration..." # Remove the dedicated PHP-FPM config ynh_remove_fpm_config +#================================================= +# REMOVE DEPENDENCIES +#================================================= +ynh_script_progression --message="Removing dependencies..." + +ynh_remove_app_dependencies + #================================================= # REMOVE LOGROTATE CONFIGURATION #================================================= diff --git a/scripts/restore b/scripts/restore index ae94608f..931eac6e 100644 --- a/scripts/restore +++ b/scripts/restore @@ -33,7 +33,6 @@ path_url=$(ynh_app_setting_get --app=$app --key=path) admin=$(ynh_app_setting_get --app=$app --key=admin) final_path=$(ynh_app_setting_get --app=$app --key=final_path) db_name=$(ynh_app_setting_get --app=$app --key=db_name) -database=$(ynh_app_setting_get --app=$app --key=database) db_user=$db_name phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) @@ -42,8 +41,6 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= ynh_script_progression --message="Validating restoration parameters..." -ynh_webpath_available --domain=$domain --path_url=$path_url \ - || ynh_die --message="Path not available: ${domain}${path_url}" test ! -d $final_path \ || ynh_die --message="There is already a directory: $final_path " @@ -74,27 +71,22 @@ chmod 750 "$final_path" chmod -R o-rwx "$final_path" chown -R $app:www-data "$final_path" +#================================================= +# REINSTALL DEPENDENCIES +#================================================= +ynh_script_progression --message="Reinstalling dependencies..." --weight=1 + +# Define and install dependencies +ynh_install_app_dependencies $pkg_dependencies + #================================================= # RESTORE THE MYSQL DATABASE #================================================= -ynh_script_progression --message="Restoring the MySQL database..." +ynh_script_progression --message="Restoring the MySQL database..." --weight=1 -if [ $database -eq 1 ]; then - ynh_script_progression --message="Restoring MySQL database..." - db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) - ynh_mysql_setup_db --db_user=$db_name --db_name=$db_name --db_pwd=$db_pwd - ynh_mysql_connect_as --user=$db_name --password=$db_pwd --database=$db_name < ./db.sql -elif [ $database -eq 2 ]; then - # Removing postgresql database - ynh_script_progression --message="Reinstalling dependencies..." - # Define and install dependencies - ynh_install_app_dependencies $pkg_dependencies - ynh_script_progression --message="Restoring the PostgreSQL database..." - db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) - ynh_psql_test_if_first_run - ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd - ynh_psql_execute_file_as_root --file="./db.sql" --database="$db_name" -fi +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 THE PHP-FPM CONFIGURATION @@ -104,7 +96,7 @@ ynh_script_progression --message="Restoring PHP-FPM configuration..." ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" # Recreate a dedicated php-fpm config -ynh_add_fpm_config --package="$extra_php_dependencies" +ynh_add_fpm_config #================================================= # SPECIFIC RESTORATION diff --git a/scripts/upgrade b/scripts/upgrade index 2f74364f..0535883d 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -22,9 +22,22 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) upload=$(ynh_app_setting_get --app=$app --key=upload) version=$(grep STD_VERSION $final_path/boot.php | cut -c 38- | rev | cut -c 5- | rev) last_update=$(grep update_time: /etc/yunohost/apps/$app/settings.yml | cut -c 14-) -database=$(ynh_app_setting_get --app=$app --key=database) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." + +# 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 + #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= @@ -48,20 +61,6 @@ if ynh_legacy_permissions_exists; then ynh_app_setting_delete --app=$app --key=is_public fi -#================================================= -# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP -#================================================= -ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." - -# 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 - #================================================= # CREATE DEDICATED USER #================================================= @@ -154,7 +153,7 @@ ynh_add_nginx_config ynh_print_info "Upgrading PHP-FPM configuration..." # Create a dedicated php-fpm config -ynh_add_fpm_config --package="$extra_php_dependencies" +ynh_add_fpm_config ### Verify the checksum of a file, stored by `ynh_store_file_checksum` in the install script. ### And create a backup of this file if the checksum is different. So the file will be backed up if the admin had modified it. @@ -170,6 +169,7 @@ ynh_script_progression --message="Upgrading logrotate configuration..." # Use logrotate to manage app-specific logfile(s) ynh_use_logrotate --non-append +#================================================= # UPGRADE FAIL2BAN #================================================= ynh_script_progression --message="Re-configure Fail2Ban..." @@ -183,6 +183,7 @@ ynh_add_config --template="../conf/poller-cron" --destination="/etc/cron.d/$app" # UPGRADE DEPENDENCIES #================================================= ynh_script_progression --message="Upgrading dependencies..." + if [ $database -eq 1 ]; then #================================================= # CHECK VERSION FOR SPECIFIC MYSQL UPDATE