mirror of
https://github.com/pivpn/pivpn.git
synced 2024-12-21 04:10:20 +00:00
deee38b20e
- Add curl as a dependency for those who run the script without 'curl URL | bash'. - Use POSIX 'command -v' instead of 'hash'. - Check if packages have actually been installed and abort execution if they have not. - Fixed issue with getStaticIPv4Settings() that prevented existing network settings to be used as static IP settings when running the script unattended with empty $IPv4addr and $IPv4gw variables. - Exit if processing wireguard-linux-compat fails. - Exit if 50unattended-upgrades fails to extract. - Exit clientSTAT.sh if the wg0 interface is not available. - Moved the Self Check to a single script since dedicated versions were very similar. - Add 'pivpn -wg' to update WireGuard for users running Raspbian with armv6l kernel.
132 lines
4.3 KiB
Bash
Executable file
132 lines
4.3 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
setupVars="/etc/pivpn/setupVars.conf"
|
|
|
|
if [ ! -f "${setupVars}" ]; then
|
|
echo "::: Missing setup vars file!"
|
|
exit 1
|
|
fi
|
|
|
|
source "${setupVars}"
|
|
|
|
if [ "$(uname -m)" != "armv6l" ]; then
|
|
echo "On your system, WireGuard updates via the package manager"
|
|
exit 0
|
|
fi
|
|
|
|
CURRENT_WG_TOOLS_SNAPSHOT="${WG_TOOLS_SNAPSHOT}"
|
|
WG_TOOLS_SNAPSHOT="$(curl -s https://build.wireguard.com/distros.json | jq -r '."upstream-tools"."version"')"
|
|
|
|
if dpkg --compare-versions "${WG_TOOLS_SNAPSHOT}" gt "${CURRENT_WG_TOOLS_SNAPSHOT}"; then
|
|
|
|
read -r -p "A new wireguard-tools update is available (${WG_TOOLS_SNAPSHOT}), install? [Y/n]: "
|
|
|
|
if [[ ${REPLY} =~ ^[Yy]$ ]]; then
|
|
echo "::: Upgrading wireguard-tools from ${CURRENT_WG_TOOLS_SNAPSHOT} to ${WG_TOOLS_SNAPSHOT}..."
|
|
|
|
WG_TOOLS_SOURCE="https://git.zx2c4.com/wireguard-tools/snapshot/wireguard-tools-${WG_TOOLS_SNAPSHOT}.tar.xz"
|
|
echo "::: Downloading wireguard-tools source code... "
|
|
wget -qO- "${WG_TOOLS_SOURCE}" | tar xJ --directory /usr/src
|
|
echo "done!"
|
|
|
|
## || exits if cd fails.
|
|
cd /usr/src/wireguard-tools-"${WG_TOOLS_SNAPSHOT}/src" || exit 1
|
|
|
|
# We install the userspace tools manually since DKMS only compiles and
|
|
# installs the kernel module
|
|
echo "::: Compiling WireGuard tools... "
|
|
if make; then
|
|
echo "done!"
|
|
else
|
|
echo "failed!"
|
|
exit 1
|
|
fi
|
|
|
|
# Use checkinstall to install userspace tools so if the user wants to uninstall
|
|
# PiVPN we can just do apt remove wireguard-tools, instead of manually removing
|
|
# files from the file system
|
|
echo "::: Installing WireGuard tools... "
|
|
if checkinstall --pkgname wireguard-tools --pkgversion "${WG_TOOLS_SNAPSHOT}" -y; then
|
|
echo "done!"
|
|
else
|
|
echo "failed!"
|
|
exit 1
|
|
fi
|
|
|
|
echo "::: Removing old source code ..."
|
|
rm -rf /usr/src/wireguard-tools-"${CURRENT_WG_TOOLS_SNAPSHOT}"
|
|
|
|
sed "s/WG_TOOLS_SNAPSHOT=${CURRENT_WG_TOOLS_SNAPSHOT}/WG_TOOLS_SNAPSHOT=${WG_TOOLS_SNAPSHOT}/" -i "${setupVars}"
|
|
|
|
echo "::: Upgrade completed!"
|
|
fi
|
|
else
|
|
echo "::: You are running the lastest version of wireguard-tools (${CURRENT_WG_TOOLS_SNAPSHOT})"
|
|
fi
|
|
|
|
CURRENT_WG_MODULE_SNAPSHOT="${WG_MODULE_SNAPSHOT}"
|
|
WG_MODULE_SNAPSHOT="$(curl -s https://build.wireguard.com/distros.json | jq -r '."upstream-linuxcompat"."version"')"
|
|
|
|
if dpkg --compare-versions "${WG_MODULE_SNAPSHOT}" gt "${CURRENT_WG_MODULE_SNAPSHOT}"; then
|
|
|
|
read -r -p "A new wireguard-dkms update is available (${WG_MODULE_SNAPSHOT}), install? [Y/n]: "
|
|
|
|
if [[ ${REPLY} =~ ^[Yy]$ ]]; then
|
|
echo "::: Upgrading wireguard-dkms from ${CURRENT_WG_MODULE_SNAPSHOT} to ${WG_MODULE_SNAPSHOT}..."
|
|
|
|
WG_MODULE_SOURCE="https://git.zx2c4.com/wireguard-linux-compat/snapshot/wireguard-linux-compat-${WG_MODULE_SNAPSHOT}.tar.xz"
|
|
echo "::: Downloading wireguard-linux-compat source code... "
|
|
wget -qO- "${WG_MODULE_SOURCE}" | tar xJ --directory /usr/src
|
|
echo "done!"
|
|
|
|
# Rename wireguard-linux-compat folder and move the source code to the parent folder
|
|
# such that dkms picks up the module when referencing wireguard/"${WG_MODULE_SNAPSHOT}"
|
|
cd /usr/src && \
|
|
mv wireguard-linux-compat-"${WG_MODULE_SNAPSHOT}" wireguard-"${WG_MODULE_SNAPSHOT}" && \
|
|
cd wireguard-"${WG_MODULE_SNAPSHOT}" && \
|
|
mv src/* . && \
|
|
rmdir src || exit 1
|
|
|
|
echo "::: Adding WireGuard module via DKMS... "
|
|
if dkms add wireguard/"${WG_MODULE_SNAPSHOT}"; then
|
|
echo "done!"
|
|
else
|
|
echo "failed!"
|
|
dkms remove wireguard/"${WG_MODULE_SNAPSHOT}" --all
|
|
exit 1
|
|
fi
|
|
|
|
echo "::: Compiling WireGuard module via DKMS... "
|
|
if dkms build wireguard/"${WG_MODULE_SNAPSHOT}"; then
|
|
echo "done!"
|
|
else
|
|
echo "failed!"
|
|
dkms remove wireguard/"${WG_MODULE_SNAPSHOT}" --all
|
|
exit 1
|
|
fi
|
|
|
|
echo "::: Installing WireGuard module via DKMS... "
|
|
if dkms install wireguard/"${WG_MODULE_SNAPSHOT}"; then
|
|
echo "done!"
|
|
else
|
|
echo "failed!"
|
|
dkms remove wireguard/"${WG_MODULE_SNAPSHOT}" --all
|
|
exit 1
|
|
fi
|
|
|
|
echo "::: Removing old kernel module and source code..."
|
|
if dkms remove wireguard/"${CURRENT_WG_MODULE_SNAPSHOT}" --all; then
|
|
rm -rf /usr/src/wireguard-"${CURRENT_WG_MODULE_SNAPSHOT}"
|
|
echo "done!"
|
|
else
|
|
echo "failed!"
|
|
exit 1
|
|
fi
|
|
|
|
sed "s/WG_TOOLS_SNAPSHOT=${CURRENT_WG_MODULE_SNAPSHOT}/WG_TOOLS_SNAPSHOT=${WG_MODULE_SNAPSHOT}/" -i "${setupVars}"
|
|
|
|
echo "::: Upgrade completed!"
|
|
fi
|
|
else
|
|
echo "::: You are running the lastest version of wireguard-dkms (${CURRENT_WG_MODULE_SNAPSHOT})"
|
|
fi
|