install.sh 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/bin/sh
  2. download_beta=false
  3. download_version=""
  4. for arg in "$@"; do
  5. if [[ "$arg" == "--beta" ]]; then
  6. download_beta=true
  7. elif [[ "$arg" == "--version" ]]; then
  8. download_version=true
  9. elif [[ "$download_version" == 'true' ]]; then
  10. download_version="$arg"
  11. else
  12. echo "Unknown argument: $arg"
  13. echo "Usage: $0 [--beta] [--version <version>]"
  14. exit 1
  15. fi
  16. done
  17. if [[ $(command -v dpkg) ]]; then
  18. os="linux"
  19. arch=$(dpkg --print-architecture)
  20. package_suffix=".deb"
  21. package_install="dpkg -i"
  22. elif [[ $(command -v dnf) ]]; then
  23. os="linux"
  24. arch=$(uname -m)
  25. package_suffix=".rpm"
  26. package_install="dnf install -y"
  27. elif [[ $(command -v rpm) ]]; then
  28. os="linux"
  29. arch=$(uname -m)
  30. package_suffix=".rpm"
  31. package_install="rpm -i"
  32. elif [[ $(command -v pacman) ]]; then
  33. os="linux"
  34. arch=$(uname -m)
  35. package_suffix=".pkg.tar.zst"
  36. package_install="pacman -U --noconfirm"
  37. elif [[ $(command -v opkg) ]]; then
  38. os="openwrt"
  39. source /etc/os-release
  40. arch="$OPENWRT_ARCH"
  41. package_suffix=".ipk"
  42. package_install="opkg update && opkg install -y"
  43. else
  44. echo "Missing supported package manager."
  45. exit 1
  46. fi
  47. if [[ -z "$download_version" ]]; then
  48. if [[ "$download_beta" != 'true' ]]; then
  49. if [[ -n "$GITHUB_TOKEN" ]]; then
  50. latest_release=$(curl -s --fail-with-body -H "Authorization: token ${GITHUB_TOKEN}" https://api.github.com/repos/SagerNet/sing-box/releases/latest)
  51. else
  52. latest_release=$(curl -s --fail-with-body https://api.github.com/repos/SagerNet/sing-box/releases/latest)
  53. fi
  54. curl_exit_status=$?
  55. if [[ $curl_exit_status -ne 0 ]]; then
  56. echo "$latest_release"
  57. exit $?
  58. fi
  59. download_version=$(echo "$latest_release" | grep tag_name | cut -d ":" -f2 | sed 's/\"//g;s/\,//g;s/\ //g;s/v//')
  60. else
  61. if [[ -n "$GITHUB_TOKEN" ]]; then
  62. latest_release=$(curl -s --fail-with-body -H "Authorization: token ${GITHUB_TOKEN}" https://api.github.com/repos/SagerNet/sing-box/releases)
  63. else
  64. latest_release=$(curl -s --fail-with-body https://api.github.com/repos/SagerNet/sing-box/releases)
  65. fi
  66. curl_exit_status=$?
  67. if [[ $? -ne 0 ]]; then
  68. echo "$latest_release"
  69. exit $?
  70. fi
  71. download_version=$(echo "$latest_release" | grep tag_name | head -n 1 | cut -d ":" -f2 | sed 's/\"//g;s/\,//g;s/\ //g;s/v//')
  72. fi
  73. fi
  74. package_name="sing-box_${download_version}_${os}_${arch}${package_suffix}"
  75. package_url="https://github.com/SagerNet/sing-box/releases/download/v${download_version}/${package_name}"
  76. echo "Downloading $package_url"
  77. if [[ -n "$GITHUB_TOKEN" ]]; then
  78. curl --fail-with-body -Lo "$package_name" -H "Authorization: token ${GITHUB_TOKEN}" "$package_url"
  79. else
  80. curl --fail-with-body -Lo "$package_name" "$package_url"
  81. fi
  82. if [[ $? -ne 0 ]]; then
  83. exit $?
  84. fi
  85. if [[ $(command -v sudo) ]]; then
  86. package_install="sudo $package_install"
  87. fi
  88. echo "$package_install $package_name" && $package_install "$package_name" && rm "$package_name"