mirror of https://github.com/gogs/gogs.git
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 buildspull/4633/head
parent
f67d6bbca3
commit
5a88546a80
|
@ -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/"]
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
go build -ldflags "-w -s" resin-xbuild.go
|
Binary file not shown.
Binary file not shown.
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue