提交 150fe9de 作者: Lars Gierth

migrations: make libc check more resilient

Fixes #3661.

There are a couple of cases in which ldd won't operate on an executable,
for example when the executable is statically linked.

This patch makes the call to ldd to ldd more resilient against errors,
and looks for the system libc, instead of the libc go-ipfs was linked against.

License: MIT
Signed-off-by: 's avatarLars Gierth <larsg@systemli.org>
上级 5c2cbb33
...@@ -128,7 +128,7 @@ func migrationsVersion(bin string) (int, error) { ...@@ -128,7 +128,7 @@ func migrationsVersion(bin string) (int, error) {
vs := strings.Trim(string(out), " \n\t") vs := strings.Trim(string(out), " \n\t")
vn, err := strconv.Atoi(vs) vn, err := strconv.Atoi(vs)
if err != nil { if err != nil {
return 0, fmt.Errorf("migrations binary version check did not return a number") return 0, fmt.Errorf("migrations binary version check did not return a number: %s", err)
} }
return vn, nil return vn, nil
...@@ -253,17 +253,19 @@ func osWithVariant() (string, error) { ...@@ -253,17 +253,19 @@ func osWithVariant() (string, error) {
return "", fmt.Errorf("failed to resolve go-ipfs: %s", err) return "", fmt.Errorf("failed to resolve go-ipfs: %s", err)
} }
cmd := exec.Command("ldd", bin) // ldd outputs the system's kind of libc
// - on standard ubuntu: ldd (Ubuntu GLIBC 2.23-0ubuntu5) 2.23
// - on alpine: musl libc (x86_64)
cmd := exec.Command("ldd --version", bin)
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
cmd.Stdout = buf cmd.Stdout = buf
err = cmd.Run() // we throw away the error, this code path must not fail because of
if err != nil { // a silly issue such as missing/broken ldd. we'll assume glibc in that case.
return "", fmt.Errorf("failed to run ldd: %s", err) _ = cmd.Run()
}
scan := bufio.NewScanner(buf) scan := bufio.NewScanner(buf)
for scan.Scan() { for scan.Scan() {
if strings.Contains(scan.Text(), "libc") && strings.Contains(scan.Text(), "musl") { if strings.Contains(scan.Text(), "musl") {
return "linux-musl", nil return "linux-musl", nil
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论