mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-11-07 00:05:14 +00:00
* feat(vm): enable community virtual machines and migrate xpack data * fix(vm): stop ISO download polling on failure or cancellation * fix(vm): respect deleteFile when deleting failed ISO imports
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package helper
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/1Panel-dev/1Panel/agent/utils/vm/protocol"
|
|
)
|
|
|
|
func EnsureEmbeddedHelper() (string, bool, error) {
|
|
bin, ok := embeddedHelperBytes()
|
|
if !ok {
|
|
return "", false, nil
|
|
}
|
|
target, err := embeddedHelperPath()
|
|
if err != nil {
|
|
return "", true, err
|
|
}
|
|
if sameFileContent(target, bin) {
|
|
if err := os.Chmod(target, 0755); err != nil {
|
|
return "", true, err
|
|
}
|
|
return target, true, nil
|
|
}
|
|
if err := os.MkdirAll(filepath.Dir(target), 0755); err != nil {
|
|
return "", true, err
|
|
}
|
|
tmp := target + ".tmp"
|
|
if err := os.WriteFile(tmp, bin, 0755); err != nil {
|
|
return "", true, err
|
|
}
|
|
if err := os.Rename(tmp, target); err != nil {
|
|
_ = os.Remove(tmp)
|
|
return "", true, err
|
|
}
|
|
if err := os.Chmod(target, 0755); err != nil {
|
|
return "", true, err
|
|
}
|
|
return target, true, nil
|
|
}
|
|
|
|
func embeddedHelperPath() (string, error) {
|
|
self, err := os.Executable()
|
|
if err != nil {
|
|
return "", fmt.Errorf("load executable path: %w", err)
|
|
}
|
|
return filepath.Join(filepath.Dir(self), protocol.HelperBinary), nil
|
|
}
|
|
|
|
func sameFileContent(path string, expected []byte) bool {
|
|
current, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return sha256.Sum256(current) == sha256.Sum256(expected)
|
|
}
|