install.sh 3.2 KB

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