mirror of
https://github.com/EnumeratedDev/enit.git
synced 2026-09-16 02:26:11 +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)
|
VERSION ?= $(shell git describe --tags --dirty)
|
||||||
|
|
||||||
build:
|
build:
|
||||||
mkdir build
|
mkdir -p build
|
||||||
cd src/enit; $(GO) build -ldflags "-w -X main.version=$(VERSION)" -o ../../build/enit enit
|
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/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
|
cd src/ectl; $(GO) build -ldflags "-w -X main.version=$(VERSION) -X main.sysconfdir=$(SYSCONFDIR) -X main.runstatedir=$(RUNSTATEDIR)" -o ../../build/ectl ectl
|
||||||
|
|||||||
@@ -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:])
|
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
|
// Dial esvm socket
|
||||||
dialSocket()
|
err := dialSocket()
|
||||||
|
if err == nil {
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
} else {
|
||||||
|
log.Fatalf("Error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
startStopRestartService(subcommand)
|
startStopRestartService(subcommand)
|
||||||
case "enable", "disable":
|
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:])
|
setupFlagsAndHelp(currentFlagSet, fmt.Sprintf("ectl %s status <options> <service>", os.Args[1]), "Show service status", os.Args[3:])
|
||||||
|
|
||||||
// Dial esvm socket
|
// Dial esvm socket
|
||||||
dialSocket()
|
err := dialSocket()
|
||||||
|
if err == nil {
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
} else {
|
||||||
|
log.Fatalf("Error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
showServiceStatus()
|
showServiceStatus()
|
||||||
case "list":
|
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:])
|
setupFlagsAndHelp(currentFlagSet, fmt.Sprintf("ectl %s reload <options>", os.Args[1]), "List all services", os.Args[3:])
|
||||||
|
|
||||||
// Dial esvm socket
|
// Dial esvm socket
|
||||||
dialSocket()
|
err := dialSocket()
|
||||||
|
if err == nil {
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
} else {
|
||||||
|
log.Fatalf("Error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
listAllServices()
|
listAllServices()
|
||||||
case "reload":
|
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:])
|
setupFlagsAndHelp(currentFlagSet, fmt.Sprintf("ectl %s reload <options>", os.Args[1]), "Reload all services", os.Args[3:])
|
||||||
|
|
||||||
// Dial esvm socket
|
// Dial esvm socket
|
||||||
dialSocket()
|
err := dialSocket()
|
||||||
|
if err == nil {
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
} else {
|
||||||
|
log.Fatalf("Error: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
reloadAllServices()
|
reloadAllServices()
|
||||||
default:
|
default:
|
||||||
@@ -174,6 +190,18 @@ func enableDisableService(subcommand string) {
|
|||||||
verb = "disabled"
|
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
|
// Return if service is already enabled
|
||||||
if _, enabledStage := isServiceEnabled(service); enabledStage == stage {
|
if _, enabledStage := isServiceEnabled(service); enabledStage == stage {
|
||||||
if printJson {
|
if printJson {
|
||||||
@@ -444,20 +472,22 @@ func setupFlagsAndHelp(flagset *flag.FlagSet, usage, desc string, args []string)
|
|||||||
flagset.Parse(args)
|
flagset.Parse(args)
|
||||||
}
|
}
|
||||||
|
|
||||||
func dialSocket() {
|
func dialSocket() error {
|
||||||
if _, err := os.Stat(path.Join(runstatedir, "esvm/esvm.sock")); err != nil {
|
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
|
var err error
|
||||||
conn, err = net.Dial("unix", path.Join(runstatedir, "esvm/esvm.sock"))
|
conn, err = net.Dial("unix", path.Join(runstatedir, "esvm/esvm.sock"))
|
||||||
if err != nil {
|
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 {
|
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) {
|
func readAllConn(conn net.Conn) ([]byte, error) {
|
||||||
|
|||||||
@@ -9,6 +9,30 @@ import (
|
|||||||
"gopkg.in/yaml.v3"
|
"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) {
|
func isServiceEnabled(service string) (bool, int) {
|
||||||
for stage, services := range readEnabledServices() {
|
for stage, services := range readEnabledServices() {
|
||||||
if slices.Contains(services, service) {
|
if slices.Contains(services, service) {
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ func main() {
|
|||||||
mountVirtualFilesystems()
|
mountVirtualFilesystems()
|
||||||
// Mount filesystems in fstab
|
// Mount filesystems in fstab
|
||||||
mountFilesystems()
|
mountFilesystems()
|
||||||
|
// Run sysctl
|
||||||
|
initSysctl()
|
||||||
// Set hostname
|
// Set hostname
|
||||||
setHostname()
|
setHostname()
|
||||||
// Start service manager
|
// Start service manager
|
||||||
@@ -220,6 +222,23 @@ func killProcesses() {
|
|||||||
fmt.Println("Done.")
|
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() {
|
func setHostname() {
|
||||||
fmt.Print("Setting hostname... ")
|
fmt.Print("Setting hostname... ")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user