mirror of https://github.com/jetkvm/kvm.git
93 lines
2.2 KiB
Go
93 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
|
|
"github.com/jetkvm/kvm/internal/config"
|
|
"github.com/jetkvm/kvm/internal/hardware"
|
|
"github.com/jetkvm/kvm/internal/logging"
|
|
"github.com/jetkvm/kvm/internal/network"
|
|
"github.com/jetkvm/kvm/internal/server"
|
|
|
|
"github.com/gwatts/rootcerts"
|
|
)
|
|
|
|
var appCtx context.Context
|
|
|
|
func main() {
|
|
var cancel context.CancelFunc
|
|
appCtx, cancel = context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
logging.Logger.Info("Starting JetKvm")
|
|
go hardware.RunWatchdog()
|
|
go network.ConfirmCurrentSystem()
|
|
|
|
http.DefaultClient.Timeout = 1 * time.Minute
|
|
cfg := config.LoadConfig()
|
|
logging.Logger.Debug("config loaded")
|
|
|
|
err := rootcerts.UpdateDefaultTransport()
|
|
if err != nil {
|
|
logging.Logger.Errorf("failed to load CA certs: %v", err)
|
|
}
|
|
|
|
go network.TimeSyncLoop()
|
|
|
|
hardware.StartNativeCtrlSocketServer()
|
|
hardware.StartNativeVideoSocketServer()
|
|
|
|
go func() {
|
|
err = hardware.ExtractAndRunNativeBin()
|
|
if err != nil {
|
|
logging.Logger.Errorf("failed to extract and run native bin: %v", err)
|
|
//TODO: prepare an error message screen buffer to show on kvm screen
|
|
}
|
|
}()
|
|
|
|
go func() {
|
|
time.Sleep(15 * time.Minute)
|
|
for {
|
|
logging.Logger.Debugf("UPDATING - Auto update enabled: %v", cfg.AutoUpdateEnabled)
|
|
if cfg.AutoUpdateEnabled == false {
|
|
return
|
|
}
|
|
if server.CurrentSession != nil {
|
|
logging.Logger.Debugf("skipping update since a session is active")
|
|
time.Sleep(1 * time.Minute)
|
|
continue
|
|
}
|
|
includePreRelease := cfg.IncludePreRelease
|
|
err = network.TryUpdate(context.Background(), hardware.GetDeviceID(), includePreRelease)
|
|
if err != nil {
|
|
logging.Logger.Errorf("failed to auto update: %v", err)
|
|
}
|
|
time.Sleep(1 * time.Hour)
|
|
}
|
|
}()
|
|
//go RunFuseServer()
|
|
go server.RunWebServer()
|
|
go server.RunWebsocketClient()
|
|
sigs := make(chan os.Signal, 1)
|
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
|
<-sigs
|
|
log.Println("JetKVM Shutting Down")
|
|
//if fuseServer != nil {
|
|
// err := setMassStorageImage(" ")
|
|
// if err != nil {
|
|
// log.Printf("Failed to unmount mass storage image: %v", err)
|
|
// }
|
|
// err = fuseServer.Unmount()
|
|
// if err != nil {
|
|
// log.Printf("Failed to unmount fuse: %v", err)
|
|
// }
|
|
|
|
// os.Exit(0)
|
|
}
|