Build
Build go judge
Build by your own docker build -t go-judge -f Dockerfile.exec .
For cgroup v1, the go-judge need root privilege to create cgroup. Either creates sub-directory /sys/fs/cgroup/cpuacct/go_judge, /sys/fs/cgroup/memory/go_judge, /sys/fs/cgroup/pids/go_judge and make execution user readable or use sudo to run it.
For cgroup v2, systemd dbus will be used to create a transient scope for cgroup integration.
Build Shared object
Build container init cinit:
go build -o cinit ./cmd/go-judge-init
Build go_judge.so:
go build -buildmode=c-shared -o go_judge.so ./cmd/go-judge-ffi/
For example, in JavaScript, run with ffi-napi (seems node 14 is not supported yet):
Build gRPC Proxy
Build go build ./cmd/go-judge-proxy
Run ./go-judge-proxy, connect to gRPC endpoint expose as a REST endpoint.
Build go judge Shell
Build go build ./cmd/go-judge-shell
Run ./go-judge-shell, connect to gRPC endpoint with interactive shell.
Build Docker
Create Dockerfile with the following content go-judge repository and run docker build -t go-judge ..
FROM golang:latest AS build
WORKDIR /go/judge
COPY go.mod go.sum /go/judge/
RUN go mod download -x
COPY ./ /go/judge
RUN go generate ./cmd/go-judge/version \
&& CGO_ENABLE=0 go build -v -tags grpcnotrace,nomsgpack -o go-judge ./cmd/go-judge
FROM debian:latest
WORKDIR /opt
COPY --from=build /go/judge/go-judge /go/judge/mount.yaml /opt/
EXPOSE 5050/tcp 5051/tcp
ENTRYPOINT ["./go-judge"]FROM golang:alpine AS build
WORKDIR /go/judge
RUN apk update && apk add git
COPY go.mod go.sum /go/judge/
RUN go mod download -x
COPY ./ /go/judge
RUN go generate ./cmd/go-judge/version \
&& CGO_ENABLE=0 go build -v -tags grpcnotrace,nomsgpack -o go-judge ./cmd/go-judge
FROM alpine:latest
WORKDIR /opt
COPY --from=build /go/judge/go-judge /go/judge/mount.yaml /opt/
EXPOSE 5050/tcp 5051/tcp
ENTRYPOINT ["./go-judge"]