From 0b2c156d29dea219a10f3d5e613adda56bd191ce Mon Sep 17 00:00:00 2001 From: Aaron Bieber <aaron@bolddaemon.com> Date: Mon, 11 Nov 2019 07:44:52 -0700 Subject: [PATCH] Make backup / restore use POSIX shell for portability. backup.sh: - Add use getopts for a more friendly user interface. - Add timeout to ping check. - Add unix epoch to backup file names. - Backup ssh information (/etc/ssh, $USER/.ssh). restore.sh: - Add use getopts for a more friendly user interface. - Add timeout to ping check. - If user doesn't specify a backup file to restore, attempt to find the latest for the host name passed in. Signed-off-by: Aaron Bieber <aaron@bolddaemon.com> --- scripts/backup.sh | 62 +++++++++++++++++++++++++++++++++------------- scripts/restore.sh | 47 +++++++++++++++++++++++++++++++---- 2 files changed, 87 insertions(+), 22 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index da011dd..3ba9fd8 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -1,26 +1,54 @@ -#!/usr/bin/env bash +#!/bin/sh + +usage() { + echo "Usage: backup.sh [-honu] [-h] [-u user] [-n host name or ip] [-o output]" +} + +while getopts "ho:n:u:" arg; do + case $arg in + h) + usage + exit + ;; + n) + UNIT_HOSTNAME=$OPTARG + ;; + o) + OUTPUT=$OPTARG + ;; + u) + USERNAME=$OPTARG + ;; + *) + usage + exit 1 + esac +done # name of the ethernet gadget interface on the host -UNIT_HOSTNAME=${1:-10.0.0.2} +UNIT_HOSTNAME=${UNIT_HOSTNAME:-10.0.0.2} # output backup tgz file -OUTPUT=${2:-pwnagotchi-backup.tgz} +OUTPUT=${OUTPUT:-${UNIT_HOSTNAME}-backup-$(date +%s).tgz} # username to use for ssh -USERNAME=${3:-pi} +USERNAME=${USERNAME:-pi} # what to backup -FILES_TO_BACKUP=( - /root/brain.nn - /root/brain.json - /root/.api-report.json - /root/.bashrc - /root/handshakes - /root/peers - /etc/pwnagotchi/ - /var/log/pwnagotchi.log - /var/log/pwnagotchi*.gz - /home/pi/.bashrc -) +FILES_TO_BACKUP="/root/brain.nn \ + /root/brain.json \ + /root/.api-report.json \ + /root/.ssh \ + /root/.bashrc \ + /root/.profile \ + /root/handshakes \ + /root/peers \ + /etc/pwnagotchi/ \ + /etc/ssh/ \ + /var/log/pwnagotchi.log \ + /var/log/pwnagotchi*.gz \ + /home/pi/.ssh \ + /home/pi/.bashrc \ + /home/pi/.profile" -ping -c 1 "${UNIT_HOSTNAME}" >/dev/null || { +ping -w 3 -c 1 "${UNIT_HOSTNAME}" > /dev/null 2>&1 || { echo "@ unit ${UNIT_HOSTNAME} can't be reached, make sure it's connected and a static IP assigned to the USB interface." exit 1 } diff --git a/scripts/restore.sh b/scripts/restore.sh index 50aa5ec..6303f88 100755 --- a/scripts/restore.sh +++ b/scripts/restore.sh @@ -1,13 +1,50 @@ -#!/usr/bin/env bash +#!/bin/sh +usage() { + echo "Usage: restore.sh [-bhnu] [-h] [-b backup name] [-n host name] [-u user name]" +} + +while getopts "hb:n:u:" arg; do + case $arg in + b) + BACKUP=$OPTARG + ;; + h) + usage + exit + ;; + n) + UNIT_HOSTNAME=$OPTARG + ;; + u) + USERNAME=$OPTARG + ;; + *) + exit 1 + esac +done # name of the ethernet gadget interface on the host -UNIT_HOSTNAME=${1:-10.0.0.2} +UNIT_HOSTNAME=${UNIT_HOSTNAME:-10.0.0.2} # output backup tgz file -BACKUP=${2:-pwnagotchi-backup.tgz} +if [ -z $BACKUP ]; then + BACKUP=$(ls -rt ${UNIT_HOSTNAME}-backup-*.tgz 2>/dev/null | tail -n1) + if [ -z $BACKUP ]; then + echo "@ Can't find backup file. Please specify one with '-b'" + exit 1 + fi + echo "@ Found backup file:" + echo "\t${BACKUP}" + echo -n "@ continue restroring this file? (y/n) " + read CONTINUE + CONTINUE=$(echo "${CONTINUE}" | tr "[:upper:]" "[:lower:]") + if [ "${CONTINUE}" != "y" ]; then + exit 1 + fi +fi # username to use for ssh -USERNAME=${3:-pi} +USERNAME=${USERNAME:-pi} -ping -c 1 "${UNIT_HOSTNAME}" >/dev/null || { +ping -w 3 -c 1 "${UNIT_HOSTNAME}" > /dev/null 2>&1 || { echo "@ unit ${UNIT_HOSTNAME} can't be reached, make sure it's connected and a static IP assigned to the USB interface." exit 1 }