From f26a0cab5bca17b7eab57f6330e576271e17a17f Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期三, 13 十一月 2019 19:12:08 +0800 Subject: [PATCH] update ynSwagger,sync to master --- extend/sys/system.go | 235 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 235 insertions(+), 0 deletions(-) diff --git a/extend/sys/system.go b/extend/sys/system.go index 96e89f9..647917d 100644 --- a/extend/sys/system.go +++ b/extend/sys/system.go @@ -1 +1,236 @@ package sys + +import ( + "errors" + "os" + "os/exec" + "strconv" + "webserver/extend/config" + "webserver/extend/util" + + "fmt" + "net" + "strings" + "time" +) + +func execRootCommand(cmd string) ([]byte, error) { + pwd := config.Server.SudoPassword + cmdStr := fmt.Sprintf("echo %s | sudo -S %s", pwd, cmd) + + return exec.Command("/bin/sh", "-c", cmdStr).Output() +} + +// 妫�鏌� root鏉冮檺 +func CheckRootPermissions() bool { + showRootCMD := exec.Command("/bin/sh", "-c", "ls /root/") + if _, err := showRootCMD.Output(); err != nil { + return false + } + + return true +} + +// 鑾峰彇鏈満缃戝崱IP +func GetLocalIP(networkName string) (ipv4 string, mask string, err error) { + interfaces, err := net.Interfaces() + if err != nil { + return "", "", err + } + + for _, i := range interfaces { + byName, err := net.InterfaceByName(i.Name) + if err != nil { + return "", "", err + } + addresses, err := byName.Addrs() + for _, v := range addresses { + if ipnet, ok := v.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { + if ipnet.IP.To4() != nil { + if byName.Name == networkName { + maskStr := ipnet.Mask.String() + mask64, _ := strconv.ParseUint(maskStr, 16, 32) + return ipnet.IP.String(), util.IpIntToString(int(mask64)), nil + } + } + } + } + } + return "", "", errors.New("ipv4 not found") +} + +// 鑾峰彇鏈満缃戝叧ip +func GetDefaultRoute(networkName string) (route string, err error) { + cmdStr := fmt.Sprintf("ip route show | grep -P \"^default.*%s\" | awk '{printf $3}'", networkName) + cmd := exec.Command("/bin/sh", "-c", cmdStr) + b, err := cmd.Output() + if err != nil { + return "", err + } + + return string(b), nil +} + +func GetDnsServer() (dns string, err error) { + cmd := exec.Command("/bin/sh", "-c", "cat /etc/resolv.conf | grep nameserver | head -1 |awk '{printf $2}'") + b, err := cmd.Output() + if err != nil { + return "", err + } + + return string(b), nil +} + +// 閰嶇疆鏈嶅姟鍣ㄧ綉缁� +func SetNetworkConfig(ipv4, netmask, gateway, dns string) (bool, string) { + networkConfigScript := "/opt/vasystem/bin/netconfig" + ifname := config.Server.NetworkAdapter + localIPv4, localNetMask, _ := GetLocalIP(ifname) + localGW, _ := GetDefaultRoute(ifname) + localDNS, _ := GetDnsServer() + + if localIPv4 == ipv4 && localNetMask == netmask && localGW == gateway && localDNS == dns { + return true, "" + } + + // 妫�鏌ユ枃浠舵槸鍚﹀瓨鍦� + if _, err := os.Stat(networkConfigScript); err != nil { + return false, "network Config Script not exist" + } + // # netconfig enp59s0f0 192.168.1.2 255.255.255.0 192.168.1.1 192.168.100.1 + cmdStr := fmt.Sprintf("%s %s %s %s %s %s", networkConfigScript, ifname, ipv4, netmask, gateway, dns) + stdout, err := execRootCommand(cmdStr) + + return err == nil, string(stdout) +} + +// 閰嶇疆鏃跺尯 +func TimeZone() (string, int64) { + cmd := exec.Command("/bin/sh", "-c", "echo -n $TZ") + tz, _ := cmd.Output() + if tzstr := string(tz); tzstr != "" { + return tzstr, time.Now().Unix() + } + + zone, _ := time.Now().Zone() + return zone, time.Now().Unix() +} + +func NTPConfig() (bool, string, string) { + status, server, interval := false, "", "" + + cron, _ := execRootCommand("crontab -l | grep ntpdate | tr -d '\n'") + if task := string(cron); task != "" { + status = true + slice := strings.Split(task, " ") + interval, server = slice[0][2:], slice[len(slice)-1] + } + + return status, server, interval +} + +// 璁剧疆鏃跺尯 +func SetTimeZone(tz string) bool { + if _, err := time.LoadLocation(tz); err != nil { + return false + } + + // set env + envCMD := exec.Command("/bin/sh", "-c", "TZ=%s", tz) + envCMD.Run() + // change permanent to the file '.profile' + + cleanTZ := exec.Command("/bin/sh", "-c", "sed -i '/^TZ=.*$/d' ~/.profile") + cleanTZ.Run() + + TZ := "TZ='" + tz + "'; export TZ" + appendTZCMD := fmt.Sprintf("echo \"%s\" >> ~/.profile;", TZ) + appendTZ := exec.Command("/bin/sh", "-c", appendTZCMD) + appendTZ.Run() + + return true +} + +// 閰嶇疆绯荤粺鏃堕棿 +func SetLocalTime(newTime string) bool { + const TimeLayout = "2006-01-02 15:04:05" + _, err := time.Parse(TimeLayout, newTime) + if err != nil { + return false + } + + dateCMD := fmt.Sprintf("date -s \"%s\"", newTime) + execRootCommand(dateCMD) + stopNTPCron() + + return true +} + +const NTPCRONTABFILE = "/tmp/.webServer.crontab" + +func EnableNTPCron(server string, interval int) bool { + stopNTPCron() + + if ip := net.ParseIP(server); ip == nil { + return false + } + + update := fmt.Sprintf("echo \"*/%d * * * * /usr/sbin/ntpdate %s\" >> %s", interval, server, NTPCRONTABFILE) + execRootCommand(update) + + addNTPTask := fmt.Sprintf("crontab %s", NTPCRONTABFILE) + execRootCommand(addNTPTask) + + return true +} + +func stopNTPCron() { + update := fmt.Sprintf("crontab -l | grep -v /usr/sbin/ntpdate > %s", NTPCRONTABFILE) + execRootCommand(update) + + cleanNTPTask := fmt.Sprintf("crontab %s", NTPCRONTABFILE) + execRootCommand(cleanNTPTask) +} + +func RunNTPDate(server string) bool { + if ip := net.ParseIP(server); ip == nil { + return false + } + + ntpdate := fmt.Sprintf("/usr/sbin/ntpdate %s", server) + _, err := execRootCommand(ntpdate) + + return err == nil +} + +func Reboot() (bool, string) { + stdout, err := execRootCommand("reboot") + + return err == nil, string(stdout) +} + +// * * * * * /bin/echo "$(date) Perform basic-reboot-task" >> /tmp/webserver.crontab.log;/sbin/reboot & >> /tmp/webserver.crontab.log +func ReadRebootTaskInCrontab() (bool, string) { + stdout, err := execRootCommand("crontab -l | grep basic-reboot-task | sed -z -r 's/([^0-9* ]+)(.+)//g'") + return err == nil, string(stdout) +} + +func CleanRebootTask() { + update := fmt.Sprintf("crontab -l | grep -v basic-reboot-task > %s", NTPCRONTABFILE) + execRootCommand(update) + + crontab := fmt.Sprintf("crontab %s", NTPCRONTABFILE) + execRootCommand(crontab) +} + +func UpdateRebootTask(task string) bool { + CleanRebootTask() + + tasks := fmt.Sprintf("%s /bin/echo \"$(date) Perform basic-reboot-task\" >> /tmp/webserver.crontab.log;/sbin/reboot & >> /tmp/webserver.crontab.log", task) + update := fmt.Sprintf("echo '%s' >> %s", tasks, NTPCRONTABFILE) + execRootCommand(update) + addNTPTask := fmt.Sprintf("crontab %s", NTPCRONTABFILE) + _, err := execRootCommand(addNTPTask) + + return err == nil +} -- Gitblit v1.8.0