264 lines
8.0 KiB
Docker
264 lines
8.0 KiB
Docker
ARG KERNEL_IMAGE
|
|
ARG TOOLCHAIN_IMAGE
|
|
ARG ROOTFS_IMAGE
|
|
ARG INITRAMFS_IMAGE
|
|
|
|
# The proto target generates code from protobuf service definitions.
|
|
|
|
ARG TOOLCHAIN_IMAGE
|
|
FROM ${TOOLCHAIN_IMAGE} AS proto-build
|
|
WORKDIR /osd
|
|
COPY ./internal/app/osd/proto ./proto
|
|
RUN protoc -I/usr/local/include -I./proto --go_out=plugins=grpc:proto proto/api.proto
|
|
WORKDIR /trustd
|
|
COPY ./internal/app/trustd/proto ./proto
|
|
RUN protoc -I/usr/local/include -I./proto --go_out=plugins=grpc:proto proto/api.proto
|
|
WORKDIR /init
|
|
COPY ./internal/app/init/proto ./proto
|
|
RUN protoc -I/usr/local/include -I./proto --go_out=plugins=grpc:proto proto/api.proto
|
|
|
|
FROM scratch AS proto
|
|
COPY --from=proto-build /osd/proto/api.pb.go /internal/app/osd/proto/
|
|
COPY --from=proto-build /trustd/proto/api.pb.go /internal/app/trustd/proto/
|
|
COPY --from=proto-build /init/proto/api.pb.go /internal/app/init/proto/
|
|
|
|
# The base provides a common image to build the Talos source code.
|
|
|
|
ARG TOOLCHAIN_IMAGE
|
|
FROM ${TOOLCHAIN_IMAGE} AS base
|
|
ENV GOPATH /toolchain/gopath
|
|
RUN mkdir -p ${GOPATH}
|
|
ENV GO111MODULE on
|
|
ENV CGO_ENABLED 0
|
|
WORKDIR /src
|
|
COPY ./go.mod ./
|
|
COPY ./go.sum ./
|
|
RUN go mod download
|
|
RUN go mod verify
|
|
COPY ./cmd ./cmd
|
|
COPY ./pkg ./pkg
|
|
COPY ./internal ./internal
|
|
COPY --from=proto /internal/app ./internal/app
|
|
RUN go list -mod=readonly all >/dev/null
|
|
|
|
# The osd target builds the osd binary.
|
|
|
|
FROM base AS osd-build
|
|
ARG SHA
|
|
ARG TAG
|
|
ARG VERSION_PKG="github.com/talos-systems/talos/internal/pkg/version"
|
|
WORKDIR /src/internal/app/osd
|
|
RUN go build -a -ldflags "-s -w -X ${VERSION_PKG}.Name=Server -X ${VERSION_PKG}.SHA=${SHA} -X ${VERSION_PKG}.Tag=${TAG}" -o /osd
|
|
RUN chmod +x /osd
|
|
|
|
FROM scratch AS osd
|
|
COPY --from=osd-build /osd /osd
|
|
ENTRYPOINT ["/osd"]
|
|
|
|
# The osctl targets build the osctl binaries.
|
|
|
|
FROM base AS osctl-linux-amd64-build
|
|
ARG SHA
|
|
ARG TAG
|
|
ARG VERSION_PKG="github.com/talos-systems/talos/internal/pkg/version"
|
|
WORKDIR /src/cmd/osctl
|
|
RUN GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -a -ldflags "-s -w -linkmode external -extldflags \"-static\" -X ${VERSION_PKG}.Name=Client -X ${VERSION_PKG}.SHA=${SHA} -X ${VERSION_PKG}.Tag=${TAG}" -o /osctl-linux-amd64
|
|
RUN chmod +x /osctl-linux-amd64
|
|
|
|
FROM scratch AS osctl-linux-amd64
|
|
COPY --from=osctl-linux-amd64-build /osctl-linux-amd64 /osctl-linux-amd64
|
|
|
|
FROM base AS osctl-darwin-amd64-build
|
|
ARG SHA
|
|
ARG TAG
|
|
ARG VERSION_PKG="github.com/talos-systems/talos/internal/pkg/version"
|
|
WORKDIR /src/cmd/osctl
|
|
RUN GOOS=darwin GOARCH=amd64 go build -a -ldflags "-s -w -X ${VERSION_PKG}.Name=Client -X ${VERSION_PKG}.SHA=${SHA} -X ${VERSION_PKG}.Tag=${TAG}" -o /osctl-darwin-amd64
|
|
RUN chmod +x /osctl-darwin-amd64
|
|
|
|
FROM scratch AS osctl-darwin-amd64
|
|
COPY --from=osctl-darwin-amd64-build /osctl-darwin-amd64 /osctl-darwin-amd64
|
|
|
|
# The trustd target builds the trustd image.
|
|
|
|
FROM base AS trustd-build
|
|
ARG SHA
|
|
ARG TAG
|
|
ARG VERSION_PKG="github.com/talos-systems/talos/internal/pkg/version"
|
|
WORKDIR /src/internal/app/trustd
|
|
RUN go build -a -ldflags "-s -w -X ${VERSION_PKG}.Name=Server -X ${VERSION_PKG}.SHA=${SHA} -X ${VERSION_PKG}.Tag=${TAG}" -o /trustd
|
|
RUN chmod +x /trustd
|
|
|
|
FROM scratch AS trustd
|
|
COPY --from=trustd-build /trustd /trustd
|
|
ENTRYPOINT ["/trustd"]
|
|
|
|
# The proxyd target builds the proxyd image.
|
|
|
|
FROM base AS proxyd-build
|
|
ARG SHA
|
|
ARG TAG
|
|
ARG VERSION_PKG="github.com/talos-systems/talos/internal/pkg/version"
|
|
WORKDIR /src/internal/app/proxyd
|
|
RUN go build -a -ldflags "-s -w -X ${VERSION_PKG}.Name=Server -X ${VERSION_PKG}.SHA=${SHA} -X ${VERSION_PKG}.Tag=${TAG}" -o /proxyd
|
|
RUN chmod +x /proxyd
|
|
|
|
FROM scratch AS proxyd
|
|
COPY --from=proxyd-build /proxyd /proxyd
|
|
ENTRYPOINT ["/proxyd"]
|
|
|
|
# The ntpd target builds the ntpd image.
|
|
|
|
FROM base AS ntpd-build
|
|
ARG SHA
|
|
ARG TAG
|
|
ARG VERSION_PKG="github.com/talos-systems/talos/internal/pkg/version"
|
|
WORKDIR /src/internal/app/ntpd
|
|
RUN go build -a -ldflags "-s -w -X ${VERSION_PKG}.Name=Server -X ${VERSION_PKG}.SHA=${SHA} -X ${VERSION_PKG}.Tag=${TAG}" -o /ntpd
|
|
RUN chmod +x /ntpd
|
|
|
|
FROM scratch AS ntpd
|
|
COPY --from=ntpd-build /ntpd /ntpd
|
|
ENTRYPOINT ["/ntpd"]
|
|
|
|
# The udevd target builds the udevd image.
|
|
|
|
FROM base AS udevd-build
|
|
ARG SHA
|
|
ARG TAG
|
|
ARG VERSION_PKG="github.com/talos-systems/talos/internal/pkg/version"
|
|
WORKDIR /src/internal/app/udevd
|
|
RUN go build -a -ldflags "-s -w -X ${VERSION_PKG}.Name=Server -X ${VERSION_PKG}.SHA=${SHA} -X ${VERSION_PKG}.Tag=${TAG}" -o /udevd
|
|
RUN chmod +x /udevd
|
|
|
|
FROM scratch AS udevd
|
|
COPY --from=udevd-build /udevd /udevd
|
|
ENTRYPOINT ["/udevd"]
|
|
|
|
# The binaries target allows for parallel compilation of all binaries.
|
|
|
|
FROM scratch AS binaries-build
|
|
COPY --from=init / /
|
|
COPY --from=osd / /
|
|
COPY --from=trustd / /
|
|
COPY --from=proxyd / /
|
|
COPY --from=ntpd / /
|
|
COPY --from=udevd / /
|
|
COPY --from=osctl-linux-amd64 / /
|
|
COPY --from=osctl-darwin-amd64 / /
|
|
|
|
FROM scratch AS binaries
|
|
COPY --from=binaries-build /osctl-linux-amd64 /osctl-linux-amd64
|
|
COPY --from=binaries-build /osctl-darwin-amd64 /osctl-darwin-amd64
|
|
|
|
# The kernel target is the linux kernel.
|
|
|
|
ARG KERNEL_IMAGE
|
|
FROM ${KERNEL_IMAGE} as kernel
|
|
|
|
# The initramfs target creates the compressed initramfs.
|
|
|
|
FROM base AS init-build
|
|
ARG SHA
|
|
ARG TAG
|
|
ARG VERSION_PKG="github.com/talos-systems/talos/internal/pkg/version"
|
|
WORKDIR /src/internal/app/init
|
|
RUN go build -a -ldflags "-s -w -X ${VERSION_PKG}.Name=Talos -X ${VERSION_PKG}.SHA=${SHA} -X ${VERSION_PKG}.Tag=${TAG}" -o /init
|
|
RUN chmod +x /init
|
|
|
|
FROM scratch AS init
|
|
COPY --from=init-build /init /init
|
|
|
|
ARG INITRAMFS_IMAGE
|
|
FROM ${INITRAMFS_IMAGE} AS initramfs-build
|
|
WORKDIR /
|
|
COPY --from=init-build /init /init
|
|
|
|
ARG TOOLCHAIN_IMAGE
|
|
FROM ${TOOLCHAIN_IMAGE} AS initramfs-archive
|
|
COPY --from=initramfs-build / /initramfs
|
|
WORKDIR /initramfs
|
|
RUN set -o pipefail && find . 2>/dev/null | cpio -H newc -o | xz -v -C crc32 -0 -e -T 0 -z >/initramfs.xz
|
|
|
|
FROM scratch AS initramfs
|
|
COPY --from=initramfs-archive /initramfs.xz /initramfs.xz
|
|
|
|
# The rootfs target creates the root filesystem archive.
|
|
|
|
ARG ROOTFS_IMAGE
|
|
FROM ${ROOTFS_IMAGE} AS rootfs-build
|
|
COPY --from=kernel /modules /lib/modules
|
|
COPY images /usr/images
|
|
|
|
ARG TOOLCHAIN_IMAGE
|
|
FROM ${TOOLCHAIN_IMAGE} AS rootfs-archive
|
|
COPY --from=rootfs-build / /rootfs
|
|
WORKDIR /rootfs
|
|
RUN tar -cvpzf /rootfs.tar.gz .
|
|
|
|
FROM scratch AS rootfs
|
|
COPY --from=rootfs-archive /rootfs.tar.gz /rootfs.tar.gz
|
|
|
|
# The test target performs tests on the source code.
|
|
|
|
FROM base AS test
|
|
COPY --from=rootfs-build / /rootfs
|
|
ENV PATH /rootfs/bin:$PATH
|
|
COPY hack/golang/test.sh /bin
|
|
|
|
# The lint target performs linting on the codebase.
|
|
|
|
FROM base AS lint
|
|
RUN curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | bash -s -- -b /toolchain/bin v1.16.0
|
|
COPY hack/golang/golangci-lint.yaml .
|
|
RUN golangci-lint run --config golangci-lint.yaml
|
|
|
|
# The talos target generates a docker image that can be used to run Talos
|
|
# in containers.
|
|
|
|
ARG TOOLCHAIN_IMAGE
|
|
FROM ${TOOLCHAIN_IMAGE} AS talos-build
|
|
COPY --from=rootfs-build / /rootfs
|
|
# A workaround docker overwriting our /etc symlink.
|
|
RUN rm /rootfs/etc
|
|
RUN mv /rootfs/var/etc /rootfs/etc
|
|
RUN ln -s /etc /rootfs/var/etc
|
|
|
|
FROM scratch AS talos
|
|
COPY --from=talos-build /rootfs /
|
|
COPY --from=init-build /init /init
|
|
ENTRYPOINT ["/init"]
|
|
|
|
# The kernel target is the linux kernel.
|
|
|
|
ARG KERNEL_IMAGE
|
|
FROM ${KERNEL_IMAGE} as kernel
|
|
|
|
# The installer target generates an image that can be used to install Talos to
|
|
# various environments.
|
|
|
|
FROM alpine:3.8 AS installer
|
|
RUN apk --update add \
|
|
bash \
|
|
cdrkit \
|
|
curl \
|
|
qemu-img \
|
|
syslinux \
|
|
unzip \
|
|
util-linux \
|
|
xfsprogs
|
|
COPY --from=kernel /vmlinuz /usr/install/vmlinuz
|
|
COPY --from=initramfs /initramfs.xz /usr/install/initramfs.xz
|
|
COPY --from=rootfs /rootfs.tar.gz /usr/install/rootfs.tar.gz
|
|
COPY --from=initramfs-build /usr/lib/syslinux/ /usr/lib/syslinux
|
|
COPY --from=osctl-linux-amd64-build /osctl-linux-amd64 /bin/osctl
|
|
RUN curl -L https://releases.hashicorp.com/packer/1.3.1/packer_1.3.1_linux_amd64.zip -o /tmp/packer.zip \
|
|
&& unzip -d /tmp /tmp/packer.zip \
|
|
&& mv /tmp/packer /bin \
|
|
&& rm /tmp/packer.zip
|
|
COPY hack/installer/packer.json /packer.json
|
|
COPY hack/installer/entrypoint.sh /bin/entrypoint.sh
|
|
ARG TAG
|
|
ENV VERSION ${TAG}
|
|
ENTRYPOINT ["entrypoint.sh"]
|