如何在GOlang程序中检测linux分发?

时间:2017-02-22 08:56:49

标签: linux ubuntu go rhel oracle-osm

我想编写独立的Linux发行版Golang代码。我需要检测哪个linux发行版并需要在程序中运行分发特定命令。像Ubuntu的dpkg和RHEL的rpm -q。

3 个答案:

答案 0 :(得分:1)

您可以使用exec.Cmd运行lsb_release -auname -a并解析输出以找出分布。

Reference

答案 1 :(得分:0)

系统上可能包含也可能不包含包含可执行文件lsb_release的程序包。我已经看到了这种情况(这可能性不大)。

您可以使用文件/etc/os-release,该文件可以通过库go-ini轻松解析。参见示例:

import (
    "fmt"
    "github.com/go-ini/ini"
)

func ReadOSRelease(configfile string) map[string]string {
    cfg, err := ini.Load(configfile)
    if err != nil {
        log.Fatal("Fail to read file: ", err)
    }

    ConfigParams := make(map[string]string)
    ConfigParams["ID"] = cfg.Section("").Key("ID").String()

    return ConfigParams
}

OSInfo := ReadOSRelease("/etc/os-release")
OSRelease := OSInfo["ID"]

fmt.Print(OSRelease)

答案 2 :(得分:0)

如果要使用Go模块,则有Sysinfo

它收集所有系统信息(没有任何依赖性),并为您提供JSON,其中包括您要查找的内容。这是该数据的一个片段:

update_post_meta