-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile
174 lines (152 loc) · 6.81 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# Copyright The containers Authors.
# Copyright The containerd Authors.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# -----------------------------------------------------------------------------
# Basic deps
ARG CONMON_VERSION=v2.1.10
ARG CRUN_VERSION=1.14.1
ARG NETAVARK_VERSION=v1.10.3
# Extra deps
ARG SLIRP4NETNS_VERSION=v1.2.3
ARG CATATONIT_VERSION=v0.2.0
ARG AARDVARK_DNS_VERSION=v1.10.0
# Test deps
ARG GO_VERSION=1.22
ARG RUST_VERSION=1.80
FROM --platform=$BUILDPLATFORM docker.io/tonistiigi/xx:1.4.0 AS xx
FROM --platform=$BUILDPLATFORM docker.io/library/golang:${GO_VERSION}-bullseye AS build-base-debian
COPY --from=xx / /
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y git pkg-config dpkg-dev
ARG TARGETARCH
# libbtrfs: for containerd
# libseccomp: for runc
RUN xx-apt-get update && \
xx-apt-get install -y binutils gcc libc6-dev libbtrfs-dev libseccomp-dev
FROM --platform=$BUILDPLATFORM docker.io/library/rust:${RUST_VERSION}-bullseye AS build-rust-debian
COPY --from=xx / /
ARG TARGETARCH
ADD rust-jobs.sh /usr/local/bin/rust-jobs
FROM build-base-debian AS build-conmon
ARG CONMON_VERSION
ARG TARGETARCH
RUN xx-apt-get update && \
xx-apt-get install -y libglib2.0-dev libsystemd-dev
RUN git clone https://github.com/containers/conmon.git /go/src/github.com/containers/conmon
WORKDIR /go/src/github.com/containers/conmon
RUN git checkout ${CONMON_VERSION} && \
mkdir -p /out /out/$TARGETARCH
RUN make && \
cp -a bin/conmon /out/$TARGETARCH
FROM build-base-debian AS build-crun
ARG CRUN_VERSION
ARG TARGETARCH
RUN apt-get update && \
apt-get install -y autoconf automake libtool
RUN xx-apt-get update && \
xx-apt-get install -y libsystemd-dev libcap-dev libyajl-dev
RUN : downgrade libsystemd ABI so it works in ubuntu too; \
echo "deb http://deb.debian.org/debian buster main" >/etc/apt/sources.list.d/buster.list; \
echo "deb http://deb.debian.org/debian buster-updates main" >>/etc/apt/sources.list.d/buster.list; \
xx-apt-get update; \
version=$(apt list --all-versions libsystemd-dev | grep oldoldstable | awk '{ printf $2 }'); \
xx-apt-get install -y --allow-downgrades libsystemd-dev'='$version libsystemd0'='$version
RUN git clone https://github.com/containers/crun.git /go/src/github.com/containers/crun
WORKDIR /go/src/github.com/containers/crun
RUN git checkout ${CRUN_VERSION} && \
mkdir -p /out /out/$TARGETARCH
RUN ./autogen.sh && ./configure && make && \
cp -v -a crun /out/$TARGETARCH
FROM build-rust-debian AS build-netavark
ARG NETAVARK_VERSION
ARG TARGETARCH
RUN apt-get update && \
apt-get install -y protobuf-compiler go-md2man
RUN git clone https://github.com/containers/netavark.git /go/src/github.com/containers/netavark
WORKDIR /go/src/github.com/containers/netavark
RUN git checkout ${NETAVARK_VERSION} && \
mkdir -p /out /out/$TARGETARCH
RUN CARGO_BUILD_JOBS=`rust-jobs` DESTDIR=/out/$TARGETARCH make build docs install && \
mv /out/$TARGETARCH/usr/local/* /out/$TARGETARCH && \
rmdir /out/$TARGETARCH/usr/local /out/$TARGETARCH/usr
FROM build-base-debian AS build-slirp4netns
ARG SLIRP4NETNS_VERSION
ARG TARGETARCH
RUN apt-get update && \
apt-get install -y autoconf automake libtool
RUN xx-apt-get update && \
xx-apt-get install -y libglib2.0-dev libslirp-dev libcap-dev libseccomp-dev
RUN git clone https://github.com/rootless-containers/slirp4netns.git /go/src/github.com/rootless-containers/slirp4netns
WORKDIR /go/src/github.com/rootless-containers/slirp4netns
RUN git checkout ${SLIRP4NETNS_VERSION} && \
mkdir -p /out /out/$TARGETARCH
RUN ./autogen.sh && ./configure && make && \
cp -v -a slirp4netns /out/$TARGETARCH
FROM build-base-debian AS build-catatonit
ARG CATATONIT_VERSION
ARG TARGETARCH
RUN apt-get update && \
apt-get install -y autoconf automake libtool
RUN git clone https://github.com/openSUSE/catatonit.git /go/src/github.com/openSUSE/catatonit
WORKDIR /go/src/github.com/openSUSE/catatonit
RUN git checkout ${CATATONIT_VERSION} && \
mkdir -p /out /out/$TARGETARCH
RUN autoreconf -fi && ./configure && make && \
cp -v -a catatonit /out/$TARGETARCH
FROM build-rust-debian AS build-aardvark-dns
ARG AARDVARK_DNS_VERSION
ARG TARGETARCH
RUN git clone https://github.com/containers/aardvark-dns.git /go/src/github.com/containers/aardvark-dns
WORKDIR /go/src/github.com/containers/aardvark-dns
RUN git checkout ${AARDVARK_DNS_VERSION} && \
mkdir -p /out /out/$TARGETARCH
RUN CARGO_BUILD_JOBS=`rust-jobs` make && \
cp -a bin/aardvark-dns /out/$TARGETARCH
FROM build-base-debian AS build-base
RUN apt-get update && \
apt-get install -y man-db
RUN xx-apt-get update && \
xx-apt-get install -y libgpgme-dev libsystemd-dev
COPY ./podman /go/src/github.com/containers/podman
WORKDIR /go/src/github.com/containers/podman
FROM build-base AS build-minimal
RUN DESTDIR=/out make binaries install.bin
FROM build-base AS build-full
ARG TARGETARCH
ENV GOARCH=${TARGETARCH}
RUN DESTDIR=/out make binaries docs install && \
mv /out/usr/local/* /out && rmdir /out/usr/local /out/usr
RUN mkdir -p /out/share/doc/podman-full && \
echo "# podman (full distribution)" > /out/share/doc/podman-full/README.md && \
echo "- podman: $(cd /go/src/github.com/containers/podman && git describe --tags)" >> /out/share/doc/podman-full/README.md
ARG CONMON_VERSION
COPY --from=build-conmon /out/${TARGETARCH:-amd64}/* /out/bin/
RUN ln /out/bin/conmon /out/libexec/podman/conmon
RUN echo "- conmon: ${CONMON_VERSION}" >> /out/share/doc/podman-full/README.md
ARG CRUN_VERSION
COPY --from=build-crun /out/${TARGETARCH:-amd64}/* /out/bin/
RUN echo "- crun: ${CRUN_VERSION}" >> /out/share/doc/podman-full/README.md
ARG NETAVARK_VERSION
COPY --from=build-netavark /out/${TARGETARCH:-amd64}/* /out/
RUN echo "- netavark: ${NETAVARK_VERSION}" >> /out/share/doc/podman-full/README.md
ARG SLIRP4NETNS_VERSION
COPY --from=build-slirp4netns /out/${TARGETARCH:-amd64}/* /out/libexec/podman/
RUN echo "- slirp4netns: ${SLIRP4NETNS_VERSION}" >> /out/share/doc/podman-full/README.md
ARG CATATONIT_VERSION
COPY --from=build-catatonit /out/${TARGETARCH:-amd64}/* /out/libexec/podman/
RUN echo "- catatonit: ${CATATONIT_VERSION}" >> /out/share/doc/podman-full/README.md
ARG AARDVARK_DNS_VERSION
COPY --from=build-aardvark-dns /out/${TARGETARCH:-amd64}/* /out/libexec/podman/
RUN echo "- aardvark-dns: ${AARDVARK_DNS_VERSION}" >> /out/share/doc/podman-full/README.md
RUN chown -R 0:0 /out
FROM scratch
COPY --from=build-full /out /