Skip to content

Commit

Permalink
Merge pull request #3665 from ipfs/fix/repo-migration-musl
Browse files Browse the repository at this point in the history
migrations: make libc check more resilient
  • Loading branch information
whyrusleeping authored Feb 9, 2017
2 parents 5c2cbb3 + 150fe9d commit 0969505
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions repo/fsrepo/migrations/migrations.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ func migrationsVersion(bin string) (int, error) {
vs := strings.Trim(string(out), " \n\t")
vn, err := strconv.Atoi(vs)
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
Expand Down Expand Up @@ -253,17 +253,19 @@ func osWithVariant() (string, error) {
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)
cmd.Stdout = buf
err = cmd.Run()
if err != nil {
return "", fmt.Errorf("failed to run ldd: %s", err)
}
// we throw away the error, this code path must not fail because of
// a silly issue such as missing/broken ldd. we'll assume glibc in that case.
_ = cmd.Run()

scan := bufio.NewScanner(buf)
for scan.Scan() {
if strings.Contains(scan.Text(), "libc") && strings.Contains(scan.Text(), "musl") {
if strings.Contains(scan.Text(), "musl") {
return "linux-musl", nil
}
}
Expand Down

0 comments on commit 0969505

Please sign in to comment.