user-package.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. #!/usr/bin/env bash
  2. set -o errexit
  3. set -o pipefail
  4. set -o nounset
  5. # set -o xtrace
  6. trap 'echo -e "Aborted, error $? in command: $BASH_COMMAND"; trap ERR; exit 1' ERR
  7. NOW=$(date '+%Y%m%d-%H%M%S')
  8. TMP=$(mktemp -d)
  9. SRCDIR=$(pwd)
  10. CODENAME="user"
  11. BUILDNAME=$NOW
  12. cleanup() { rm -rf "$TMP"; }
  13. trap cleanup INT TERM ERR
  14. get_source() {
  15. echo ">>> Clone v2fly/v2ray-core repo..."
  16. git clone https://github.com/v2fly/v2ray-core.git
  17. cd v2ray-core
  18. go mod download
  19. }
  20. build_v2() {
  21. if [[ $nosource != 1 ]]; then
  22. cd ${SRCDIR}/v2ray-core
  23. local VERSIONTAG=$(git describe --abbrev=0 --tags)
  24. else
  25. echo ">>> Use current directory as WORKDIR"
  26. local VERSIONTAG=$(git describe --abbrev=0 --tags)
  27. fi
  28. LDFLAGS="-s -w -buildid= -X github.com/v2fly/v2ray-core/v4.codename=${CODENAME} -X github.com/v2fly/v2ray-core/v4.build=${BUILDNAME} -X github.com/v2fly/v2ray-core/v4.version=${VERSIONTAG}"
  29. echo ">>> Compile v2ray ..."
  30. env CGO_ENABLED=0 go build -o "$TMP"/v2ray"${EXESUFFIX}" -ldflags "$LDFLAGS" ./main
  31. }
  32. build_dat() {
  33. echo ">>> Download latest geoip.dat"
  34. curl -s -L -o "$TMP"/geoip.dat "https://github.com/v2fly/geoip/raw/release/geoip.dat"
  35. echo ">>> Download latest geoip-only-cn-private.dat"
  36. curl -s -L -o "$TMP"/geoip-only-cn-private.dat "https://github.com/v2fly/geoip/raw/release/geoip-only-cn-private.dat"
  37. echo ">>> Download latest geosite.dat"
  38. curl -s -L -o "$TMP"/geosite.dat "https://github.com/v2fly/domain-list-community/raw/release/dlc.dat"
  39. }
  40. copyconf() {
  41. echo ">>> Copying config..."
  42. cd ./release/config
  43. if [[ $GOOS == "linux" ]]; then
  44. tar c --exclude "*.dat" . | tar x -C "$TMP"
  45. else
  46. tar c --exclude "*.dat" --exclude "systemd/**" . | tar x -C "$TMP"
  47. fi
  48. }
  49. packzip() {
  50. echo ">>> Generating zip package"
  51. cd "$TMP"
  52. local PKG=${SRCDIR}/v2ray-custom-${GOARCH}-${GOOS}-${PKGSUFFIX}${NOW}.zip
  53. zip -r "$PKG" .
  54. echo ">>> Generated: $(basename "$PKG") at $(dirname "$PKG")"
  55. }
  56. packtgz() {
  57. echo ">>> Generating tgz package"
  58. cd "$TMP"
  59. local PKG=${SRCDIR}/v2ray-custom-${GOARCH}-${GOOS}-${PKGSUFFIX}${NOW}.tar.gz
  60. tar cvfz "$PKG" .
  61. echo ">>> Generated: $(basename "$PKG") at $(dirname "$PKG")"
  62. }
  63. packtgzAbPath() {
  64. local ABPATH="$1"
  65. echo ">>> Generating tgz package at $ABPATH"
  66. cd "$TMP"
  67. tar cvfz "$ABPATH" .
  68. echo ">>> Generated: $ABPATH"
  69. }
  70. pkg=zip
  71. nosource=0
  72. nodat=0
  73. noconf=0
  74. GOOS=linux
  75. GOARCH=amd64
  76. EXESUFFIX=
  77. PKGSUFFIX=
  78. for arg in "$@"; do
  79. case $arg in
  80. 386 | arm* | mips* | ppc64* | riscv64 | s390x)
  81. GOARCH=$arg
  82. ;;
  83. windows)
  84. GOOS=$arg
  85. EXESUFFIX=.exe
  86. ;;
  87. darwin | dragonfly | freebsd | openbsd)
  88. GOOS=$arg
  89. ;;
  90. nodat)
  91. nodat=1
  92. PKGSUFFIX=${PKGSUFFIX}nodat-
  93. ;;
  94. noconf)
  95. noconf=1
  96. ;;
  97. nosource)
  98. nosource=1
  99. ;;
  100. tgz)
  101. pkg=tgz
  102. ;;
  103. abpathtgz=*)
  104. pkg=${arg##abpathtgz=}
  105. ;;
  106. codename=*)
  107. CODENAME=${arg##codename=}
  108. ;;
  109. buildname=*)
  110. BUILDNAME=${arg##buildname=}
  111. ;;
  112. esac
  113. done
  114. if [[ $nosource != 1 ]]; then
  115. get_source
  116. fi
  117. export GOOS GOARCH
  118. echo "Build ARGS: GOOS=${GOOS} GOARCH=${GOARCH} CODENAME=${CODENAME} BUILDNAME=${BUILDNAME}"
  119. echo "PKG ARGS: pkg=${pkg}"
  120. build_v2
  121. if [[ $nodat != 1 ]]; then
  122. build_dat
  123. fi
  124. if [[ $noconf != 1 ]]; then
  125. copyconf
  126. fi
  127. if [[ $pkg == "zip" ]]; then
  128. packzip
  129. elif [[ $pkg == "tgz" ]]; then
  130. packtgz
  131. else
  132. packtgzAbPath "$pkg"
  133. fi
  134. cleanup