diff --git a/policy.go b/policy.go index 965ade50..6fff4dfd 100644 --- a/policy.go +++ b/policy.go @@ -91,6 +91,17 @@ func (m *syncPolicyManager) ForLevel(level uint32) Policy { return m.PolicyManager.ForLevel(level) } +func (m *syncPolicyManager) ForSystem() SystemPolicy { + m.RLock() + defer m.RUnlock() + + if m.PolicyManager == nil { + return SystemPolicy{} + } + + return m.PolicyManager.ForSystem() +} + func (m *syncPolicyManager) Start() error { m.RLock() defer m.RUnlock() diff --git a/release/install-release.sh b/release/install-release.sh index 0844369c..094a6e2d 100755 --- a/release/install-release.sh +++ b/release/install-release.sh @@ -3,6 +3,11 @@ # This file is accessible as https://install.direct/go.sh # Original source is located at github.com/v2ray/v2ray-core/release/install-release.sh +# If not specify, default meaning of return value: +# 1: System error +# 2: Application error +# 3: Network error + CUR_VER="" NEW_VER="" ARCH="" @@ -156,21 +161,24 @@ extract(){ } -# 1: new V2Ray. 0: no +# 1: new V2Ray. 0: no. 2: not installed. 3: check failed. 4: don't check. getVersion(){ if [[ -n "$VERSION" ]]; then NEW_VER="$VERSION" - return 1 + return 4 else - CUR_VER=`/usr/bin/v2ray/v2ray -version 2>/dev/null | head -n 1 | cut -d " " -f2` + VER=`/usr/bin/v2ray/v2ray -version 2>/dev/null` + RETVAL="$?" + CUR_VER=`echo $VER | 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 + return 3 + elif [[ $RETVAL -ne 0 ]];then + return 2 elif [[ "$NEW_VER" != "$CUR_VER" ]];then - return 1 + return 1 fi return 0 fi @@ -186,6 +194,10 @@ stopV2ray(){ elif [[ -n "${SERVICE_CMD}" ]] || [[ -f "/etc/init.d/v2ray" ]]; then ${SERVICE_CMD} v2ray stop fi + if [[ $? -ne 0 ]]; then + colorEcho ${RED} "Failed to shutdown V2Ray service." + return 2 + fi return 0 } @@ -200,19 +212,21 @@ startV2ray(){ elif [ -n "${SERVICE_CMD}" ] && [ -f "/etc/init.d/v2ray" ]; then ${SERVICE_CMD} v2ray start fi + if [[ $? -ne 0 ]]; then + colorEcho ${RED} "Failed to start V2Ray service." + return 2 + fi return 0 } copyFile() { NAME=$1 - MANDATE=$2 ERROR=`cp "/tmp/v2ray/v2ray-${NEW_VER}-linux-${VDIS}/${NAME}" "/usr/bin/v2ray/${NAME}" 2>&1` if [[ $? -ne 0 ]]; then colorEcho ${YELLOW} "${ERROR}" - if [ "$MANDATE" = true ]; then - exit - fi + return 2 fi + return 0 } makeExecutable() { @@ -222,30 +236,30 @@ makeExecutable() { installV2Ray(){ # Install V2Ray binary to /usr/bin/v2ray mkdir -p /usr/bin/v2ray - copyFile v2ray true + copyFile v2ray || return $? makeExecutable v2ray - copyFile v2ctl false + copyFile v2ctl makeExecutable v2ctl - copyFile geoip.dat false - copyFile geosite.dat false + copyFile geoip.dat + copyFile geosite.dat # 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) + mkdir -p /etc/v2ray + 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" + 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 + colorEcho ${GREEN} "PORT:${PORT}" + colorEcho ${GREEN} "UUID:${UUID}" + mkdir -p /var/log/v2ray fi return 0 } @@ -277,7 +291,7 @@ Help(){ 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 " --version Install a particular version" + echo " --version Install a particular version, use --version v3.15" echo " -l, --local Install from a local file" echo " --remove Remove installed V2Ray" echo " -c, --check Check for update" @@ -335,15 +349,19 @@ remove(){ } 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 + echo "Checking for update." + VERSION="" + getVersion + RETVAL="$?" + if [[ $RETVAL -eq 1 ]]; then + colorEcho ${GREEN} "Found new version ${NEW_VER} for V2Ray.(Current version:$CUR_VER)" + elif [[ $RETVAL -eq 0 ]]; then + colorEcho ${GREEN} "No new version. Current version is ${NEW_VER}." + elif [[ $RETVAL -eq 2 ]]; then + colorEcho ${RED} "No V2Ray installed." + colorEcho ${GREEN} "The newest version for V2Ray is ${NEW_VER}." + fi + return 0 } main(){ @@ -374,9 +392,14 @@ main(){ # download via network and extract installSoftware "curl" || return $? getVersion - if [[ $? == 0 ]] && [[ "$FORCE" != "1" ]]; then + RETVAL="$?" + if [[ $RETVAL == 0 ]] && [[ "$FORCE" != "1" ]]; then colorEcho ${GREEN} "Latest version ${NEW_VER} is already installed." - exit + return + elif [[ $RETVAL == 3 ]]; then + return 3 + elif [[ $RETVAL == 1 ]]; then + colorEcho ${GREEN} "Found new version ${NEW_VER} for V2Ray.(Current version:$CUR_VER)" else colorEcho ${BLUE} "Installing V2Ray ${NEW_VER} on ${ARCH}" downloadV2Ray || return $? @@ -388,7 +411,7 @@ main(){ V2RAY_RUNNING=1 stopV2ray fi - installV2Ray + installV2Ray || return $? installInitScript || return $? if [[ ${V2RAY_RUNNING} -eq 1 ]];then colorEcho ${BLUE} "Restarting V2Ray service."