user-package.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. #!/usr/bin/env bash
  2. # Bash3 Boilerplate. Copyright (c) 2014, kvz.io
  3. set -o errexit
  4. set -o pipefail
  5. set -o nounset
  6. # set -o xtrace
  7. trap 'echo -e "Aborted, error $? in command: $BASH_COMMAND"; trap ERR; exit 1' ERR
  8. # Set magic variables for current file & dir
  9. __dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  10. __file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
  11. __base="$(basename "${__file}" .sh)"
  12. __root="$(cd "$(dirname "${__dir}")" && pwd)" # <-- change this as it depends on your app
  13. NOW=$(date '+%Y%m%d-%H%M%S')
  14. TMP=$(mktemp -d)
  15. SRCDIR=$(pwd)
  16. CODENAME="user"
  17. BUILDNAME=$NOW
  18. VERSIONTAG=$(git describe --tags)
  19. GOPATH=$(go env GOPATH)
  20. cleanup () { rm -rf "$TMP"; }
  21. trap cleanup INT TERM ERR
  22. get_source() {
  23. echo ">>> Getting v2ray sources ..."
  24. go get -insecure -v -t v2ray.com/core/...
  25. SRCDIR="$GOPATH/src/v2ray.com/core"
  26. }
  27. build_v2() {
  28. pushd "$SRCDIR"
  29. LDFLAGS="-s -w -X v2ray.com/core.codename=${CODENAME} -X v2ray.com/core.build=${BUILDNAME} -X v2ray.com/core.version=${VERSIONTAG}"
  30. echo ">>> Compile v2ray ..."
  31. env CGO_ENABLED=0 go build -o "$TMP"/v2ray"${EXESUFFIX}" -ldflags "$LDFLAGS" ./main
  32. if [[ $GOOS == "windows" ]];then
  33. env CGO_ENABLED=0 go build -o "$TMP"/wv2ray"${EXESUFFIX}" -ldflags "-H windowsgui $LDFLAGS" ./main
  34. fi
  35. echo ">>> Compile v2ctl ..."
  36. env CGO_ENABLED=0 go build -o "$TMP"/v2ctl"${EXESUFFIX}" -tags confonly -ldflags "$LDFLAGS" ./infra/control/main
  37. popd
  38. }
  39. build_dat() {
  40. echo ">>> Downloading newest geoip ..."
  41. curl -s -L -o "$TMP"/geoip.dat "https://github.com/v2ray/geoip/raw/release/geoip.dat"
  42. echo ">>> Downloading newest geosite ..."
  43. curl -s -L -o "$TMP"/geosite.dat "https://github.com/v2ray/domain-list-community/raw/release/dlc.dat"
  44. }
  45. copyconf() {
  46. echo ">>> Copying config..."
  47. pushd "$SRCDIR"/release/config
  48. tar c --exclude "*.dat" . | tar x -C "$TMP"
  49. }
  50. packzip() {
  51. echo ">>> Generating zip package"
  52. pushd "$TMP"
  53. local PKG=${__dir}/v2ray-custom-${GOARCH}-${GOOS}-${PKGSUFFIX}${NOW}.zip
  54. zip -r "$PKG" .
  55. echo ">>> Generated: $(basename "$PKG")"
  56. }
  57. packtgz() {
  58. echo ">>> Generating tgz package"
  59. pushd "$TMP"
  60. local PKG=${__dir}/v2ray-custom-${GOARCH}-${GOOS}-${PKGSUFFIX}${NOW}.tar.gz
  61. tar cvfz "$PKG" .
  62. echo ">>> Generated: $(basename "$PKG")"
  63. }
  64. packtgzAbPath() {
  65. local ABPATH="$1"
  66. echo ">>> Generating tgz package at $ABPATH"
  67. pushd "$TMP"
  68. tar cvfz "$ABPATH" .
  69. echo ">>> Generated: $ABPATH"
  70. }
  71. pkg=zip
  72. nosource=0
  73. nodat=0
  74. noconf=0
  75. GOOS=linux
  76. GOARCH=amd64
  77. EXESUFFIX=
  78. PKGSUFFIX=
  79. for arg in "$@"; do
  80. case $arg in
  81. arm*)
  82. GOARCH=$arg
  83. ;;
  84. mips*)
  85. GOARCH=$arg
  86. ;;
  87. 386)
  88. GOARCH=386
  89. ;;
  90. windows)
  91. GOOS=windows
  92. EXESUFFIX=.exe
  93. ;;
  94. darwin)
  95. GOOS=$arg
  96. ;;
  97. nodat)
  98. nodat=1
  99. PKGSUFFIX=${PKGSUFFIX}nodat-
  100. ;;
  101. noconf)
  102. noconf=1
  103. ;;
  104. nosource)
  105. nosource=1
  106. ;;
  107. tgz)
  108. pkg=tgz
  109. ;;
  110. abpathtgz=*)
  111. pkg=${arg##abpathtgz=}
  112. ;;
  113. codename=*)
  114. CODENAME=${arg##codename=}
  115. ;;
  116. buildname=*)
  117. BUILDNAME=${arg##buildname=}
  118. ;;
  119. esac
  120. done
  121. if [[ $nosource != 1 ]]; then
  122. get_source
  123. fi
  124. export GOOS GOARCH
  125. echo "Build ARGS: GOOS=${GOOS} GOARCH=${GOARCH} CODENAME=${CODENAME} BUILDNAME=${BUILDNAME}"
  126. echo "PKG ARGS: pkg=${pkg}"
  127. build_v2
  128. if [[ $nodat != 1 ]]; then
  129. build_dat
  130. fi
  131. if [[ $noconf != 1 ]]; then
  132. copyconf
  133. fi
  134. if [[ $pkg == "zip" ]]; then
  135. packzip
  136. elif [[ $pkg == "tgz" ]]; then
  137. packtgz
  138. else
  139. packtgzAbPath "$pkg"
  140. fi
  141. cleanup