@@ -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" ,
"/usr/share/keyrings/docker-utsc.gpg" ,
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 {
{
"gpg" ,
"--dearmor" ,
"-o" ,
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 {
installFir stL ine ,
{
// 国内 使用 UTSC 的源
ok , l2 := AllCommandExecutor ( [ ] str ing {
"curl" ,
"-o" ,
"/usr/share/keyrings/docker.gpg" ,
"https://download.docker.com/linux/ubuntu/gpg " ,
dockerGPGFilePath ,
"https://download.docker.com/linux/ubuntu/gpg" ,
} )
if ! ok {
return false , l2
}
if ! BasicFileExistAndNotNull ( dockerGPGFilePath ) {
return false , [ ] string { "添加gpg失败! " }
}
resultOk , log2 := AllCompleteExecutor ( [ ] [ ] string {
{
"gpg" ,
"--dearmor" ,
"-o" ,
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 ,
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 fals e, nil
return tru e, nil
}