user-package.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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..."
  34. curl -s -L -o "$TMP"/geoip.dat "https://github.com/v2fly/geoip/raw/release/geoip.dat"
  35. echo ">>> Download latest geosite..."
  36. curl -s -L -o "$TMP"/geosite.dat "https://github.com/v2fly/domain-list-community/raw/release/dlc.dat"
  37. }
  38. copyconf() {
  39. echo ">>> Copying config..."
  40. cd ./release/config
  41. if [[ $GOOS == "linux" ]]; then
  42. tar c --exclude "*.dat" . | tar x -C "$TMP"
  43. else
  44. tar c --exclude "*.dat" --exclude "systemd/**" . | tar x -C "$TMP"
  45. fi
  46. }
  47. packzip() {
  48. echo ">>> Generating zip package"
  49. cd "$TMP"
  50. local PKG=${SRCDIR}/v2ray-custom-${GOARCH}-${GOOS}-${PKGSUFFIX}${NOW}.zip
  51. zip -r "$PKG" .
  52. echo ">>> Generated: $(basename "$PKG") at $(dirname "$PKG")"
  53. }
  54. packtgz() {
  55. echo ">>> Generating tgz package"
  56. cd "$TMP"
  57. local PKG=${SRCDIR}/v2ray-custom-${GOARCH}-${GOOS}-${PKGSUFFIX}${NOW}.tar.gz
  58. tar cvfz "$PKG" .
  59. echo ">>> Generated: $(basename "$PKG") at $(dirname "$PKG")"
  60. }
  61. packtgzAbPath() {
  62. local ABPATH="$1"
  63. echo ">>> Generating tgz package at $ABPATH"
  64. cd "$TMP"
  65. tar cvfz "$ABPATH" .
  66. echo ">>> Generated: $ABPATH"
  67. }
  68. pkg=zip
  69. nosource=0
  70. nodat=0
  71. noconf=0
  72. GOOS=linux
  73. GOARCH=amd64
  74. EXESUFFIX=
  75. PKGSUFFIX=
  76. for arg in "$@"; do
  77. case $arg in
  78. 386 | arm* | mips* | ppc64* | riscv64 | s390x)
  79. GOARCH=$arg
  80. ;;
  81. windows)
  82. GOOS=$arg
  83. EXESUFFIX=.exe
  84. ;;
  85. darwin | dragonfly | freebsd | openbsd)
  86. GOOS=$arg
  87. ;;
  88. nodat)
  89. nodat=1
  90. PKGSUFFIX=${PKGSUFFIX}nodat-
  91. ;;
  92. noconf)
  93. noconf=1
  94. ;;
  95. nosource)
  96. nosource=1
  97. ;;
  98. tgz)
  99. pkg=tgz
  100. ;;
  101. abpathtgz=*)
  102. pkg=${arg##abpathtgz=}
  103. ;;
  104. codename=*)
  105. CODENAME=${arg##codename=}
  106. ;;
  107. buildname=*)
  108. BUILDNAME=${arg##buildname=}
  109. ;;
  110. esac
  111. done
  112. if [[ $nosource != 1 ]]; then
  113. get_source
  114. fi
  115. export GOOS GOARCH
  116. echo "Build ARGS: GOOS=${GOOS} GOARCH=${GOARCH} CODENAME=${CODENAME} BUILDNAME=${BUILDNAME}"
  117. echo "PKG ARGS: pkg=${pkg}"
  118. build_v2
  119. if [[ $nodat != 1 ]]; then
  120. build_dat
  121. fi
  122. if [[ $noconf != 1 ]]; then
  123. copyconf
  124. fi
  125. if [[ $pkg == "zip" ]]; then
  126. packzip
  127. elif [[ $pkg == "tgz" ]]; then
  128. packtgz
  129. else
  130. packtgzAbPath "$pkg"
  131. fi
  132. cleanup