diff options
author | Julian Xhokaxhiu <julianxhokaxhiu@users.noreply.github.com> | 2017-07-15 00:04:19 +0200 |
---|---|---|
committer | 无闻 <u@gogs.io> | 2017-07-14 18:04:19 -0400 |
commit | 5a88546a8040c2f56b9cd924b2d4d5b180a63159 (patch) | |
tree | cf88b6cc0441d10b7b53944d4f8d22eb44bec4b1 | |
parent | f67d6bbca3bbba7a0614b7f9b8ab3c24d4a318aa (diff) |
docker: enable Automated builds for rpi (#4431)
* Enable Automated builds for rpi
* Rename the file to fit only for Docker Hub
* Update the binary to v2.9.0+resin1
* Restore default status
* Commit as new file
In order to avoid breaking native builds
-rw-r--r-- | Dockerfile.rpihub | 44 | ||||
-rw-r--r-- | docker/armhf/build.sh | 3 | ||||
-rwxr-xr-x | docker/armhf/qemu-arm-static | bin | 0 -> 3370216 bytes | |||
-rwxr-xr-x | docker/armhf/resin-xbuild | bin | 0 -> 1299072 bytes | |||
-rw-r--r-- | docker/armhf/resin-xbuild.go | 66 |
5 files changed, 113 insertions, 0 deletions
diff --git a/Dockerfile.rpihub b/Dockerfile.rpihub new file mode 100644 index 00000000..d20b1e9a --- /dev/null +++ b/Dockerfile.rpihub @@ -0,0 +1,44 @@ +FROM armhf/alpine:3.5 + +ENV GOGS_CUSTOM /data/gogs +ENV QEMU_EXECVE 1 + +# For cross compile on dockerhub +################################ + +COPY ./docker/armhf/qemu-arm-static /usr/bin/ +COPY ./docker/armhf/resin-xbuild /usr/bin/ + +RUN [ "/usr/bin/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" ] + +RUN [ "cross-build-start" ] + +# Prepare the container +####################### + +# Install system utils & Gogs runtime dependencies +ADD https://github.com/tianon/gosu/releases/download/1.9/gosu-armhf /usr/sbin/gosu +RUN chmod +x /usr/sbin/gosu \ + && apk --no-cache --no-progress add ca-certificates bash git linux-pam s6 curl openssh socat tzdata + +COPY . /app/gogs/build +WORKDIR /app/gogs/build + +RUN ./docker/build-go.sh \ + && ./docker/build.sh \ + && ./docker/finalize.sh + +# Configure LibC Name Service +COPY docker/nsswitch.conf /etc/nsswitch.conf + +# For cross compile on dockerhub +################################ + +RUN [ "cross-build-end" ] + +# Configure Docker Container +############################ +VOLUME ["/data"] +EXPOSE 22 3000 +ENTRYPOINT ["/app/gogs/docker/start.sh"] +CMD ["/bin/s6-svscan", "/app/gogs/docker/s6/"] diff --git a/docker/armhf/build.sh b/docker/armhf/build.sh new file mode 100644 index 00000000..d864f4b3 --- /dev/null +++ b/docker/armhf/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +go build -ldflags "-w -s" resin-xbuild.go diff --git a/docker/armhf/qemu-arm-static b/docker/armhf/qemu-arm-static Binary files differnew file mode 100755 index 00000000..bf5897b1 --- /dev/null +++ b/docker/armhf/qemu-arm-static diff --git a/docker/armhf/resin-xbuild b/docker/armhf/resin-xbuild Binary files differnew file mode 100755 index 00000000..5471f249 --- /dev/null +++ b/docker/armhf/resin-xbuild diff --git a/docker/armhf/resin-xbuild.go b/docker/armhf/resin-xbuild.go new file mode 100644 index 00000000..e0fceddf --- /dev/null +++ b/docker/armhf/resin-xbuild.go @@ -0,0 +1,66 @@ +package main + +import ( + "log" + "os" + "os/exec" + "syscall" +) + +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() error { + 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 + return cmd.Run() +} + +func main() { + switch os.Args[0] { + case "cross-build-start": + crossBuildStart() + case "cross-build-end": + crossBuildEnd() + case "/bin/sh": + code := 0 + crossBuildEnd() + + if err := runShell(); err != nil { + code = 1 + if exiterr, ok := err.(*exec.ExitError); ok { + if status, ok := exiterr.Sys().(syscall.WaitStatus); ok { + code = status.ExitStatus() + } + } + } + + crossBuildStart() + + // Hack to bypass apk issues with triggering + code = 0 + + os.Exit(code) + } +}
\ No newline at end of file |