提交 0969505e 作者: Jeromy Johnson 提交者: GitHub

Merge pull request #3665 from ipfs/fix/repo-migration-musl

migrations: make libc check more resilient
...@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论