Files
sing-box-extended-mirror/docs/installation/tools/install.sh
T

117 lines
3.2 KiB
Bash
Raw Normal View History

2025-04-14 22:21:11 +08:00
#!/bin/sh
download_beta=false
download_version=""
2025-04-19 18:38:12 +08:00
while [ $# -gt 0 ]; do
case "$1" in
--beta)
download_beta=true
shift
;;
--version)
shift
if [ $# -eq 0 ]; then
echo "Missing argument for --version"
echo "Usage: $0 [--beta] [--version <version>]"
exit 1
fi
download_version="$1"
shift
;;
*)
echo "Unknown argument: $1"
echo "Usage: $0 [--beta] [--version <version>]"
exit 1
;;
esac
2025-04-14 22:21:11 +08:00
done
2025-04-19 18:38:12 +08:00
if command -v pacman >/dev/null 2>&1; then
os="linux"
arch=$(uname -m)
package_suffix=".pkg.tar.zst"
package_install="pacman -U --noconfirm"
elif command -v dpkg >/dev/null 2>&1; then
2025-04-14 22:21:11 +08:00
os="linux"
arch=$(dpkg --print-architecture)
package_suffix=".deb"
package_install="dpkg -i"
2025-04-19 18:38:12 +08:00
elif command -v dnf >/dev/null 2>&1; then
2025-04-14 22:21:11 +08:00
os="linux"
arch=$(uname -m)
package_suffix=".rpm"
package_install="dnf install -y"
2025-04-19 18:38:12 +08:00
elif command -v rpm >/dev/null 2>&1; then
2025-04-14 22:21:11 +08:00
os="linux"
arch=$(uname -m)
package_suffix=".rpm"
package_install="rpm -i"
2025-04-19 18:38:12 +08:00
elif command -v opkg >/dev/null 2>&1; then
2025-04-14 22:21:11 +08:00
os="openwrt"
2025-04-19 18:38:12 +08:00
. /etc/os-release
2025-04-14 22:21:11 +08:00
arch="$OPENWRT_ARCH"
package_suffix=".ipk"
2025-04-19 18:38:12 +08:00
package_install="opkg update && opkg install"
2025-04-14 22:21:11 +08:00
else
echo "Missing supported package manager."
exit 1
fi
2025-04-19 18:38:12 +08:00
if [ -z "$download_version" ]; then
if [ "$download_beta" != "true" ]; then
if [ -n "$GITHUB_TOKEN" ]; then
latest_release=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" https://api.github.com/repos/SagerNet/sing-box/releases/latest)
2025-04-14 22:21:11 +08:00
else
2025-04-19 18:38:12 +08:00
latest_release=$(curl -s https://api.github.com/repos/SagerNet/sing-box/releases/latest)
2025-04-14 22:21:11 +08:00
fi
curl_exit_status=$?
2025-04-19 18:38:12 +08:00
if [ $curl_exit_status -ne 0 ]; then
exit $curl_exit_status
fi
if [ "$(echo "$latest_release" | grep tag_name | wc -l)" -eq 0 ]; then
2025-04-14 22:21:11 +08:00
echo "$latest_release"
2025-04-19 18:38:12 +08:00
exit 1
2025-04-14 22:21:11 +08:00
fi
2025-04-19 18:38:12 +08:00
download_version=$(echo "$latest_release" | grep tag_name | head -n 1 | awk -F: '{print $2}' | sed 's/[", v]//g')
2025-04-14 22:21:11 +08:00
else
2025-04-19 18:38:12 +08:00
if [ -n "$GITHUB_TOKEN" ]; then
latest_release=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" https://api.github.com/repos/SagerNet/sing-box/releases)
2025-04-14 22:21:11 +08:00
else
2025-04-19 18:38:12 +08:00
latest_release=$(curl -s https://api.github.com/repos/SagerNet/sing-box/releases)
2025-04-14 22:21:11 +08:00
fi
curl_exit_status=$?
2025-04-19 18:38:12 +08:00
if [ $curl_exit_status -ne 0 ]; then
exit $curl_exit_status
fi
if [ "$(echo "$latest_release" | grep tag_name | wc -l)" -eq 0 ]; then
2025-04-14 22:21:11 +08:00
echo "$latest_release"
2025-04-19 18:38:12 +08:00
exit 1
2025-04-14 22:21:11 +08:00
fi
2025-04-19 18:38:12 +08:00
download_version=$(echo "$latest_release" | grep tag_name | head -n 1 | awk -F: '{print $2}' | sed 's/[", v]//g')
2025-04-14 22:21:11 +08:00
fi
fi
package_name="sing-box_${download_version}_${os}_${arch}${package_suffix}"
package_url="https://github.com/SagerNet/sing-box/releases/download/v${download_version}/${package_name}"
echo "Downloading $package_url"
2025-04-19 18:38:12 +08:00
if [ -n "$GITHUB_TOKEN" ]; then
curl --fail -Lo "$package_name" -H "Authorization: token ${GITHUB_TOKEN}" "$package_url"
2025-04-14 22:21:11 +08:00
else
2025-04-19 18:38:12 +08:00
curl --fail -Lo "$package_name" "$package_url"
2025-04-14 22:21:11 +08:00
fi
2025-04-19 18:38:12 +08:00
curl_exit_status=$?
if [ $curl_exit_status -ne 0 ]; then
exit $curl_exit_status
2025-04-14 22:21:11 +08:00
fi
2025-04-19 18:38:12 +08:00
if command -v sudo >/dev/null 2>&1; then
2025-04-14 22:21:11 +08:00
package_install="sudo $package_install"
fi
2025-04-19 18:38:12 +08:00
echo "$package_install $package_name"
sh -c "$package_install \"$package_name\""
rm -f "$package_name"