user-package.sh 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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="-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 "-s -w $LDFLAGS" ./main
  32. if [[ $GOOS == "windows" ]];then
  33. env CGO_ENABLED=0 go build -o $TMP/wv2ray${EXESUFFIX} -ldflags "-s -w -H windowsgui $LDFLAGS" ./main
  34. fi
  35. echo ">>> Compile v2ctl ..."
  36. env CGO_ENABLED=0 go build -o $TMP/v2ctl${EXESUFFIX} -tags confonly -ldflags "-s -w $LDFLAGS" ./infra/control/main
  37. popd
  38. }
  39. build_dat() {
  40. echo ">>> Downloading newest geoip ..."
  41. wget -qO - https://api.github.com/repos/v2ray/geoip/releases/latest \
  42. | grep browser_download_url | cut -d '"' -f 4 \
  43. | wget -i - -O $TMP/geoip.dat
  44. echo ">>> Downloading newest geosite ..."
  45. wget -qO - https://api.github.com/repos/v2ray/domain-list-community/releases/latest \
  46. | grep browser_download_url | cut -d '"' -f 4 \
  47. | wget -i - -O $TMP/geosite.dat
  48. }
  49. copyconf() {
  50. echo ">>> Copying config..."
  51. pushd $SRCDIR/release/config
  52. tar c --exclude "*.dat" . | tar x -C $TMP
  53. }
  54. packzip() {
  55. echo ">>> Generating zip package"
  56. pushd $TMP
  57. local PKG=${__dir}/v2ray-custom-${GOARCH}-${GOOS}-${PKGSUFFIX}${NOW}.zip
  58. zip -r $PKG .
  59. echo ">>> Generated: $(basename $PKG)"
  60. }
  61. packtgz() {
  62. echo ">>> Generating tgz package"
  63. pushd $TMP
  64. local PKG=${__dir}/v2ray-custom-${GOARCH}-${GOOS}-${PKGSUFFIX}${NOW}.tar.gz
  65. tar cvfz $PKG .
  66. echo ">>> Generated: $(basename $PKG)"
  67. }
  68. packtgzAbPath() {
  69. local ABPATH="$1"
  70. echo ">>> Generating tgz package at $ABPATH"
  71. pushd $TMP
  72. tar cvfz $ABPATH .
  73. echo ">>> Generated: $ABPATH"
  74. }
  75. pkg=zip
  76. nosource=0
  77. nodat=0
  78. noconf=0
  79. GOOS=linux
  80. GOARCH=amd64
  81. EXESUFFIX=
  82. PKGSUFFIX=
  83. for arg in "$@"; do
  84. case $arg in
  85. arm*)
  86. GOARCH=$arg
  87. ;;
  88. mips*)
  89. GOARCH=$arg
  90. ;;
  91. 386)
  92. GOARCH=386
  93. ;;
  94. windows)
  95. GOOS=windows
  96. EXESUFFIX=.exe
  97. ;;
  98. darwin)
  99. GOOS=$arg
  100. ;;
  101. nodat)
  102. nodat=1
  103. PKGSUFFIX=${PKGSUFFIX}nodat-
  104. ;;
  105. noconf)
  106. noconf=1
  107. ;;
  108. nosource)
  109. nosource=1
  110. ;;
  111. tgz)
  112. pkg=tgz
  113. ;;
  114. abpathtgz=*)
  115. pkg=${arg##abpathtgz=}
  116. ;;
  117. codename=*)
  118. CODENAME=${arg##codename=}
  119. ;;
  120. buildname=*)
  121. BUILDNAME=${arg##buildname=}
  122. ;;
  123. esac
  124. done
  125. if [[ $nosource != 1 ]]; then
  126. get_source
  127. fi
  128. export GOOS GOARCH
  129. echo "Build ARGS: GOOS=${GOOS} GOARCH=${GOARCH} CODENAME=${CODENAME} BUILDNAME=${BUILDNAME}"
  130. echo "PKG ARGS: pkg=${pkg}"
  131. build_v2
  132. if [[ $nodat != 1 ]]; then
  133. build_dat
  134. fi
  135. if [[ $noconf != 1 ]]; then
  136. copyconf
  137. fi
  138. if [[ $pkg == "zip" ]]; then
  139. packzip
  140. elif [[ $pkg == "tgz" ]]; then
  141. packtgz
  142. else
  143. packtgzAbPath $pkg
  144. fi
  145. cleanup