home · contact · privacy
Experimental refactor of migration scripts.
[config] / buster / setup_scripts / restore_app.sh
diff --git a/buster/setup_scripts/restore_app.sh b/buster/setup_scripts/restore_app.sh
new file mode 100755 (executable)
index 0000000..cb30788
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/sh
+set -e
+set -x
+
+if [ "$#" -lt 2 ]; then
+    echo 'Need two arguments: service name and DB name.'
+    false
+fi
+if [ ! "$1" = "pleroma" ] && [ ! "$1" = "peertube" ]; then
+    echo "Need legal service name (pleroma or peertube)."
+    false
+fi
+app="$1"
+db_name="$2"
+
+service "${app}" stop
+
+mv "/home/plom/${app}_backup.tar" /tmp/
+cd /tmp
+tar xf "${app}_backup.tar"
+
+su postgres -c "pg_restore -c -C -d ${db_name} -1 ${app}_backup/${db_name}.pgdump"
+rm "${app}_backup/${db_name}.pgdump"
+
+cd "${app}_backup"
+for path in $/find . -type f); do
+    target_path=$(echo "${path}" | cut -c2-)
+    source_path=$(realpath "${path}")
+    dir=$(dirname "${target_path}")
+    mkdir -p "${dir}"
+    cp -a "${source_path}" "${target_path}"
+done
+
+# TODO: Horrible hack, improve.
+if [ "${app}" = "pleroma" ]; then
+    db_pw=$(cat /etc/pleroma/config.exs | grep password | sed 's/[ ]*password\: *//g' | sed 's/,//g' | sed 's/"//g')
+elif [ "${app}" = "peertube" ]; then
+    db_pw=$(cat /var/www/peertube/config/production.yaml | grep password | head -1 | sed "s/[ ]*password\: *//g" | sed "s/'//g")
+fi
+su postgres -lc "psql -c \"ALTER USER ${app} WITH PASSWORD '${db_pw}';\""
+
+service "${app}" stop