Skip to content
Merged
3 changes: 3 additions & 0 deletions peerstash-control/peerstash/cli/cmd_unmount.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
19 changes: 17 additions & 2 deletions peerstash-control/peerstash/core/backup.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

import errno
import os
import random
import shutil
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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.")
3 changes: 3 additions & 0 deletions peerstash-control/peerstash/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__

Expand Down Expand Up @@ -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...")
Expand Down
20 changes: 12 additions & 8 deletions peerstash-control/scripts/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.


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
Expand All @@ -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
Expand All @@ -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 ""
Expand All @@ -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
Expand Down
Loading