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