فهرست منبع

Update install-release.sh

ToutyRater 8 سال پیش
والد
کامیت
9a5c71f5ee
1فایلهای تغییر یافته به همراه327 افزوده شده و 183 حذف شده
  1. 327 183
      release/install-release.sh

+ 327 - 183
release/install-release.sh

@@ -3,197 +3,341 @@
 # This file is accessible as https://install.direct/go.sh
 # Original source is located at github.com/v2ray/v2ray-core/release/install-release.sh
 
-while [[ $# > 0 ]]
-do
-key="$1"
-
-case $key in
-    -p|--proxy)
-    PROXY="$2"
-    shift # past argument
-    ;;
-    -h|--help)
-    HELP="1"
-    ;;
-    -f|--force)
-    FORCE="1"
-    ;;
-    --version)
-    VERSION="$2"
-    shift
-    ;;
-    --local)
-    LOCAL="$2"
-    shift
-    ;;
-    *)
-            # unknown option
-    ;;
-esac
-shift # past argument or value
+CUR_VER=""
+NEW_VER=""
+ARCH=""
+VDIS="64"
+ZIPFILE="/tmp/v2ray/v2ray.zip"
+V2RAY_RUNNING=0
+
+CMD_INSTALL=""
+CMD_UPDATE=""
+SOFTWARE_UPDATED=0
+
+CHECK=""
+FORCE=""
+HELP=""
+
+#######color code########
+red="31m"
+green="32m"
+yellow="33m"
+blue="34m"
+wblue="36m"
+
+#########################
+while [[ $# > 0 ]];do
+    key="$1"
+    case $key in
+        -p|--proxy)
+        PROXY="-x ${2}"
+        shift # past argument
+        ;;
+        -h|--help)
+        HELP="1"
+        ;;
+        -f|--force)
+        FORCE="1"
+        ;;
+        -c|--check)
+        CHECK="1"
+        ;;
+        -r|--remove)
+        REMOVE="1"
+        ;;
+        -v|--version)
+        VERSION="$2"
+        shift
+        ;;
+        -l|--local)
+        LOCAL="$2"
+        LOCAL_INSTALL="1"
+        shift
+        ;;
+        *)
+                # unknown option
+        ;;
+    esac
+    shift # past argument or value
 done
 
-if [[ "$HELP" == "1" ]]; then
-  echo "./install-release.sh [-p proxy] [-h] [-f] [--version vx.y.z] [--local file]"
-  echo "-p: To download through a proxy server, use -p socks5://127.0.0.1:1080 or -p http://127.0.0.1:3128 etc"
-  echo "-h: Show help"
-  echo "-f: Force install"
-  echo "--version: Install a particular version"
-  echo "--local: Install from a local file"
-  exit
-fi
+###############################
+colorEcho(){
+    color=$1
+    text=$2
+    echo -e "\033[${color}${@:2}\033[0m"
+}
+
+sysAcrh(){
+    ARCH=$(uname -m)
+    if [[ "$ARCH" == "i686" ]] || [[ "$ARCH" == "i386" ]]; then
+        VDIS="32"
+    elif [[ "$ARCH" == *"armv7"* ]] || [[ "$ARCH" == "armv6l" ]]; then
+        VDIS="arm"
+    elif [[ "$ARCH" == *"armv8"* ]]; then
+        VDIS="arm64"
+    fi
+    return 0
+}
 
-YUM_CMD=$(command -v yum)
-APT_CMD=$(command -v apt-get)
+downloadV2Ray(){
+    rm -rf /tmp/v2ray
+    mkdir -p /tmp/v2ray
+    colorEcho ${wblue} "Donwloading V2Ray."
+    DOWNLOAD_LINK="https://github.com/v2ray/v2ray-core/releases/download/${NEW_VER}/v2ray-linux-${VDIS}.zip"
+    curl ${PROXY} -L -H "Cache-Control: no-cache" -o ${ZIPFILE} ${DOWNLOAD_LINK}
+    if [ $? != 0 ];then
+        colorEcho ${red} "Failed to download! Please check your network or try again."
+        exit 1
+    fi
+    return 0
+}
 
-SOFTWARE_UPDATED=0
+installSoftware(){
+    COMPONENT=$1
+    if [[ -n `command -v $COMPONENT` ]]; then
+        return 0
+    fi
 
-function update_software() {
-  if [ ${SOFTWARE_UPDATED} -eq 1 ]; then
-    return
-  fi
-  if [ -n "${YUM_CMD}" ]; then
-    echo "Updating software repo via yum."
-    ${YUM_CMD} -q makecache
-  elif [ -n "${APT_CMD}" ]; then
-    echo "Updating software repo via apt-get."
-    ${APT_CMD} -qq update
-  fi
-  SOFTWARE_UPDATED=1
+    getPMT
+    if [[ $? -eq 1 ]]; then
+        colorEcho $yellow "The system package manager tool isn't APT or YUM, please install ${COMPONENT} manually."
+        exit 
+    fi
+    colorEcho $green Installing $COMPONENT 
+    if [[ $SOFTWARE_UPDATED -eq 0 ]]; then
+        colorEcho ${wblue} "Updating software repo"
+        $CMD_UPDATE
+        if [[ $? -ne 0 ]]; then
+            colorEcho ${red} "Failed update software repo, please check your source."
+            exit
+        fi        
+        SOFTWARE_UPDATED=1
+    fi
+
+    colorEcho ${wblue} "Installing ${COMPONENT}"
+    $CMD_INSTALL $COMPONENT
+    if [[ $? -ne 0 ]]; then
+        colorEcho ${red} Install ${COMPONENT} fail, please install it manually.
+        exit
+    fi
+    return 0
+}
+
+# return 1: not apt or yum
+getPMT(){
+    if [ -n `command -v apt-get` ];then
+        CMD_INSTALL="apt-get -y -qq install"
+        CMD_UPDATE="apt-get -qq update"
+    elif [[ -n `command -v yum` ]]; then
+        CMD_INSTALL="yum -y -qq install"
+        CMD_UPDATE="yum -q makecache"
+    else
+        return 1
+    fi
+    return 0
+}
+
+
+extra(){
+    colorEcho ${wblue}"Extracting V2Ray package to /tmp/v2ray."
+    mkdir -p /tmp/v2ray
+    unzip $1 -d "/tmp/v2ray/"
+    if [[ $? -ne 0 ]]; then
+        colorEcho ${red} "Extracting V2Ray faile!"
+        exit
+    fi
+    return 0
+}
+
+
+# 1: new V2Ray. 0: no
+getVersion(){
+    if [[ -n "$VERSION" ]]; then
+        NEW_VER="$VERSION"
+        return 1
+    else
+        CUR_VER=`/usr/bin/v2ray/v2ray -version 2>/dev/null | head -n 1 | cut -d " " -f2`
+        TAG_URL="https://api.github.com/repos/v2ray/v2ray-core/releases/latest"
+        NEW_VER=`curl ${PROXY} -s ${TAG_URL} --connect-timeout 10| grep 'tag_name' | cut -d\" -f4`
+
+        if [[ $? -ne 0 ]] || [[ $NEW_VER == "" ]]; then
+            colorEcho ${red} "Network error! Please check your network or try again."
+            exit
+        elif [[ "$NEW_VER" != "$CUR_VER" ]];then
+                return 1
+        fi
+        return 0
+    fi
 }
 
-function install_component() {
-  local COMPONENT=$1
-  COMPONENT_CMD=$(command -v $COMPONENT)
-  if [ -n "${COMPONENT_CMD}" ]; then
+stopV2ray(){
+    SYSTEMCTL_CMD=$(command -v systemctl)
+    SERVICE_CMD=$(command -v service)
+
+    colorEcho ${wblue} "Shutting down V2Ray service."
+    if [[ -n "${SYSTEMCTL_CMD}" ]] || [[ -f "/lib/systemd/system/v2ray.service" ]]; then
+        ${SYSTEMCTL_CMD} stop v2ray
+    elif [[ -n "${SERVICE_CMD}" ]] || [[ -f "/etc/init.d/v2ray" ]]; then
+        ${SERVICE_CMD} v2ray stop
+    fi
+    return 0
+}
+
+startV2ray(){
+    SYSTEMCTL_CMD=$(command -v systemctl)
+    SERVICE_CMD=$(command -v service)
+
+    if [ -n "${SYSTEMCTL_CMD}" ] && [ -f "/lib/systemd/system/v2ray.service" ]; then
+        ${SYSTEMCTL_CMD} start v2ray
+    elif [ -n "${SERVICE_CMD}" ] && [ -f "/etc/init.d/v2ray" ]; then
+        ${SERVICE_CMD} v2ray start
+    fi
+    return 0
+}
+
+installV2Ray(){
+    # Install V2Ray binary to /usr/bin/v2ray
+    mkdir -p /usr/bin/v2ray
+    ERROR=`cp "/tmp/v2ray/v2ray-${NEW_VER}-linux-${VDIS}/v2ray" "/usr/bin/v2ray/v2ray"`
+    if [[ $? -ne 0 ]]; then
+          colorEcho ${yellow} "${ERROR}"
+          exit
+    fi
+    chmod +x "/usr/bin/v2ray/v2ray"
+
+    # Install V2Ray server config to /etc/v2ray
+    mkdir -p /etc/v2ray
+    if [[ ! -f "/etc/v2ray/config.json" ]]; then
+      cp "/tmp/v2ray/v2ray-${NEW_VER}-linux-${VDIS}/vpoint_vmess_freedom.json" "/etc/v2ray/config.json"
+      if [[ $? -ne 0 ]]; then
+          colorEcho ${yellow} "Create V2Ray configuration file error, pleases create it manually."
+          return 1
+      fi
+      let PORT=$RANDOM+10000
+      UUID=$(cat /proc/sys/kernel/random/uuid)
+
+      sed -i "s/10086/${PORT}/g" "/etc/v2ray/config.json"
+      sed -i "s/23ad6b10-8d1a-40f7-8ad0-e3e35cd38297/${UUID}/g" "/etc/v2ray/config.json"
+
+      colorEcho ${green} "PORT:${PORT}"
+      colorEcho ${green} "UUID:${UUID}"
+      mkdir -p /var/log/v2ray
+    fi
+    return 0
+}
+
+
+installInitScrip(){
+    SYSTEMCTL_CMD=$(command -v systemctl)
+    SERVICE_CMD=$(command -v service)
+
+    if [[ -n "${SYSTEMCTL_CMD}" ]];then
+        if [[ ! -f "/lib/systemd/system/v2ray.service" ]]; then
+            cp "/tmp/v2ray/v2ray-${NEW_VER}-linux-${VDIS}/systemd/v2ray.service" "/lib/systemd/system/"
+            systemctl enable v2ray
+        fi
+        return
+    elif [[ -n "${SERVICE_CMD}" ]] && [[ ! -f "/etc/init.d/v2ray" ]]; then
+        installSoftware "daemon"
+        cp "/tmp/v2ray/v2ray-${NEW_VER}-linux-${VDIS}/systemv/v2ray" "/etc/init.d/v2ray"
+        chmod +x "/etc/init.d/v2ray"
+        update-rc.d v2ray defaults
+    fi
     return
-  fi
-
-  update_software
-  if [ -n "${YUM_CMD}" ]; then
-    echo "Installing ${COMPONENT} via yum."
-    ${YUM_CMD} -y -q install $COMPONENT
-  elif [ -n "${APT_CMD}" ]; then
-    echo "Installing ${COMPONENT} via apt-get."
-    ${APT_CMD} -y -qq install $COMPONENT
-  fi
 }
 
-V2RAY_RUNNING=0
-if pgrep "v2ray" > /dev/null ; then
-  V2RAY_RUNNING=1
-fi
-
-if [ -n "$VERSION" ]; then
-  VER="$VERSION"
-else
-  VER="$(curl -s https://api.github.com/repos/v2ray/v2ray-core/releases/latest | grep 'tag_name' | cut -d\" -f4)"
-  CUR_VER="$(/usr/bin/v2ray/v2ray -version | head -n 1 | cut -d " " -f2)"
-
-  if [[ "$VER" == "$CUR_VER" ]] && [[ "$FORCE" != "1" ]]; then
-    echo "Lastest version $VER is already installed. Exiting..."
-    exit
-  fi
-fi
-
-ARCH=$(uname -m)
-VDIS="64"
+Help(){
+    echo "./install-release.sh [-h] [-c] [-p proxy] [-f] [-v vx.y.z] [-l file]"
+    echo "  -h, --help            Show help"
+    echo "  -p, --proxy           To download through a proxy server, use -p socks5://127.0.0.1:1080 or -p http://127.0.0.1:3128 etc"
+    echo "  -f, --force           Force install"
+    echo "  -v, --version         Install a particular version"
+    echo "  -l, --local           Install from a local file"
+    echo "  -r, --remove          Remove installed V2Ray"
+    echo "  -c, --check           Check for update"
+    exit  
+}
+
+remove(){
+    if pgrep "v2ray" > /dev/null ; then
+        stopV2ray
+    fi
+    rm -rf "/usr/lib/v2ray" "/lib/systemd/system/v2ray.service"
+    if [[ $? -ne 0 ]]; then
+        colorEcho ${red} "Failed to remove V2Ray."
+        exit
+    else
+        colorEcho ${green} "Removed V2Ray successfully."
+        colorEcho ${green} "If necessary, please remove configuration file and log file manually."
+        exit
+    fi
+}
+
+checkUpdate(){
+        echo "Checking for update."
+        getVersion
+        if [[ $? -eq 1 ]]; then
+            colorEcho ${green} "Found new version ${NEW_VER} for V2Ray."
+            exit 
+        else 
+            colorEcho ${green} "No new version."
+            exit
+        fi
+}
+
+main(){
+    #helping information
+    [[ "$HELP" == "1" ]] && Help
+    [[ "$CHECK" == "1" ]] && checkUpdate
+    [[ "$REMOVE" == "1" ]] && remove
+    
+    sysAcrh
+    # extra local file
+    if [[ $LOCAL_INSTALL -eq 1 ]]; then
+        echo "Install V2Ray via local file"
+        installSoftware unzip
+        rm -rf /tmp/v2ray
+        extra $LOCAL
+        FILEVDIS=`ls /tmp/v2ray |grep v2ray-v |cut -d "-" -f4`
+        SYSTEM=`ls /tmp/v2ray |grep v2ray-v |cut -d "-" -f3`
+        if [[ ${SYSTEM} != "linux" ]]; then
+            colorEcho $red "The local V2Ray can not be installed in linux."
+            exit
+        elif [[ ${FILEVDIS} != ${VDIS} ]]; then
+            colorEcho $red "The local V2Ray can not be installed in ${ARCH} system."
+            exit
+        else
+            NEW_VER=`ls /tmp/v2ray |grep v2ray-v |cut -d "-" -f2`
+        fi
+    else
+        # dowload via network and extra
+        installSoftware "curl"
+        getVersion
+        if [[ $? == 0 ]] && [[ "$FORCE" != "1" ]]; then
+            colorEcho ${green} "Lastest version ${NEW_VER} is already installed."
+            exit
+        else
+            colorEcho ${wblue} "Installing V2Ray ${NEW_VER} on ${ARCH}"
+            downloadV2Ray
+            installSoftware unzip
+            extra ${ZIPFILE}
+        fi
+    fi 
+    if pgrep "v2ray" > /dev/null ; then
+        V2RAY_RUNNING=1
+        stopV2ray
+    fi
+    installV2Ray
+    installInitScrip
+    if [[ ${V2RAY_RUNNING} -eq 1 ]];then
+        colorEcho ${wblue} "Restarting V2Ray service."
+        startV2ray
+
+    fi
+    colorEcho ${green} "V2Ray ${NEW_VER} is installed."
+    rm -rf /tmp/v2ray
+    return 0
+}
 
-if [[ "$ARCH" == "i686" ]] || [[ "$ARCH" == "i386" ]]; then
-  VDIS="32"
-elif [[ "$ARCH" == *"armv7"* ]] || [[ "$ARCH" == "armv6l" ]]; then
-  VDIS="arm"
-elif [[ "$ARCH" == *"armv8"* ]]; then
-  VDIS="arm64"
-fi
-
-rm -rf /tmp/v2ray
-mkdir -p /tmp/v2ray
-
-echo "Installing V2Ray ${VER} on ${ARCH}"
-
-if [ -n "$LOCAL" ]; then
-  cp "$LOCAL" "/tmp/v2ray/v2ray.zip"
-else
-  DOWNLOAD_LINK="https://github.com/v2ray/v2ray-core/releases/download/${VER}/v2ray-linux-${VDIS}.zip"
-
-  install_component "curl"
-
-  if [ -n "${PROXY}" ]; then
-    echo "Downloading ${DOWNLOAD_LINK} via proxy ${PROXY}."
-    curl -x ${PROXY} -L -H "Cache-Control: no-cache" -o "/tmp/v2ray/v2ray.zip" ${DOWNLOAD_LINK}
-  else
-    echo "Downloading ${DOWNLOAD_LINK} directly."
-    curl -L -H "Cache-Control: no-cache" -o "/tmp/v2ray/v2ray.zip" ${DOWNLOAD_LINK}
-  fi
-fi
-
-echo "Extracting V2Ray package to /tmp/v2ray."
-install_component "unzip"
-unzip "/tmp/v2ray/v2ray.zip" -d "/tmp/v2ray/"
-
-# Create folder for V2Ray log.
-mkdir -p /var/log/v2ray
-
-# Stop v2ray daemon if necessary.
-SYSTEMCTL_CMD=$(command -v systemctl)
-SERVICE_CMD=$(command -v service)
-
-if [ ${V2RAY_RUNNING} -eq 1 ]; then
-  echo "Shutting down V2Ray service."
-  if [ -n "${SYSTEMCTL_CMD}" ]; then
-    if [ -f "/lib/systemd/system/v2ray.service" ]; then
-      ${SYSTEMCTL_CMD} stop v2ray
-    fi
-  elif [ -n "${SERVICE_CMD}" ]; then
-    if [ -f "/etc/init.d/v2ray" ]; then
-      ${SERVICE_CMD} v2ray stop
-    fi
-  fi
-fi
-
-# Install V2Ray binary to /usr/bin/v2ray
-mkdir -p /usr/bin/v2ray
-cp "/tmp/v2ray/v2ray-${VER}-linux-${VDIS}/v2ray" "/usr/bin/v2ray/v2ray"
-chmod +x "/usr/bin/v2ray/v2ray"
-
-# Install V2Ray server config to /etc/v2ray
-mkdir -p /etc/v2ray
-if [ ! -f "/etc/v2ray/config.json" ]; then
-  cp "/tmp/v2ray/v2ray-${VER}-linux-${VDIS}/vpoint_vmess_freedom.json" "/etc/v2ray/config.json"
-
-  let PORT=$RANDOM+10000
-  sed -i "s/10086/${PORT}/g" "/etc/v2ray/config.json"
-
-  UUID=$(cat /proc/sys/kernel/random/uuid)
-  sed -i "s/23ad6b10-8d1a-40f7-8ad0-e3e35cd38297/${UUID}/g" "/etc/v2ray/config.json"
-
-  echo "PORT:${PORT}"
-  echo "UUID:${UUID}"
-fi
-
-if [ -n "${SYSTEMCTL_CMD}" ]; then
-  if [ ! -f "/lib/systemd/system/v2ray.service" ]; then
-    cp "/tmp/v2ray/v2ray-${VER}-linux-${VDIS}/systemd/v2ray.service" "/lib/systemd/system/"
-    systemctl enable v2ray
-  else
-    if [ ${V2RAY_RUNNING} -eq 1 ]; then
-      echo "Restarting V2Ray service."
-      ${SYSTEMCTL_CMD} start v2ray
-    fi
-  fi
-elif [ -n "${SERVICE_CMD}" ]; then # Configure SysV if necessary.
-  if [ ! -f "/etc/init.d/v2ray" ]; then
-    install_component "daemon"
-    cp "/tmp/v2ray/v2ray-${VER}-linux-${VDIS}/systemv/v2ray" "/etc/init.d/v2ray"
-    chmod +x "/etc/init.d/v2ray"
-    update-rc.d v2ray defaults
-  else
-    if [ ${V2RAY_RUNNING} -eq 1 ]; then
-      echo "Restarting V2Ray service."
-      ${SERVICE_CMD} v2ray start
-    fi
-  fi
-fi
-
-echo "V2Ray ${VER} is installed."
+main