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