mirror of https://github.com/jetkvm/kvm.git
refactor(native): move platform-specific code to different files
This commit is contained in:
parent
daa7185883
commit
db2ce258ae
28
native.go
28
native.go
|
@ -8,9 +8,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/jetkvm/kvm/resource"
|
"github.com/jetkvm/kvm/resource"
|
||||||
|
@ -262,30 +260,8 @@ func ExtractAndRunNativeBin() error {
|
||||||
return fmt.Errorf("failed to make binary executable: %w", err)
|
return fmt.Errorf("failed to make binary executable: %w", err)
|
||||||
}
|
}
|
||||||
// Run the binary in the background
|
// Run the binary in the background
|
||||||
cmd := exec.Command(binaryPath)
|
cmd, err := startNativeBinary(binaryPath)
|
||||||
|
if err != nil {
|
||||||
nativeOutputLock := sync.Mutex{}
|
|
||||||
nativeStdout := &nativeOutput{
|
|
||||||
mu: &nativeOutputLock,
|
|
||||||
logger: nativeLogger.Info().Str("pipe", "stdout"),
|
|
||||||
}
|
|
||||||
nativeStderr := &nativeOutput{
|
|
||||||
mu: &nativeOutputLock,
|
|
||||||
logger: nativeLogger.Info().Str("pipe", "stderr"),
|
|
||||||
}
|
|
||||||
|
|
||||||
// Redirect stdout and stderr to the current process
|
|
||||||
cmd.Stdout = nativeStdout
|
|
||||||
cmd.Stderr = nativeStderr
|
|
||||||
|
|
||||||
// Set the process group ID so we can kill the process and its children when this process exits
|
|
||||||
cmd.SysProcAttr = &syscall.SysProcAttr{
|
|
||||||
Setpgid: true,
|
|
||||||
Pdeathsig: syscall.SIGKILL,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start the command
|
|
||||||
if err := cmd.Start(); err != nil {
|
|
||||||
return fmt.Errorf("failed to start binary: %w", err)
|
return fmt.Errorf("failed to start binary: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
//go:build linux
|
||||||
|
|
||||||
|
package kvm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
"sync"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
func startNativeBinary(binaryPath string) (*exec.Cmd, error) {
|
||||||
|
// Run the binary in the background
|
||||||
|
cmd := exec.Command(binaryPath)
|
||||||
|
|
||||||
|
nativeOutputLock := sync.Mutex{}
|
||||||
|
nativeStdout := &nativeOutput{
|
||||||
|
mu: &nativeOutputLock,
|
||||||
|
logger: nativeLogger.Info().Str("pipe", "stdout"),
|
||||||
|
}
|
||||||
|
nativeStderr := &nativeOutput{
|
||||||
|
mu: &nativeOutputLock,
|
||||||
|
logger: nativeLogger.Info().Str("pipe", "stderr"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redirect stdout and stderr to the current process
|
||||||
|
cmd.Stdout = nativeStdout
|
||||||
|
cmd.Stderr = nativeStderr
|
||||||
|
|
||||||
|
// Set the process group ID so we can kill the process and its children when this process exits
|
||||||
|
cmd.SysProcAttr = &syscall.SysProcAttr{
|
||||||
|
Setpgid: true,
|
||||||
|
Pdeathsig: syscall.SIGKILL,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start the command
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to start binary: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cmd, nil
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
//go:build !linux
|
||||||
|
|
||||||
|
package kvm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
)
|
||||||
|
|
||||||
|
func startNativeBinary(binaryPath string) (*exec.Cmd, error) {
|
||||||
|
return nil, fmt.Errorf("not supported")
|
||||||
|
}
|
Loading…
Reference in New Issue