diff --git a/Dockerfile b/Dockerfile index 4148540..954eb14 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,7 @@ FROM resin/armv7hf-debian:jessie ENV QEMU_EXECVE 1 + COPY . /usr/bin + +RUN [ "qemu-arm-static", "/bin/sh", "-c", "ln -s resin-xbuild /usr/bin/cross-build-start; ln -s resin-xbuild /usr/bin/cross-build-end; ln /bin/sh /bin/sh.real" ] diff --git a/cross-build-end b/cross-build-end deleted file mode 100755 index e33bff5..0000000 --- a/cross-build-end +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/qemu-arm-static /bin/sh.real - -mv /bin/sh.real /bin/sh diff --git a/cross-build-start b/cross-build-start deleted file mode 100755 index 8a09176..0000000 --- a/cross-build-start +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/qemu-arm-static /bin/sh - -mv /bin/sh /bin/sh.real -cp /usr/bin/sh-shim /bin/sh diff --git a/resin-xbuild b/resin-xbuild new file mode 100755 index 0000000..9bda476 Binary files /dev/null and b/resin-xbuild differ diff --git a/resin-xbuild.go b/resin-xbuild.go new file mode 100644 index 0000000..5ff3ff4 --- /dev/null +++ b/resin-xbuild.go @@ -0,0 +1,50 @@ +package main + +import ( + "log" + "os" + "os/exec" +) + +func crossBuildStart() { + err := os.Remove("/bin/sh") + if err != nil { + log.Fatal(err) + } + err = os.Link("/usr/bin/resin-xbuild", "/bin/sh") + if err != nil { + log.Fatal(err) + } +} + +func crossBuildEnd() { + err := os.Remove("/bin/sh") + if err != nil { + log.Fatal(err) + } + err = os.Link("/bin/sh.real", "/bin/sh") + if err != nil { + log.Fatal(err) + } +} + +func runShell() { + cmd := exec.Command("/usr/bin/qemu-arm-static", append([]string{"-0", "/bin/sh", "/bin/sh"}, os.Args[1:]...)...) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.Run() +} + +func main() { + switch os.Args[0] { + case "cross-build-start": + crossBuildStart() + case "cross-build-end": + crossBuildEnd() + case "/bin/sh": + crossBuildEnd() + runShell() + crossBuildStart() + } +} diff --git a/sh-shim b/sh-shim deleted file mode 100755 index fdb1afc..0000000 --- a/sh-shim +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/qemu-arm-static /bin/sh.real - -set -o errexit - -cp /bin/sh.real /bin/sh - -/bin/sh "$@" - -cp /usr/bin/sh-shim /bin/sh