1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/mattermost_ynh.git synced 2024-09-03 19:36:29 +02:00

Merge pull request #52 from YunoHost-Apps/modernize-scripts

Modernize scripts
This commit is contained in:
Pierre de La Morinerie 2017-10-12 12:37:42 +05:30 committed by GitHub
commit 1090b1a946
8 changed files with 220 additions and 95 deletions

View file

@ -11,6 +11,7 @@ See https://ci-apps.yunohost.org/jenkins/job/mattermost%20(Community)/ for check
Mattermost requires: Mattermost requires:
* A x86_64 system (check with `uname -m`), * A x86_64 system (check with `uname -m`),
* Yunohost 2.6.4 or higher (check in Yunohost Admin panel),
* MySQL 5.6 or higher, or MariaDB 10 or higher (check with `mysql --version`). * MySQL 5.6 or higher, or MariaDB 10 or higher (check with `mysql --version`).
## Installing ## Installing

View file

@ -17,7 +17,7 @@
"nginx" "nginx"
], ],
"requirements": { "requirements": {
"yunohost": ">= 2.4.0" "yunohost": ">= 2.6.4"
}, },
"arguments": { "arguments": {
"install" : [ "install" : [

View file

@ -1,23 +1,33 @@
#!/bin/bash #!/bin/bash
# Retrieve arguments #=================================================
domain=$YNH_APP_ARG_DOMAIN # GENERIC START
is_public=$YNH_APP_ARG_PUBLIC_SITE #=================================================
analytics=$YNH_APP_ARG_ANALYTICS # IMPORT GENERIC HELPERS
path="" #=================================================
# Source app helpers
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
# Exit if an error occurs during the execution of the script # Exit if an error occurs during the execution of the script
ynh_abort_if_errors ynh_abort_if_errors
# Set up common variables #=================================================
root_path="$(pwd)/.." # RETRIEVE ARGUMENTS FROM THE MANIFEST
final_path=/var/www/mattermost #=================================================
data_path=/home/yunohost.app/mattermost
version=$(cat "$root_path/VERSION") app=$YNH_APP_INSTANCE_NAME
archive_filename="mattermost-$version.tar.gz" domain=$YNH_APP_ARG_DOMAIN
is_public=$YNH_APP_ARG_PUBLIC_SITE
analytics=$YNH_APP_ARG_ANALYTICS
path_url="/"
#=================================================
# CHECK IF THE APP CAN BE INSTALLED
#=================================================
# Allow using the `ynh_die` command without triggering linter warnings # Allow using the `ynh_die` command without triggering linter warnings
function script_die () { function script_die () {
@ -45,44 +55,53 @@ then
script_die "Mattermost requires MySQL 5.6 or higher, or MariaDB 10 or higher." script_die "Mattermost requires MySQL 5.6 or higher, or MariaDB 10 or higher."
fi fi
# Check domain availability # Normalize the url path syntax
sudo yunohost app checkurl $domain$path -a mattermost path_url=$(ynh_normalize_url_path $path_url)
if [[ ! $? -eq 0 ]]; then # Check web path availability
script_die "The app cannot be installed at '$domain$path': this location is already used." ynh_webpath_available $domain $path_url
fi # Register (book) web path
ynh_app_setting_set mattermost domain "$domain" ynh_webpath_register $app $domain $path_url
# Store setting
ynh_app_setting_set "$app" domain "$domain"
#=================================================
# SET UP INSTALLATION VARIABLES
#=================================================
root_path="$(pwd)/.."
final_path="/var/www/$app"
data_path="/home/yunohost.app/$app"
version=$(cat "$root_path/VERSION")
archive_filename="mattermost-$version.tar.gz"
#=================================================
# INSTALL DEPENDENCIES
#=================================================
# Install dependencies
command -v supervisorctl >/dev/null 2>&1 || sudo apt-get install -y supervisor command -v supervisorctl >/dev/null 2>&1 || sudo apt-get install -y supervisor
# Initialize database and store mysql password for upgrade #=================================================
# CREATE A MYSQL DATABASE
#=================================================
db_name="mattermost" db_name="mattermost"
db_user="mmuser" db_user="mmuser"
db_password=$(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_password=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d 'A-Za-z0-9' | sed -n 's/\(.\{24\}\).*/\1/p')
ynh_mysql_create_db $db_name $db_user $db_password ynh_mysql_create_db $db_name $db_user $db_password
ynh_app_setting_set mattermost mysqlpwd "$db_password" ynh_app_setting_set mattermost mysqlpwd "$db_password"
# Delete db and user if exit with an error #=================================================
function fail_properly # CREATE USER FOR EMAIL NOTIFICATIONS
{ #=================================================
set +e
ynh_mysql_execute_as_root "DROP DATABASE $db_name ; DROP USER $db_user@localhost ;"
sudo userdel mattermost
sudo rm -Rf "$final_path"
sudo rm "$archive_filename"
# Exit (without triggering a package_linter warning)
script_die "An error occurred during the installation."
}
trap fail_properly ERR
# Create user for email notifications
smtp_password=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d 'A-Za-z0-9' | sed -n 's/\(.\{24\}\).*/\1/p') smtp_password=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d 'A-Za-z0-9' | sed -n 's/\(.\{24\}\).*/\1/p')
sudo useradd -M --shell /bin/false -p $(openssl passwd -1 "$smtp_password") "mattermost" sudo useradd -M --shell /bin/false -p $(openssl passwd -1 "$smtp_password") "mattermost"
ynh_app_setting_set mattermost smtppwd "$smtp_password" ynh_app_setting_set mattermost smtppwd "$smtp_password"
# Download and install code #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
archive_url="https://releases.mattermost.com/${version}/mattermost-team-${version}-linux-amd64.tar.gz" archive_url="https://releases.mattermost.com/${version}/mattermost-team-${version}-linux-amd64.tar.gz"
sudo mkdir -p "$final_path" sudo mkdir -p "$final_path"
@ -92,12 +111,16 @@ sudo wget --quiet --output-document "$archive_filename" "$archive_url"
sudo tar -xvz --file "$archive_filename" --directory "$final_path" --strip-components 1 sudo tar -xvz --file "$archive_filename" --directory "$final_path" --strip-components 1
sudo rm -f "$archive_filename" sudo rm -f "$archive_filename"
# Change variables in Mattermost config #=================================================
# EDIT MATTERMOST CONFIG
#=================================================
# Configure the database connection
db_connection_url="${db_user}:${db_password}@tcp(127.0.0.1:3306)/${db_name}?charset=utf8mb4,utf8" db_connection_url="${db_user}:${db_password}@tcp(127.0.0.1:3306)/${db_name}?charset=utf8mb4,utf8"
sudo sed -i "s|\"DataSource\": \".*\"|\"DataSource\": \"${db_connection_url}\"|g" $final_path/config/config.json sudo sed -i "s|\"DataSource\": \".*\"|\"DataSource\": \"${db_connection_url}\"|g" $final_path/config/config.json
# Configure uploaded files directory
sudo sed -i "s|\"Directory\": \"./data/\"|\"Directory\": \"${data_path}/\"|g" $final_path/config/config.json sudo sed -i "s|\"Directory\": \"./data/\"|\"Directory\": \"${data_path}/\"|g" $final_path/config/config.json
# Configure SMTP account for sending email notifications
sudo sed -i "s|\"SendEmailNotifications\": false|\"SendEmailNotifications\": true|g" $final_path/config/config.json sudo sed -i "s|\"SendEmailNotifications\": false|\"SendEmailNotifications\": true|g" $final_path/config/config.json
sudo sed -i "s|\"FeedbackName\": \"\"|\"FeedbackName\": \"Mattermost notification\"|g" $final_path/config/config.json sudo sed -i "s|\"FeedbackName\": \"\"|\"FeedbackName\": \"Mattermost notification\"|g" $final_path/config/config.json
sudo sed -i "s|\"FeedbackEmail\": \"\"|\"FeedbackEmail\": \"no-reply@${domain}\"|g" $final_path/config/config.json sudo sed -i "s|\"FeedbackEmail\": \"\"|\"FeedbackEmail\": \"no-reply@${domain}\"|g" $final_path/config/config.json
@ -105,34 +128,55 @@ sudo sed -i "s|\"SMTPUsername\": \"\"|\"SMTPUsername\": \"mattermost\"|g"
sudo sed -i "s|\"SMTPPassword\": \"\"|\"SMTPPassword\": \"${smtp_password}\"|g" $final_path/config/config.json sudo sed -i "s|\"SMTPPassword\": \"\"|\"SMTPPassword\": \"${smtp_password}\"|g" $final_path/config/config.json
sudo sed -i "s|\"SMTPServer\": \"\"|\"SMTPServer\": \"localhost\"|g" $final_path/config/config.json sudo sed -i "s|\"SMTPServer\": \"\"|\"SMTPServer\": \"localhost\"|g" $final_path/config/config.json
sudo sed -i "s|\"SMTPPort\": \"\"|\"SMTPPort\": \"25\"|g" $final_path/config/config.json sudo sed -i "s|\"SMTPPort\": \"\"|\"SMTPPort\": \"25\"|g" $final_path/config/config.json
# Disable Mattermost debug console by default
sudo sed -i "s|\"EnableConsole\": true|\"EnableConsole\": false|g" $final_path/config/config.json sudo sed -i "s|\"EnableConsole\": true|\"EnableConsole\": false|g" $final_path/config/config.json
# Configure log file location
sudo sed -i "s|\"FileLocation\": \"\"|\"FileLocation\": \"/var/log\"|g" $final_path/config/config.json sudo sed -i "s|\"FileLocation\": \"\"|\"FileLocation\": \"/var/log\"|g" $final_path/config/config.json
# Configure analytics according to user choice
if [ $analytics -eq 0 ]; then if [ $analytics -eq 0 ]; then
sudo sed -i "s|\"EnableDiagnostics\": true|\"EnableDiagnostics\": false|g" $final_path/config/config.json sudo sed -i "s|\"EnableDiagnostics\": true|\"EnableDiagnostics\": false|g" $final_path/config/config.json
fi fi
ynh_app_setting_set mattermost analytics "$analytics" ynh_app_setting_set "$app" analytics "$analytics"
#=================================================
# SECURE FILES AND DIRECTORIES
#=================================================
# Set permissions to app directories
sudo chown -R www-data: $final_path sudo chown -R www-data: $final_path
sudo chown -R www-data: $data_path sudo chown -R www-data: $data_path
# Modify Nginx configuration file and copy it to Nginx conf directory #=================================================
sudo cp $root_path/conf/nginx.conf-nosub /etc/nginx/conf.d/$domain.d/mattermost.conf # NGINX CONFIGURATION
#=================================================
# Copy conf/nginx.conf to the correct location
ynh_add_nginx_config
#=================================================
# SETUP SUPERVISOR
#=================================================
# Copy supervisor script
sudo cp $root_path/conf/supervisor.conf /etc/supervisor/conf.d/mattermost.conf sudo cp $root_path/conf/supervisor.conf /etc/supervisor/conf.d/mattermost.conf
# Enable public access if needed #=================================================
ynh_app_setting_set mattermost is_public "$is_public" # SETUP SSOWAT
#=================================================
ynh_app_setting_set "$app" is_public "$is_public"
if [ "$is_public" = "Yes" ]; if [ "$is_public" = "Yes" ];
then then
ynh_app_setting_set mattermost unprotected_uris "/" ynh_app_setting_set "$app" unprotected_uris "/"
fi fi
# Reload Nginx and regenerate SSOwat conf #=================================================
# RELOAD NGINX
#=================================================
sudo service nginx reload sudo service nginx reload
sudo yunohost app ssowatconf sudo yunohost app ssowatconf
# Start app #=================================================
# START APP
#=================================================
sudo supervisorctl reload sudo supervisorctl reload

View file

@ -1,32 +1,61 @@
#!/bin/bash #!/bin/bash
set -u # treat unset variables as an error set -u # treat unset variables as an error
# Source app helpers #=================================================
# GENERIC START
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
# Read configuration #=================================================
# LOAD SETTINGS
#=================================================
app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get mattermost domain) domain=$(ynh_app_setting_get mattermost domain)
db_name="mattermost" db_name="mattermost"
db_user="mmuser" db_user="mmuser"
final_path="/var/www/$app"
data_path="/home/yunohost.app/$app"
# Stop service #=================================================
sudo supervisorctl stop mattermost # STANDARD REMOVE
#=================================================
# STOP AND REMOVE SERVICE
#=================================================
# Remove sources and data sudo supervisorctl stop "$app"
sudo rm -rf /var/www/mattermost sudo rm -f "/etc/supervisor/conf.d/${app}.conf"
sudo rm -rf /home/yunohost.app/mattermost
# Remove database #=================================================
ynh_mysql_execute_as_root "DROP DATABASE $db_name ; DROP USER $db_user@localhost ;" # REMOVE THE MYSQL DATABASE
#=================================================
# Remove uploaded files ynh_mysql_remove_db "$db_user" "$db_name"
# Delete SMTP user #=================================================
sudo userdel mattermost # REMOVE APP MAIN DIR
#=================================================
# Remove configuration files ynh_secure_remove "$final_path"
sudo rm -f /etc/nginx/conf.d/$domain.d/mattermost.conf ynh_secure_remove "$data_path"
sudo rm -f /etc/supervisor/conf.d/mattermost.conf
# Remove log files #=================================================
sudo rm -f /var/log/mattermost.log # REMOVE NGINX CONFIGURATION
#=================================================
ynh_remove_nginx_config
#=================================================
# REMOVE LOG FILE
#=================================================
sudo rm -f "/var/log/${app}.log"
#=================================================
# REMOVE DEDICATED USER
#=================================================
ynh_system_user_delete "$app"

View file

@ -21,6 +21,7 @@ app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get $app domain) domain=$(ynh_app_setting_get $app domain)
is_public=$(ynh_app_setting_get $app is_public) is_public=$(ynh_app_setting_get $app is_public)
path_url="/"
final_path="/var/www/$app" final_path="/var/www/$app"
data_path="/home/yunohost.app/$app" data_path="/home/yunohost.app/$app"
db_name="$app" db_name="$app"
@ -30,7 +31,7 @@ db_user="mmuser"
# CHECK IF THE APP CAN BE RESTORED # CHECK IF THE APP CAN BE RESTORED
#================================================= #=================================================
yunohost app checkurl "${domain}" -a "$app" \ ynh_webpath_available $domain $path_url \
|| ynh_die "Path not available: ${domain}" || ynh_die "Path not available: ${domain}"
test ! -d $final_path \ test ! -d $final_path \
|| ynh_die "There is already a directory: $final_path " || ynh_die "There is already a directory: $final_path "
@ -105,8 +106,13 @@ ynh_restore_file "/etc/supervisor/conf.d/$app.conf"
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
#================================================= #=================================================
# RELOAD NGINX AND START THE APP # RELOAD NGINX
#================================================= #=================================================
sudo service nginx reload sudo service nginx reload
#=================================================
# START SERVER
#=================================================
sudo supervisorctl reload sudo supervisorctl reload

View file

@ -1,65 +1,110 @@
#!/bin/bash #!/bin/bash
# Source app helpers #=================================================
# GENERIC START
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
# Exit if an error occurs during the execution of the script # Exit if an error occurs during the execution of the script
ynh_abort_if_errors ynh_abort_if_errors
# Retrieve arguments #=================================================
# LOAD SETTINGS
#=================================================
app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get mattermost domain) domain=$(ynh_app_setting_get mattermost domain)
is_public=$(ynh_app_setting_get mattermost is_public) is_public=$(ynh_app_setting_get mattermost is_public)
# Set up common variables
root_path="$(pwd)/.." root_path="$(pwd)/.."
final_path=/var/www/mattermost final_path=/var/www/mattermost
version=$(cat "$root_path/VERSION") version=$(cat "$root_path/VERSION")
archive_filename="mattermost-$version.tar.gz" archive_filename="mattermost-$version.tar.gz"
# Cleanup and restart if exit with an error #=================================================
function cleanup_and_restart # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
{ #=================================================
set +e
sudo rm -f "$archive_filename"
sudo supervisorctl start mattermost
# Exit (without triggering a package_linter warning) # Backup the current version of the app
die_command='ynh_' + 'die' ynh_backup_before_upgrade
$die_command "An error occurred during the installation." ynh_clean_setup () {
# Restore the backup if the upgrade fails
ynh_restore_upgradebackup
# Remove the temporary archive
sudo rm -f "$archive_filename"
# Restart the server
sudo supervisorctl restart mattermost
} }
trap cleanup_and_restart ERR
# Download code # Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#=================================================
# DOWNLOAD SOURCE
#=================================================
archive_url="https://releases.mattermost.com/${version}/mattermost-team-${version}-linux-amd64.tar.gz" archive_url="https://releases.mattermost.com/${version}/mattermost-team-${version}-linux-amd64.tar.gz"
sudo wget --quiet --output-document "$archive_filename" "$archive_url" sudo wget --quiet --output-document "$archive_filename" "$archive_url"
# Stop server #=================================================
# STOP SERVER
#=================================================
sudo supervisorctl stop mattermost sudo supervisorctl stop mattermost
# Backup configuration file #=================================================
# BACKUP CONFIGURATION FILE
#=================================================
config_file="$final_path/config/config.json" config_file="$final_path/config/config.json"
backup_config_file="/tmp/config.json" backup_config_file="/tmp/config.json"
sudo cp -f "$config_file" "$backup_config_file" sudo cp -f "$config_file" "$backup_config_file"
# Copy new code #=================================================
# COPY NEW CODE
#=================================================
sudo rm -rf "$final_path" sudo rm -rf "$final_path"
sudo mkdir -p "$final_path" sudo mkdir -p "$final_path"
sudo tar -xvz --file "$archive_filename" --directory "$final_path" --strip-components 1 sudo tar -xvz --file "$archive_filename" --directory "$final_path" --strip-components 1
sudo rm -f "$archive_filename" sudo rm -f "$archive_filename"
# Restore configuration file #=================================================
# RESTORE CONFIGURATION FILE
#=================================================
sudo cp -f "$backup_config_file" "$config_file" sudo cp -f "$backup_config_file" "$config_file"
#=================================================
# SPECIFIC UPGRADE STEPS
#=================================================
# Fix log FileLocation path (changed in Mattermost 3.8, makes Mattermost >= 4.2 crash) # Fix log FileLocation path (changed in Mattermost 3.8, makes Mattermost >= 4.2 crash)
# https://docs.mattermost.com/administration/changelog.html#release-v3-8-3 # https://docs.mattermost.com/administration/changelog.html#release-v3-8-3
sudo sed -i "s|\"FileLocation\": \"/var/log/mattermost.log\"|\"FileLocation\": \"/var/log\"|g" "$config_file" sudo sed -i "s|\"FileLocation\": \"/var/log/mattermost.log\"|\"FileLocation\": \"/var/log\"|g" "$config_file"
# Restore file permissions #=================================================
# RESTORE FILE PERMISSIONS
#=================================================
sudo chown -R www-data: "$final_path" sudo chown -R www-data: "$final_path"
# Update Nginx configuration file #=================================================
sudo cp -f $root_path/conf/nginx.conf-nosub /etc/nginx/conf.d/$domain.d/mattermost.conf # RELOAD NGINX
#=================================================
sudo service nginx reload
#=================================================
# START SERVER
#=================================================
# Start server
sudo supervisorctl start mattermost sudo supervisorctl start mattermost

View file

@ -136,7 +136,7 @@ function test_simple_upgrade() {
function test_simple_backup() { function test_simple_backup() {
echo "--- Running simple backup test ---" echo "--- Running simple backup test ---"
_vagrant_ssh "sudo yunohost backup create --name mattermost-test-backup --ignore-system --apps $APP_NAME $VERBOSE_OPT" _vagrant_ssh "sudo yunohost backup create --name mattermost-test-backup --ignore-system $VERBOSE_OPT --apps $APP_NAME"
} }
function test_simple_remove() { function test_simple_remove() {
@ -146,7 +146,7 @@ function test_simple_remove() {
function test_simple_restore() { function test_simple_restore() {
echo "--- Running simple restore test ---" echo "--- Running simple restore test ---"
_vagrant_ssh "sudo yunohost backup restore mattermost-test-backup --force --ignore-system --apps $APP_NAME $VERBOSE_OPT" _vagrant_ssh "sudo yunohost backup restore mattermost-test-backup --force --ignore-system $VERBOSE_OPT --apps $APP_NAME"
_assert_mattermost_frontpage_up "$DOMAIN" _assert_mattermost_frontpage_up "$DOMAIN"
} }