package acme_sh import ( "context" "fmt" "os/exec" "strings" "gitea.micah.wiki/pandora/magic/config" "gitea.micah.wiki/pandora/magic/pkg/env" "gitea.micah.wiki/pandora/magic/pkg/loggerx" ) // CheckAcmeSh 安装ache.sh 成功后返回安装路径,否则返回异常 func CheckAcmeSh(ctx context.Context, conf *config.Config, current *config.AcmeSh) (string, error) { shellConf := conf.ShellConfig shellName := env.GetShellName() if len(shellConf) == 0 { tempConf, err := env.GetShellConfig() if err != nil { return "", err } if len(tempConf) == 0 { return "", fmt.Errorf("未找到sh配置文件地址") } shellConf = tempConf conf.ShellConfig = tempConf } cmd := exec.Command(shellName, "-c", fmt.Sprintf("source %s; ls ~/.acme.sh/acme.sh", shellConf)) output, err := cmd.Output() // 如果返回是没有错误,则直接成功。 if err == nil { dir := strings.TrimSpace(string(output)) fmt.Println("acme.sh 路径为: " + dir) loggerx.AcmeSh().Infof("acme.sh already installed. dir: %s", dir) return dir, nil } cmd = exec.Command(shellName, "-c", fmt.Sprintf("source %s; curl https://get.acme.sh | sh -s email=%s", shellConf, current.DNSEmail)) output, err = cmd.Output() // 如果返回是没有错误,则直接成功。 if err != nil { return "", err } fmt.Println(fmt.Sprintf("acme.sh 安装成功\n%s", string(output))) return CheckAcmeSh(ctx, conf, current) }