1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-09-27 22:36:12 -04:00

Merge branch 'raymaster' into flymaster

This commit is contained in:
vcptr 2019-12-31 16:13:31 +08:00
commit 3ca28ce2d8
8 changed files with 77 additions and 30 deletions

View File

@ -4,6 +4,7 @@ import (
"io"
"os"
"os/exec"
"strings"
"v2ray.com/core/common/buf"
"v2ray.com/core/common/platform"
@ -35,14 +36,14 @@ func Run(args []string, input io.Reader) (buf.MultiBuffer, error) {
if err := cmd.Wait(); err != nil {
msg := "failed to execute v2ctl"
if errBuffer.Len() > 0 {
msg += ": " + errBuffer.MultiBuffer.String()
msg += ": \n" + strings.TrimSpace(errBuffer.MultiBuffer.String())
}
return nil, newError(msg).Base(err)
}
// log stderr, info message
if !errBuffer.IsEmpty() {
newError("v2ctl > \n", errBuffer.MultiBuffer.String()).AtInfo().WriteToLog()
newError("<v2ctl message> \n", strings.TrimSpace(errBuffer.MultiBuffer.String())).AtInfo().WriteToLog()
}
return outBuffer.MultiBuffer, nil

View File

@ -83,3 +83,10 @@ func GetConfigurationPath() string {
configPath := NewEnvFlag(name).GetValue(getExecutableDir)
return filepath.Join(configPath, "config.json")
}
// GetConfDirPath reads "v2ray.location.confdir"
func GetConfDirPath() string {
const name = "v2ray.location.confdir"
configPath := NewEnvFlag(name).GetValue(func() string { return "" })
return configPath
}

View File

@ -13,10 +13,12 @@ package core
//go:generate errorgen
import (
"runtime"
"v2ray.com/core/common/serial"
)
const (
var (
version = "4.22.0"
build = "Custom"
codename = "V2Fly, a community-driven edition of V2Ray."
@ -32,7 +34,7 @@ func Version() string {
// VersionStatement returns a list of strings representing the full version info.
func VersionStatement() []string {
return []string{
serial.Concat("V2Ray ", Version(), " (", codename, ") ", build),
serial.Concat("V2Ray ", Version(), " (", codename, ") ", build, " (", runtime.Version(), " ", runtime.GOOS, "/", runtime.GOARCH, ")"),
intro,
}
}

View File

@ -2,6 +2,8 @@ package conf
import (
"encoding/json"
"log"
"os"
"strings"
"v2ray.com/core"
@ -31,6 +33,8 @@ var (
"mtproto": func() interface{} { return new(MTProtoClientConfig) },
"dns": func() interface{} { return new(DnsOutboundConfig) },
}, "protocol", "settings")
ctllog = log.New(os.Stderr, "v2ctl> ", 0)
)
func toProtocolList(s []string) ([]proxyman.KnownProtocols, error) {
@ -361,10 +365,10 @@ func (c *Config) Override(o *Config, fn string) {
if len(c.InboundConfigs) > 0 && len(o.InboundConfigs) == 1 {
if idx := c.findInboundTag(o.InboundConfigs[0].Tag); idx > -1 {
c.InboundConfigs[idx] = o.InboundConfigs[0]
newError("<", fn, "> updated inbound with tag: ", o.InboundConfigs[0].Tag).AtInfo().WriteToLog()
ctllog.Println("[", fn, "] updated inbound with tag: ", o.InboundConfigs[0].Tag)
} else {
c.InboundConfigs = append(c.InboundConfigs, o.InboundConfigs[0])
newError("<", fn, "> appended inbound with tag: ", o.InboundConfigs[0].Tag).AtInfo().WriteToLog()
ctllog.Println("[", fn, "] appended inbound with tag: ", o.InboundConfigs[0].Tag)
}
} else {
c.InboundConfigs = o.InboundConfigs
@ -376,14 +380,14 @@ func (c *Config) Override(o *Config, fn string) {
if len(c.OutboundConfigs) > 0 && len(o.OutboundConfigs) == 1 {
if idx := c.findOutboundTag(o.OutboundConfigs[0].Tag); idx > -1 {
c.OutboundConfigs[idx] = o.OutboundConfigs[0]
newError("<", fn, "> updated outbound with tag: ", o.OutboundConfigs[0].Tag).AtInfo().WriteToLog()
ctllog.Println("[", fn, "] updated outbound with tag: ", o.OutboundConfigs[0].Tag)
} else {
if strings.Contains(strings.ToLower(fn), "tail") {
c.OutboundConfigs = append(c.OutboundConfigs, o.OutboundConfigs[0])
newError("<", fn, "> appended outbound with tag: ", o.OutboundConfigs[0].Tag).AtInfo().WriteToLog()
ctllog.Println("[", fn, "] appended outbound with tag: ", o.OutboundConfigs[0].Tag)
} else {
c.OutboundConfigs = append(o.OutboundConfigs, c.OutboundConfigs...)
newError("<", fn, "> prepended outbound with tag: ", o.OutboundConfigs[0].Tag).AtInfo().WriteToLog()
ctllog.Println("[", fn, "] prepended outbound with tag: ", o.OutboundConfigs[0].Tag)
}
}
} else {

View File

@ -2,6 +2,8 @@ package control
import (
"fmt"
"log"
"os"
"strings"
)
@ -18,6 +20,7 @@ type Command interface {
var (
commandRegistry = make(map[string]Command)
ctllog = log.New(os.Stderr, "v2ctl> ", 0)
)
func RegisterCommand(cmd Command) error {

View File

@ -37,11 +37,13 @@ func (c *ConfigCommand) Execute(args []string) error {
conf := &conf.Config{}
for _, arg := range args {
newError("Reading config: ", arg).AtInfo().WriteToLog()
ctllog.Println("Read config: ", arg)
r, err := c.LoadArg(arg)
common.Must(err)
c, err := serial.DecodeJSONConfig(r)
common.Must(err)
if err != nil {
ctllog.Fatalln(err)
}
conf.Override(c, arg)
}

View File

@ -5,8 +5,11 @@ package main
import (
"flag"
"fmt"
"io/ioutil"
"log"
"os"
"os/signal"
"path"
"path/filepath"
"runtime"
"strings"
@ -20,10 +23,10 @@ import (
var (
configFiles cmdarg.Arg // "Config file for V2Ray.", the option is customed type, parse in main
configDir string
version = flag.Bool("version", false, "Show current version of V2Ray.")
test = flag.Bool("test", false, "Test config file only, without launching V2Ray server.")
format = flag.String("format", "json", "Format of input file.")
errNoConfig = newError("no valid config")
)
func fileExists(file string) bool {
@ -31,7 +34,27 @@ func fileExists(file string) bool {
return err == nil && !info.IsDir()
}
func dirExists(file string) bool {
info, err := os.Stat(file)
return err == nil && info.IsDir()
}
func readConfDir(dirPath string) {
confs, err := ioutil.ReadDir(dirPath)
if err != nil {
log.Fatalln(err)
}
for _, f := range confs {
if strings.HasSuffix(f.Name(), ".json") {
configFiles.Set(path.Join(dirPath, f.Name()))
}
}
}
func getConfigFilePath() (cmdarg.Arg, error) {
if dirExists(configDir) {
readConfDir(configDir)
}
if len(configFiles) > 0 {
return configFiles, nil
}
@ -39,14 +62,25 @@ func getConfigFilePath() (cmdarg.Arg, error) {
if workingDir, err := os.Getwd(); err == nil {
configFile := filepath.Join(workingDir, "config.json")
if fileExists(configFile) {
log.Println("Using default config: ", configFile)
return cmdarg.Arg{configFile}, nil
}
}
if configFile := platform.GetConfigurationPath(); fileExists(configFile) {
log.Println("Using config from env: ", configFile)
return cmdarg.Arg{configFile}, nil
}
if envConfDir := platform.GetConfDirPath(); dirExists(envConfDir) {
log.Println("Using confdir from env: ", envConfDir)
readConfDir(envConfDir)
if len(configFiles) > 0 {
return configFiles, nil
}
}
log.Println("Using config from STDIN")
return cmdarg.Arg{"stdin:"}, nil
}
@ -87,7 +121,8 @@ func printVersion() {
func main() {
flag.Var(&configFiles, "config", "Config file for V2Ray. Multiple assign is accepted (only json). Latter ones overrides the former ones.")
flag.Var(&configFiles, "c", "short alias of -config")
flag.Var(&configFiles, "c", "Short alias of -config")
flag.StringVar(&configDir, "confdir", "", "A dir with multiple json config")
flag.Parse()
printVersion()
@ -98,11 +133,8 @@ func main() {
server, err := startV2Ray()
if err != nil {
fmt.Println(err.Error())
fmt.Println(err)
// Configuration error. Exit with a special value to prevent systemd from restarting.
if err == errNoConfig {
flag.PrintDefaults()
}
os.Exit(23)
}

View File

@ -17,9 +17,11 @@ __root="$(cd "$(dirname "${__dir}")" && pwd)" # <-- change this as it depends on
NOW=$(date '+%Y%m%d-%H%M%S')
TMP=$(mktemp -d)
SRCDIR=$(pwd)
CODENAME="user"
BUILDNAME=$NOW
VERSIONTAG=$(git describe --tags)
GOPATH=$(go env GOPATH)
cleanup () { rm -rf $TMP; }
@ -28,27 +30,21 @@ trap cleanup INT TERM ERR
get_source() {
echo ">>> Getting v2ray sources ..."
go get -insecure -v -t v2ray.com/core/...
SRCDIR="$GOPATH/src/v2ray.com/core"
}
build_v2() {
pushd $GOPATH/src/v2ray.com/core
echo ">>> Update source code name ..."
sed -i "s/^[ \t]\+codename.\+$/\tcodename = \"${CODENAME}\"/;s/^[ \t]\+build.\+$/\tbuild = \"${BUILDNAME}\"/;" core.go
pushd $SRCDIR
LDFLAGS="-s -w -X v2ray.com/core.codename=${CODENAME} -X v2ray.com/core.build=${BUILDNAME} -X v2ray.com/core.version=${VERSIONTAG}"
echo ">>> Compile v2ray ..."
pushd $GOPATH/src/v2ray.com/core/main
env CGO_ENABLED=0 go build -o $TMP/v2ray${EXESUFFIX} -ldflags "-s -w"
env CGO_ENABLED=0 go build -o $TMP/v2ray${EXESUFFIX} -ldflags "$LDFLAGS" ./main
if [[ $GOOS == "windows" ]];then
env CGO_ENABLED=0 go build -o $TMP/wv2ray${EXESUFFIX} -ldflags "-s -w -H windowsgui"
env CGO_ENABLED=0 go build -o $TMP/wv2ray${EXESUFFIX} -ldflags "-H windowsgui $LDFLAGS" ./main
fi
popd
git checkout -- core.go
popd
echo ">>> Compile v2ctl ..."
pushd $GOPATH/src/v2ray.com/core/infra/control/main
env CGO_ENABLED=0 go build -o $TMP/v2ctl${EXESUFFIX} -tags confonly -ldflags "-s -w"
env CGO_ENABLED=0 go build -o $TMP/v2ctl${EXESUFFIX} -tags confonly -ldflags "$LDFLAGS" ./infra/control/main
popd
}
@ -66,7 +62,7 @@ build_dat() {
copyconf() {
echo ">>> Copying config..."
pushd $GOPATH/src/v2ray.com/core/release/config
pushd $SRCDIR/release/config
tar c --exclude "*.dat" . | tar x -C $TMP
}