diff --git a/scripts/update_pwnagotchi.sh b/scripts/update_pwnagotchi.sh index 0039e7b..f68d925 100644 --- a/scripts/update_pwnagotchi.sh +++ b/scripts/update_pwnagotchi.sh @@ -13,13 +13,14 @@ function usage() { cat <<EOF usage: $0 [OPTIONS] - + Note: This should be run from the pwnagotchi itself! + Options: -v # Version to update to, can be a branch or commit. (default: master) -u # Url to clone from. (default: https://github.com/evilsocket/pwnagotchi) -m # Mode to restart to. (Supported: ${SUPPORTED_RESTART_MODES[*]}; default: auto) - -b # Backup the current pwnagotchi config. - -r # Restore the current pwnagotchi config. (-b will be enabled.) + -b # Backup the current pwnagotchi config, then overwrite with defaults. + -r # Restore the current pwnagotchi config after upgrade. (-b will be enabled.) -h # Shows this help. EOF @@ -36,16 +37,11 @@ function test_root() { function test_github() { wget -q --spider $GIT_URL if [ $? -ne 0 ]; then - echo "[!] Cannot reach github. This script requires internet access, ensure connection sharing is working." + echo "[!] Cannot reach github. This script requires internet access and DNS resolution, ensure connection sharing is working and valid DNS server in /etc/resolv.conf." exit 2 fi } - -echo "[+] Checking prerequisites." -test_root -test_github - -while getopts ":v:u:m:b:r:h" o; do +while getopts "v:u:m:brh" o; do case "${o}" in v) VERSION="${OPTARG}" @@ -53,22 +49,22 @@ while getopts ":v:u:m:b:r:h" o; do u) GIT_URL="${OPTARG}" ;; + b) + BACKUPCONFIG=1 + ;; + r) + BACKUPCONFIG=1 + RESTORECONFIG=1 + ;; + h) + usage + ;; m) if [[ "${SUPPORTED_RESTART_MODES[*]}" =~ ${OPTARG} ]]; then MODE="${OPTARG}" else usage - fi - ;; - b) - BACKUPCONFIG=1 - ;; - r) - BACKUPCONFIG=1 - RESTORECONFIG=1 - ;; - h) - usage + fi ;; *) usage @@ -77,29 +73,43 @@ while getopts ":v:u:m:b:r:h" o; do done shift $((OPTIND-1)) +echo "[+] Checking prerequisites." +test_root +test_github + # clean up old files, clone master, set checkout to commit if needed. echo "[+] Cloning to $GIT_FOLDER..." -rm $GIT_FOLDER -rf +#rm $GIT_FOLDER -rf git clone $GIT_URL $GIT_FOLDER -q cd $GIT_FOLDER if [ $VERSION != "master" ]; then git checkout $VERSION -q fi -echo "[+] Installing $(git log -1 --format="%h")" echo "[+] Updating..." if [ $BACKUPCONFIG -eq 1 ]; then echo "[+] Creating backup of config.yml" mv /root/pwnagotchi/config.yml /root/config.yml.bak -f + echo "[+] Creating backup of host files" + mv /etc/hosts /etc/hosts.bak -f + mv /etc/hostname /etc/hostname.bak -f + mv /etc/motd /etc/motd.bak -f fi + +echo "[+] Installing $(git log -1 --format="%h")" rm /root/pwnagotchi -rf # ensures old files are removed rsync -aPq $GIT_FOLDER/sdcard/boot/* /boot/ rsync -aPq $GIT_FOLDER/sdcard/rootfs/* / cd /tmp rm $GIT_FOLDER -rf + if [ $RESTORECONFIG -eq 1 ]; then echo "[+] Restoring backup of config.yml" mv /root/config.yml.bak /root/pwnagotchi/config.yml -f + echo "[+] Restoring backup of host files" + mv /etc/hosts.bak /etc/hosts -f + mv /etc/hostname.bak /etc/hostname -f + mv /etc/motd.bak /etc/motd -f fi echo "[+] Restarting pwnagotchi in $MODE mode. $( screen -X -S pwnagotchi quit)" @@ -108,4 +118,4 @@ if [ $MODE == "auto" ]; then elif [ $MODE == "manual" ]; then sudo -H -u root /usr/bin/screen -dmS pwnagotchi -c /root/pwnagotchi/data/screenrc.manual fi -echo "[+] Finished" \ No newline at end of file +echo "[+] Finished"