Explorar o código

Merge pull request 'backup-restore' (#20) from backup-restore into main

Reviewed-on: https://codeberg.org/ChriChri/flohmarkt_ynh/pulls/20
Chris Vogel hai 1 ano
pai
achega
c4d19c550e
Modificáronse 8 ficheiros con 64 adicións e 124 borrados
  1. 0 0
      conf/05-flohmarkt.ini
  2. 2 2
      doc/PRE_INSTALL.md
  3. 13 40
      scripts/backup
  4. 5 11
      scripts/install
  5. 4 0
      scripts/remove
  6. 38 69
      scripts/restore
  7. 1 1
      scripts/upgrade
  8. 1 1
      tests.toml

+ 0 - 0
conf/5-flohmarkt.ini → conf/05-flohmarkt.ini


+ 2 - 2
doc/PRE_INSTALL.md

@@ -1,6 +1,6 @@
 ## installs
 
-But very limited.
+But very limited - see [issues](https://codeberg.org/ChriChri/flohmarkt_ynh/issues)
 
 ### Exclusive use of couchdb 
 
@@ -24,7 +24,7 @@ https://codeberg.org/ChriChri/flohmarkt_ynh/issues/5 .
 
 **Warning:** This will probably break any existing installation of couchdb (there's an couchdb app to install just couchdb and expose its port via nginx reverse-proxy).
 
-## no backup, yet
+## read before test installation
 
 **Another warning:** When installing flohmarkt on a a domain and letting it talk to other ActivityPub instances it will propagate a key associated to your domain. If you remove your flohmarkt from that domain and loose that key other instances might not want to talk to you anymore after you installed flohmarkt again on the same domain generating a new key.
 

+ 13 - 40
scripts/backup

@@ -1,55 +1,28 @@
 #!/bin/bash
 
-#=================================================
-# 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
 
-#=================================================
-# DECLARE DATA AND CONF FILES TO BACKUP
-#=================================================
 ynh_print_info --message="Declaring files to be backed up..."
-
-#=================================================
-# BACKUP THE APP MAIN DIR
-#=================================================
-
 ynh_backup --src_path="$install_dir"
-
-#=================================================
-# BACKUP THE DATA DIR
-#=================================================
-
-ynh_backup --src_path="$data_dir" --is_big
-
-#=================================================
-# BACKUP THE NGINX CONFIGURATION
-#=================================================
-
 ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf"
-
-#=================================================
-# BACKUP FAIL2BAN CONFIGURATION
-#=================================================
-
 ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf"
 ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf"
+ynh_backup --src_path="/etc/logrotate.d/$app"
+ynh_backup --src_path="/opt/couchdb/etc/local.d/05-flohmarkt.ini"
+# ynh_backup --src_path="/etc/yunohost/apps/$app"
 
-#=================================================
-# SPECIFIC BACKUP
-#=================================================
-# BACKUP LOGROTATE
-#=================================================
+# for the following backups we'll want to stop flohmarkt and couchdb
+# to guarentee a consistant state
+ynh_print_info --message="Stopping flohmarkt and couchdb to backup data..."
+yunohost service stop flohmarkt
+systemctl stop couchdb
 
-ynh_backup --src_path="/etc/logrotate.d/$app"
+ynh_backup --src_path="$data_dir" --is_big
+ynh_backup --src_path="/var/lib/couchdb" --is_big
 
-#=================================================
-# END OF SCRIPT
-#=================================================
+ynh_print_info --message="...done. Starting couchdb and flohmarkt."
+systemctl start couchdb
+yunohost service start flohmarkt
 
 ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)."

+ 5 - 11
scripts/install

@@ -27,7 +27,7 @@ ynh_script_progression --message="Installing CouchDB..." --weight=60
 # This value must match for all nodes in the cluster. If they do not match,
 # attempts to connect the node to the cluster will be rejected.
 couchdb_magic_cookie=$(ynh_string_random --length=23 --filter='A-Za-z0-9_')
-ynh_app_setting_set --app=$app --key=erlang_cookie --value="$couchdb_magic_cookie"
+ynh_app_setting_set --app=$app --key=couchdb_magic_cookie --value="$couchdb_magic_cookie"
 
 echo "\
 couchdb couchdb/mode select standalone
@@ -49,14 +49,9 @@ ynh_install_extra_app_dependencies \
 # add couchdb configuration
 ynh_script_progression --message="Adding a configuration file..." --weight=2
 # customize couchdb config
-ynh_add_config --template="../conf/5-flohmarkt.ini" --destination="/opt/couchdb/etc/local.d/5-flohmarkt.ini"
-chown root:couchdb /opt/couchdb/etc/local.d/5-flohmarkt.ini
-chmod 640 /opt/couchdb/etc/local.d/5-flohmarkt.ini
-
-# @@ todo need to create a couchdb user and set the files to be readable/executable by it
-chmod 750 "$install_dir"
-chmod -R o-rwx "$install_dir"
-chown -R "$app:$app" "$install_dir"
+ynh_add_config --template="../conf/05-flohmarkt.ini" --destination="/opt/couchdb/etc/local.d/05-flohmarkt.ini"
+chown root:couchdb /opt/couchdb/etc/local.d/05-flohmarkt.ini
+chmod 640 /opt/couchdb/etc/local.d/05-flohmarkt.ini
 
 # restart couchdb to pick up changes
 systemctl restart couchdb
@@ -88,7 +83,7 @@ python3 -m venv --without-pip "$install_dir/venv"
 jwtsecret=$(ynh_string_random --length=344 --filter='a-zA-Z0-9/+')
 
 password_couchdb_flohmarkt=$(ynh_string_random --length=31 --filter='A-Za-z0-9_.:,')
-ynh_app_setting_set --app=$app --key=erlang_cookie --value="$password_couchdb_flohmarkt"
+ynh_app_setting_set --app=$app --key=password_couchdb_flohmarkt --value="$password_couchdb_flohmarkt"
 
 # generate flohmarkt.conf
 ynh_add_config --template="../conf/flohmarkt.conf" --destination="$install_dir/$app/flohmarkt.conf"
@@ -136,4 +131,3 @@ ynh_systemd_action --service_name=$app --action="start"
 # @@ logrotation
 
 ynh_script_progression --message="Installation of $app completed" --last
-# qed

+ 4 - 0
scripts/remove

@@ -52,6 +52,10 @@ ynh_remove_nginx_config
 # Remove the dedicated Fail2Ban config
 ynh_remove_fail2ban_config
 
+# Remove home
+ynh_script_progression --message="Removing data directory..." --weight=2
+ynh_secure_remove --file=$data_dir
+
 #=================================================
 # END OF SCRIPT
 #=================================================

+ 38 - 69
scripts/restore

@@ -1,54 +1,13 @@
 #!/bin/bash
 
-#=================================================
-# 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
 
-#=================================================
-# STANDARD RESTORATION STEPS
-#=================================================
-# RESTORE THE APP MAIN DIR
-#=================================================
-ynh_script_progression --message="Restoring the app main directory..." --weight=10
-
-ynh_restore_file --origin_path="$install_dir"
-
-#=================================================
-# RESTORE THE DATA DIRECTORY
-#=================================================
-ynh_script_progression --message="Restoring the data directory..." --weight=1
-
-ynh_restore_file --origin_path="$data_dir" --not_mandatory
-
-mkdir -p $data_dir
-
-#=================================================
-# RESTORE FAIL2BAN CONFIGURATION
-#=================================================
-ynh_script_progression --message="Restoring the Fail2Ban configuration..." --weight=2
-
-ynh_restore_file --origin_path="/etc/fail2ban/jail.d/$app.conf"
-ynh_restore_file --origin_path="/etc/fail2ban/filter.d/$app.conf"
-ynh_systemd_action --action=restart --service_name=fail2ban
-
-#=================================================
-# SPECIFIC RESTORATION
-#=================================================
-# RESTORE THE NGINX CONFIGURATION
-#=================================================
-ynh_script_progression --message="Restoring the NGINX web server configuration..." --weight=1
-
-ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
+# restore couchdb directory
+ynh_script_progression --message="Restoring couchdb directory..." --weight=1
+ynh_restore_file --origin_path="/var/lib/couchdb"
 
-#=================================================
-# REINSTALL COUCHDB
-#=================================================
+# reinstall couchdb
 ynh_script_progression --message="Reinstalling couchdb..." --weight=40
 
 echo "\
@@ -56,10 +15,10 @@ couchdb couchdb/mode select standalone
 couchdb couchdb/mode seen true
 couchdb couchdb/bindaddress string 127.0.0.1
 couchdb couchdb/bindaddress seen true
-couchdb couchdb/cookie string $password
-couchdb couchdb/adminpass password $password
+couchdb couchdb/cookie string $couchdb_magic_cookie
+couchdb couchdb/adminpass password $password_couchdb_admin
 couchdb couchdb/adminpass seen true
-couchdb couchdb/adminpass_again password $password
+couchdb couchdb/adminpass_again password $password_couchdb_admin
 couchdb couchdb/adminpass_again seen true" | debconf-set-selections
 DEBIAN_FRONTEND=noninteractive # apt-get install -y --force-yes couchdb
 
@@ -68,39 +27,49 @@ ynh_install_extra_app_dependencies \
     --key="https://couchdb.apache.org/repo/keys.asc" \
     --package="couchdb"
 
-chmod 750 "$install_dir"
-chmod -R o-rwx "$install_dir"
-chown -R $app:$app "$install_dir"
+# stop couchdb
+systemctl stop couchdb
 
-chmod 750 "$data_dir"
-chmod -R o-rwx "$data_dir"
-chown -R $app:www-data "$data_dir"
+# add couchdb configuration
+ynh_script_progression --message="Adding a configuration file..." --weight=2
+ynh_restore_file --origin_path="/opt/couchdb/etc/local.d/05-flohmarkt.ini"
+chown root:couchdb /opt/couchdb/etc/local.d/05-flohmarkt.ini
+chmod 640 /opt/couchdb/etc/local.d/05-flohmarkt.ini
+
+# start couchdb
+systemctl start couchdb
+systemctl status couchdb
+
+# RESTORE THE APP MAIN DIR
+ynh_script_progression --message="Restoring the app main directory..." --weight=10
+ynh_restore_file --origin_path="$install_dir"
+
+# RESTORE THE DATA DIRECTORY
+ynh_script_progression --message="Restoring the data directory..." --weight=1
+ynh_restore_file --origin_path="$data_dir" --not_mandatory
+mkdir -p $data_dir
+
+# RESTORE FAIL2BAN CONFIGURATION
+ynh_script_progression --message="Restoring the Fail2Ban configuration..." --weight=2
+ynh_restore_file --origin_path="/etc/fail2ban/jail.d/$app.conf"
+ynh_restore_file --origin_path="/etc/fail2ban/filter.d/$app.conf"
+ynh_systemd_action --action=restart --service_name=fail2ban
+
+# RESTORE THE NGINX CONFIGURATION
+ynh_script_progression --message="Restoring the NGINX web server configuration..." --weight=1
+ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
 
-#=================================================
 # RESTORE THE LOGROTATE CONFIGURATION
-#=================================================
 ynh_script_progression --message="Restoring the logrotate configuration..." --weight=1
-
 ynh_restore_file --origin_path="/etc/logrotate.d/$app"
 
-#=================================================
 # INTEGRATE SERVICE IN YUNOHOST
-#=================================================
 ynh_script_progression --message="Integrating service in YunoHost..." --weight=1
-
 yunohost service add $app --description="A decentral federated small advertisement platform" --log="/var/log/$app/$app.log"
+ynh_systemd_action --action=start --line_match="INFO:     Application startup complete."
 
-#=================================================
-# GENERIC FINALIZATION
-#=================================================
 # RELOAD NGINX
-#=================================================
 ynh_script_progression --message="Reloading NGINX web server..." --weight=1
-
 ynh_systemd_action --service_name=nginx --action=reload
 
-#=================================================
-# END OF SCRIPT
-#=================================================
-
 ynh_script_progression --message="Restoration completed for $app" --last

+ 1 - 1
scripts/upgrade

@@ -52,7 +52,7 @@ fi
 #=================================================
 ynh_script_progression --message="Updating a configuration file..." --weight=1
 
-ynh_add_config --template="../conf/5-flohmarkt.ini" --destination="$install_dir/etc/local.d/5-flohmarkt.ini"
+ynh_add_config --template="../conf/05-flohmarkt.ini" --destination="$install_dir/etc/local.d/05-flohmarkt.ini"
 
 chmod 750 "$install_dir"
 chmod -R o-rwx "$install_dir"

+ 1 - 1
tests.toml

@@ -2,7 +2,7 @@ test_format = 1.0
 
 [default]
     # still in development
-	exclude = ["install.private", "install.multi", "upgrade", "backup_restore", "change_url", "install_subdir"]
+	exclude = ["install.private", "install.multi", "upgrade", "change_url", "install_subdir"]
 
     args.password_couchdb_admin = "TestPasswordCouchDBadmin"
     args.password_couchdb_flohmarkt = "TestPasswordCouchDBflohmarkt"