Enhance Zsh and Config Commands, Update Network Configuration
- Implemented comprehensive Zsh installation command with multiple network scenarios - Added 'config show' subcommand to display agent configuration - Updated version command to print version information - Modified Network configuration to clarify internet connectivity status - Improved download utility with additional file existence checks - Updated agent-wdd rules and documentation
This commit is contained in:
@@ -1,13 +1,10 @@
|
|||||||
---
|
---
|
||||||
description:
|
|
||||||
globs:
|
|
||||||
---
|
|
||||||
---
|
|
||||||
description: 构建agent-wdd的特定上下文的规则
|
description: 构建agent-wdd的特定上下文的规则
|
||||||
globs: *.go
|
globs: *.go
|
||||||
---
|
---
|
||||||
|
|
||||||
# 你是一个精通golang的编程大师,熟练掌握github.com/spf13/cobra框架,能够构建出非常现代的cli工具
|
# 你是一个精通golang的编程大师,熟练掌握github.com/spf13/cobra框架,能够构建出非常现代的cli工具
|
||||||
|
@.cursorignore 请忽略这些目录下的文件
|
||||||
|
|
||||||
# 整个项目的架构结构如下
|
# 整个项目的架构结构如下
|
||||||
1. base 服务器基础操作 相关的功能存放于 [Base.go](mdc:agent-wdd/cmd/Base.go)
|
1. base 服务器基础操作 相关的功能存放于 [Base.go](mdc:agent-wdd/cmd/Base.go)
|
||||||
@@ -28,8 +25,7 @@ globs: *.go
|
|||||||
6. selinux 关闭本机的selinux相关内容
|
6. selinux 关闭本机的selinux相关内容
|
||||||
7. firewall 关闭本机的防火墙相关的设置
|
7. firewall 关闭本机的防火墙相关的设置
|
||||||
8. sysconfig 修改主机sysconfig相关的内容
|
8. sysconfig 修改主机sysconfig相关的内容
|
||||||
2. zsh zsh相关的内容
|
2. zsh zsh相关的内容 自动安装配置zsh [Zsh.go](mdc:agent-wdd/cmd/Zsh.go)
|
||||||
1. cn 参数,如果有此参数,则从跟国内安装zsh
|
|
||||||
3. proxy 主机代理相关的内容
|
3. proxy 主机代理相关的内容
|
||||||
1. xray xray相关的内容
|
1. xray xray相关的内容
|
||||||
1. install 安装最新版本的xray
|
1. install 安装最新版本的xray
|
||||||
|
|||||||
@@ -1,7 +1,30 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import "github.com/spf13/cobra"
|
import (
|
||||||
|
"agent-wdd/config"
|
||||||
|
"agent-wdd/log"
|
||||||
|
"agent-wdd/utils"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
func addConfigSubcommands(cmd *cobra.Command) {
|
func addConfigSubcommands(cmd *cobra.Command) {
|
||||||
|
|
||||||
|
showConfigCmd := &cobra.Command{
|
||||||
|
Use: "show",
|
||||||
|
Short: "显示agent运行配置",
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
log.Info("显示agent运行配置")
|
||||||
|
|
||||||
|
content := utils.ReadAllContentFromFile(config.WddConfigFilePath)
|
||||||
|
|
||||||
|
utils.BeautifulPrintListWithTitle(content, "agent运行配置")
|
||||||
|
|
||||||
|
log.Info("显示agent运行配置完成")
|
||||||
|
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.AddCommand(showConfigCmd)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"agent-wdd/log"
|
||||||
|
"agent-wdd/utils"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -16,16 +19,26 @@ func addDownloadSubcommands(cmd *cobra.Command) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
unproxyCmd := &cobra.Command{
|
cmd.Run = func(cmd *cobra.Command, args []string) {
|
||||||
Use: "unproxy [url] [dest]",
|
if len(args) == 0 {
|
||||||
Short: "不使用代理下载",
|
log.Error("请输入下载地址")
|
||||||
Args: cobra.ExactArgs(2),
|
return
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
} else if len(args) == 1 {
|
||||||
fmt.Printf("Downloading without proxy: %s -> %s\n", args[0], args[1])
|
args = append(args, ".")
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.AddCommand(proxyCmd, unproxyCmd)
|
log.Info("Downloading without proxy: %s -> %s\n", args[0], args[1])
|
||||||
|
|
||||||
|
downloadOk, resultLog := utils.DownloadFile(args[0], args[1])
|
||||||
|
if !downloadOk {
|
||||||
|
log.Error("下载失败: %s", resultLog)
|
||||||
|
} else {
|
||||||
|
log.Info("下载成功: %s", args[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.AddCommand(proxyCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据需求补充其他子命令的添加函数...
|
// 根据需求补充其他子命令的添加函数...
|
||||||
|
|||||||
@@ -1,7 +1,146 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import "github.com/spf13/cobra"
|
import (
|
||||||
|
"agent-wdd/config"
|
||||||
|
"agent-wdd/log"
|
||||||
|
"agent-wdd/op"
|
||||||
|
"agent-wdd/utils"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
func addZshSubcommands(cmd *cobra.Command) {
|
func addZshSubcommands(cmd *cobra.Command) {
|
||||||
|
cmd.Run = func(cmd *cobra.Command, args []string) {
|
||||||
|
log.Info("安装zsh")
|
||||||
|
|
||||||
|
// 初始化安装命令
|
||||||
|
utils.CreateFolder("/root/wdd")
|
||||||
|
|
||||||
|
if config.CanConnectInternet() <= 1 {
|
||||||
|
log.Error("无法连接互联网,无法安装zsh")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判定config
|
||||||
|
if config.ConfigCache.Agent.Network.Public.IPv4 == "" {
|
||||||
|
network := config.ConfigCache.Agent.Network
|
||||||
|
network.Gather()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下载并安装zsh和git
|
||||||
|
ok := op.AgentPackOperator.Install([]string{"git", "zsh"})
|
||||||
|
if !ok {
|
||||||
|
log.Error("安装git和zsh失败, 无法继续后面的的安装!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清理残留
|
||||||
|
utils.RemoveFolderComplete("/root/.oh-my-zsh")
|
||||||
|
utils.RemoveFolderComplete("/root/wdd/zsh-install.sh")
|
||||||
|
utils.RemoveFolderComplete("/root/wdd/oh-my-zsh-plugins-list.txt")
|
||||||
|
|
||||||
|
ohMyZshInstallUrl := ""
|
||||||
|
|
||||||
|
if config.ConfigCache.Agent.Network.Internet == 7 {
|
||||||
|
ohMyZshInstallUrl = "https://gitea.107421.xyz/zeaslity/ohmyzsh/raw/branch/master/tools/install.sh"
|
||||||
|
} else {
|
||||||
|
ohMyZshInstallUrl = "https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh"
|
||||||
|
}
|
||||||
|
|
||||||
|
downloadOk, resultLog := utils.DownloadFile(ohMyZshInstallUrl, "/root/wdd/zsh-install.sh")
|
||||||
|
if !downloadOk {
|
||||||
|
log.Error("下载zsh安装脚本失败: %v", resultLog)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
op.SingleLineCommandExecutor([]string{
|
||||||
|
"chmod",
|
||||||
|
"+x",
|
||||||
|
"/root/wdd/zsh-install.sh",
|
||||||
|
})
|
||||||
|
|
||||||
|
installZshCommand := []string{
|
||||||
|
"/bin/bash",
|
||||||
|
"/root/wdd/zsh-install.sh",
|
||||||
|
}
|
||||||
|
|
||||||
|
if config.ConfigCache.Agent.Network.Internet == 7 {
|
||||||
|
installZshCommand = append(installZshCommand,
|
||||||
|
"REMOTE=https://gitea.107421.xyz/zeaslity/ohmyzsh.git",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
op.SingleLineCommandExecutor(installZshCommand)
|
||||||
|
|
||||||
|
log.Info("安装zsh完成, 开始安装插件!")
|
||||||
|
|
||||||
|
pluginsHardCodeUrl := []string{
|
||||||
|
"git clone https://gitee.com/wangl-cc/zsh-autosuggestions.git ~/.oh-my-zsh/plugins/zsh-autosuggestions",
|
||||||
|
"git clone https://gitee.com/xiaoqqya/zsh-syntax-highlighting.git ~/.oh-my-zsh/plugins/zsh-syntax-highlighting",
|
||||||
|
}
|
||||||
|
|
||||||
|
pluginsHardCodeOutsideUrl := []string{
|
||||||
|
"git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/plugins/zsh-autosuggestions",
|
||||||
|
"git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/plugins/zsh-syntax-highlighting",
|
||||||
|
}
|
||||||
|
|
||||||
|
pluginsListUrl := []string{
|
||||||
|
"https://gitea.107421.xyz/zeaslity/ohmyzsh/src/branch/master/plugins/command-not-found/command-not-found.plugin.zsh",
|
||||||
|
"https://gitea.107421.xyz/zeaslity/ohmyzsh/src/branch/master/plugins/autojump/autojump.plugin.zsh",
|
||||||
|
"https://gitea.107421.xyz/zeaslity/ohmyzsh/src/branch/master/plugins/themes/themes.plugin.zsh",
|
||||||
|
}
|
||||||
|
|
||||||
|
if config.ConfigCache.Agent.Network.Internet == 7 {
|
||||||
|
log.Info("使用gitea镜像安装插件!")
|
||||||
|
pluginsHardCodeUrl = append(pluginsHardCodeUrl,
|
||||||
|
"wget -c -i https://b2.107421.xyz/oh-my-zsh-plugins-list.txt -P /root/.oh-my-zsh/plugins/",
|
||||||
|
)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
log.Info("使用github安装插件!")
|
||||||
|
}
|
||||||
|
// 下载插件
|
||||||
|
if config.ConfigCache.Agent.Network.Internet == 7 {
|
||||||
|
// 执行硬编码命令, 安装插件
|
||||||
|
for _, command := range pluginsHardCodeUrl {
|
||||||
|
op.HardCodeCommandExecutor(command)
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// 执行硬编码命令, 安装插件 国外
|
||||||
|
for _, command := range pluginsHardCodeOutsideUrl {
|
||||||
|
op.HardCodeCommandExecutor(command)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 下载插件
|
||||||
|
for _, url := range pluginsListUrl {
|
||||||
|
downloadOk, resultLog := utils.DownloadFile(url, "/root/.oh-my-zsh/plugins/")
|
||||||
|
if !downloadOk {
|
||||||
|
log.Error("下载插件失败: %v", resultLog)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改ZSH配置
|
||||||
|
utils.FindAndReplaceContentInFile("/root/.zshrc", "robbyrussell", "agnoster")
|
||||||
|
utils.FindAndReplaceContentInFile("/root/.zshrc", "# DISABLE_AUTO_UPDATE=\"true\"", "DISABLE_AUTO_UPDATE=\"true\"")
|
||||||
|
utils.FindAndReplaceContentInFile("/root/.zshrc", "plugins=(git)", "plugins=(git zsh-autosuggestions zsh-syntax-highlighting command-not-found z themes)")
|
||||||
|
|
||||||
|
//
|
||||||
|
op.SingleLineCommandExecutor([]string{
|
||||||
|
"source",
|
||||||
|
"/root/.zshrc",
|
||||||
|
})
|
||||||
|
|
||||||
|
op.SingleLineCommandExecutor([]string{
|
||||||
|
"chsh",
|
||||||
|
"-s",
|
||||||
|
"/bin/zsh",
|
||||||
|
})
|
||||||
|
|
||||||
|
op.SingleLineCommandExecutor([]string{
|
||||||
|
"zsh",
|
||||||
|
})
|
||||||
|
|
||||||
|
log.Info("Zsh安装完成")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"agent-wdd/config"
|
"agent-wdd/config"
|
||||||
"agent-wdd/log"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
)
|
)
|
||||||
@@ -93,10 +93,7 @@ func Execute() {
|
|||||||
Short: "打印版本信息",
|
Short: "打印版本信息",
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
// 实现version逻辑
|
// 实现version逻辑
|
||||||
log.Debug("来自王达达的礼物 !")
|
fmt.Println("版本信息: 1.0.0")
|
||||||
log.Info("来自王达达的礼物 !")
|
|
||||||
log.Warning("来自王达达的礼物 !")
|
|
||||||
log.Error("来自王达达的礼物 !")
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ type OS struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Network struct {
|
type Network struct {
|
||||||
Internet int `yaml:"internet"`
|
Internet int `yaml:"internet",comment:"是否能够上网 外网为9 国内为7 不能上网为1"`
|
||||||
Public PublicInfo `yaml:"public"`
|
Public PublicInfo `yaml:"public"`
|
||||||
Interfaces []Interface `yaml:"interfaces"`
|
Interfaces []Interface `yaml:"interfaces"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,25 +39,9 @@ func (network *Network) Gather() {
|
|||||||
//获取本机网卡相关的内容
|
//获取本机网卡相关的内容
|
||||||
}
|
}
|
||||||
|
|
||||||
// CanConnectInternet 判定主机能够上网
|
// CanConnectInternet 判定主机能够上网 外网为9 国内为7 不能上网为1
|
||||||
func CanConnectInternet() int {
|
func CanConnectInternet() int {
|
||||||
|
|
||||||
// 初始化 ConfigCache
|
|
||||||
if ConfigCache == nil {
|
|
||||||
ConfigCache = &Config{
|
|
||||||
TimeStamp: "",
|
|
||||||
ModifiedTimes: 0,
|
|
||||||
Agent: Agent{
|
|
||||||
OS: OS{},
|
|
||||||
Network: Network{},
|
|
||||||
CPU: CPU{},
|
|
||||||
Mem: Memory{},
|
|
||||||
Swap: Swap{},
|
|
||||||
Disks: []Disk{},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 读取 config 文件,判定能否上网
|
// 读取 config 文件,判定能否上网
|
||||||
internetCode := ConfigCache.Agent.Network.Internet
|
internetCode := ConfigCache.Agent.Network.Internet
|
||||||
|
|
||||||
|
|||||||
@@ -39,5 +39,10 @@ func DownloadFile(url string, path string) (bool, string) {
|
|||||||
return false, fmt.Sprintf("写入文件失败: %v", err)
|
return false, fmt.Sprintf("写入文件失败: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查文件是否存在
|
||||||
|
if !FileExistAndNotNull(path) {
|
||||||
|
return false, fmt.Sprintf("文件下载失败: 文件为空 => %s", path)
|
||||||
|
}
|
||||||
|
|
||||||
return true, fmt.Sprintf("文件下载成功: %s", path)
|
return true, fmt.Sprintf("文件下载成功: %s", path)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user