in update/main.go [68:160]
func main() {
options := parseOptions()
if options.GetHelp {
pflag.Usage()
return
}
if options.GetVersion {
fmt.Println(version.AssistVersion)
return
}
if options.GetGitHash {
fmt.Println(version.GitCommitHash)
return
}
log.InitLog("aliyun_assist_update.log", "", false)
log.GetLogger().Infof("Starting...... version: %s githash: %s", version.AssistVersion, version.GitCommitHash)
SingleAppLock = single.New("AliyunAssistUpdateSingleLock")
if err := SingleAppLock.CheckLock(); err != nil && err == single.ErrAlreadyRunning {
fmt.Fprintln(os.Stderr, "Error: another instance of the app is already running")
os.Exit(1)
return
}
defer SingleAppLock.TryUnlock()
// Init config
flagging.InitConfig(log.GetLogger())
envutil.ClearExecErrDot()
if options.CheckUpdate {
// Exclusive options check
if options.ForceUpdate || options.LocalInstall != "" {
fmt.Fprintln(os.Stderr, "Invalid options: specified options in conflict")
pflag.Usage()
os.Exit(1)
return
}
if err := doCheckUpdate(); err != nil {
log.GetLogger().WithError(err).Errorln("Failed to check or update agent")
fmt.Fprintln(os.Stderr, "Error:", err.Error())
os.Exit(1)
}
return
} else if options.ForceUpdate {
// Exclusive options check
if options.CheckUpdate || options.LocalInstall != "" {
fmt.Fprintln(os.Stderr, "Invalid options: specified options in conflict")
pflag.Usage()
os.Exit(1)
return
}
if options.ForceUpdateURL == "" {
fmt.Fprintln(os.Stderr, "Invalid options: -f/--force_update option needs specifying update package URL via --url option")
pflag.Usage()
os.Exit(1)
return
}
if options.ForceUpdateMD5 == "" {
fmt.Fprintln(os.Stderr, "Invalid options: -f/--force_update option needs specifying MD5 checksum of update package via --md5 option")
pflag.Usage()
os.Exit(1)
return
}
log.GetLogger().Infof("Force update: url=%s, md5=%s", options.ForceUpdateURL, options.ForceUpdateMD5)
if err := doUpdate(options.ForceUpdateURL, options.ForceUpdateMD5, ""); err != nil {
log.GetLogger().WithError(err).Errorln("Failed to perform force updating")
fmt.Fprintln(os.Stderr, "Error:", err.Error())
os.Exit(1)
}
return
} else if options.LocalInstall != "" {
// Exclusive options check
if options.CheckUpdate || options.ForceUpdate {
fmt.Fprintln(os.Stderr, "Invalid options: specified options in conflict")
pflag.Usage()
os.Exit(1)
return
}
if err := doInstall(options.LocalInstall); err != nil {
log.GetLogger().WithError(err).Errorln("Failed to execute update script")
fmt.Fprintln(os.Stderr, "Error:", err.Error())
os.Exit(1)
return
}
} else {
pflag.Usage()
return
}
}