Skip to content

Commit ebcca0d

Browse files
committed
Merge remote-tracking branch 'origin/release/v11' into release/v11
2 parents 9f2db7f + 0d3c820 commit ebcca0d

10 files changed

Lines changed: 242 additions & 84 deletions

File tree

agent/collectors/windows_arm64.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,14 +276,14 @@ func convertEventToJSON(event *Event) (string, error) {
276276
"timestamp": event.System.TimeCreated.SystemTime,
277277
"provider_name": event.System.Provider.ProviderName,
278278
"provider_guid": event.System.Provider.ProviderGUID,
279-
"event_id": event.System.EventID,
279+
"eventCode": event.System.EventID,
280280
"version": event.System.Version,
281281
"level": event.System.Level,
282282
"task": event.System.Task,
283283
"opcode": event.System.Opcode,
284284
"keywords": event.System.Keywords,
285-
"time_created": event.System.TimeCreated.SystemTime,
286-
"record_id": event.System.EventRecordID,
285+
"timeCreated": event.System.TimeCreated.SystemTime,
286+
"recordId": event.System.EventRecordID,
287287
"correlation": event.System.Correlation,
288288
"execution": event.System.Execution,
289289
"channel": event.System.Channel,

installer/config/const.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ const (
1717

1818
RequiredMinCPUCores = 2
1919
RequiredMinDiskSpace = 30
20-
RequiredDistro = "ubuntu"
20+
RequiredDistroUbuntu = "ubuntu"
21+
RequiredDistroRHEL = "redhat"
2122
)
2223

2324
var (

installer/docker/docker.go

Lines changed: 53 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,71 @@ import (
44
"fmt"
55
"time"
66

7+
"github.com/utmstack/UTMStack/installer/config"
78
"github.com/utmstack/UTMStack/installer/services"
89
"github.com/utmstack/UTMStack/installer/utils"
910
)
1011

11-
func InstallDocker() error {
12-
env := []string{"DEBIAN_FRONTEND=noninteractive"}
12+
func InstallDocker(distro string) error {
13+
switch distro {
14+
case config.RequiredDistroUbuntu:
15+
env := []string{"DEBIAN_FRONTEND=noninteractive"}
1316

14-
if err := utils.RunEnvCmd(env, "apt-get", "update"); err != nil {
15-
return err
16-
}
17+
if err := utils.RunEnvCmd(env, "apt-get", "update"); err != nil {
18+
return err
19+
}
1720

18-
if err := utils.RunEnvCmd(env, "apt-get", "install", "-y", "ca-certificates", "curl"); err != nil {
19-
return err
20-
}
21+
if err := utils.RunEnvCmd(env, "apt-get", "install", "-y", "ca-certificates", "curl"); err != nil {
22+
return err
23+
}
2124

22-
if err := utils.RunEnvCmd(env, "install", "-m", "0755", "-d", "/etc/apt/keyrings"); err != nil {
23-
return err
24-
}
25+
if err := utils.RunEnvCmd(env, "install", "-m", "0755", "-d", "/etc/apt/keyrings"); err != nil {
26+
return err
27+
}
2528

26-
if err := utils.RunEnvCmd(env, "curl", "-fsSL", "https://download.docker.com/linux/ubuntu/gpg", "-o", "/etc/apt/keyrings/docker.asc"); err != nil {
27-
return err
28-
}
29+
if err := utils.RunEnvCmd(env, "curl", "-fsSL", "https://download.docker.com/linux/ubuntu/gpg", "-o", "/etc/apt/keyrings/docker.asc"); err != nil {
30+
return err
31+
}
2932

30-
if err := utils.RunEnvCmd(env, "chmod", "a+r", "/etc/apt/keyrings/docker.asc"); err != nil {
31-
return err
32-
}
33+
if err := utils.RunEnvCmd(env, "chmod", "a+r", "/etc/apt/keyrings/docker.asc"); err != nil {
34+
return err
35+
}
3336

34-
repoCmd := `echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null`
35-
if err := utils.RunEnvCmd(env, "sh", "-c", repoCmd); err != nil {
36-
return err
37-
}
37+
repoCmd := `echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null`
38+
if err := utils.RunEnvCmd(env, "sh", "-c", repoCmd); err != nil {
39+
return err
40+
}
3841

39-
if err := utils.RunEnvCmd(env, "apt-get", "update"); err != nil {
40-
return err
41-
}
42+
if err := utils.RunEnvCmd(env, "apt-get", "update"); err != nil {
43+
return err
44+
}
4245

43-
if err := utils.RunEnvCmd(env, "apt-get", "install", "-y", "docker-ce", "docker-ce-cli", "containerd.io", "docker-compose", "docker-buildx-plugin", "docker-compose-plugin"); err != nil {
44-
return err
46+
if err := utils.RunEnvCmd(env, "apt-get", "install", "-y", "docker-ce", "docker-ce-cli", "containerd.io", "docker-compose", "docker-buildx-plugin", "docker-compose-plugin"); err != nil {
47+
return err
48+
}
49+
50+
case config.RequiredDistroRHEL:
51+
env := []string{"DNF_YUM_AUTO_YES=1"}
52+
53+
if err := utils.RunEnvCmd(env, "dnf", "install", "-y", "dnf-plugins-core", "ca-certificates", "curl"); err != nil {
54+
return err
55+
}
56+
57+
if err := utils.RunEnvCmd(env, "dnf", "config-manager", "--add-repo", "https://download.docker.com/linux/centos/docker-ce.repo"); err != nil {
58+
return err
59+
}
60+
61+
if err := utils.RunEnvCmd(env, "dnf", "makecache"); err != nil {
62+
return err
63+
}
64+
65+
if err := utils.RunEnvCmd(env, "dnf", "install", "-y", "docker-ce", "docker-ce-cli", "containerd.io", "docker-compose-plugin", "docker-buildx-plugin"); err != nil {
66+
return err
67+
}
68+
69+
if err := utils.RunEnvCmd(env, "systemctl", "enable", "--now", "docker"); err != nil {
70+
return err
71+
}
4572
}
4673

4774
return nil

installer/install.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@ func Install() error {
2828
cnf := config.GetConfig()
2929

3030
fmt.Print("Checking system requirements")
31-
if err := system.CheckDistro(config.RequiredDistro); err != nil {
31+
distro, err := system.CheckDistro()
32+
if err != nil {
3233
return err
3334
}
35+
3436
if err := system.CheckCPU(config.RequiredMinCPUCores); err != nil {
3537
return err
3638
}
@@ -82,10 +84,10 @@ func Install() error {
8284
if err != nil {
8385
return err
8486
}
85-
if err := network.InstallVlan(); err != nil {
87+
if err := network.InstallVlan(distro); err != nil {
8688
return err
8789
}
88-
if err := network.ConfigureVLAN(iface); err != nil {
90+
if err := network.ConfigureVLAN(iface, distro); err != nil {
8991
return err
9092
}
9193
if err := utils.SetLock(202402081553, stack.LocksDir); err != nil {
@@ -96,7 +98,7 @@ func Install() error {
9698

9799
if utils.GetLock(3, stack.LocksDir) {
98100
fmt.Print("Installing Docker")
99-
if err := docker.InstallDocker(); err != nil {
101+
if err := docker.InstallDocker(distro); err != nil {
100102
return err
101103
}
102104
if err := utils.SetLock(3, stack.LocksDir); err != nil {
@@ -154,19 +156,19 @@ func Install() error {
154156

155157
fmt.Print("Installing reverse proxy. This may take a while.")
156158

157-
if err := network.InstallNginx(); err != nil {
159+
if err := network.InstallNginx(distro); err != nil {
158160
return err
159161
}
160162

161-
if err := network.ConfigureNginx(cnf, stack); err != nil {
163+
if err := network.ConfigureNginx(cnf, stack, distro); err != nil {
162164
return err
163165
}
164166

165167
fmt.Println(" [OK]")
166168

167169
if utils.GetLock(5, stack.LocksDir) {
168170
fmt.Print("Installing Administration Tools")
169-
if err := system.InstallTools(); err != nil {
171+
if err := system.InstallTools(distro); err != nil {
170172
return err
171173
}
172174

installer/network/network.go

Lines changed: 55 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"path"
66
"strings"
77

8+
"github.com/utmstack/UTMStack/installer/config"
89
"github.com/utmstack/UTMStack/installer/templates"
910
"github.com/utmstack/UTMStack/installer/utils"
1011
)
@@ -38,38 +39,70 @@ func checkRenderer() (string, error) {
3839
return "networkd", nil
3940
}
4041

41-
func ConfigureVLAN(mainIface string) error {
42-
renderer, err := checkRenderer()
43-
if err != nil {
44-
return err
45-
}
42+
func ConfigureVLAN(mainIface string, distro string) error {
4643

47-
c := Vlan{
48-
Renderer: renderer,
49-
Iface: mainIface,
50-
}
44+
c := Vlan{Iface: mainIface}
5145

52-
err = utils.GenerateConfig(c, templates.Vlan, path.Join("/etc", "netplan", "99-vlan.yaml"))
53-
if err != nil {
54-
return err
55-
}
46+
switch distro {
47+
case config.RequiredDistroUbuntu:
48+
renderer, err := checkRenderer()
49+
if err != nil {
50+
return err
51+
}
52+
53+
c.Renderer = renderer
54+
55+
err = utils.GenerateConfig(c, templates.VlanUbuntu, path.Join("/etc", "netplan", "99-vlan.yaml"))
56+
if err != nil {
57+
return err
58+
}
59+
60+
if err := utils.RunCmd("netplan", "apply"); err != nil {
61+
return err
62+
}
63+
64+
case config.RequiredDistroRHEL:
65+
err := utils.GenerateConfig(c, templates.VlanRedHat, "/etc/sysconfig/network-scripts/ifcfg-vlan10")
66+
if err != nil {
67+
return err
68+
}
69+
70+
if err := utils.RunCmd("modprobe", "8021q"); err != nil {
71+
return err
72+
}
73+
74+
if err := os.WriteFile("/etc/modules-load.d/8021q.conf", []byte("8021q\n"), 0644); err != nil {
75+
return err
76+
}
77+
78+
if err := utils.RunCmd("systemctl", "restart", "NetworkManager"); err != nil {
79+
return err
80+
}
5681

57-
if err := utils.RunCmd("netplan", "apply"); err != nil {
58-
return err
5982
}
6083

6184
return nil
6285
}
6386

64-
func InstallVlan() error {
65-
env := []string{"DEBIAN_FRONTEND=noninteractive"}
87+
func InstallVlan(distro string) error {
88+
switch distro {
89+
case config.RequiredDistroUbuntu:
90+
env := []string{"DEBIAN_FRONTEND=noninteractive"}
6691

67-
if err := utils.RunEnvCmd(env, "apt-get", "update"); err != nil {
68-
return err
69-
}
92+
if err := utils.RunEnvCmd(env, "apt-get", "update", "-y"); err != nil {
93+
return err
94+
}
7095

71-
if err := utils.RunEnvCmd(env, "apt-get", "install", "-y", "vlan"); err != nil {
72-
return err
96+
if err := utils.RunEnvCmd(env, "apt-get", "install", "-y", "vlan"); err != nil {
97+
return err
98+
}
99+
100+
case config.RequiredDistroRHEL:
101+
env := []string{"DNF_YUM_AUTO_YES=1"}
102+
103+
if err := utils.RunEnvCmd(env, "dnf", "update", "-y"); err != nil {
104+
return err
105+
}
73106
}
74107

75108
return nil

installer/network/nginx.go

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,25 @@ type NginxConfig struct {
1313
SharedKey string
1414
}
1515

16-
func InstallNginx() error {
17-
env := []string{"DEBIAN_FRONTEND=noninteractive"}
16+
func InstallNginx(distro string) error {
17+
switch distro {
18+
case config.RequiredDistroUbuntu:
19+
env := []string{"DEBIAN_FRONTEND=noninteractive"}
1820

19-
if err := utils.RunEnvCmd(env, "apt-get", "update"); err != nil {
20-
return err
21-
}
21+
if err := utils.RunEnvCmd(env, "apt-get", "install", "-y", "nginx"); err != nil {
22+
return err
23+
}
24+
case config.RequiredDistroRHEL:
25+
env := []string{"DNF_YUM_AUTO_YES=1"}
2226

23-
if err := utils.RunEnvCmd(env, "apt-get", "install", "-y", "nginx"); err != nil {
24-
return err
27+
if err := utils.RunEnvCmd(env, "dnf", "install", "-y", "nginx"); err != nil {
28+
return err
29+
}
2530
}
26-
2731
return nil
2832
}
2933

30-
func ConfigureNginx(conf *config.Config, stack *docker.StackConfig) error {
34+
func ConfigureNginx(conf *config.Config, stack *docker.StackConfig, distro string) error {
3135
c := NginxConfig{
3236
SharedKey: conf.InternalKey,
3337
}
@@ -37,9 +41,26 @@ func ConfigureNginx(conf *config.Config, stack *docker.StackConfig) error {
3741
return err
3842
}
3943

40-
err = utils.GenerateConfig(c, templates.Proxy, path.Join("/", "etc", "nginx", "sites-available", "default"))
41-
if err != nil {
42-
return err
44+
switch distro {
45+
case config.RequiredDistroUbuntu:
46+
err = utils.GenerateConfig(c, templates.ProxyUbuntu, path.Join("/", "etc", "nginx", "sites-available", "default"))
47+
if err != nil {
48+
return err
49+
}
50+
51+
case config.RequiredDistroRHEL:
52+
err = utils.GenerateConfig(c, templates.ProxyRHEL, path.Join("/", "etc", "nginx", "nginx.conf"))
53+
if err != nil {
54+
return err
55+
}
56+
57+
if err := utils.RunCmd("chcon", "-R", "-t", "httpd_sys_content_t", "/utmstack/cert/"); err != nil {
58+
return err
59+
}
60+
61+
if err := utils.RunCmd("setsebool", "-P", "httpd_read_user_content", "1"); err != nil {
62+
return err
63+
}
4364
}
4465

4566
if err := utils.RunCmd("systemctl", "restart", "nginx"); err != nil {

installer/system/requirements.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
sigar "github.com/cloudfoundry/gosigar"
77
"github.com/shirou/gopsutil/v3/cpu"
88
"github.com/shirou/gopsutil/v3/host"
9+
"github.com/utmstack/UTMStack/installer/config"
910
)
1011

1112
func CheckMem(size uint64) error {
@@ -45,10 +46,14 @@ func CheckCPU(cores int) error {
4546
return nil
4647
}
4748

48-
func CheckDistro(distro string) error {
49+
func CheckDistro() (string, error) {
4950
info, _ := host.Info()
50-
if info.Platform != distro {
51-
return fmt.Errorf("your Linux distribution (%s) is not %s", info.Platform, distro)
51+
52+
distro := info.Platform
53+
if distro != config.RequiredDistroUbuntu && distro != config.RequiredDistroRHEL {
54+
return "", fmt.Errorf("your Linux distribution (%s) is not supported. Supported distributions are: %s, %s",
55+
distro, config.RequiredDistroUbuntu, config.RequiredDistroRHEL)
5256
}
53-
return nil
57+
58+
return distro, nil
5459
}

0 commit comments

Comments
 (0)