kleinCommand/services/linuxServices.go

52 lines
1019 B
Go
Raw Normal View History

2025-07-20 00:47:03 +02:00
//go:build linux
package services
2025-07-20 16:22:46 +02:00
//go:generate go build -o binaries/ ./example
2025-07-20 18:46:55 +02:00
//go:generate go build -o binaries/ ./parrot
2025-07-20 00:47:03 +02:00
2025-07-20 14:06:12 +02:00
import (
_ "embed"
2025-07-20 19:31:37 +02:00
"errors"
"github.com/DariusKlein/kleinCommand/common"
2025-07-20 14:06:12 +02:00
"os"
"os/exec"
"syscall"
)
2025-07-20 00:47:03 +02:00
2025-07-20 16:22:46 +02:00
//go:embed binaries/exampleService
2025-07-20 00:47:03 +02:00
var exampleService []byte
2025-07-20 12:24:51 +02:00
2025-07-20 18:46:55 +02:00
//go:embed binaries/parrotService
var parrotService []byte
2025-07-20 12:24:51 +02:00
func runService(name string, file []byte) error {
2025-07-20 19:31:37 +02:00
// check for existing socket
if common.FileExists(common.GetSocketPath(name)) {
return errors.New("File " + common.GetSocketPath(name) + " already exists.")
}
2025-07-20 12:24:51 +02:00
tempFile, err := os.CreateTemp("", name)
if err != nil {
return err
}
if _, err = tempFile.Write(file); err != nil {
tempFile.Close()
return err
}
if err = tempFile.Close(); err != nil {
return err
}
if err = os.Chmod(tempFile.Name(), 0777); err != nil {
return err
}
cmd := exec.Command(tempFile.Name())
cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true}
if err = cmd.Start(); err != nil {
return err
}
return nil
}