mirror of https://github.com/jetkvm/kvm.git
chore: try to set initial virtual media state from sysfs
This commit is contained in:
parent
3f8b30cf19
commit
023c6e29b0
5
main.go
5
main.go
|
@ -77,6 +77,11 @@ func Main() {
|
||||||
|
|
||||||
initUsbGadget()
|
initUsbGadget()
|
||||||
|
|
||||||
|
err = setInitialVirtualMediaState()
|
||||||
|
if err != nil {
|
||||||
|
logger.Warn().Err(err).Msg("failed to set initial virtual media state")
|
||||||
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
time.Sleep(15 * time.Minute)
|
time.Sleep(15 * time.Minute)
|
||||||
for {
|
for {
|
||||||
|
|
|
@ -133,7 +133,7 @@ func getMassStorageCDROMEnabled() (bool, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("failed to get mass storage path: %w", err)
|
return false, fmt.Errorf("failed to get mass storage path: %w", err)
|
||||||
}
|
}
|
||||||
data, err := os.ReadFile(path.Join(massStorageFunctionPath, "lun.0", "cdrom"))
|
data, err := os.ReadFile(path.Join(massStorageFunctionPath, "cdrom"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("failed to read cdrom mode: %w", err)
|
return false, fmt.Errorf("failed to read cdrom mode: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -214,23 +214,47 @@ func getInitialVirtualMediaState() (*VirtualMediaState, error) {
|
||||||
return nil, fmt.Errorf("failed to get mass storage image: %w", err)
|
return nil, fmt.Errorf("failed to get mass storage image: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
source := Storage
|
initialState := &VirtualMediaState{
|
||||||
// TODO: check if it's WebRTC or HTTP
|
Source: Storage,
|
||||||
if diskPath == "/dev/nbd0" {
|
Mode: Disk,
|
||||||
source = HTTP
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mode := Disk
|
|
||||||
if cdromEnabled {
|
if cdromEnabled {
|
||||||
mode = CDROM
|
initialState.Mode = CDROM
|
||||||
}
|
}
|
||||||
|
|
||||||
return &VirtualMediaState{
|
// TODO: check if it's WebRTC or HTTP
|
||||||
Source: source,
|
if diskPath == "" {
|
||||||
Mode: mode,
|
return nil, nil
|
||||||
URL: "",
|
} else if diskPath == "/dev/nbd0" {
|
||||||
Size: 0,
|
initialState.Source = HTTP
|
||||||
}, nil
|
initialState.URL = "/"
|
||||||
|
initialState.Size = 1
|
||||||
|
} else {
|
||||||
|
initialState.Filename = filepath.Base(diskPath)
|
||||||
|
// get size from file
|
||||||
|
logger.Info().Str("diskPath", diskPath).Msg("getting file size")
|
||||||
|
info, err := os.Stat(diskPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to get file info: %w", err)
|
||||||
|
}
|
||||||
|
initialState.Size = info.Size()
|
||||||
|
}
|
||||||
|
|
||||||
|
return initialState, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func setInitialVirtualMediaState() error {
|
||||||
|
virtualMediaStateMutex.Lock()
|
||||||
|
defer virtualMediaStateMutex.Unlock()
|
||||||
|
initialState, err := getInitialVirtualMediaState()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to get initial virtual media state: %w", err)
|
||||||
|
}
|
||||||
|
currentVirtualMediaState = initialState
|
||||||
|
|
||||||
|
logger.Info().Interface("initial_virtual_media_state", initialState).Msg("initial virtual media state set")
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func rpcMountWithHTTP(url string, mode VirtualMediaMode) error {
|
func rpcMountWithHTTP(url string, mode VirtualMediaMode) error {
|
||||||
|
|
Loading…
Reference in New Issue