mirror of https://github.com/gogits/gogs.git
Browse Source
* 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
Julian Xhokaxhiu
8 years ago
committed by
无闻
5 changed files with 113 additions and 0 deletions
@ -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