diff --git a/peerstash-control/peerstash/cli/cmd_unmount.py b/peerstash-control/peerstash/cli/cmd_unmount.py
index 9e8a66a..ffaf8f7 100644
--- a/peerstash-control/peerstash/cli/cmd_unmount.py
+++ b/peerstash-control/peerstash/cli/cmd_unmount.py
@@ -39,6 +39,9 @@ def unmount(
except ValueError as e:
typer.secho(f"Error: {e}", fg=typer.colors.RED, err=True)
raise typer.Exit(1)
+ except RuntimeError as e:
+ typer.secho(f"Error: {e}", fg=typer.colors.RED, err=True)
+ raise typer.Exit(1)
except Exception as e:
typer.secho(f"System Error: {e}", fg=typer.colors.RED, err=True)
raise typer.Exit(1)
diff --git a/peerstash-control/peerstash/core/backup.py b/peerstash-control/peerstash/core/backup.py
index 884dea8..78c77d0 100644
--- a/peerstash-control/peerstash/core/backup.py
+++ b/peerstash-control/peerstash/core/backup.py
@@ -14,6 +14,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
+import errno
import os
import random
import shutil
@@ -496,6 +497,9 @@ def restore_snapshot(
raise Exception(
f"Failed to restore snapshot '{snapshot}' for task '{name}' ({e})"
)
+ finally:
+ if os.path.exists(temp_folder):
+ shutil.rmtree(temp_folder)
logger.info(f"[{name}] Restored snapshot {snapshot} in {folder}")
return folder
@@ -576,7 +580,18 @@ def unmount_task(name: str) -> None:
subprocess.run(["fusermount", "-uz", mount_point], capture_output=True)
# delete the file if exists
- if os.path.exists(mount_point):
- shutil.rmtree(mount_point)
+ try:
+ if os.path.exists(mount_point):
+ shutil.rmtree(mount_point)
+ except OSError as e:
+ if e.errno == errno.EROFS:
+ log(f"[{name}] Failed to remove repo folders. No permissions for {mount_point}", "warning")
+ raise RuntimeError(f"No permissions. Use sudo if mounted as root.")
+ else:
+ logger.error(f"[{name}] Failed to unmount repo: {e}")
+ raise OSError(e)
+ except Exception as e:
+ logger.error(f"[{name}] Failed to unmount repo: {e}")
+ raise Exception(e)
logger.info(f"[{name}] Unmounted repo.")
diff --git a/peerstash-control/peerstash/setup.py b/peerstash-control/peerstash/setup.py
index 642ae41..99f4d77 100644
--- a/peerstash-control/peerstash/setup.py
+++ b/peerstash-control/peerstash/setup.py
@@ -23,6 +23,7 @@
import requests
+from peerstash.core.backup import unmount_task
from peerstash.core.utils import update_crontab
from peerstash.cli import __version__
@@ -60,6 +61,8 @@ def init_db_and_restore():
f"{prune_schedule} {PEERSTASH_BIN} prune {name} 10"
)
update_crontab(name, [backup_job, prune_job])
+ # force unmount stale repos
+ unmount_task(name)
else:
print("No database found. Creating a new empty database...")
diff --git a/peerstash-control/scripts/setup.sh b/peerstash-control/scripts/setup.sh
index e4651ec..b2b8d9a 100644
--- a/peerstash-control/scripts/setup.sh
+++ b/peerstash-control/scripts/setup.sh
@@ -17,13 +17,13 @@
# along with this program. If not, see .
-SSH_FOLDER="/var/lib/peerstash"
+PEERSTASH_CONFIG="/var/lib/peerstash"
# set up logging
LOG_DIR="/var/log/peerstash"
mkdir -p "$LOG_DIR"
-BIND_LOG_DIR="/var/lib/peerstash/logs"
+BIND_LOG_DIR="$PEERSTASH_CONFIG/logs"
mkdir -p "$BIND_LOG_DIR"
if [ ! -L "$LOG_DIR" ]; then
@@ -46,13 +46,13 @@ exec > >(while IFS= read -r line; do echo "[$(date '+%Y-%m-%d %H:%M:%S')] $line"
# Generate SSH host keys
mkdir -p /var/run/sshd
-if [ ! -f "$SSH_FOLDER"/ssh_host_rsa_key ]; then
+if [ ! -f "$PEERSTASH_CONFIG"/ssh_host_rsa_key ]; then
echo "Generating SSH host keys..."
ssh-keygen -A
- cp /etc/ssh/ssh_host_* "$SSH_FOLDER"/
+ cp /etc/ssh/ssh_host_* "$PEERSTASH_CONFIG"/
else
echo "Using existing SSH host keys..."
- cp "$SSH_FOLDER"/ssh_host_* /etc/ssh/
+ cp "$PEERSTASH_CONFIG"/ssh_host_* /etc/ssh/
fi
# create admin user
@@ -63,15 +63,15 @@ adduser "$USERNAME" sudo
# Generate SSH user keys
mkdir -p /home/"$USERNAME"/.ssh
-if [ ! -f "$SSH_FOLDER"/id_ed25519 ]; then
+if [ ! -f "$PEERSTASH_CONFIG"/id_ed25519 ]; then
echo "Generating SSH user keys..." >&2
if [ ! -f /home/"$USERNAME"/.ssh/id_ed25519 ]; then
ssh-keygen -t ed25519 -N "" -f /home/"$USERNAME"/.ssh/id_ed25519 -C "$USERNAME"
fi
- cp /home/"$USERNAME"/.ssh/id_* $SSH_FOLDER/
+ cp /home/"$USERNAME"/.ssh/id_* $PEERSTASH_CONFIG/
else
echo "Using existing SSH user keys..." >&2
- cp $SSH_FOLDER/id_* /home/"$USERNAME"/.ssh/
+ cp $PEERSTASH_CONFIG/id_* /home/"$USERNAME"/.ssh/
fi
{
echo ""
@@ -81,6 +81,10 @@ fi
echo "" > /home/"$USERNAME"/.ssh/known_hosts
chown -R "$USERNAME":"$USERNAME" /home/"$USERNAME"/.ssh
+# set up filesystem perms
+chown "$USERNAME":"$USERNAME" "$PEERSTASH_CONFIG"
+chmod 777 /tmp/peerstash_mnt
+chmod 777 /mnt/peerstash_restore
# prevent indexing FUSE mounts
touch /tmp/peerstash_mnt/.nomedia