diff --git a/host/host_linux.go b/host/host_linux.go index 4a21c3841..940415c9c 100644 --- a/host/host_linux.go +++ b/host/host_linux.go @@ -179,26 +179,26 @@ func PlatformInformationWithContext(ctx context.Context) (platform string, famil lsb = &lsbStruct{} } - if common.PathExists(common.HostEtc("oracle-release")) { + if common.PathExistsWithContents(common.HostEtc("oracle-release")) { platform = "oracle" contents, err := common.ReadLines(common.HostEtc("oracle-release")) if err == nil { version = getRedhatishVersion(contents) } - } else if common.PathExists(common.HostEtc("enterprise-release")) { + } else if common.PathExistsWithContents(common.HostEtc("enterprise-release")) { platform = "oracle" contents, err := common.ReadLines(common.HostEtc("enterprise-release")) if err == nil { version = getRedhatishVersion(contents) } - } else if common.PathExists(common.HostEtc("slackware-version")) { + } else if common.PathExistsWithContents(common.HostEtc("slackware-version")) { platform = "slackware" contents, err := common.ReadLines(common.HostEtc("slackware-version")) if err == nil { version = getSlackwareVersion(contents) } - } else if common.PathExists(common.HostEtc("debian_version")) { + } else if common.PathExistsWithContents(common.HostEtc("debian_version")) { if lsb.ID == "Ubuntu" { platform = "ubuntu" version = lsb.Release @@ -206,7 +206,7 @@ func PlatformInformationWithContext(ctx context.Context) (platform string, famil platform = "linuxmint" version = lsb.Release } else { - if common.PathExists("/usr/bin/raspi-config") { + if common.PathExistsWithContents("/usr/bin/raspi-config") { platform = "raspbian" } else { platform = "debian" @@ -279,6 +279,8 @@ func PlatformInformationWithContext(ctx context.Context) (platform string, famil version = lsb.Release } + platform = strings.Trim(platform, `"`) + switch platform { case "debian", "ubuntu", "linuxmint", "raspbian": family = "debian" diff --git a/internal/common/common.go b/internal/common/common.go index 4f6df9a3a..adc4922bd 100644 --- a/internal/common/common.go +++ b/internal/common/common.go @@ -311,6 +311,15 @@ func PathExists(filename string) bool { return false } +// PathExistsWithContents returns the filename exists and it is not empty +func PathExistsWithContents(filename string) bool { + info, err := os.Stat(filename) + if err != nil { + return false + } + return info.Size() > 4 // at least 4 bytes +} + // GetEnv retrieves the environment variable key. If it does not exist it returns the default. func GetEnv(key string, dfault string, combineWith ...string) string { value := os.Getenv(key) diff --git a/internal/common/common_test.go b/internal/common/common_test.go index 93f33ec39..27bcfac06 100644 --- a/internal/common/common_test.go +++ b/internal/common/common_test.go @@ -102,6 +102,25 @@ func TestPathExists(t *testing.T) { } } +func TestPathExistsWithContents(t *testing.T) { + if !PathExistsWithContents("common_test.go") { + t.Error("exists but return not exists") + } + if PathExistsWithContents("should_not_exists.go") { + t.Error("not exists but return exists") + } + + f, err := os.CreateTemp("", "empty_test.txt") + if err != nil { + t.Errorf("CreateTemp failed, %s", err) + } + defer os.Remove(f.Name()) // clean up + + if PathExistsWithContents(f.Name()) { + t.Error("exists but no content file return true") + } +} + func TestHostEtc(t *testing.T) { if runtime.GOOS == "windows" { t.Skip("windows doesn't have etc")