mirror of
https://github.com/EnumeratedDev/enit.git
synced 2026-09-16 10:36:12 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb424b0416
|
||
|
|
b64d6984be
|
||
|
|
a3403ca151
|
||
|
|
f263ec06cc
|
@@ -12,7 +12,7 @@ GO ?= $(shell type -a -P go | head -n 1)
|
||||
VERSION ?= $(shell git describe --tags --dirty)
|
||||
|
||||
build:
|
||||
mkdir build
|
||||
mkdir -p build
|
||||
cd src/enit; $(GO) build -ldflags "-w -X main.version=$(VERSION)" -o ../../build/enit enit
|
||||
cd src/esvm; $(GO) build -ldflags "-w -X main.version=$(VERSION)" -o ../../build/esvm esvm
|
||||
cd src/ectl; $(GO) build -ldflags "-w -X main.version=$(VERSION) -X main.sysconfdir=$(SYSCONFDIR) -X main.runstatedir=$(RUNSTATEDIR)" -o ../../build/ectl ectl
|
||||
|
||||
+42
-12
@@ -35,8 +35,12 @@ func handleServiceSubcommand() {
|
||||
setupFlagsAndHelp(currentFlagSet, fmt.Sprintf("ectl %s %s <options> <service>", os.Args[1], subcommand), fmt.Sprintf("%s the specified service", strings.Title(subcommand)), os.Args[3:])
|
||||
|
||||
// Dial esvm socket
|
||||
dialSocket()
|
||||
defer conn.Close()
|
||||
err := dialSocket()
|
||||
if err == nil {
|
||||
defer conn.Close()
|
||||
} else {
|
||||
log.Fatalf("Error: %s", err)
|
||||
}
|
||||
|
||||
startStopRestartService(subcommand)
|
||||
case "enable", "disable":
|
||||
@@ -53,8 +57,12 @@ func handleServiceSubcommand() {
|
||||
setupFlagsAndHelp(currentFlagSet, fmt.Sprintf("ectl %s status <options> <service>", os.Args[1]), "Show service status", os.Args[3:])
|
||||
|
||||
// Dial esvm socket
|
||||
dialSocket()
|
||||
defer conn.Close()
|
||||
err := dialSocket()
|
||||
if err == nil {
|
||||
defer conn.Close()
|
||||
} else {
|
||||
log.Fatalf("Error: %s", err)
|
||||
}
|
||||
|
||||
showServiceStatus()
|
||||
case "list":
|
||||
@@ -64,8 +72,12 @@ func handleServiceSubcommand() {
|
||||
setupFlagsAndHelp(currentFlagSet, fmt.Sprintf("ectl %s reload <options>", os.Args[1]), "List all services", os.Args[3:])
|
||||
|
||||
// Dial esvm socket
|
||||
dialSocket()
|
||||
defer conn.Close()
|
||||
err := dialSocket()
|
||||
if err == nil {
|
||||
defer conn.Close()
|
||||
} else {
|
||||
log.Fatalf("Error: %s", err)
|
||||
}
|
||||
|
||||
listAllServices()
|
||||
case "reload":
|
||||
@@ -75,8 +87,12 @@ func handleServiceSubcommand() {
|
||||
setupFlagsAndHelp(currentFlagSet, fmt.Sprintf("ectl %s reload <options>", os.Args[1]), "Reload all services", os.Args[3:])
|
||||
|
||||
// Dial esvm socket
|
||||
dialSocket()
|
||||
defer conn.Close()
|
||||
err := dialSocket()
|
||||
if err == nil {
|
||||
defer conn.Close()
|
||||
} else {
|
||||
log.Fatalf("Error: %s", err)
|
||||
}
|
||||
|
||||
reloadAllServices()
|
||||
default:
|
||||
@@ -174,6 +190,18 @@ func enableDisableService(subcommand string) {
|
||||
verb = "disabled"
|
||||
}
|
||||
|
||||
// Ensure service exists
|
||||
if stage != 0 {
|
||||
if !serviceExists(service) {
|
||||
if printJson {
|
||||
fmt.Printf("{\"error\":\"Service (%s) does not exist\"}\n", verb)
|
||||
} else {
|
||||
fmt.Printf("Service (%s) does not exist\n", verb)
|
||||
}
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
// Return if service is already enabled
|
||||
if _, enabledStage := isServiceEnabled(service); enabledStage == stage {
|
||||
if printJson {
|
||||
@@ -444,20 +472,22 @@ func setupFlagsAndHelp(flagset *flag.FlagSet, usage, desc string, args []string)
|
||||
flagset.Parse(args)
|
||||
}
|
||||
|
||||
func dialSocket() {
|
||||
func dialSocket() error {
|
||||
if _, err := os.Stat(path.Join(runstatedir, "esvm/esvm.sock")); err != nil {
|
||||
log.Fatalf("Could not find esvm.sock! Error: %s\n", err)
|
||||
return fmt.Errorf("could not find socket! Error: %s", err)
|
||||
}
|
||||
|
||||
var err error
|
||||
conn, err = net.Dial("unix", path.Join(runstatedir, "esvm/esvm.sock"))
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to connect to esvm.sock! Error: %s\n", err)
|
||||
return fmt.Errorf("could not connect to socket! Error: %s", err)
|
||||
}
|
||||
|
||||
if err := conn.SetDeadline(time.Now().Add(30 * time.Second)); err != nil {
|
||||
log.Fatalf("Failed to set write deadline! Error: %s\n", err)
|
||||
return fmt.Errorf("failed to set socket deadline! Error: %s", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func readAllConn(conn net.Conn) ([]byte, error) {
|
||||
|
||||
@@ -9,6 +9,30 @@ import (
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func serviceExists(service string) bool {
|
||||
dirEntries, err := os.ReadDir(path.Join(sysconfdir, "esvm/services"))
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, entry := range dirEntries {
|
||||
var dataMap map[string]any
|
||||
|
||||
data, err := os.ReadFile(path.Join(sysconfdir, "esvm/services", entry.Name()))
|
||||
|
||||
err = yaml.Unmarshal(data, &dataMap)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if name, ok := dataMap["name"]; ok && name == service {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func isServiceEnabled(service string) (bool, int) {
|
||||
for stage, services := range readEnabledServices() {
|
||||
if slices.Contains(services, service) {
|
||||
|
||||
@@ -51,6 +51,8 @@ func main() {
|
||||
mountVirtualFilesystems()
|
||||
// Mount filesystems in fstab
|
||||
mountFilesystems()
|
||||
// Run sysctl
|
||||
initSysctl()
|
||||
// Set hostname
|
||||
setHostname()
|
||||
// Start service manager
|
||||
@@ -220,6 +222,23 @@ func killProcesses() {
|
||||
fmt.Println("Done.")
|
||||
}
|
||||
|
||||
func initSysctl() {
|
||||
// Return if sysctl cannot be found
|
||||
if _, err := os.Stat("/sbin/sysctl"); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Print("Running sysctl...")
|
||||
|
||||
err := exec.Command("/sbin/sysctl", "--system").Run()
|
||||
if err != nil {
|
||||
log.Println("Failed!")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("Done.")
|
||||
}
|
||||
|
||||
func setHostname() {
|
||||
fmt.Print("Setting hostname... ")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user