install.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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 apk >/dev/null 2>&1 && [ -f /etc/os-release ] && grep -q OPENWRT_ARCH /etc/os-release; then
  48. os="openwrt"
  49. . /etc/os-release
  50. arch="$OPENWRT_ARCH"
  51. package_suffix=".apk"
  52. package_install="apk add --allow-untrusted"
  53. elif command -v apk >/dev/null 2>&1; then
  54. os="linux"
  55. arch=$(apk --print-arch)
  56. package_suffix=".apk"
  57. package_install="apk add --allow-untrusted"
  58. elif command -v opkg >/dev/null 2>&1; then
  59. os="openwrt"
  60. . /etc/os-release
  61. arch="$OPENWRT_ARCH"
  62. package_suffix=".ipk"
  63. package_install="opkg update && opkg install"
  64. else
  65. echo "Missing supported package manager."
  66. exit 1
  67. fi
  68. if [ -z "$download_version" ]; then
  69. if [ "$download_beta" != "true" ]; then
  70. if [ -n "$GITHUB_TOKEN" ]; then
  71. latest_release=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" https://api.github.com/repos/SagerNet/sing-box/releases/latest)
  72. else
  73. latest_release=$(curl -s https://api.github.com/repos/SagerNet/sing-box/releases/latest)
  74. fi
  75. curl_exit_status=$?
  76. if [ $curl_exit_status -ne 0 ]; then
  77. exit $curl_exit_status
  78. fi
  79. if [ "$(echo "$latest_release" | grep tag_name | wc -l)" -eq 0 ]; then
  80. echo "$latest_release"
  81. exit 1
  82. fi
  83. download_version=$(echo "$latest_release" | grep tag_name | head -n 1 | awk -F: '{print $2}' | sed 's/[", v]//g')
  84. else
  85. if [ -n "$GITHUB_TOKEN" ]; then
  86. latest_release=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" https://api.github.com/repos/SagerNet/sing-box/releases)
  87. else
  88. latest_release=$(curl -s https://api.github.com/repos/SagerNet/sing-box/releases)
  89. fi
  90. curl_exit_status=$?
  91. if [ $curl_exit_status -ne 0 ]; then
  92. exit $curl_exit_status
  93. fi
  94. if [ "$(echo "$latest_release" | grep tag_name | wc -l)" -eq 0 ]; then
  95. echo "$latest_release"
  96. exit 1
  97. fi
  98. download_version=$(echo "$latest_release" | grep tag_name | head -n 1 | awk -F: '{print $2}' | sed 's/[", v]//g')
  99. fi
  100. fi
  101. package_name="sing-box_${download_version}_${os}_${arch}${package_suffix}"
  102. package_url="https://github.com/SagerNet/sing-box/releases/download/v${download_version}/${package_name}"
  103. echo "Downloading $package_url"
  104. if [ -n "$GITHUB_TOKEN" ]; then
  105. curl --fail -Lo "$package_name" -H "Authorization: token ${GITHUB_TOKEN}" "$package_url"
  106. else
  107. curl --fail -Lo "$package_name" "$package_url"
  108. fi
  109. curl_exit_status=$?
  110. if [ $curl_exit_status -ne 0 ]; then
  111. exit $curl_exit_status
  112. fi
  113. if command -v sudo >/dev/null 2>&1; then
  114. package_install="sudo $package_install"
  115. fi
  116. echo "$package_install $package_name"
  117. sh -c "$package_install \"$package_name\""
  118. rm -f "$package_name"