From e65b5236e4a4902ec1c51ec7a0e1904c823f07c2 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sat, 14 Aug 2021 18:22:40 +0200 Subject: [PATCH] Apply example_ynh --- conf/app.ini | 8 +- doc/.gitkeep | 0 doc/DISCLAIMER.md | 42 +++++++ doc/screenshots/.gitkeep | 0 doc/screenshots/screenshot.png | Bin 0 -> 109368 bytes manifest.json | 36 +++--- scripts/_common.sh | 112 ++--------------- scripts/backup | 17 +-- scripts/change_url | 152 ++++++++++++++++++----- scripts/install | 221 ++++++++++++++++++++++++++------- scripts/remove | 106 ++++++++++++---- scripts/restore | 150 +++++++++++++++++----- scripts/upgrade | 156 +++++++++++++++++------ scripts/ynh_detect_arch__2 | 25 ++++ 14 files changed, 725 insertions(+), 300 deletions(-) create mode 100644 doc/.gitkeep create mode 100644 doc/DISCLAIMER.md create mode 100644 doc/screenshots/.gitkeep create mode 100644 doc/screenshots/screenshot.png create mode 100644 scripts/ynh_detect_arch__2 diff --git a/conf/app.ini b/conf/app.ini index 5a08d74..24acd81 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -8,7 +8,7 @@ RUN_MODE = prod [server] PROTOCOL = http DOMAIN = __DOMAIN__ -ROOT_URL = https://__URL__/ +ROOT_URL = https://__DOMAIN____PATH__ HTTP_ADDR = 0.0.0.0 HTTP_PORT = __PORT__ ; Permission for unix socket @@ -69,7 +69,7 @@ LANDING_PAGE = explore [repository] ; Root path for storing repositories's data, default is "~//gogs-repositories" -ROOT = __REPOS_PATH__ +ROOT = __REPO_PATH__ ; The script type server supports, sometimes could be "sh" SCRIPT_TYPE = bash ; Default ANSI charset for an unrecognized charset @@ -164,7 +164,7 @@ DB_TYPE = mysql HOST = 127.0.0.1:3306 NAME = __DB_USER__ USER = __DB_USER__ -PASSWD = __DB_PASSWORD__ +PASSWD = __DB_PPWD__ ; For "postgres" only, either "disable", "require" or "verify-full" SSL_MODE = disable ; For "sqlite3" and "tidb", use absolute path when you start as service @@ -177,7 +177,7 @@ DISABLE_REGULAR_ORG_CREATION = false [security] INSTALL_LOCK = true ; !!CHANGE THIS TO KEEP YOUR USER DATA SAFE!! -SECRET_KEY = __KEY__ +SECRET_KEY = __SECRET_KEY__ ; Auto-login remember days LOGIN_REMEMBER_DAYS = 7 COOKIE_USERNAME = gogs_awesome diff --git a/doc/.gitkeep b/doc/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..d97cd8d --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,42 @@ +> :warning: **Note that this package will not be longer be maintened by the actual maintener. +> The idea is to migrate to [gitea](https://github.com/YunoHost-Apps/gitea_ynh) which is more featured.** + +For the old install you can migrate to gitea easly by juste upgrading your actuall gogs instance with the gitea source by this command: +``` +sudo yunohost app upgrade -u https://github.com/YunoHost-Apps/gitea_ynh gogs +``` +**Note that this command contains some risk of data lost. So it's important to make a backup of the app before the install.** +To make a backup you can use this command: +``` +sudo yunohost backup create --debug --apps gogs +``` + +For the new install just install gitea by this command: +``` +sudo yunohost app install -l Gitea https://github.com/YunoHost-Apps/gitea_ynh +``` + +## Notes on SSH usage +If you want to use Gogs with ssh and be able to pull/push with you ssh key, your ssh daemon must be properly configured to use private/public keys. Here is a sample configuration of `/etc/ssh/sshd_config` that works with Gogs: + +```bash +PubkeyAuthentication yes +AuthorizedKeysFile %h/.ssh/authorized_keys +ChallengeResponseAuthentication no +PasswordAuthentication no +UsePAM no +``` + +You also need to add your public key to your Gogs profile. + +If you use ssh on another port than 22, you need to add theses lines to your ssh config in `~/.ssh/config`: + +```bash +Host domain.tld + port 2222 # change this with the port you use +``` + +## Info on upgrading from the old package version (gogs <0.9.xx) +Previous versions of this package used to build Gogs from sources instead of using the pre-compiled binary. It also left data in many places which was not good. The upgrade tries to take care of moving everything to the right place **BUT it's strongly advised to do a backup of your repositories and of the Gogs directory before the update**. Your avatars and issue attachments files may be lost in the process. + +Also, in some cases, Gogs will not restart properly during the update. If so, you can rerun the update safely or try to start Gogs with `sudo systemctl restart gogs.service`. diff --git a/doc/screenshots/.gitkeep b/doc/screenshots/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/screenshots/screenshot.png b/doc/screenshots/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5a87d0adda63b380ecaa3cb19aa3ed3c26c340 GIT binary patch literal 109368 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 4.1.3" + }, "multi_instance": true, "services": [ "nginx", "mysql" ], - "requirements": { - "yunohost": ">= 3.8.1" - }, "arguments": { "install" : [ { "name": "domain", "type": "domain", - "ask": { - "en": "Choose a domain for Gogs", - "fr": "Choisissez un domaine pour Gogs" - }, - "example": "domain.org" + "example": "example.com" }, { "name": "path", "type": "path", - "ask": { - "en": "Choose a path for Gogs", - "fr": "Choisissez un chemin pour Gogs" - }, "example": "/gogs", "default": "/gogs" }, { "name": "admin", "type": "user", - "ask": { - "en": "Choose the Gogs administrator (must be an existing YunoHost user)", - "fr": "Choisissez l'administrateur de Gogs (doit être un utilisateur YunoHost existant)" - }, "example": "johndoe" }, { "name": "is_public", "type": "boolean", - "ask": { - "en": "Is it a public site?", - "fr": "Est-ce un site public ?" - }, "default": true } ] diff --git a/scripts/_common.sh b/scripts/_common.sh index 38d9424..91e6067 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,108 +1,18 @@ -#================================================= -# SET ALL CONSTANTS -#================================================= - -app=$YNH_APP_INSTANCE_NAME -dbname=$app -dbuser=$app -final_path="/opt/$app" -DATADIR="/home/$app" -REPO_PATH="$DATADIR/repositories" -DATA_PATH="$DATADIR/data" - -# Detect the system architecture to download the right tarball -# NOTE: `uname -m` is more accurate and universal than `arch` -# See https://en.wikipedia.org/wiki/Uname -if [ -n "$(uname -m | grep 64)" ]; then - architecture="x86-64" -elif [ -n "$(uname -m | grep 86)" ]; then - architecture="i386" -elif [ -n "$(uname -m | grep arm)" ]; then - architecture="arm" -else - ynh_die "Unable to detect your achitecture, please open a bug describing \ - your hardware and the result of the command \"uname -m\"." 1 -fi +#!/bin/bash #================================================= -# DEFINE ALL COMMON FONCTIONS +# COMMON VARIABLES #================================================= -create_dir() { - mkdir -p "$final_path/data" - mkdir -p "$final_path/custom/conf/auth.d" - mkdir -p "$DATA_PATH/avatars" - mkdir -p "$DATA_PATH/attachments" - mkdir -p "/var/log/$app" -} -config_nginx() { - if [ "$path_url" != "/" ] - then - ynh_replace_string "^#sub_path_only" "" "../conf/nginx.conf" - fi - ynh_add_nginx_config -} +#================================================= +# PERSONAL HELPERS +#================================================= -config_gogs() { - ynh_backup_if_checksum_is_different "$final_path/custom/conf/app.ini" - ynh_backup_if_checksum_is_different "$final_path/custom/conf/auth.d/ldap.conf" +#================================================= +# EXPERIMENTAL HELPERS +#================================================= - cp ../conf/app.ini "$final_path/custom/conf" - cp ../conf/ldap.conf "$final_path/custom/conf/auth.d/ldap.conf" - - if [ "$path_url" = "/" ] - then - ynh_replace_string "__URL__" "$domain" "$final_path/custom/conf/app.ini" - else - ynh_replace_string "__URL__" "$domain${path_url%/}" "$final_path/custom/conf/app.ini" - fi - - ynh_replace_string "__REPOS_PATH__" "$REPO_PATH" "$final_path/custom/conf/app.ini" - ynh_replace_string "__DB_PASSWORD__" "$dbpass" "$final_path/custom/conf/app.ini" - ynh_replace_string "__DB_USER__" "$dbuser" "$final_path/custom/conf/app.ini" - ynh_replace_string "__DOMAIN__" "$domain" "$final_path/custom/conf/app.ini" - ynh_replace_string "__KEY__" "$key" "$final_path/custom/conf/app.ini" - ynh_replace_string "__DATA_PATH__" "$DATA_PATH" "$final_path/custom/conf/app.ini" - ynh_replace_string "__PORT__" $port "$final_path/custom/conf/app.ini" - ynh_replace_string "__APP__" $app "$final_path/custom/conf/app.ini" - - if [[ "$is_public" = '1' ]] - then - ynh_replace_string "__PRIVATE_MODE__" "false" "$final_path/custom/conf/app.ini" - else - ynh_replace_string "__PRIVATE_MODE__" "true" "$final_path/custom/conf/app.ini" - fi - - ynh_replace_string "__ADMIN__" "$admin" "$final_path/custom/conf/auth.d/ldap.conf" - - ynh_store_file_checksum "$final_path/custom/conf/app.ini" - ynh_store_file_checksum "$final_path/custom/conf/auth.d/ldap.conf" -} - -set_permission() { - chown -R $app:$app "$final_path" - chown -R $app:$app "/home/$app" - chown -R $app:$app "/var/log/$app" - chmod u=rwX,g=rX,o= "$final_path" - chmod u=rwX,g=rX,o= "/home/$app" - chmod u=rwX,g=rX,o= "/var/log/$app" -} - -set_access_settings() { - if [ "$is_public" = '1' ] - then - ynh_app_setting_set $app unprotected_uris "/" - else - # For an access to the git server by https in private mode we need to allow the access to theses URL : - # - "DOMAIN/PATH/USER/REPOSITORY/info/refs" - # - "DOMAIN/PATH/USER/REPOSITORY/git-upload-pack" - # - "DOMAIN/PATH/USER/REPOSITORY/git-receive-pack" - - excaped_domain=${domain//'.'/'%.'} - excaped_domain=${excaped_domain//'-'/'%-'} - excaped_path=${path_url//'.'/'%.'} - excaped_path=${excaped_path//'-'/'%-'} - ynh_app_setting_set $app skipped_regex "$excaped_domain$excaped_path/[%w-.]*/[%w-.]*/git%-receive%-pack,$excaped_domain$excaped_path/[%w-.]*/[%w-.]*/git%-upload%-pack,$excaped_domain$excaped_path/[%w-.]*/[%w-.]*/info/refs" - fi -} +#================================================= +# FUTURE OFFICIAL HELPERS +#================================================= diff --git a/scripts/backup b/scripts/backup index 490a4b0..72f8d13 100644 --- a/scripts/backup +++ b/scripts/backup @@ -6,6 +6,7 @@ # IMPORT GENERIC HELPERS #================================================= +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers @@ -26,8 +27,10 @@ ynh_print_info --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -# Retrieve app settings +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) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # DECLARE DATA AND CONF FILES TO BACKUP @@ -35,28 +38,28 @@ domain=$(ynh_app_setting_get --app=$app --key=domain) ynh_print_info --message="Declaring files to be backed up..." #================================================= -# STANDARD BACKUP STEPS +# BACKUP THE APP MAIN DIR #================================================= ynh_backup --src_path="$final_path" #================================================= -# BACKUP DATA FILES +# BACKUP THE DATA DIR #================================================= -ynh_backup --src_path="$DATADIR" +ynh_backup --src_path="$datadir" --is_big #================================================= # BACKUP THE NGINX CONFIGURATION #================================================= -ynh_backup --src_path="/etc/nginx/conf.d/${domain}.d/${app}.conf" +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # BACKUP SYSTEMD #================================================= -ynh_backup --src_path="/etc/systemd/system/${app}.service" +ynh_backup --src_path="/etc/systemd/system/$app.service" #================================================= # BACKUP VARIOUS FILES @@ -69,7 +72,7 @@ ynh_backup --src_path="/var/log/$app" #================================================= ynh_print_info --message="Backing up the MySQL database..." -ynh_mysql_dump_db "$dbname" > ./db.sql +ynh_mysql_dump_db --database="$db_name" > db.sql #================================================= # END OF SCRIPT diff --git a/scripts/change_url b/scripts/change_url index 883baf6..dafbcee 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -1,52 +1,146 @@ #!/bin/bash #================================================= -# GENERIC START +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS #================================================= -# IMPORT GENERIC HELPERS +source _common.sh source /usr/share/yunohost/helpers +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +old_domain=$YNH_APP_OLD_DOMAIN +old_path=$YNH_APP_OLD_PATH + +new_domain=$YNH_APP_NEW_DOMAIN +new_path=$YNH_APP_NEW_PATH + +app=$YNH_APP_INSTANCE_NAME + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." + +# Needed for helper "ynh_add_nginx_config" +final_path=$(ynh_app_setting_get --app=$app --key=final_path) + +# Add settings here as needed by your application +#db_name=$(ynh_app_setting_get --app=$app --key=db_name) +#db_user=$db_name +#db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) + +#================================================= +# BACKUP BEFORE CHANGE URL THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..." + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. + ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" + + # Restore it if the upgrade fails + ynh_restore_upgradebackup +} # Exit if an error occurs during the execution of the script ynh_abort_if_errors -# Import common cmd +#================================================= +# CHECK WHICH PARTS SHOULD BE CHANGED +#================================================= -source ./_common.sh +change_domain=0 +if [ "$old_domain" != "$new_domain" ] +then + change_domain=1 +fi -# RETRIEVE ARGUMENTS -old_domain=$YNH_APP_OLD_DOMAIN -domain=$YNH_APP_NEW_DOMAIN -path_url=$(ynh_normalize_url_path ${YNH_APP_NEW_PATH:-'/'}) -app=$YNH_APP_INSTANCE_NAME - -dbpass=$(ynh_app_setting_get "$app" mysqlpwd) -admin=$(ynh_app_setting_get "$app" adminusername) -key=$(ynh_app_setting_get "$app" secret_key) -port=$(ynh_app_setting_get "$app" web_port) -is_public=$(ynh_app_setting_get "$app" is_public) +change_path=0 +if [ "$old_path" != "$new_path" ] +then + change_path=1 +fi #================================================= # STANDARD MODIFICATIONS #================================================= +# STOP SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Stopping a systemd service..." -# Change the domain for nginx -if [ "$old_domain" != "$domain" ] +ynh_systemd_action --service_name=$app --action="stop" + +#================================================= +# MODIFY URL IN NGINX CONF +#================================================= +ynh_script_progression --message="Updating NGINX web server configuration..." + +nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf + +# Change the path in the NGINX config file +if [ $change_path -eq 1 ] then - # Delete file checksum for the old conf file location - ynh_delete_file_checksum "/etc/nginx/conf.d/$old_domain.d/$app.conf" - - mv "/etc/nginx/conf.d/$old_domain.d/$app.conf" "/etc/nginx/conf.d/$domain.d/$app.conf" - - # Store file checksum for the new config file location - ynh_store_file_checksum "/etc/nginx/conf.d/$domain.d/$app.conf" + # Make a backup of the original NGINX config file if modified + ynh_backup_if_checksum_is_different --file="$nginx_conf_path" + # Set global variables for NGINX helper + domain="$old_domain" + path_url="$new_path" + # Create a dedicated NGINX config + ynh_add_nginx_config fi -config_nginx +# Change the domain for NGINX +if [ $change_domain -eq 1 ] +then + # Delete file checksum for the old conf file location + ynh_delete_file_checksum --file="$nginx_conf_path" + mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf + # Store file checksum for the new config file location + ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" +fi -# Update gogs config -config_gogs +#================================================= +# SPECIFIC MODIFICATIONS +#================================================= +# ADD A CONFIGURATION +#================================================= +ynh_script_progression --message="Adding a configuration file..." -# RELOAD services +if [ $is_public -eq 1 ] +then + private_mode="false" +else + private_mode="true" +fi + +ynh_add_config --template="../conf/app.ini" --destination="$final_path/custom/conf/app.ini" +ynh_add_config --template="../conf/ldap.conf" --destination="$final_path/custom/conf/auth.d/ldap.conf" + +#================================================= +# GENERIC FINALISATION +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." + +# Start a systemd service ynh_check_starting "INFO] Listen: http://0.0.0.0:" "/var/log/$app/gogs.log" -sleep 1 \ No newline at end of file + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Change of URL completed for $app" diff --git a/scripts/install b/scripts/install index 6838126..203bfae 100644 --- a/scripts/install +++ b/scripts/install @@ -3,91 +3,220 @@ #================================================= # GENERIC START #================================================= - # IMPORT GENERIC HELPERS +#================================================= + +source _common.sh source /usr/share/yunohost/helpers +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + # Exit if an error occurs during the execution of the script ynh_abort_if_errors -# Load common variables and helpers +#================================================= +# RETRIEVE ARGUMENTS FROM THE MANIFEST +#================================================= -source ./_common.sh - -# Retrieve arguments domain=$YNH_APP_ARG_DOMAIN -path_url=$(ynh_normalize_url_path $YNH_APP_ARG_PATH) +path_url=$YNH_APP_ARG_PATH admin=$YNH_APP_ARG_ADMIN is_public=$YNH_APP_ARG_IS_PUBLIC +secret_key=$(ynh_string_random) +architecture=$(ynh_detect_arch) -# Check domain/path availability -ynh_webpath_available $domain $path_url || ynh_die "$domain is not available as domain, please use an other domain." -ynh_webpath_register $app $domain $path_url +app=$YNH_APP_INSTANCE_NAME + +#================================================= +# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS +#================================================= +ynh_script_progression --message="Validating installation parameters..." + +final_path=/opt/$app +test ! -e "$final_path" || ynh_die --message="This path already contains a folder" + +# Register (book) web path +ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url # Check user parameter ynh_user_exists "$admin" \ || ynh_die "The chosen admin user does not exist." -# Check Final Path availability -test ! -e "$final_path" || ynh_die "This path already contains a folder" +#================================================= +# STORE SETTINGS FROM MANIFEST +#================================================= +ynh_script_progression --message="Storing installation settings..." -# Generate random password and key -dbpass=$(ynh_string_random) -key=$(ynh_string_random) - -# Find available ports -port=$(ynh_find_port 6000) - -# Store Settings -ynh_app_setting_set $app mysqlpwd $dbpass -ynh_app_setting_set $app adminusername $admin -ynh_app_setting_set $app is_public $is_public -ynh_app_setting_set $app secret_key $key -ynh_app_setting_set $app web_port $port +ynh_app_setting_set --app=$app --key=domain --value=$domain +ynh_app_setting_set --app=$app --key=path --value=$path_url +ynh_app_setting_set --app=$app --key=admin --value=$admin +ynh_app_setting_set --app=$app --key=secret_key --value=$secret_key #================================================= # STANDARD MODIFICATIONS #================================================= +# FIND AND OPEN A PORT +#================================================= +ynh_script_progression --message="Finding an available port..." -# Initialize database and store mysql password for upgrade -ynh_mysql_create_db "$dbname" "$dbuser" "$dbpass" +# Find an available port +port=$(ynh_find_port --port=6000) +ynh_app_setting_set --app=$app --key=port --value=$port -# Add users +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Configuring system user..." + +# Create a system user # We can't use the official helper because we need to set the shell for the login test getent passwd "$app" &>/dev/null || \ useradd -d "$DATADIR" --system --user-group "$app" --shell /bin/bash || \ ynh_die "Unable to create $app system account" -# create needed directories -create_dir +#================================================= +# CREATE A MYSQL DATABASE +#================================================= +ynh_script_progression --message="Creating a MySQL database..." -# Install Gogs -ynh_setup_source $final_path $architecture +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 -# Configure gogs with app.ini file -config_gogs +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= +ynh_script_progression --message="Setting up source files..." -# Configure init script +ynh_app_setting_set --app=$app --key=final_path --value=$final_path +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source --dest_dir="$final_path" --source_id="$architecture" + +mkdir -p "$final_path/data" +mkdir -p "$final_path/custom/conf/auth.d" + +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:$app "$final_path" +chmod u=rwX,g=rX,o= "$final_path" + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring NGINX web server..." + +# Create a dedicated NGINX config +ynh_add_nginx_config + +#================================================= +# SPECIFIC SETUP +#================================================= +# CREATE DATA DIRECTORY +#================================================= +ynh_script_progression --message="Creating a data directory..." + +datadir=/home/$app +ynh_app_setting_set --app=$app --key=datadir --value=$datadir + +mkdir -p "$datadir/avatars" +mkdir -p "$datadir/attachments" + +chmod 750 "$datadir" +chmod -R o-rwx "$datadir" +chown -R $app:$app "/home/$app" +chmod u=rwX,g=rX,o= "/home/$app" + +repo_path="$datadir/repositories" +data_path="$datadir/data" + +#================================================= +# ADD A CONFIGURATION +#================================================= +ynh_script_progression --message="Adding a configuration file..." + +if [ $is_public -eq 1 ] +then + private_mode="false" +else + private_mode="true" +fi + +ynh_add_config --template="../conf/app.ini" --destination="$final_path/custom/conf/app.ini" +ynh_add_config --template="../conf/ldap.conf" --destination="$final_path/custom/conf/auth.d/ldap.conf" + +#================================================= +# SETUP SYSTEMD +#================================================= +ynh_script_progression --message="Configuring a systemd service..." + +# Create a dedicated systemd config ynh_add_systemd_config -# Modify Nginx configuration file and copy it to Nginx conf directory -config_nginx - #================================================= # GENERIC FINALIZATION #================================================= +# SETUP LOGROTATE +#================================================= +ynh_script_progression --message="Configuring log rotation..." -# Set permissions -set_permission +mkdir -p "/var/log/$app" +chown -R $app:$app "/var/log/$app" +chmod u=rwX,g=rX,o= "/var/log/$app" -# Unprotect root from SSO if public -set_access_settings +# Use logrotate to manage application logfile(s) +ynh_use_logrotate -# Add Gogs to YunoHost's monitored services -yunohost service add "$app" --log "/var/log/$app/$app.log" +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." -# Configure logrotate -ynh_use_logrotate "/var/log/$app" +yunohost service add $app --log="/var/log/$app/$app.log" -# Reload services +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." + +# Start a systemd service ynh_clean_check_starting "INFO] Listen: http://0.0.0.0:" "/var/log/$app/gogs.log" + +#================================================= +# SETUP SSOWAT +#================================================= +ynh_script_progression --message="Configuring permissions..." + +# Make app public if necessary +if [ $is_public -eq 1 ] +then + # Everyone can access the app. + # The "main" permission is automatically created before the install script. + ynh_permission_update --permission="main" --add="visitors" +else + # For an access to the git server by https in private mode we need to allow the access to theses URL : + # - "DOMAIN/PATH/USER/REPOSITORY/info/refs" + # - "DOMAIN/PATH/USER/REPOSITORY/git-upload-pack" + # - "DOMAIN/PATH/USER/REPOSITORY/git-receive-pack" + + excaped_domain=${domain//'.'/'%.'} + excaped_domain=${excaped_domain//'-'/'%-'} + excaped_path=${path_url//'.'/'%.'} + excaped_path=${excaped_path//'-'/'%-'} + ynh_app_setting_set $app skipped_regex "$excaped_domain$excaped_path/[%w-.]*/[%w-.]*/git%-receive%-pack,$excaped_domain$excaped_path/[%w-.]*/[%w-.]*/git%-upload%-pack,$excaped_domain$excaped_path/[%w-.]*/[%w-.]*/info/refs" +fi + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Installation of $app completed" diff --git a/scripts/remove b/scripts/remove index e5deb31..eff82be 100644 --- a/scripts/remove +++ b/scripts/remove @@ -3,43 +3,105 @@ #================================================= # GENERIC START #================================================= - # IMPORT GENERIC HELPERS +#================================================= + +source _common.sh source /usr/share/yunohost/helpers -# Load common variables and helpers -source ./_common.sh +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." + +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get --app=$app --key=domain) +port=$(ynh_app_setting_get --app=$app --key=port) +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) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # STANDARD REMOVE #================================================= +# REMOVE SERVICE INTEGRATION IN YUNOHOST +#================================================= -# Stop gogs -systemctl stop "$app".service +# Remove the service from the list of services known by YunoHost (added from `yunohost service add`) +if ynh_exec_warn_less yunohost service status $app >/dev/null +then + ynh_script_progression --message="Removing $app service integration..." + yunohost service remove $app +fi -# Drop MySQL database and user -ynh_mysql_drop_db "$dbname" 2>/dev/null -ynh_mysql_drop_user "$dbuser" 2>/dev/null +#================================================= +# STOP AND REMOVE SERVICE +#================================================= +ynh_script_progression --message="Stopping and removing the systemd service..." -# Retrieve domain from app settings -domain=$(ynh_app_setting_get "$app" domain) +# Remove the dedicated systemd config +ynh_remove_systemd_config -# Delete app directory and configurations -ynh_secure_remove "$final_path" -ynh_secure_remove "$DATADIR" -ynh_secure_remove "/var/log/$app" +#================================================= +# REMOVE THE MYSQL DATABASE +#================================================= +ynh_script_progression --message="Removing the MySQL database..." + +# 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" + +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Removing NGINX web server configuration..." + +# Remove the dedicated NGINX config +ynh_remove_nginx_config + +#================================================= +# REMOVE LOGROTATE CONFIGURATION +#================================================= +ynh_script_progression --message="Removing logrotate configuration..." # Remove the app-specific logrotate config ynh_remove_logrotate -# Remove nginx config -ynh_remove_nginx_config +#================================================= +# SPECIFIC REMOVE +#================================================= +# REMOVE VARIOUS FILES +#================================================= +ynh_script_progression --message="Removing various files..." -# Remove gogs user and data -ynh_system_user_delete $app +# Remove the datadir +ynh_secure_remove --file="$datadir" -# Remove init script -ynh_remove_systemd_config +# Remove the log files +ynh_secure_remove --file="/var/log/$app" -# Remove monitor -yunohost service remove "$app" \ No newline at end of file +#================================================= +# GENERIC FINALIZATION +#================================================= +# REMOVE DEDICATED USER +#================================================= +ynh_script_progression --message="Removing the dedicated system user..." + +# Delete a system user +ynh_system_user_delete --username=$app + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Removal of $app completed" diff --git a/scripts/restore b/scripts/restore index f135ead..79e5af1 100644 --- a/scripts/restore +++ b/scripts/restore @@ -3,66 +3,148 @@ #================================================= # GENERIC START #================================================= - # IMPORT GENERIC HELPERS +#================================================= + +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers # Exit if an error occurs during the execution of the script ynh_abort_if_errors -# Load common variables and helpers -source ../settings/scripts/_common.sh +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." -# Retrieve old app settings -domain=$(ynh_app_setting_get "$app" domain) -path_url=$(ynh_app_setting_get "$app" path) +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name +datadir=$(ynh_app_setting_get --app=$app --key=datadir) dbpass=$(ynh_app_setting_get "$app" mysqlpwd) -admin=$(ynh_app_setting_get "$app" adminusername) +admin=$(ynh_app_setting_get "$app" admin) -# Check domain/path availability with app helper -ynh_webpath_available $domain $path_url || ynh_die "$domain is not available as domain, please use an other domain." +#================================================= +# CHECK IF THE APP CAN BE RESTORED +#================================================= +ynh_script_progression --message="Validating restoration parameters..." -# Check user parameter -ynh_user_exists "$admin" \ - || ynh_die "The chosen admin user does not exist." - -# Check Final Path availability -test ! -e "$final_path" || ynh_die "This path already contains a folder" +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 " #================================================= # STANDARD RESTORATION STEPS #================================================= +# RESTORE THE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the NGINX web server configuration..." -# Add users +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# RECREATE THE DEDICATED USER +#================================================= +ynh_script_progression --message="Recreating the dedicated system user..." + +# Create the dedicated user (if not existing) # We can't use the official helper because we need to set the shell for the login test getent passwd "$app" &>/dev/null || \ useradd -d "$DATADIR" --system --user-group "$app" --shell /bin/bash || \ ynh_die "Unable to create $app system account" -# Restore all files -ynh_restore +#================================================= +# RESTORE THE APP MAIN DIR +#================================================= +ynh_script_progression --message="Restoring the app main directory..." -# Create and restore the database -ynh_mysql_create_db "$dbname" "$dbuser" "$dbpass" -ynh_mysql_connect_as "$dbuser" "$dbpass" "$dbname" < ./db.sql +ynh_restore_file --origin_path="$final_path" -# Restore systemd files -systemctl daemon-reload -systemctl enable "$app".service +mkdir -p "$final_path/data" +mkdir -p "$final_path/custom/conf/auth.d" + +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:$app "$final_path" +chmod u=rwX,g=rX,o= "$final_path" + +#================================================= +# RESTORE THE DATA DIRECTORY +#================================================= +ynh_script_progression --message="Restoring the data directory..." + +ynh_restore_file --origin_path="$datadir" --not_mandatory + +mkdir -p $datadir + +mkdir -p "$datadir/avatars" +mkdir -p "$datadir/attachments" + +chmod 750 "$datadir" +chmod -R o-rwx "$datadir" +chown -R $app:$app "/home/$app" +chmod u=rwX,g=rX,o= "/home/$app" + +repo_path="$datadir/repositories" +data_path="$datadir/data" + +#================================================= +# SPECIFIC RESTORATION +#================================================= +# RESTORE THE MYSQL DATABASE +#================================================= +ynh_script_progression --message="Restoring the MySQL database..." + +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 SYSTEMD +#================================================= +ynh_script_progression --message="Restoring the systemd configuration..." + +ynh_restore_file --origin_path="/etc/systemd/system/$app.service" +systemctl enable $app.service --quiet + +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + +yunohost service add $app --log="/var/log/$app/$app.log" + +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." + +ynh_check_starting "INFO] Listen: http://0.0.0.0:" "/var/log/$app/$app.log" + +#================================================= +# RESTORE THE LOGROTATE CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the logrotate configuration..." + +ynh_restore_file --origin_path="/etc/logrotate.d/$app" #================================================= # GENERIC FINALIZATION #================================================= +# RELOAD NGINX AND PHP-FPM +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." -# Set permissions -set_permission +ynh_systemd_action --service_name=nginx --action=reload -# Configure logrotate -ynh_use_logrotate "/var/log/$app" +#================================================= +# END OF SCRIPT +#================================================= -# Add Gogs to YunoHost's monitored services -yunohost service add "$app" --log /var/log/"$app"/"$app".log - -# Reload services -systemctl reload nginx.service -ynh_check_starting "INFO] Listen: http://0.0.0.0:" "/var/log/$app/gogs.log" +ynh_script_progression --message="Restoration completed for $app" diff --git a/scripts/upgrade b/scripts/upgrade index 483f6b4..bc3c699 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -3,37 +3,62 @@ #================================================= # GENERIC START #================================================= - # IMPORT GENERIC HELPERS +#================================================= + +source _common.sh source /usr/share/yunohost/helpers -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." -# Load common variables and helpers -source ./_common.sh +app=$YNH_APP_INSTANCE_NAME -# Retrieve app settings -domain=$(ynh_app_setting_get "$app" domain) -path_url=$(ynh_normalize_url_path $(ynh_app_setting_get "$app" path)) -dbpass=$(ynh_app_setting_get "$app" mysqlpwd) -admin=$(ynh_app_setting_get "$app" adminusername) -key=$(ynh_app_setting_get "$app" secret_key) -is_public=$(ynh_app_setting_get "$app" is_public) -port=$(ynh_app_setting_get "$app" web_port) +domain=$(ynh_app_setting_get --app=$app --key=domain) +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) +secret_key=$(ynh_app_setting_get --app=$app --key=secret_key) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) +port=$(ynh_app_setting_get --app=$app --key=port) + +#================================================= +# CHECK VERSION +#================================================= +ynh_script_progression --message="Checking version..." + +upgrade_type=$(ynh_check_app_version_changed) + +#================================================= +# 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 () { - ynh_restore_upgradebackup + # Restore it if the upgrade fails + ynh_restore_upgradebackup } - -# Stop service -systemctl stop "$app".service +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors #================================================= -# MIGRATION FROM OLD VERSION +# STANDARD UPGRADE STEPS #================================================= +# STOP SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Stopping a systemd service..." + +ynh_systemd_action --service_name=$app --action="stop" + +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression --message="Ensuring downward compatibility..." # Update settings is_public to new standard if [ "$is_public" = "Yes" ]; then @@ -86,34 +111,95 @@ then mkdir -p "$final_path/custom/conf/auth.d" fi -#================================================= -# STANDARD UPGRADE STEPS -#================================================= - # Clean template to fix issue : https://github.com/gogits/gogs/issues/4585 ynh_secure_remove "/opt/gogs/templates" -# Install Gogs -ynh_setup_source $final_path $architecture +#================================================= +# STANDARD UPGRADE STEPS +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= -# Configure gogs with app.ini file -config_gogs +if [ "$upgrade_type" == "UPGRADE_APP" ] +then + ynh_script_progression --message="Upgrading source files..." -# Configure init script + # Download, check integrity, uncompress and patch the source from app.src + ynh_setup_source --dest_dir="$final_path" --source_id="$architecture" +fi + +mkdir -p "$final_path/data" +mkdir -p "$final_path/custom/conf/auth.d" + +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:$app "$final_path" +chmod u=rwX,g=rX,o= "$final_path" + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading NGINX web server configuration..." + +# Create a dedicated NGINX config +ynh_add_nginx_config + +#================================================= +# SPECIFIC UPGRADE +#================================================= +# UPDATE A CONFIG FILE +#================================================= +ynh_script_progression --message="Updating a configuration file..." +if [ $is_public -eq 1 ] +then + private_mode="false" +else + private_mode="true" +fi + +ynh_add_config --template="../conf/app.ini" --destination="$final_path/custom/conf/app.ini" +ynh_add_config --template="../conf/ldap.conf" --destination="$final_path/custom/conf/auth.d/ldap.conf" + +#================================================= +# SETUP SYSTEMD +#================================================= +ynh_script_progression --message="Upgrading systemd configuration..." + +# Create a dedicated systemd config ynh_add_systemd_config -# Modify Nginx configuration file and copy it to Nginx conf directory -config_nginx - #================================================= # GENERIC FINALIZATION #================================================= +# SETUP LOGROTATE +#================================================= +ynh_script_progression --message="Upgrading logrotate configuration..." -# Unprotect root from SSO if public -set_access_settings +# Use logrotate to manage app-specific logfile(s) +ynh_use_logrotate --non-append -# Set permissions -set_permission +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." -# Reload services +yunohost service add $app --log="/var/log/$app/$app.log" + +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." ynh_check_starting "INFO] Listen: http://0.0.0.0:" "/var/log/$app/gogs.log" + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Upgrade of $app completed" diff --git a/scripts/ynh_detect_arch__2 b/scripts/ynh_detect_arch__2 new file mode 100644 index 0000000..b1c7375 --- /dev/null +++ b/scripts/ynh_detect_arch__2 @@ -0,0 +1,25 @@ +#!/bin/bash + +# Check the architecture +# +# example: architecture=$(ynh_detect_arch) +# +# usage: ynh_detect_arch +# +# Requires YunoHost version 2.2.4 or higher. + +ynh_detect_arch(){ + local architecture + if [ -n "$(uname -m | grep arm64)" ] || [ -n "$(uname -m | grep aarch64)" ]; then + architecture="arm64" + elif [ -n "$(uname -m | grep 64)" ]; then + architecture="x86-64" + elif [ -n "$(uname -m | grep 86)" ]; then + architecture="i386" + elif [ -n "$(uname -m | grep arm)" ]; then + architecture="arm" + else + architecture="unknown" + fi + echo $architecture +}