mirror of
https://github.com/pivpn/pivpn.git
synced 2024-12-23 05:10:21 +00:00
823afa3fbb
- Allow using 'pivpn vpn -u' to directly uninstall VPN 'vpn' - Also allow using 'pivpn -u' with two VPNs (will present a dialog). - During uninstall, ask which VPN to remove only if there are two VPNs - PiVPN git repo will be downloaded to '/usr/local/src/pivpn'. All scripts in /opt/pivpn, the main pivpn script and the bash completion file, are now just symbolic links. Resolves issue #695. - Remove unused call to updateWireGuard().
132 lines
4 KiB
Bash
Executable file
132 lines
4 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
###Updates pivpn scripts (Not PiVPN)
|
|
###Main Vars
|
|
pivpnrepo="https://github.com/pivpn/pivpn.git"
|
|
pivpnlocalpath="/etc/.pivpn"
|
|
pivpnscripts="/opt/pivpn/"
|
|
bashcompletiondir="/etc/bash_completion.d/"
|
|
|
|
# Find the rows and columns. Will default to 80x24 if it can not be detected.
|
|
screen_size=$(stty size 2>/dev/null || echo 24 80)
|
|
rows=$(echo "$screen_size" | awk '{print $1}')
|
|
columns=$(echo "$screen_size" | awk '{print $2}')
|
|
|
|
# Divide by two so the dialogs take up half of the screen, which looks nice.
|
|
r=$(( rows / 2 ))
|
|
c=$(( columns / 2 ))
|
|
# Unless the screen is tiny
|
|
r=$(( r < 20 ? 20 : r ))
|
|
c=$(( c < 70 ? 70 : c ))
|
|
|
|
echo "::: The updating functionality for PiVPN scripts is temporarily disabled"
|
|
echo "::: To keep the VPN (and the system) up to date, use 'apt update' and 'apt upgrade'"
|
|
exit 0
|
|
|
|
chooseVPNCmd=(whiptail --backtitle "Setup PiVPN" --title "Installation mode" --separate-output --radiolist "Choose a VPN to update (press space to select):" "${r}" "${c}" 2)
|
|
VPNChooseOptions=(WireGuard "" on
|
|
OpenVPN "" off)
|
|
|
|
if VPN=$("${chooseVPNCmd[@]}" "${VPNChooseOptions[@]}" 2>&1 >/dev/tty) ; then
|
|
echo "::: Using VPN: $VPN"
|
|
VPN="${VPN,,}"
|
|
else
|
|
echo "::: Cancel selected, exiting...."
|
|
exit 1
|
|
fi
|
|
|
|
setupVars="/etc/pivpn/${VPN}/setupVars.conf"
|
|
|
|
if [ ! -f "${setupVars}" ]; then
|
|
echo "::: Missing setup vars file!"
|
|
exit 1
|
|
fi
|
|
|
|
source "${setupVars}"
|
|
|
|
scriptusage(){
|
|
echo "::: Updates PiVPN scripts"
|
|
echo ":::"
|
|
echo "::: Usage: pivpn <-up|update> [-t|--test]"
|
|
echo ":::"
|
|
echo "::: Commands:"
|
|
echo "::: [none] Updates from master branch"
|
|
echo "::: -t, test Updates from test branch"
|
|
echo "::: -h, help Show this usage dialog"
|
|
}
|
|
|
|
###Functions
|
|
##Updates scripts
|
|
updatepivpnscripts(){
|
|
##We don't know what sort of changes users have made.
|
|
##Lets remove first /etc/.pivpn dir then clone it back again
|
|
echo "going do update PiVPN Scripts"
|
|
if [[ -d "$pivpnlocalpath" ]]; then
|
|
if [[ -n "$pivpnlocalpath" ]]; then
|
|
rm -rf "${pivpnlocalpath}/../.pivpn"
|
|
cloneandupdate
|
|
fi
|
|
else
|
|
cloneandupdate
|
|
fi
|
|
echo "PiVPN Scripts have been updated"
|
|
}
|
|
|
|
##Updates scripts using test branch
|
|
updatefromtest(){
|
|
##We don't know what sort of changes users have made.
|
|
##Lets remove first /etc/.pivpn dir then clone it back again
|
|
echo "PiVPN Scripts updating from test branch"
|
|
if [[ -d "$pivpnlocalpath" ]]; then
|
|
if [[ -n "$pivpnlocalpath" ]]; then
|
|
rm -rf "${pivpnlocalpath}/../.pivpn"
|
|
cloneupdttest
|
|
fi
|
|
else
|
|
cloneupdttest
|
|
fi
|
|
echo "PiVPN Scripts updated have been updated from test branch"
|
|
}
|
|
|
|
##Clone and copy pivpn scripts to /opt/pivpn
|
|
cloneandupdate(){
|
|
git clone "$pivpnrepo" "$pivpnlocalpath"
|
|
cp "${pivpnlocalpath}"/scripts/*.sh "$pivpnscripts"
|
|
cp "${pivpnlocalpath}"/scripts/$VPN/*.sh "$pivpnscripts"
|
|
cp "${pivpnlocalpath}"/scripts/$VPN/bash-completion "$bashcompletiondir"
|
|
}
|
|
|
|
##same as cloneandupdate() but from test branch
|
|
##and falls back to master branch again after updating
|
|
cloneupdttest(){
|
|
git clone "$pivpnrepo" "$pivpnlocalpath"
|
|
git -C "$pivpnlocalpath" checkout test
|
|
git -C "$pivpnlocalpath" pull origin test
|
|
cp "${pivpnlocalpath}"/scripts/*.sh "$pivpnscripts"
|
|
cp "${pivpnlocalpath}"/scripts/$VPN/*.sh "$pivpnscripts"
|
|
cp "${pivpnlocalpath}"/scripts/$VPN/bash-completion "$bashcompletiondir"
|
|
git -C "$pivpnlocalpath" checkout master
|
|
}
|
|
|
|
## SCRIPT
|
|
|
|
if [[ $# -eq 0 ]]; then
|
|
updatepivpnscripts
|
|
else
|
|
while true; do
|
|
case "$1" in
|
|
-t|test)
|
|
updatefromtest
|
|
exit 0
|
|
;;
|
|
-h|help)
|
|
scriptusage
|
|
exit 0
|
|
;;
|
|
*)
|
|
updatepivpnscripts
|
|
exit 0
|
|
;;
|
|
esac
|
|
done
|
|
fi
|