common.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #!/usr/bin/env bash
  2. set -e -o pipefail
  3. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  4. PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
  5. BINARY_NAME="sing-box"
  6. INSTALL_BIN_PATH="/usr/local/bin"
  7. INSTALL_CONFIG_PATH="/usr/local/etc/sing-box"
  8. INSTALL_DATA_PATH="/var/lib/sing-box"
  9. SYSTEMD_SERVICE_PATH="/etc/systemd/system"
  10. DEFAULT_BUILD_TAGS="$(cat "$PROJECT_DIR/release/DEFAULT_BUILD_TAGS_OTHERS")"
  11. setup_environment() {
  12. if [ -d /usr/local/go ]; then
  13. export PATH="$PATH:/usr/local/go/bin"
  14. fi
  15. if ! command -v go &> /dev/null; then
  16. echo "Error: Go is not installed or not in PATH"
  17. echo "Run install_go.sh to install Go"
  18. exit 1
  19. fi
  20. }
  21. get_build_tags() {
  22. local extra_tags="$1"
  23. if [ -n "$extra_tags" ]; then
  24. echo "${DEFAULT_BUILD_TAGS},${extra_tags}"
  25. else
  26. echo "${DEFAULT_BUILD_TAGS}"
  27. fi
  28. }
  29. get_version() {
  30. cd "$PROJECT_DIR"
  31. GOHOSTOS=$(go env GOHOSTOS)
  32. GOHOSTARCH=$(go env GOHOSTARCH)
  33. CGO_ENABLED=0 GOOS=$GOHOSTOS GOARCH=$GOHOSTARCH go run github.com/sagernet/sing-box/cmd/internal/read_tag@latest
  34. }
  35. get_ldflags() {
  36. local version
  37. version=$(get_version)
  38. local shared_ldflags
  39. shared_ldflags=$(cat "$PROJECT_DIR/release/LDFLAGS")
  40. echo "-X 'github.com/sagernet/sing-box/constant.Version=${version}' ${shared_ldflags} -s -w -buildid="
  41. }
  42. build_sing_box() {
  43. local tags="$1"
  44. local ldflags
  45. ldflags=$(get_ldflags)
  46. echo "Building sing-box with tags: $tags"
  47. cd "$PROJECT_DIR"
  48. export GOTOOLCHAIN=local
  49. go install -v -trimpath -ldflags "$ldflags" -tags "$tags" ./cmd/sing-box
  50. }
  51. install_binary() {
  52. local gopath
  53. gopath=$(go env GOPATH)
  54. echo "Installing binary to $INSTALL_BIN_PATH/$BINARY_NAME"
  55. sudo cp "${gopath}/bin/${BINARY_NAME}" "${INSTALL_BIN_PATH}/"
  56. }
  57. setup_config() {
  58. echo "Setting up configuration"
  59. sudo mkdir -p "$INSTALL_CONFIG_PATH"
  60. if [ ! -f "$INSTALL_CONFIG_PATH/config.json" ]; then
  61. sudo cp "$PROJECT_DIR/release/config/config.json" "$INSTALL_CONFIG_PATH/config.json"
  62. echo "Default config installed to $INSTALL_CONFIG_PATH/config.json"
  63. else
  64. echo "Config already exists at $INSTALL_CONFIG_PATH/config.json (not overwriting)"
  65. fi
  66. }
  67. setup_systemd() {
  68. echo "Setting up systemd service"
  69. sudo cp "$SCRIPT_DIR/sing-box.service" "$SYSTEMD_SERVICE_PATH/"
  70. sudo systemctl daemon-reload
  71. }
  72. stop_service() {
  73. if systemctl is-active --quiet sing-box; then
  74. echo "Stopping sing-box service"
  75. sudo systemctl stop sing-box
  76. fi
  77. }
  78. start_service() {
  79. echo "Starting sing-box service"
  80. sudo systemctl start sing-box
  81. }
  82. restart_service() {
  83. echo "Restarting sing-box service"
  84. sudo systemctl restart sing-box
  85. }