This commit is contained in:
YunoHost Bot 2024-09-02 22:31:30 +02:00 committed by GitHub
commit 1af5396776
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 244 additions and 278 deletions

1
.gitignore vendored
View file

@ -221,3 +221,4 @@ pip-log.txt
*-swp *-swp
auto_update_config.sh auto_update_config.sh
*.sw[op]

View file

@ -1,3 +1,5 @@
# WARNING: Don't edit this file. All change will be removed after each app upgrade
import os import os
daemon = True daemon = True

View file

@ -1,3 +1,5 @@
# WARNING: Don't edit this file. All change will be removed after each app upgrade
[DATABASE] [DATABASE]
type = mysql type = mysql
host = 127.0.0.1 host = 127.0.0.1

View file

@ -1,3 +1,5 @@
# WARNING: Don't edit this file. All change will be removed after each app upgrade
[fileserver] [fileserver]
port = __PORT_FILESERVER__ port = __PORT_FILESERVER__

View file

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# WARNING: Don't edit this file. All change will be removed after each app upgrade
SECRET_KEY = "{{ seahub_secret_key }}" SECRET_KEY = "{{ seahub_secret_key }}"
DATABASES = { DATABASES = {

View file

@ -18,7 +18,8 @@ code = "https://github.com/haiwen/seafile-server"
cpe = "cpe:2.3:a:seafile:seafile" cpe = "cpe:2.3:a:seafile:seafile"
[integration] [integration]
yunohost = ">= 11.2.13" yunohost = ">= 11.2.30"
helpers_version = "2.1"
architectures = ["amd64", "arm64"] architectures = ["amd64", "arm64"]
multi_instance = false multi_instance = false
ldap = true ldap = true
@ -62,12 +63,10 @@ ram.runtime = "500M"
[resources] [resources]
[resources.system_user] [resources.system_user]
allow_email = true allow_email = true
home = "/opt/yunohost/__APP__"
[resources.install_dir] [resources.install_dir]
dir = "/opt/yunohost/__APP__"
owner = "__APP__:rwx" owner = "__APP__:rwx"
group = "www-data:rx" group = "www-data:r-x"
[resources.data_dir] [resources.data_dir]
dir = "/home/yunohost.app/__APP__" dir = "/home/yunohost.app/__APP__"

View file

@ -31,7 +31,7 @@ fi
#================================================= #=================================================
run_seafile_cmd() { run_seafile_cmd() {
ynh_exec_warn_less systemd-run --wait --uid="$app" --gid="$app" \ ynh_hide_warnings systemd-run --wait --uid="$app" --gid="$app" \
--property=RootDirectory="$install_dir"/seafile_image \ --property=RootDirectory="$install_dir"/seafile_image \
--property="BindPaths=$systemd_seafile_bind_mount" \ --property="BindPaths=$systemd_seafile_bind_mount" \
$@ $@
@ -47,8 +47,10 @@ install_source() {
} }
set_permission() { set_permission() {
chown "$app:$app" "$install_dir"
chmod u=rwx,g=rx,o= "$install_dir"
chown -R "$app:$app" "$install_dir"/{conf,ccnet} chown -R "$app:$app" "$install_dir"/{conf,ccnet}
chmod -R u+rwX,g-w,o= "$install_dir"/{conf,ccnet} chmod -R u+rwX,g+rX-w,o= "$install_dir"/{conf,ccnet}
chown -R "$app:$app" "$install_dir"/seafile_image/opt/seafile chown -R "$app:$app" "$install_dir"/seafile_image/opt/seafile
chmod -R u+rwX,g-w,o= "$install_dir"/seafile_image/opt/seafile chmod -R u+rwX,g-w,o= "$install_dir"/seafile_image/opt/seafile
@ -67,6 +69,7 @@ set_permission() {
test -e "$install_dir"/seahub-data && setfacl -m user:www-data:rX "$data_dir" test -e "$install_dir"/seahub-data && setfacl -m user:www-data:rX "$data_dir"
test -e "$install_dir"/seahub-data && setfacl -R -m user:www-data:rX "$data_dir"/seahub-data test -e "$install_dir"/seahub-data && setfacl -R -m user:www-data:rX "$data_dir"/seahub-data
chmod u=rwx,g=rx,o= "$data_dir"
find "$data_dir" \( \! -perm -o= \ find "$data_dir" \( \! -perm -o= \
-o \! -user "$app" \ -o \! -user "$app" \
-o \! -group "$app" \) \ -o \! -group "$app" \) \
@ -76,14 +79,11 @@ set_permission() {
clean_url_in_db_config() { clean_url_in_db_config() {
sql_request='DELETE FROM `constance_config` WHERE `constance_key`= "SERVICE_URL"' sql_request='DELETE FROM `constance_config` WHERE `constance_key`= "SERVICE_URL"'
ynh_mysql_execute_as_root --sql="$sql_request" --database=seahubdb ynh_mysql_db_shell <<< "$sql_request" --database=seahubdb
sql_request='DELETE FROM `constance_config` WHERE `constance_key`= "FILE_SERVER_ROOT"' sql_request='DELETE FROM `constance_config` WHERE `constance_key`= "FILE_SERVER_ROOT"'
ynh_mysql_execute_as_root --sql="$sql_request" --database=seahubdb ynh_mysql_db_shell <<< "$sql_request" --database=seahubdb
} }
ensure_vars_set() { ensure_vars_set() {
if [ -z "${jwt_private_key_notification_server:-}" ]; then ynh_app_setting_set_default --key=jwt_private_key_notification_server --value=$(ynh_string_random -l 32)
jwt_private_key_notification_server=$(ynh_string_random -l 32)
ynh_app_setting_set --app="$app" --key=jwt_private_key_notification_server --value="$jwt_private_key_notification_server"
fi
} }

View file

@ -15,7 +15,7 @@ seafile_version=$(ynh_app_upstream_version)
seafile_code="$install_dir/seafile_image/opt/seafile/seafile-server-$seafile_version" seafile_code="$install_dir/seafile_image/opt/seafile/seafile-server-$seafile_version"
if systemctl is-active seafile --quiet || systemctl is-active seahub --quiet; then if systemctl is-active seafile --quiet || systemctl is-active seahub --quiet; then
ynh_print_warn --message="It's hightly recommended to make your backup when the service is stopped. Please stop seafile service and seahub service with this command before to run the backup 'systemctl stop seafile.service seahub.service'" ynh_print_warn "It's hightly recommended to make your backup when the service is stopped. Please stop seafile service and seahub service with this command before to run the backup 'systemctl stop seafile.service seahub.service'"
fi fi
#================================================= #=================================================
@ -23,24 +23,25 @@ fi
#================================================= #=================================================
# # Backup app files # # Backup app files
ynh_print_info --message="Backing up code..." ynh_print_info "Backing up code..."
ynh_backup --src_path="$install_dir" ynh_backup "$install_dir"
ynh_print_info --message="Backing up user data..." ynh_print_info "Backing up user data..."
ynh_backup --src_path="$data_dir" --dest_path="data" --is_big=1 ynh_backup "$data_dir" --dest_path="data"
ynh_print_info --message="Backing up configuration..."
ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/${app}.conf" ynh_print_info "Backing up configuration..."
ynh_backup --src_path=/etc/systemd/system/seafile.service ynh_backup "/etc/nginx/conf.d/$domain.d/${app}.conf"
ynh_backup --src_path=/etc/systemd/system/seahub.service ynh_backup /etc/systemd/system/seafile.service
ynh_backup --src_path=/etc/fail2ban/jail.d/"$app".conf ynh_backup /etc/systemd/system/seahub.service
ynh_backup --src_path=/etc/fail2ban/filter.d/"$app".conf ynh_backup /etc/fail2ban/jail.d/"$app".conf
ynh_backup /etc/fail2ban/filter.d/"$app".conf
# Backup logs # Backup logs
ynh_backup --src_path="/var/log/$app" ynh_backup "/var/log/$app"
# Backup mysql # Backup mysql
ynh_print_info --message="Backing up database" ynh_print_info "Backing up database"
ynh_mysql_dump_db --database="$db_name" > "${YNH_CWD}"/seafiledb.dmp ynh_mysql_dump_db > "${YNH_CWD}"/seafiledb.dmp
ynh_mysql_dump_db --database=ccnetdb > "${YNH_CWD}"/ccnetdb.dmp ynh_mysql_dump_db ccnetdb > "${YNH_CWD}"/ccnetdb.dmp
ynh_mysql_dump_db --database=seahubdb > "${YNH_CWD}"/seahubdb.dmp ynh_mysql_dump_db seahubdb > "${YNH_CWD}"/seahubdb.dmp
ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." ynh_print_info "Backup script completed for $app. (YunoHost will then actually copy those files to the archive)."

View file

@ -14,35 +14,33 @@ source /usr/share/yunohost/helpers
seafile_version="$(ynh_app_upstream_version)" seafile_version="$(ynh_app_upstream_version)"
seafile_code="$install_dir/seafile_image/opt/seafile/seafile-server-$seafile_version" seafile_code="$install_dir/seafile_image/opt/seafile/seafile-server-$seafile_version"
#=================================================
# STANDARD MODIFICATIONS
#================================================= #=================================================
ynh_script_progression --message="Updating NGINX web server configuration..." --weight=1 ynh_script_progression "Updating NGINX web server configuration..."
ynh_change_url_nginx_config ynh_config_change_url_nginx
#================================================= #=================================================
# SPECIFIC MODIFICATIONS # SPECIFIC MODIFICATIONS
#================================================= #=================================================
ynh_script_progression --message="Stoping services..." ynh_script_progression "Stoping services..."
# Stop service before any change # Stop service before any change
ynh_systemd_action --service_name=seafile --action=stop ynh_systemctl --service=seafile --action=stop
ynh_systemd_action --service_name=seahub --action=stop ynh_systemctl --service=seahub --action=stop
sleep 2 sleep 2
pkill -f seafile-controller || true pkill -f seafile-controller || true
pkill -f seaf-server || true pkill -f seaf-server || true
pkill -f ccnet-server || true pkill -f ccnet-server || true
pkill -f seahub || true pkill -f seahub || true
ynh_script_progression --message="Updating seafile configuration..." ynh_script_progression "Updating seafile configuration..."
# Update Seafile Config # Update Seafile Config
ynh_add_config --jinja --template=seahub_settings.py --destination="$install_dir"/conf/seahub_settings.py ynh_config_add --jinja --template=seahub_settings.py --destination="$install_dir"/conf/seahub_settings.py
ynh_add_config --template=ccnet.conf --destination="$install_dir"/conf/ccnet.conf ynh_config_add --template=ccnet.conf --destination="$install_dir"/conf/ccnet.conf
ynh_add_config --template=gunicorn.conf.py --destination="$install_dir"/conf/gunicorn.conf.py ynh_config_add --template=gunicorn.conf.py --destination="$install_dir"/conf/gunicorn.conf.py
ynh_add_config --template=seafdav.conf --destination="$install_dir"/conf/seafdav.conf ynh_config_add --template=seafdav.conf --destination="$install_dir"/conf/seafdav.conf
# Update permissions # Update permissions
ynh_permission_url --permission=file_server --url="$domain"/seafhttp ynh_permission_url --permission=file_server --url="$domain"/seafhttp
@ -55,9 +53,10 @@ clean_url_in_db_config
sleep 2 sleep 2
# Reload services # Reload services
ynh_script_progression --message="Starting services..." ynh_script_progression "Starting services..."
ynh_systemd_action --service_name=seafile -l "spawned seaf-server, pid " -p /var/log/seafile/controller.log ynh_systemctl --service=seafile --wait_until="spawned seaf-server, pid " --log_path=/var/log/seafile/controller.log
ynh_systemd_action --service_name=seahub -l "Started Seafile hub." -p "systemd" sleep 2
ynh_systemctl --service=seahub --wait_until="Started Seafile hub." --log_path="systemd"
sleep 2 sleep 2
ynh_script_progression --message="Change of URL completed for $app" --time=--last ynh_script_progression "Change of URL completed for $app" --time=

View file

@ -17,11 +17,9 @@ seafile_code="$install_dir/seafile_image/opt/seafile/seafile-server-$seafile_ver
ensure_vars_set ensure_vars_set
#=================================================
# STANDARD MODIFICATIONS
#================================================= #=================================================
ynh_script_progression --message="Creating base directory..." ynh_script_progression "Creating base directory..."
if [ -n "$(ls -A "$data_dir")" ]; then if [ -n "$(ls -A "$data_dir")" ]; then
old_data_dir_path="${data_dir}_$(date '+%Y%m%d.%H%M%S')" old_data_dir_path="${data_dir}_$(date '+%Y%m%d.%H%M%S')"
@ -35,25 +33,25 @@ mkdir -p "$data_dir"/{seafile-data,seahub-data}
mkdir -p "$install_dir"/{conf,ccnet} mkdir -p "$install_dir"/{conf,ccnet}
# Download new version from sources # Download new version from sources
ynh_script_progression --message="Installing sources files..." --weight=7 ynh_script_progression "Installing sources files..."
install_source install_source
# init databases # init databases
ynh_script_progression --message="Configuring MySQL database..." ynh_script_progression "Configuring MySQL database..."
db_user=seafile db_user=seafile
ynh_''mysql_setup_db --db_user="$db_user" --db_name=ccnetdb --db_pwd="$db_pwd" ynh_''mysql_create_db ccnetdb "$db_user" "$db_pwd"
ynh_''mysql_setup_db --db_user="$db_user" --db_name=seahubdb --db_pwd="$db_pwd" ynh_''mysql_create_db seahubdb "$db_user" "$db_pwd"
ynh_script_progression --message="Configuring application..." --weight=3 ynh_script_progression "Configuring application..."
# Run install script # Run install script
set_permission set_permission
ynh_replace_special_string --match_string='seafile_config.seafile_dir = seafile_config.validate_seafile_dir(seafile_dir)' \ ynh_replace_regex --match='seafile_config.seafile_dir = seafile_config.validate_seafile_dir(seafile_dir)' \
--replace_string='seafile_config.seafile_dir = seafile_dir' \ --replace='seafile_config.seafile_dir = seafile_dir' \
--target_file="$seafile_code/setup-seafile-mysql.py" --file="$seafile_code/setup-seafile-mysql.py"
ynh_replace_special_string --match_string="Utils.error('Ccnet config dir \\\"%s\\\" already exists.' % ccnet_config.ccnet_dir)" \ ynh_replace_regex --match="Utils.error('Ccnet config dir \\\"%s\\\" already exists.' % ccnet_config.ccnet_dir)" \
--replace_string='patched = 1' \ --replace='patched = 1' \
--target_file="$seafile_code/setup-seafile-mysql.py" --file="$seafile_code/setup-seafile-mysql.py"
run_seafile_cmd bash "/opt/seafile/seafile-server-$seafile_version/setup-seafile-mysql.sh" auto \ run_seafile_cmd bash "/opt/seafile/seafile-server-$seafile_version/setup-seafile-mysql.sh" auto \
--server-name "$server_name" \ --server-name "$server_name" \
--server-ip "$domain" \ --server-ip "$domain" \
@ -69,79 +67,77 @@ run_seafile_cmd bash "/opt/seafile/seafile-server-$seafile_version/setup-seafile
# Retrive values from auto generated config file # Retrive values from auto generated config file
seahub_secret_key=$(grep -P 'SECRET_KEY\s*=\s*".+"' "$install_dir"/conf/seahub_settings.py | cut -d'"' -f2) seahub_secret_key=$(grep -P 'SECRET_KEY\s*=\s*".+"' "$install_dir"/conf/seahub_settings.py | cut -d'"' -f2)
ynh_app_setting_set --app="$app" --key=seahub_secret_key --value="$seahub_secret_key" ynh_app_setting_set --key=seahub_secret_key --value="$seahub_secret_key"
# Update seafile config files # Update seafile config files
ynh_add_config --jinja --template=seahub_settings.py --destination="$install_dir"/conf/seahub_settings.py ynh_config_add --jinja --template=seahub_settings.py --destination="$install_dir"/conf/seahub_settings.py
ynh_add_config --template=seafile.conf --destination="$install_dir"/conf/seafile.conf ynh_config_add --template=seafile.conf --destination="$install_dir"/conf/seafile.conf
ynh_add_config --template=ccnet.conf --destination="$install_dir"/conf/ccnet.conf ynh_config_add --template=ccnet.conf --destination="$install_dir"/conf/ccnet.conf
ynh_add_config --template=gunicorn.conf.py --destination="$install_dir"/conf/gunicorn.conf.py ynh_config_add --template=gunicorn.conf.py --destination="$install_dir"/conf/gunicorn.conf.py
ynh_add_config --template=seafdav.conf --destination="$install_dir"/conf/seafdav.conf ynh_config_add --template=seafdav.conf --destination="$install_dir"/conf/seafdav.conf
ynh_add_config --template=seafevents.conf --destination="$install_dir"/conf/seafevents.conf ynh_config_add --template=seafevents.conf --destination="$install_dir"/conf/seafevents.conf
# Configure admin info # Configure admin info
# It will be used the first start # It will be used the first start
admin_email=$(ynh_user_get_info --username="$admin" --key='mail') admin_email=$(ynh_user_get_info --username="$admin" --key='mail')
cp ../conf/create_admin.json $install_dir/conf/admin.txt cp ../conf/create_admin.json "$install_dir"/conf/admin.txt
ynh_replace_string --match_string=__ADMIN__ --replace_string="$admin_email" --target_file=$install_dir/conf/admin.txt ynh_replace --match=__ADMIN__ --replace="$admin_email" --file="$install_dir"/conf/admin.txt
ynh_replace_special_string --match_string=__PASSWORD__ --replace_string="$admin_password" --target_file=$install_dir/conf/admin.txt ynh_replace_regex --match=__PASSWORD__ --replace="$admin_password" --file="$install_dir"/conf/admin.txt
# Use symlink to store data # Use symlink to store data
if [ -e "$install_dir"/seafile-data ]; then if [ -e "$install_dir"/seafile-data ]; then
mv -t "$data_dir"/seafile-data "$install_dir"/seafile-data/* mv -t "$data_dir"/seafile-data "$install_dir"/seafile-data/*
ynh_secure_remove --file="$install_dir"/seafile-data ynh_safe_rm "$install_dir"/seafile-data
fi fi
if [ -e "$install_dir"/seahub-data ]; then if [ -e "$install_dir"/seahub-data ]; then
mv -t "$data_dir"/seahub-data "$install_dir"/seahub-data/* mv -t "$data_dir"/seahub-data "$install_dir"/seahub-data/*
ynh_secure_remove --file="$install_dir"/seahub-data ynh_safe_rm "$install_dir"/seahub-data
fi fi
if [ -e "$install_dir"/logs ]; then if [ -e "$install_dir"/logs ]; then
mv -t /var/log/"$app" "$install_dir"/logs/* mv -t /var/log/"$app" "$install_dir"/logs/*
ynh_secure_remove --file="$install_dir"/logs ynh_safe_rm "$install_dir"/logs
fi fi
ln -s "$data_dir"/seafile-data "$install_dir"/seafile-data ln -s "$data_dir"/seafile-data "$install_dir"/seafile-data
ln -s "$data_dir"/seahub-data "$install_dir"/seahub-data ln -s "$data_dir"/seahub-data "$install_dir"/seahub-data
ln -s /var/log/"$app" "$install_dir"/logs ln -s /var/log/"$app" "$install_dir"/logs
# Fix local warning # Fix local warning
ynh_replace_string --match_string=en_US.UTF-8 --replace_string="${LANG:-'en_US.UTF-8'}" --target_file="$seafile_code/seahub.sh" ynh_replace --match=en_US.UTF-8 --replace="${LANG:-'en_US.UTF-8'}" --file="$seafile_code/seahub.sh"
# Add Seafile Server to startup # Add Seafile Server to startup
ynh_script_progression --message="Configuring a systemd service..." ynh_script_progression "Configuring $app's systemd service..."
ynh_add_systemd_config --service=seafile --template=seafile.service ynh_config_add_systemd --service=seafile --template=seafile.service
ynh_add_systemd_config --service=seahub --template=seahub.service ynh_config_add_systemd --service=seahub --template=seahub.service
# register yunohost service # register yunohost service
yunohost service add seafile --description 'Main service for seafile server.' yunohost service add seafile --description 'Main service for seafile server.'
yunohost service add seahub --description 'Seafile server web interface.' yunohost service add seahub --description 'Seafile server web interface.'
# Config nginx # Config nginx
ynh_script_progression --message="Configuring nginx..." ynh_script_progression "Configuring nginx..."
ynh_add_nginx_config ynh_config_add_nginx
# Add logrotate # Add logrotate
ynh_script_progression --message="Configuring log rotation..." ynh_script_progression "Configuring log rotation..."
ynh_use_logrotate --logfile=/var/log/"$app" ynh_config_add_logrotate /var/log/"$app"
# Add fail2ban # Add fail2ban
ynh_script_progression --message="Configuring fail2ban..." ynh_script_progression "Configuring fail2ban..."
ynh_add_fail2ban_config --use_template ynh_config_add_fail2ban
#=================================================
# GENERIC FINALIZATION
#================================================= #=================================================
# Set all permissions # Set all permissions
ynh_script_progression --message="Protecting directory..." ynh_script_progression "Protecting directory..."
set_permission set_permission
# Start service # Start service
sleep 3 sleep 3
ynh_script_progression --message="Starting seafile services..." ynh_script_progression "Starting seafile services..."
ynh_systemd_action --service_name=seafile -l "spawned seaf-server, pid " -p /var/log/seafile/controller.log ynh_systemctl --service=seafile --wait_until="spawned seaf-server, pid " --log_path=/var/log/seafile/controller.log
sleep 2 sleep 2
ynh_systemd_action --service_name=seahub -l "Started Seafile hub." -p "systemd" ynh_systemctl --service=seahub --wait_until="Started Seafile hub." --log_path="systemd"
sleep 2 sleep 2
ynh_script_progression --message="Installation of $app completed" --last ynh_script_progression "Installation of $app completed"

View file

@ -18,11 +18,11 @@ seafile_code="$install_dir/seafile_image/opt/seafile/seafile-server-$seafile_ver
# STANDARD REMOVE # STANDARD REMOVE
#================================================= #=================================================
ynh_script_progression --message="Stoping services..." ynh_script_progression "Stoping services..."
# Stop all services # Stop all services
ynh_systemd_action --service_name=seafile --action=stop ynh_systemctl --service=seafile --action=stop
ynh_systemd_action --service_name=seahub --action=stop ynh_systemctl --service=seahub --action=stop
# Force to kill all process in case of a process is not stoped cleanly # Force to kill all process in case of a process is not stoped cleanly
pkill -f seafile-controller || true pkill -f seafile-controller || true
@ -30,35 +30,35 @@ pkill -f seaf-server || true
pkill -f ccnet-server || true pkill -f ccnet-server || true
pkill -f seahub || true pkill -f seahub || true
ynh_script_progression --message="Removing code..." ynh_script_progression "Removing code..."
ynh_secure_remove --file=/var/www/"$app" ynh_safe_rm /var/www/"$app"
ynh_secure_remove --file=/opt/yunohost/"$app" ynh_safe_rm /opt/yunohost/"$app"
# Remove databases # Remove databases
ynh_script_progression --message="Removing databases..." ynh_script_progression "Removing databases..."
db_helper=ynh_"mysql"_remove_db ynh_''mysql_drop_db ccnetdb
$db_helper --db_name ccnetdb --db_user seafile ynh_''mysql_drop_db seahubdb
$db_helper --db_name seahubdb --db_user seafile
# Remove systemd service # Remove systemd service
ynh_script_progression --message="Removing systemd units..." ynh_script_progression "Removing systemd units..."
ynh_remove_systemd_config --service=seafile ynh_config_remove_systemd seafile
ynh_remove_systemd_config --service=seahub ynh_config_remove_systemd seahub
# Remove nginx config # Remove nginx config
ynh_script_progression --message="Removing nginx configuration..." ynh_script_progression "Removing nginx configuration..."
ynh_remove_nginx_config ynh_config_remove_nginx
# Remove logrotate # Remove logrotate
ynh_remove_logrotate ynh_config_remove_logrotate
# Remove the dedicated fail2ban config # Remove the dedicated fail2ban config
ynh_script_progression --message="Removing fail2ban configuration..." ynh_script_progression "Removing fail2ban configuration..."
ynh_remove_fail2ban_config ynh_config_remove_fail2ban
ynh_script_progression --message="Removing seafile service..." ynh_script_progression "Removing seafile service..."
yunohost service remove seafile yunohost service remove seafile
yunohost service remove seahub yunohost service remove seahub
ynh_script_progression --message="Removal of $app completed" --last ynh_script_progression "Removal of $app completed"
sleep 1 sleep 1

View file

@ -14,64 +14,61 @@ source /usr/share/yunohost/helpers
seafile_version="$(ynh_app_upstream_version)" seafile_version="$(ynh_app_upstream_version)"
seafile_code="$install_dir/seafile_image/opt/seafile/seafile-server-$seafile_version" seafile_code="$install_dir/seafile_image/opt/seafile/seafile-server-$seafile_version"
ynh_script_progression --message="Loading settings..." ynh_script_progression "Loading settings..."
#================================================= #=================================================
# STANDARD RESTORATION STEPS # STANDARD RESTORATION STEPS
#================================================= #=================================================
# Restore all config and data # Restore all config and data
ynh_script_progression --message="Restoring files..." --weight=10 ynh_script_progression "Restoring files..."
ynh_restore ynh_restore_everything
# Restore mysql dump # Restore mysql dump
ynh_script_progression --message="Restoring database..." --weight=3 ynh_script_progression "Restoring database..."
db_helper=ynh_"mysql"_setup_db ynh_''mysql_create_db ccnetdb "$db_user" "$db_pwd"
$db_helper --db_user "$db_user" --db_name ccnetdb --db_pwd "$db_pwd" ynh_''mysql_create_db seahubdb "$db_user" "$db_pwd"
$db_helper --db_user "$db_user" --db_name seahubdb --db_pwd "$db_pwd"
su -c "mysql -u ${app} -p$db_pwd $db_name < ${YNH_CWD}/seafiledb.dmp" su -c "mysql -u ${app} -p$db_pwd $db_name < ${YNH_CWD}/seafiledb.dmp"
su -c "mysql -u ${app} -p$db_pwd ccnetdb < ${YNH_CWD}/ccnetdb.dmp" su -c "mysql -u ${app} -p$db_pwd ccnetdb < ${YNH_CWD}/ccnetdb.dmp"
su -c "mysql -u ${app} -p$db_pwd seahubdb < ${YNH_CWD}/seahubdb.dmp" su -c "mysql -u ${app} -p$db_pwd seahubdb < ${YNH_CWD}/seahubdb.dmp"
#=================================================
# GENERIC FINALIZATION
#================================================= #=================================================
# Add logrotate # Add logrotate
ynh_script_progression --message="Configuring log rotation..." ynh_script_progression "Configuring log rotation..."
mkdir -p /var/log/"$app" mkdir -p /var/log/"$app"
ynh_use_logrotate --logfile="$install_dir"/logs ynh_config_add_logrotate "$install_dir"/logs
# Set all permissions # Set all permissions
ynh_script_progression --message="Protecting directory..." ynh_script_progression "Protecting directory..."
set_permission set_permission
# Enable service and start seafile # Enable service and start seafile
ynh_script_progression --message="Reconfiguring application..." ynh_script_progression "Reconfiguring application..."
systemctl daemon-reload systemctl daemon-reload
systemctl enable seafile --quiet systemctl enable seafile --quiet
systemctl enable seahub --quiet systemctl enable seahub --quiet
# Add Seafile to YunoHost's monitored services # Add Seafile to YunoHost's monitored services
ynh_script_progression --message="Register seafile service..." ynh_script_progression "Register seafile service..."
yunohost service add seafile --description 'Main service for seafile server.' yunohost service add seafile --description 'Main service for seafile server.'
yunohost service add seahub --description 'Seafile server web interface.' yunohost service add seahub --description 'Seafile server web interface.'
ynh_script_progression --message="Reloading services..." ynh_script_progression "Reloading services..."
# Reload nginx # Reload nginx
systemctl reload nginx.service systemctl reload nginx.service
# Reload fail2ban # Reload fail2ban
ynh_systemd_action --service_name=fail2ban --action=reload ynh_systemctl --service=fail2ban --action=reload
# Avoid the current effect # Avoid the current effect
sleep 5 sleep 5
# Restart service # Restart service
ynh_script_progression --message="Starting seafile services..." --weight=3 ynh_script_progression "Starting seafile services..."
ynh_systemd_action --service_name=seafile -l "spawned seaf-server, pid " -p /var/log/seafile/controller.log ynh_systemctl --service=seafile --wait_until="spawned seaf-server, pid " --log_path=/var/log/seafile/controller.log
ynh_systemd_action --service_name=seahub -l "Started Seafile hub." -p "systemd" sleep 2
ynh_systemctl --service=seahub --wait_until="Started Seafile hub." --log_path="systemd"
sleep 2 sleep 2
ynh_script_progression --message="Restoration completed for $app" --last ynh_script_progression "Restoration completed for $app"

View file

@ -23,10 +23,10 @@ if [ "$YNH_APP_CURRENT_VERSION" == '-' ] || ynh_compare_current_package_version
ynh_die "Upgrade from this version not supported" ynh_die "Upgrade from this version not supported"
fi fi
ynh_script_progression --message="Stoping services..." ynh_script_progression "Stoping services..."
ynh_systemd_action --service_name=seafile --action=stop ynh_systemctl --service=seafile --action=stop
ynh_systemd_action --service_name=seahub --action=stop ynh_systemctl --service=seahub --action=stop
sleep 5 sleep 5
pkill -f seafile-controller || true pkill -f seafile-controller || true
pkill -f seaf-server || true pkill -f seaf-server || true
@ -42,15 +42,12 @@ if mysqlshow | grep -q seafiledb; then
$mysqlconn -e "RENAME TABLE seafiledb.$name to $db_name.$name"; $mysqlconn -e "RENAME TABLE seafiledb.$name to $db_name.$name";
done; done;
$mysqlconn -e "DROP DATABASE seafiledb" $mysqlconn -e "DROP DATABASE seafiledb"
ynh_replace_string --match_string='db_name = seafiledb' --replace_string='db_name = seafile' --target_file="$install_dir"/conf/seafile.conf ynh_replace --match='db_name = seafiledb' --replace='db_name = seafile' --file="$install_dir"/conf/seafile.conf
sed -i "s|password\s*=\s*.*^|password = $db_pwd|g" "$install_dir"/conf/seafile.conf sed -i "s|password\s*=\s*.*^|password = $db_pwd|g" "$install_dir"/conf/seafile.conf
fi fi
# Set missing settings # Set missing settings
if [ -z "${seahub_secret_key:-}" ]; then ynh_app_setting_set_default --key=seahub_secret_key --value="$(grep -P 'SECRET_KEY\s*=\s*".+"' "$install_dir"/conf/seahub_settings.py | cut -d'"' -f2)"
seahub_secret_key="$(grep -P 'SECRET_KEY\s*=\s*".+"' "$install_dir"/conf/seahub_settings.py | cut -d'"' -f2)"
ynh_app_setting_set --app="$app" --key=seahub_secret_key --value="$seahub_secret_key"
fi
# #
# Update data dir if needed # Update data dir if needed
@ -97,15 +94,15 @@ if [ ! -L "$install_dir"/logs ]; then
ln -s /var/log/"${app}" "$install_dir"/logs ln -s /var/log/"${app}" "$install_dir"/logs
fi fi
ynh_script_progression --message="Upgrading source files..." --weight=6 ynh_script_progression "Upgrading source files..."
# Download new version from sources # Download new version from sources
ynh_script_progression --message="Installing sources files..." --weight=7 ynh_script_progression "Installing sources files..."
if [ "$YNH_APP_UPGRADE_TYPE" == UPGRADE_APP ]; then if [ "$YNH_APP_UPGRADE_TYPE" == UPGRADE_APP ]; then
install_source install_source
fi fi
ynh_script_progression --message="Configuring application..." ynh_script_progression "Configuring application..."
# permission to execute update script and expect helper # permission to execute update script and expect helper
set_permission set_permission
@ -128,7 +125,7 @@ case "$installed_version" in
run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/seahub.sh" python-env python3 "/opt/seafile/seafile-server-$seafile_version/seahub/manage.py" migrate_file_comment run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/seahub.sh" python-env python3 "/opt/seafile/seafile-server-$seafile_version/seahub/manage.py" migrate_file_comment
# Update seafile by script # Update seafile by script
ynh_replace_string --match_string='read dummy' --replace_string='# patched' --target_file="$seafile_code/upgrade/upgrade_7.0_7.1.sh" ynh_replace --match='read dummy' --replace='# patched' --file="$seafile_code/upgrade/upgrade_7.0_7.1.sh"
run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/upgrade_7.0_7.1.sh" run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/upgrade_7.0_7.1.sh"
# Fix seafile data link. Look like that the upgrade script of seafile don't always work correctly # Fix seafile data link. Look like that the upgrade script of seafile don't always work correctly
@ -139,90 +136,87 @@ case "$installed_version" in
ln -s "$data_dir" "$install_dir"/seafile-data ln -s "$data_dir" "$install_dir"/seafile-data
;& ;&
"7.1."* ) "7.1."* )
ynh_replace_string --match_string='read dummy' --replace_string='# patched' --target_file="$seafile_code/upgrade/upgrade_8.0_9.0.sh" ynh_replace --match='read dummy' --replace='# patched' --file="$seafile_code/upgrade/upgrade_8.0_9.0.sh"
run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/upgrade_8.0_9.0.sh" run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/upgrade_8.0_9.0.sh"
;& ;&
"8.0."* ) "8.0."* )
ynh_replace_string --match_string='read dummy' --replace_string='# patched' --target_file="$seafile_code/upgrade/upgrade_7.1_8.0.sh" ynh_replace --match='read dummy' --replace='# patched' --file="$seafile_code/upgrade/upgrade_7.1_8.0.sh"
run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/upgrade_7.1_8.0.sh" run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/upgrade_7.1_8.0.sh"
;& ;&
"9."* ) "9."* )
ynh_replace_string --match_string='read dummy' --replace_string='# patched' --target_file="$seafile_code/upgrade/upgrade_8.0_9.0.sh" ynh_replace --match='read dummy' --replace='# patched' --file="$seafile_code/upgrade/upgrade_8.0_9.0.sh"
run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/upgrade_8.0_9.0.sh" run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/upgrade_8.0_9.0.sh"
;& ;&
"10."* ) "10."* )
ynh_replace_string --match_string='read dummy' --replace_string='# patched' --target_file="$seafile_code/upgrade/upgrade_9.0_10.0.sh" ynh_replace --match='read dummy' --replace='# patched' --file="$seafile_code/upgrade/upgrade_9.0_10.0.sh"
run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/upgrade_9.0_10.0.sh" run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/upgrade_9.0_10.0.sh"
run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/seahub.sh" python-env python3 "/opt/seafile/seafile-server-$seafile_version/migrate_ldapusers.py" run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/seahub.sh" python-env python3 "/opt/seafile/seafile-server-$seafile_version/migrate_ldapusers.py"
;& ;&
esac esac
ynh_replace_string --match_string='read dummy' --replace_string='# patched' --target_file="$seafile_code/upgrade/minor-upgrade.sh" ynh_replace --match='read dummy' --replace='# patched' --file="$seafile_code/upgrade/minor-upgrade.sh"
run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/minor-upgrade.sh" run_seafile_cmd "/opt/seafile/seafile-server-$seafile_version/upgrade/minor-upgrade.sh"
# Clean url in config in DB # Clean url in config in DB
clean_url_in_db_config clean_url_in_db_config
# Update seafile config files # Update seafile config files
ynh_add_config --jinja --template=seahub_settings.py --destination="$install_dir"/conf/seahub_settings.py ynh_config_add --jinja --template=seahub_settings.py --destination="$install_dir"/conf/seahub_settings.py
ynh_add_config --template=seafile.conf --destination="$install_dir"/conf/seafile.conf ynh_config_add --template=seafile.conf --destination="$install_dir"/conf/seafile.conf
ynh_add_config --template=ccnet.conf --destination="$install_dir"/conf/ccnet.conf ynh_config_add --template=ccnet.conf --destination="$install_dir"/conf/ccnet.conf
ynh_add_config --template=gunicorn.conf.py --destination="$install_dir"/conf/gunicorn.conf.py ynh_config_add --template=gunicorn.conf.py --destination="$install_dir"/conf/gunicorn.conf.py
ynh_add_config --template=seafdav.conf --destination="$install_dir"/conf/seafdav.conf ynh_config_add --template=seafdav.conf --destination="$install_dir"/conf/seafdav.conf
ynh_add_config --template=seafevents.conf --destination="$install_dir"/conf/seafevents.conf ynh_config_add --template=seafevents.conf --destination="$install_dir"/conf/seafevents.conf
# Fix local warning # Fix local warning
ynh_replace_string --match_string=en_US.UTF-8 --replace_string="${LANG:-'en_US.UTF-8'}" --target_file="$seafile_code/seahub.sh" ynh_replace --match=en_US.UTF-8 --replace="${LANG:-'en_US.UTF-8'}" --file="$seafile_code/seahub.sh"
#=================================================
# STANDARD UPGRADE STEPS
#================================================= #=================================================
# Config nginx # Config nginx
ynh_add_nginx_config 'seahub_port fileserver_port webdav_port' ynh_config_add_nginx 'seahub_port fileserver_port webdav_port'
# Add Seafile Server to startup # Add Seafile Server to startup
ynh_script_progression --message="Updating systemd units..." ynh_script_progression "Updating systemd units..."
ynh_add_systemd_config --service=seafile --template=seafile.service ynh_config_add_systemd --service=seafile --template=seafile.service
ynh_add_systemd_config --service=seahub --template=seahub.service ynh_config_add_systemd --service=seahub --template=seahub.service
#=================================================
# GENERIC FINALIZATION
#================================================= #=================================================
# Set all permissions # Set all permissions
ynh_script_progression --message="Protecting directory..." ynh_script_progression "Protecting directory..."
set_permission set_permission
# Add logrotate # Add logrotate
ynh_script_progression --message="Configuring log rotation..." ynh_script_progression "Configuring log rotation..."
ynh_use_logrotate --logfile=/var/log/"$app" --nonappend ynh_config_add_logrotate /var/log/"$app"
# Add fail2ban # Add fail2ban
ynh_script_progression --message="Configuring fail2ban..." --weight=10 ynh_script_progression "Configuring fail2ban..."
ynh_add_fail2ban_config --use_template ynh_config_add_fail2ban
# register yunohost service # register yunohost service
ynh_script_progression --message="Register seafile service..." ynh_script_progression "Register seafile service..."
yunohost service add seafile --description 'Main service for seafile server.' yunohost service add seafile --description 'Main service for seafile server.'
yunohost service add seahub --description 'Seafile server web interface.' yunohost service add seahub --description 'Seafile server web interface.'
# delete seafile cache # delete seafile cache
# restart seafile server # restart seafile server
ynh_script_progression --message="Starting seafile services..." --weight=3 ynh_script_progression "Starting seafile services..."
sleep 5 sleep 5
ynh_systemd_action --service_name=memcached.service -p "systemd" ynh_systemctl --service=memcached.service -p "systemd"
ynh_systemd_action --service_name=seafile -l "spawned seaf-server, pid " -p /var/log/seafile/controller.log ynh_systemctl --service=seafile --wait_until="spawned seaf-server, pid " --log_path=/var/log/seafile/controller.log
ynh_systemd_action --service_name=seahub -l "Started Seafile hub." -p "systemd" sleep 2
ynh_systemctl --service=seahub --wait_until="Started Seafile hub." --log_path="systemd"
sleep 2 sleep 2
# remove old version files # remove old version files
ynh_script_progression --message="Cleaning system and updating settings..." ynh_script_progression "Cleaning system and updating settings..."
for f in "$install_dir"/seafile-server-*;do for f in "$install_dir"/seafile-server-*;do
if [[ ! "$f" =~ ${seafile_version//./\\.}|latest ]]; then if [[ ! "$f" =~ ${seafile_version//./\\.}|latest ]]; then
ynh_secure_remove --file="$f" ynh_safe_rm "$f"
fi fi
done done
ynh_script_progression --message="Upgrade of $app completed" --last ynh_script_progression "Upgrade of $app completed"

View file

@ -1,80 +1,62 @@
# Download, check integrity, uncompress and patch the source from app.src # Download, check integrity, uncompress and patch upstream sources
# #
# Requires YunoHost version 2.6.4 or higher. # NOTE this is a full copy of upstream ynh_setup_source but with some specific patch releated to seafile docker archive
ynh_setup_source_custom() { ynh_setup_source_custom() {
# Declare an array to define the options of this helper. # ============ Argument parsing =============
local legacy_args=dsk local -A args_array=([d]=dest_dir= [s]=source_id= [k]=keep= [r]=full_replace)
local -A args_array=([d]=dest_dir= [s]=source_id= [k]=keep= [r]=full_replace=)
local dest_dir local dest_dir
local source_id local source_id
local keep local keep
local full_replace local full_replace
# Manage arguments with getopts
ynh_handle_getopts_args "$@" ynh_handle_getopts_args "$@"
keep="${keep:-}" keep="${keep:-}"
full_replace="${full_replace:-0}" full_replace="${full_replace:-0}"
source_id="${source_id:-main}"
# ===========================================
if test -e $YNH_APP_BASEDIR/manifest.toml && cat $YNH_APP_BASEDIR/manifest.toml | toml_to_json | jq -e '.resources.sources' >/dev/null local sources_json=$(ynh_read_manifest "resources.sources[\"$source_id\"]")
if jq -re ".url" <<< "$sources_json"
then then
source_id="${source_id:-main}" local arch_prefix=""
local sources_json=$(cat $YNH_APP_BASEDIR/manifest.toml | toml_to_json | jq ".resources.sources[\"$source_id\"]")
if jq -re ".url" <<< "$sources_json"
then
local arch_prefix=""
else
local arch_prefix=".$YNH_ARCH"
fi
local src_url="$(jq -r "$arch_prefix.url" <<< "$sources_json" | sed 's/^null$//')"
local src_sum="$(jq -r "$arch_prefix.sha256" <<< "$sources_json" | sed 's/^null$//')"
local src_sumprg="sha256sum"
local src_format="$(jq -r ".format" <<< "$sources_json" | sed 's/^null$//')"
local src_in_subdir="$(jq -r ".in_subdir" <<< "$sources_json" | sed 's/^null$//')"
local src_extract="$(jq -r ".extract" <<< "$sources_json" | sed 's/^null$//')"
local src_platform="$(jq -r ".platform" <<< "$sources_json" | sed 's/^null$//')"
local src_rename="$(jq -r ".rename" <<< "$sources_json" | sed 's/^null$//')"
[[ -n "$src_url" ]] || ynh_die "No URL defined for source $source_id$arch_prefix ?"
[[ -n "$src_sum" ]] || ynh_die "No sha256 sum defined for source $source_id$arch_prefix ?"
if [[ -z "$src_format" ]]
then
if [[ "$src_url" =~ ^.*\.zip$ ]] || [[ "$src_url" =~ ^.*/zipball/.*$ ]]
then
src_format="zip"
elif [[ "$src_url" =~ ^.*\.tar\.gz$ ]] || [[ "$src_url" =~ ^.*\.tgz$ ]] || [[ "$src_url" =~ ^.*/tar\.gz/.*$ ]] || [[ "$src_url" =~ ^.*/tarball/.*$ ]]
then
src_format="tar.gz"
elif [[ "$src_url" =~ ^.*\.tar\.xz$ ]]
then
src_format="tar.xz"
elif [[ "$src_url" =~ ^.*\.tar\.bz2$ ]]
then
src_format="tar.bz2"
elif [[ -z "$src_extract" ]]
then
src_extract="false"
fi
fi
else else
source_id="${source_id:-app}" local arch_prefix=".$YNH_ARCH"
local src_file_path="$YNH_APP_BASEDIR/conf/${source_id}.src"
# Load value from configuration file (see above for a small doc about this file
# format)
local src_url=$(grep 'SOURCE_URL=' "$src_file_path" | cut --delimiter='=' --fields=2-)
local src_sum=$(grep 'SOURCE_SUM=' "$src_file_path" | cut --delimiter='=' --fields=2-)
local src_sumprg=$(grep 'SOURCE_SUM_PRG=' "$src_file_path" | cut --delimiter='=' --fields=2-)
local src_format=$(grep 'SOURCE_FORMAT=' "$src_file_path" | cut --delimiter='=' --fields=2-)
local src_in_subdir=$(grep 'SOURCE_IN_SUBDIR=' "$src_file_path" | cut --delimiter='=' --fields=2-)
local src_rename=$(grep 'SOURCE_FILENAME=' "$src_file_path" | cut --delimiter='=' --fields=2-)
local src_extract=$(grep 'SOURCE_EXTRACT=' "$src_file_path" | cut --delimiter='=' --fields=2-)
local src_platform=$(grep 'SOURCE_PLATFORM=' "$src_file_path" | cut --delimiter='=' --fields=2-)
fi fi
# Default value local src_url="$(jq -r "$arch_prefix.url" <<< "$sources_json" | sed 's/^null$//')"
src_sumprg=${src_sumprg:-sha256sum} local src_sum="$(jq -r "$arch_prefix.sha256" <<< "$sources_json" | sed 's/^null$//')"
local src_format="$(jq -r ".format" <<< "$sources_json" | sed 's/^null$//')"
local src_in_subdir="$(jq -r ".in_subdir" <<< "$sources_json" | sed 's/^null$//')"
src_in_subdir=${src_in_subdir:-true} src_in_subdir=${src_in_subdir:-true}
local src_extract="$(jq -r ".extract" <<< "$sources_json" | sed 's/^null$//')"
local src_platform="$(jq -r ".platform" <<< "$sources_json" | sed 's/^null$//')"
local src_rename="$(jq -r ".rename" <<< "$sources_json" | sed 's/^null$//')"
[[ -n "$src_url" ]] || ynh_die "No URL defined for source $source_id$arch_prefix ?"
[[ -n "$src_sum" ]] || ynh_die "No sha256 sum defined for source $source_id$arch_prefix ?"
if [[ -z "$src_format" ]]
then
if [[ "$src_url" =~ ^.*\.zip$ ]] || [[ "$src_url" =~ ^.*/zipball/.*$ ]]
then
src_format="zip"
elif [[ "$src_url" =~ ^.*\.tar\.gz$ ]] || [[ "$src_url" =~ ^.*\.tgz$ ]] || [[ "$src_url" =~ ^.*/tar\.gz/.*$ ]] || [[ "$src_url" =~ ^.*/tarball/.*$ ]]
then
src_format="tar.gz"
elif [[ "$src_url" =~ ^.*\.tar\.xz$ ]]
then
src_format="tar.xz"
elif [[ "$src_url" =~ ^.*\.tar\.bz2$ ]]
then
src_format="tar.bz2"
elif [[ "$src_url" =~ ^.*\.tar$ ]]
then
src_format="tar"
elif [[ -z "$src_extract" ]]
then
src_extract="false"
fi
fi
src_format=${src_format:-tar.gz} src_format=${src_format:-tar.gz}
src_format=$(echo "$src_format" | tr '[:upper:]' '[:lower:]') src_format=$(echo "$src_format" | tr '[:upper:]' '[:lower:]')
src_extract=${src_extract:-true} src_extract=${src_extract:-true}
@ -84,10 +66,6 @@ ynh_setup_source_custom() {
ynh_die "For source $source_id, expected either 'true' or 'false' for the extract parameter" ynh_die "For source $source_id, expected either 'true' or 'false' for the extract parameter"
fi fi
# (Unused?) mecanism where one can have the file in a special local cache to not have to download it...
local local_src="/opt/yunohost-apps-src/${YNH_APP_ID}/${source_id}"
# Gotta use this trick with 'dirname' because source_id may contain slashes x_x # Gotta use this trick with 'dirname' because source_id may contain slashes x_x
mkdir -p $(dirname /var/cache/yunohost/download/${YNH_APP_ID}/${source_id}) mkdir -p $(dirname /var/cache/yunohost/download/${YNH_APP_ID}/${source_id})
src_filename="/var/cache/yunohost/download/${YNH_APP_ID}/${source_id}" src_filename="/var/cache/yunohost/download/${YNH_APP_ID}/${source_id}"
@ -100,14 +78,10 @@ ynh_setup_source_custom() {
fi fi
# END APP CUSTOMIZATION # END APP CUSTOMIZATION
else else
if test -e "$local_src"; then
cp $local_src $src_filename
fi
[ -n "$src_url" ] || ynh_die "Couldn't parse SOURCE_URL from $src_file_path ?" [ -n "$src_url" ] || ynh_die "Couldn't parse SOURCE_URL from $src_file_path ?"
# If the file was prefetched but somehow doesn't match the sum, rm and redownload it # If the file was prefetched but somehow doesn't match the sum, rm and redownload it
if [ -e "$src_filename" ] && ! echo "${src_sum} ${src_filename}" | ${src_sumprg} --check --status if [ -e "$src_filename" ] && ! echo "${src_sum} ${src_filename}" | sha256sum --check --status
then then
rm -f "$src_filename" rm -f "$src_filename"
fi fi
@ -121,16 +95,16 @@ ynh_setup_source_custom() {
local out local out
# Timeout option is here to enforce the timeout on dns query and tcp connect (c.f. man wget) # Timeout option is here to enforce the timeout on dns query and tcp connect (c.f. man wget)
out=$(wget --tries 3 --no-dns-cache --timeout 900 --no-verbose --output-document=$src_filename $src_url 2>&1) \ out=$(wget --tries 3 --no-dns-cache --timeout 900 --no-verbose --output-document=$src_filename $src_url 2>&1) \
|| ynh_die --message="$out" || ynh_die "$out"
fi fi
# Check the control sum # Check the control sum
if ! echo "${src_sum} ${src_filename}" | ${src_sumprg} --check --status if ! echo "${src_sum} ${src_filename}" | sha256sum --check --status
then then
local actual_sum="$(${src_sumprg} ${src_filename} | cut --delimiter=' ' --fields=1)" local actual_sum="$(sha256sum ${src_filename} | cut --delimiter=' ' --fields=1)"
local actual_size="$(du -hs ${src_filename} | cut --fields=1)" local actual_size="$(du -hs ${src_filename} | cut --fields=1)"
rm -f ${src_filename} rm -f ${src_filename}
ynh_die --message="Corrupt source for ${src_url}: Expected sha256sum to be ${src_sum} but got ${actual_sum} (size: ${actual_size})." ynh_die "Corrupt source for ${src_url}: Expected sha256sum to be ${src_sum} but got ${actual_sum} (size: ${actual_size})."
fi fi
fi fi
@ -150,19 +124,12 @@ ynh_setup_source_custom() {
fi fi
if [ "$full_replace" -eq 1 ]; then if [ "$full_replace" -eq 1 ]; then
ynh_secure_remove --file="$dest_dir" ynh_safe_rm "$dest_dir"
fi fi
# Extract source into the app dir # Extract source into the app dir
mkdir --parents "$dest_dir" mkdir --parents "$dest_dir"
if [ -n "${install_dir:-}" ] && [ "$dest_dir" == "$install_dir" ]; then
_ynh_apply_default_permissions $dest_dir
fi
if [ -n "${final_path:-}" ] && [ "$dest_dir" == "$final_path" ]; then
_ynh_apply_default_permissions $dest_dir
fi
if [[ "$src_extract" == "false" ]]; then if [[ "$src_extract" == "false" ]]; then
if [[ -z "$src_rename" ]] if [[ -z "$src_rename" ]]
then then
@ -179,11 +146,11 @@ ynh_setup_source_custom() {
local tmp_dir=$(mktemp --directory) local tmp_dir=$(mktemp --directory)
unzip -quo $src_filename -d "$tmp_dir" unzip -quo $src_filename -d "$tmp_dir"
cp --archive $tmp_dir/*/. "$dest_dir" cp --archive $tmp_dir/*/. "$dest_dir"
ynh_secure_remove --file="$tmp_dir" ynh_safe_rm "$tmp_dir"
else else
unzip -quo $src_filename -d "$dest_dir" unzip -quo $src_filename -d "$dest_dir"
fi fi
ynh_secure_remove --file="$src_filename" ynh_safe_rm "$src_filename"
else else
local strip="" local strip=""
if [ "$src_in_subdir" != "false" ]; then if [ "$src_in_subdir" != "false" ]; then
@ -194,30 +161,29 @@ ynh_setup_source_custom() {
fi fi
strip="--strip-components $sub_dirs" strip="--strip-components $sub_dirs"
fi fi
if [[ "$src_format" =~ ^tar.gz|tar.bz2|tar.xz$ ]]; then if [[ "$src_format" =~ ^tar.gz|tar.bz2|tar.xz|tar$ ]]; then
tar --extract --file=$src_filename --directory="$dest_dir" $strip tar --extract --file=$src_filename --directory="$dest_dir" $strip
else else
ynh_die --message="Archive format unrecognized." ynh_die "Archive format unrecognized."
fi fi
ynh_secure_remove --file="$src_filename" ynh_safe_rm "$src_filename"
fi fi
# Apply patches # Apply patches
if [ -d "$YNH_APP_BASEDIR/sources/patches/" ]; then if [ -d "$YNH_APP_BASEDIR/patches/" ]; then
local patches_folder=$(realpath $YNH_APP_BASEDIR/sources/patches/) local patches_folder=$(realpath "$YNH_APP_BASEDIR/patches/$source_id")
if (($(find $patches_folder -type f -name "${source_id}-*.patch" 2>/dev/null | wc --lines) > "0")); then pushd "$dest_dir"
pushd "$dest_dir" for patchfile in "$patches_folder/"*.patch; do
for p in $patches_folder/${source_id}-*.patch; do echo "Applying $patchfile"
echo $p if ! patch --strip=1 < "$patchfile"; then
patch --strip=1 <$p || ynh_print_warn --message="Packagers /!\\ patch $p failed to apply" if ynh_in_ci_tests; then
done ynh_die "Patch $patchfile failed to apply!"
popd else
fi ynh_print_warn "Warn your packagers /!\\ Patch $patchfile failed to apply"
fi fi
fi
# Add supplementary files done
if test -e "$YNH_APP_BASEDIR/sources/extra_files/${source_id}"; then popd
cp --archive $YNH_APP_BASEDIR/sources/extra_files/$source_id/. "$dest_dir"
fi fi
# Keep files to be backup/restored at the end of the helper # Keep files to be backup/restored at the end of the helper
@ -239,4 +205,8 @@ ynh_setup_source_custom() {
done done
fi fi
rm -rf /var/cache/yunohost/files_to_keep_during_setup_source/ rm -rf /var/cache/yunohost/files_to_keep_during_setup_source/
if [ -n "${install_dir:-}" ] && [ "$dest_dir" == "$install_dir" ]; then
_ynh_apply_default_permissions $dest_dir
fi
} }

View file

@ -24,3 +24,4 @@ test_format = 1.0
test_upgrade_from.8d41482.name = "Version 7.1 (Old_version_for_CI_4 branch)" test_upgrade_from.8d41482.name = "Version 7.1 (Old_version_for_CI_4 branch)"
test_upgrade_from.c11c24b.name = "Version 8.x (Old_version_for_CI_5 branch)" test_upgrade_from.c11c24b.name = "Version 8.x (Old_version_for_CI_5 branch)"
test_upgrade_from.7a4d00a.name = "Version 9.x" test_upgrade_from.7a4d00a.name = "Version 9.x"
test_upgrade_from.5a4717a.name = "Before helper 2.1"