mirror of https://github.com/rancher/wins.git
68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package paths
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func GetBinaryPath(binaryName string) (string, error) {
|
|
// find service abs path
|
|
p, err := exec.LookPath(binaryName)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
p, err = filepath.Abs(p)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
// detect service is file or not
|
|
fi, err := os.Stat(p)
|
|
if err == nil {
|
|
if !fi.IsDir() {
|
|
return p, nil
|
|
}
|
|
err = errors.Errorf("%s is directory", p)
|
|
}
|
|
if filepath.Ext(p) == "" {
|
|
p += ".exe"
|
|
fi, err := os.Stat(p)
|
|
if err == nil {
|
|
if !fi.IsDir() {
|
|
return p, nil
|
|
}
|
|
return "", errors.Errorf("%s is directory", p)
|
|
}
|
|
}
|
|
|
|
return "", err
|
|
}
|
|
|
|
func GetBinarySHA1Hash(binaryName string) (string, error) {
|
|
path, err := GetBinaryPath(binaryName)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
actualChecksum, err := GetFileSHA1Hash(path)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return actualChecksum, nil
|
|
}
|
|
|
|
func EnsureBinary(binaryName string, expectedChecksum string) error {
|
|
actualChecksum, err := GetBinarySHA1Hash(binaryName)
|
|
if err != nil {
|
|
return errors.Wrap(err, "could not get checksum")
|
|
}
|
|
if expectedChecksum != actualChecksum {
|
|
return errors.Errorf("could not match (expect checksum %q, but get %q)", expectedChecksum, actualChecksum)
|
|
}
|
|
|
|
return nil
|
|
}
|