[ Agent ] [ Executor ] - 初步完成Executor部分的代码
This commit is contained in:
@@ -34,7 +34,7 @@ type AgentOsOperator struct {
|
||||
AgentServerInfo *register.AgentServerInfo `json:"agent_server_info"`
|
||||
|
||||
// 离线下载URL地址
|
||||
OssOfflinePrefix string
|
||||
OssOfflinePrefix string `comment:"必须要用 / 结尾"`
|
||||
}
|
||||
|
||||
func (op *AgentOsOperator) Exec(baseFuncName string, funcArgs ...string) (bool, []string) {
|
||||
@@ -409,13 +409,13 @@ func (op *AgentOsOperator) installDocker(args []string) [][]string {
|
||||
{
|
||||
"curl",
|
||||
"-o",
|
||||
"/usr/share/keyrings/docker-utsc.gpg",
|
||||
"/etc/apt/keyrings/docker-utsc.gpg",
|
||||
"https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg",
|
||||
},
|
||||
{
|
||||
"apt-key",
|
||||
"add",
|
||||
"/usr/share/keyrings/docker-utsc.gpg",
|
||||
"/etc/apt/keyrings/docker-utsc.gpg",
|
||||
},
|
||||
{
|
||||
"add-apt-repository",
|
||||
@@ -429,13 +429,13 @@ func (op *AgentOsOperator) installDocker(args []string) [][]string {
|
||||
{
|
||||
"curl",
|
||||
"-o",
|
||||
"/usr/share/keyrings/docker.gpg",
|
||||
"/etc/apt/keyrings/docker.gpg",
|
||||
"https://download.docker.com/linux/ubuntu/gpg ",
|
||||
},
|
||||
{
|
||||
"apt-key",
|
||||
"add",
|
||||
"/usr/share/keyrings/docker.gpg",
|
||||
"/etc/apt/keyrings/docker.gpg",
|
||||
},
|
||||
{
|
||||
"add-apt-repository",
|
||||
@@ -501,8 +501,6 @@ func (op *AgentOsOperator) installDocker(args []string) [][]string {
|
||||
}
|
||||
|
||||
func (op *AgentOsOperator) installDockerExec(args []string) (bool, []string) {
|
||||
var resultLog []string
|
||||
resultOk = true
|
||||
|
||||
if op.IsOsTypeUbuntu {
|
||||
|
||||
@@ -520,51 +518,86 @@ func (op *AgentOsOperator) installDockerExec(args []string) (bool, []string) {
|
||||
return false, l
|
||||
}
|
||||
|
||||
// add dependency
|
||||
dockerGPGFilePath := "/etc/apt/keyrings/docker.gpg"
|
||||
|
||||
// 安装镜像的证书
|
||||
if op.IsAgentInnerWall {
|
||||
// inner gfw
|
||||
installDockerFunc = append(installDockerFunc, [][]string{
|
||||
installFirstLine,
|
||||
// 国内 使用 UTSC 的源
|
||||
ok, l2 := AllCommandExecutor([]string{
|
||||
"curl",
|
||||
"-o",
|
||||
dockerGPGFilePath,
|
||||
"https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg",
|
||||
})
|
||||
if !ok {
|
||||
return false, l2
|
||||
}
|
||||
if !BasicFileExistAndNotNull(dockerGPGFilePath) {
|
||||
return false, []string{"添加gpg失败!"}
|
||||
}
|
||||
|
||||
resultOk, log2 := AllCompleteExecutor([][]string{
|
||||
{
|
||||
"curl",
|
||||
"gpg",
|
||||
"--dearmor",
|
||||
"-o",
|
||||
"/usr/share/keyrings/docker-utsc.gpg",
|
||||
"https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg",
|
||||
dockerGPGFilePath,
|
||||
},
|
||||
{
|
||||
"apt-key",
|
||||
"add",
|
||||
"/usr/share/keyrings/docker-utsc.gpg",
|
||||
"chmod",
|
||||
"a+r",
|
||||
dockerGPGFilePath,
|
||||
},
|
||||
{
|
||||
"add-apt-repository",
|
||||
"deb [arch=" + op.AgentArch + "] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu " + op.AgentOSReleaseCode + " stable",
|
||||
},
|
||||
}...)
|
||||
})
|
||||
if !resultOk {
|
||||
return false, log2
|
||||
}
|
||||
} else {
|
||||
// outside world
|
||||
installDockerFunc = append(installDockerFunc, [][]string{
|
||||
installFirstLine,
|
||||
// 国内 使用 UTSC 的源
|
||||
ok, l2 := AllCommandExecutor([]string{
|
||||
"curl",
|
||||
"-o",
|
||||
dockerGPGFilePath,
|
||||
"https://download.docker.com/linux/ubuntu/gpg",
|
||||
})
|
||||
if !ok {
|
||||
return false, l2
|
||||
}
|
||||
if !BasicFileExistAndNotNull(dockerGPGFilePath) {
|
||||
return false, []string{"添加gpg失败!"}
|
||||
}
|
||||
|
||||
resultOk, log2 := AllCompleteExecutor([][]string{
|
||||
{
|
||||
"curl",
|
||||
"gpg",
|
||||
"--dearmor",
|
||||
"-o",
|
||||
"/usr/share/keyrings/docker.gpg",
|
||||
"https://download.docker.com/linux/ubuntu/gpg ",
|
||||
dockerGPGFilePath,
|
||||
},
|
||||
{
|
||||
"apt-key",
|
||||
"add",
|
||||
"/usr/share/keyrings/docker.gpg",
|
||||
"chmod",
|
||||
"a+r",
|
||||
dockerGPGFilePath,
|
||||
},
|
||||
{
|
||||
"add-apt-repository",
|
||||
"deb [arch=" + op.AgentArch + "] https://download.docker.com/linux/ubuntu " + op.AgentOSReleaseCode + " stable",
|
||||
},
|
||||
}...)
|
||||
})
|
||||
if !resultOk {
|
||||
return false, log2
|
||||
}
|
||||
}
|
||||
|
||||
// look for specific docker-version to install
|
||||
installDockerFunc = append(installDockerFunc, []string{"apt-get", "update"})
|
||||
AllCommandExecutor([]string{"apt-get", "update"})
|
||||
|
||||
// ubuntu 内部
|
||||
|
||||
var specificDockerVersion string
|
||||
// hard code here 5:20.10.10~3-0~ubuntu-focal
|
||||
@@ -574,19 +607,19 @@ func (op *AgentOsOperator) installDockerExec(args []string) (bool, []string) {
|
||||
specificDockerVersion = "5:20.10.10~3-0~ubuntu-" + op.AgentOSReleaseCode
|
||||
}
|
||||
|
||||
installDockerFunc = append(installDockerFunc,
|
||||
append(
|
||||
op.InstallCommandPrefix,
|
||||
"docker-ce="+specificDockerVersion,
|
||||
"docker-ce-cli="+specificDockerVersion,
|
||||
"containerd.io",
|
||||
"docker-compose-plugin",
|
||||
),
|
||||
)
|
||||
resultOk, log2 := AllCommandExecutor([]string{
|
||||
"docker-ce=" + specificDockerVersion,
|
||||
"docker-ce-cli=" + specificDockerVersion,
|
||||
"containerd.io",
|
||||
"docker-compose-plugin",
|
||||
})
|
||||
if !resultOk {
|
||||
return false, log2
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return resultOk, resultLog
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func (op *AgentOsOperator) removeDockerCompose() [][]string {
|
||||
@@ -602,7 +635,22 @@ func (op *AgentOsOperator) removeDockerCompose() [][]string {
|
||||
}
|
||||
|
||||
func (op *AgentOsOperator) removeDockerComposeExec() (bool, []string) {
|
||||
return false, nil
|
||||
|
||||
commandName := "docker-compose"
|
||||
if !BasicCommandExists(commandName) {
|
||||
return true, nil
|
||||
}
|
||||
possibleDockerComposeFilePath := []string{
|
||||
"/usr/local/bin/" + commandName,
|
||||
"/usr/bin/" + commandName,
|
||||
}
|
||||
|
||||
for _, s := range possibleDockerComposeFilePath {
|
||||
removeDockerCommand := append(RemoveForcePrefix, s)
|
||||
AllCommandExecutor(removeDockerCommand)
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func (op *AgentOsOperator) installDockerCompose() [][]string {
|
||||
@@ -618,7 +666,37 @@ func (op *AgentOsOperator) installDockerCompose() [][]string {
|
||||
}
|
||||
|
||||
func (op *AgentOsOperator) installDockerComposeExec() (bool, []string) {
|
||||
return false, nil
|
||||
|
||||
// 安装特定版本的 docker-compose 2.18.0
|
||||
if op.OssOfflinePrefix == "" {
|
||||
return false, []string{"离线下载OSS地址不存在! 无法安装 docker-compose"}
|
||||
}
|
||||
|
||||
DockerComposeFile := op.OssOfflinePrefix + "docker-compose-linux-x86_64-v2.18.0"
|
||||
|
||||
ok, resultLog := AllCommandExecutor([]string{
|
||||
"wget", DockerComposeFile,
|
||||
"-O",
|
||||
"/usr/local/bin/docker-compose",
|
||||
})
|
||||
if !ok {
|
||||
return false, resultLog
|
||||
}
|
||||
|
||||
if !BasicFileExistAndNotNull("/usr/local/bin/docker-compose") {
|
||||
return false, []string{"docker-compose 下载失败!"}
|
||||
}
|
||||
|
||||
AllCompleteExecutor([][]string{
|
||||
{
|
||||
"chmod", "+x", "/usr/local/bin/docker-compose",
|
||||
},
|
||||
{
|
||||
"ln", "-s", "/usr/local/bin/docker-compose", "/usr/bin/docker-compose",
|
||||
},
|
||||
})
|
||||
|
||||
return true, nil
|
||||
}
|
||||
func (op *AgentOsOperator) installHelm() [][]string {
|
||||
installHelmFunc := [][]string{
|
||||
@@ -670,13 +748,13 @@ func (op *AgentOsOperator) installHelm() [][]string {
|
||||
{
|
||||
"curl",
|
||||
"-o",
|
||||
"/usr/share/keyrings/helm.gpg",
|
||||
"/etc/apt/keyrings/helm.gpg",
|
||||
"https://baltocdn.com/helm/signing.asc",
|
||||
},
|
||||
{
|
||||
"apt-key",
|
||||
"add",
|
||||
"/usr/share/keyrings/helm.gpg",
|
||||
"/etc/apt/keyrings/helm.gpg",
|
||||
},
|
||||
{
|
||||
"add-apt-repository",
|
||||
@@ -1061,7 +1139,125 @@ func (op *AgentOsOperator) installZSH() [][]string {
|
||||
}
|
||||
|
||||
func (op *AgentOsOperator) installZSHExec() (bool, []string) {
|
||||
return false, nil
|
||||
|
||||
ok, resultLog := AllCompleteExecutor([][]string{
|
||||
{
|
||||
"mkdir",
|
||||
"-p",
|
||||
"/root/wdd/",
|
||||
},
|
||||
append(
|
||||
op.InstallCommandPrefix,
|
||||
"zsh",
|
||||
"git",
|
||||
),
|
||||
})
|
||||
if !ok {
|
||||
return false, resultLog
|
||||
}
|
||||
|
||||
var zshRemoteGitUrl string
|
||||
if op.IsAgentInnerWall {
|
||||
zshRemoteGitUrl = "https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh"
|
||||
} else {
|
||||
zshRemoteGitUrl = "https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh"
|
||||
}
|
||||
|
||||
resultOk, l := AllCommandExecutor([]string{
|
||||
"wget",
|
||||
zshRemoteGitUrl,
|
||||
"-O",
|
||||
"/root/wdd/zsh-install.sh",
|
||||
},
|
||||
)
|
||||
if !resultOk {
|
||||
l = append(l, "zsh-install.sh 下载失败! 安装终止")
|
||||
return false, l
|
||||
}
|
||||
|
||||
executor, log2 := AllCompleteExecutor([][]string{
|
||||
{
|
||||
"chomd",
|
||||
"+x",
|
||||
"/root/wdd/zsh-install.sh",
|
||||
},
|
||||
{
|
||||
"/bin/bash",
|
||||
"/root/wdd/zsh-install.sh",
|
||||
"REMOTE=https://gitee.com/mirrors/oh-my-zsh.git",
|
||||
},
|
||||
},
|
||||
)
|
||||
if !executor {
|
||||
return false, log2
|
||||
}
|
||||
|
||||
modifyZSHOK, log3 := AllCompleteExecutor(
|
||||
[][]string{
|
||||
{
|
||||
"git",
|
||||
"clone",
|
||||
"https://github.com.cnpmjs.org/zsh-users/zsh-autosuggestions",
|
||||
"~/.oh-my-zsh/plugins/zsh-autosuggestions",
|
||||
},
|
||||
{
|
||||
"git",
|
||||
"clone",
|
||||
"https://github.com.cnpmjs.org/zsh-users/zsh-syntax-highlighting.git",
|
||||
"~/.oh-my-zsh/plugins/zsh-syntax-highlighting",
|
||||
},
|
||||
{
|
||||
"wget",
|
||||
op.OssOfflinePrefix + "oh-my-zsh-plugins-list.txt",
|
||||
"-O",
|
||||
"oh-my-zsh-plugins-list.txt",
|
||||
},
|
||||
{
|
||||
"wget",
|
||||
"-c",
|
||||
"-i",
|
||||
"./oh-my-zsh-plugins-list.txt",
|
||||
"-P",
|
||||
"~/.oh-my-zsh/plugins/",
|
||||
},
|
||||
{
|
||||
"sed",
|
||||
"-i",
|
||||
"s/robbyrussell/agnoster/g",
|
||||
"~/.zshrc",
|
||||
},
|
||||
{
|
||||
"sed",
|
||||
"-i",
|
||||
"s/^# DISABLE_AUTO_UPDATE=\"true\"/DISABLE_AUTO_UPDATE=\"true\"/g",
|
||||
"~/.zshrc",
|
||||
},
|
||||
{
|
||||
"sed",
|
||||
"-i",
|
||||
"s/plugins=(git)/plugins=(git zsh-autosuggestions zsh-syntax-highlighting command-not-found z themes)/g",
|
||||
"~/.zshrc",
|
||||
},
|
||||
{
|
||||
"source",
|
||||
"~/.zshrc",
|
||||
},
|
||||
{
|
||||
"chsh",
|
||||
"-s",
|
||||
"/bin/zsh",
|
||||
},
|
||||
{
|
||||
"zsh",
|
||||
},
|
||||
})
|
||||
|
||||
if !modifyZSHOK {
|
||||
log.Warn("ZSH 安装成功,但是配置修改失败!")
|
||||
return true, log3
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func (op *AgentOsOperator) modifySshPort(args []string) [][]string {
|
||||
@@ -1090,5 +1286,5 @@ func (op *AgentOsOperator) ok(args []string) [][]string {
|
||||
}
|
||||
|
||||
func (op *AgentOsOperator) okExec(args []string) (bool, []string) {
|
||||
return false, nil
|
||||
return true, nil
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package executor
|
||||
|
||||
import "os/exec"
|
||||
|
||||
var RemoveForcePrefix = []string{"rm", "-rf"}
|
||||
|
||||
// BasicCommandExists 判定命令是否存在
|
||||
func BasicCommandExists(commandName string) bool {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user