Skip to content

Commit 498dbf0

Browse files
authored
Merge pull request #260 from sipsma/fcsubmod
Build firecracker from a submodule.
2 parents 37aa55d + c6d29b3 commit 498dbf0

File tree

5 files changed

+122
-61
lines changed

5 files changed

+122
-61
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
[submodule "runc"]
22
path = _submodules/runc
33
url = https://github.com/opencontainers/runc
4+
[submodule "firecracker"]
5+
path = _submodules/firecracker
6+
url = https://github.com/firecracker-microvm/firecracker.git

Makefile

Lines changed: 84 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,18 @@ export DOCKER_IMAGE_TAG?=latest
2323
GOPATH:=$(shell go env GOPATH)
2424
BINPATH:=$(abspath ./bin)
2525
SUBMODULES=_submodules
26+
UID:=$(shell id -u)
27+
28+
FIRECRACKER_DIR=$(SUBMODULES)/firecracker
29+
FIRECRACKER_TARGET?=x86_64-unknown-linux-musl
30+
FIRECRACKER_BIN=$(FIRECRACKER_DIR)/target/$(FIRECRACKER_TARGET)/release/firecracker
31+
JAILER_BIN=$(FIRECRACKER_DIR)/target/$(FIRECRACKER_TARGET)/release/jailer
32+
FIRECRACKER_BUILDER_NAME?=firecracker-builder
33+
CARGO_CACHE_VOLUME_NAME?=cargocache
34+
2635
RUNC_DIR=$(SUBMODULES)/runc
2736
RUNC_BIN=$(RUNC_DIR)/runc
28-
UID:=$(shell id -u)
37+
RUNC_BUILDER_NAME?=runc-builder
2938

3039
# Set this to pass additional commandline flags to the go compiler, e.g. "make test EXTRAGOARGS=-v"
3140
export EXTRAGOARGS?=
@@ -42,11 +51,15 @@ clean:
4251
for d in $(SUBDIRS); do $(MAKE) -C $$d clean; done
4352
- rm -rf $(BINPATH)/
4453
$(MAKE) -C $(RUNC_DIR) clean
45-
rm -f *stamp
54+
$(MAKE) firecracker-clean
55+
rm -f tools/*stamp
4656
$(MAKE) -C tools/image-builder clean-in-docker
4757

58+
rmi-if-exists = $(if $(shell docker images -q $(1)),docker rmi $(1),true)
4859
distclean: clean
49-
docker rmi localhost/runc-builder:latest
60+
$(call rmi-if-exists,localhost/$(RUNC_BUILDER_NAME):$(DOCKER_IMAGE_TAG))
61+
$(call rmi-if-exists,localhost/$(FIRECRACKER_BUILDER_NAME):$(DOCKER_IMAGE_TAG))
62+
docker volume rm -f $(CARGO_CACHE_VOLUME_NAME)
5063
$(MAKE) -C tools/image-builder distclean
5164

5265
lint:
@@ -62,6 +75,9 @@ deps:
6275
GOBIN=$(BINPATH) GO111MODULE=off go get -u github.com/containerd/ttrpc/cmd/protoc-gen-gogottrpc
6376
GOBIN=$(BINPATH) GO111MODULE=off go get -u github.com/gogo/protobuf/protoc-gen-gogo
6477

78+
install:
79+
for d in $(SUBDIRS); do $(MAKE) -C $$d install; done
80+
6581
test: $(TEST_SUBDIRS)
6682

6783
test-in-docker: firecracker-containerd-test-image
@@ -81,51 +97,89 @@ integ-test: $(INTEG_TEST_SUBDIRS)
8197
$(INTEG_TEST_SUBDIRS): test-images
8298
$(MAKE) -C $(patsubst integ-test-%,%,$@) integ-test
8399

84-
runc-builder: runc-builder-stamp
85-
86-
runc-builder-stamp: tools/docker/Dockerfile.runc-builder
87-
cd tools/docker && docker build -t localhost/runc-builder:latest -f Dockerfile.runc-builder .
88-
touch $@
89-
90-
$(RUNC_DIR)/VERSION:
91-
git submodule update --init --recursive $(RUNC_DIR)
92-
93-
runc: $(RUNC_BIN)
94-
95-
$(RUNC_BIN): $(RUNC_DIR)/VERSION runc-builder-stamp
96-
docker run --rm -it --user $(UID) \
97-
--volume $(PWD)/$(RUNC_DIR):/gopath/src/github.com/opencontainers/runc \
98-
--volume $(PWD)/deps:/target \
99-
-e HOME=/tmp \
100-
-e GOPATH=/gopath \
101-
--workdir /gopath/src/github.com/opencontainers/runc \
102-
localhost/runc-builder:latest \
103-
make static
104-
105100
image: $(RUNC_BIN) agent
106101
mkdir -p tools/image-builder/files_ephemeral/usr/local/bin
107102
cp $(RUNC_BIN) tools/image-builder/files_ephemeral/usr/local/bin
108103
cp agent/agent tools/image-builder/files_ephemeral/usr/local/bin
109104
touch tools/image-builder/files_ephemeral
110105
$(MAKE) -C tools/image-builder all-in-docker
111106

112-
install:
113-
for d in $(SUBDIRS); do $(MAKE) -C $$d install; done
114-
115107
test-images: | firecracker-containerd-naive-integ-test-image firecracker-containerd-test-image
116108

117-
firecracker-containerd-test-image: $(RUNC_BIN)
109+
firecracker-containerd-test-image:
118110
DOCKER_BUILDKIT=1 docker build \
119111
--progress=plain \
120112
--file tools/docker/Dockerfile \
121113
--target firecracker-containerd-test \
122114
--tag localhost/firecracker-containerd-test:${DOCKER_IMAGE_TAG} .
123115

124-
firecracker-containerd-naive-integ-test-image: $(RUNC_BIN)
116+
firecracker-containerd-naive-integ-test-image: $(RUNC_BIN) $(FIRECRACKER_BIN) $(JAILER_BIN)
125117
DOCKER_BUILDKIT=1 docker build \
126118
--progress=plain \
127119
--file tools/docker/Dockerfile \
128120
--target firecracker-containerd-naive-integ-test \
121+
--build-arg FIRECRACKER_TARGET=$(FIRECRACKER_TARGET) \
129122
--tag localhost/firecracker-containerd-naive-integ-test:${DOCKER_IMAGE_TAG} .
130123

131-
.PHONY: all $(SUBDIRS) clean proto deps lint install test-images firecracker-container-test-image firecracker-containerd-naive-integ-test-image runc-builder runc test test-in-docker $(TEST_SUBDIRS) integ-test $(INTEG_TEST_SUBDIRS)
124+
.PHONY: all $(SUBDIRS) clean proto deps lint install test-images firecracker-container-test-image firecracker-containerd-naive-integ-test-image test test-in-docker $(TEST_SUBDIRS) integ-test $(INTEG_TEST_SUBDIRS)
125+
126+
##########################
127+
# Firecracker submodule
128+
##########################
129+
.PHONY: firecracker
130+
firecracker: $(FIRECRACKER_BIN) $(JAILER_BIN)
131+
132+
$(FIRECRACKER_DIR)/Cargo.toml:
133+
git submodule update --init --recursive $(FIRECRACKER_DIR)
134+
135+
tools/firecracker-builder-stamp: tools/docker/Dockerfile.firecracker-builder
136+
docker build \
137+
-t localhost/$(FIRECRACKER_BUILDER_NAME):$(DOCKER_IMAGE_TAG) \
138+
-f tools/docker/Dockerfile.firecracker-builder \
139+
tools/docker
140+
touch $@
141+
142+
$(FIRECRACKER_BIN) $(JAILER_BIN): $(FIRECRACKER_DIR)/Cargo.toml tools/firecracker-builder-stamp
143+
docker run --rm -it --user $(UID) \
144+
--volume $(PWD)/$(FIRECRACKER_DIR):/src \
145+
--volume $(CARGO_CACHE_VOLUME_NAME):/usr/local/cargo/registry \
146+
-e HOME=/tmp \
147+
--workdir /src \
148+
localhost/$(FIRECRACKER_BUILDER_NAME):$(DOCKER_IMAGE_TAG) \
149+
cargo build --release --features vsock --target $(FIRECRACKER_TARGET)
150+
151+
.PHONY: firecracker-clean
152+
firecracker-clean:
153+
rm -f $(FIRECRACKER_BIN) $(JAILER_BIN)
154+
- docker run --rm -it --user $(UID) \
155+
--volume $(PWD)/$(FIRECRACKER_DIR):/src \
156+
-e HOME=/tmp \
157+
--workdir /src \
158+
localhost/$(FIRECRACKER_BUILDER_NAME):$(DOCKER_IMAGE_TAG) \
159+
cargo clean
160+
161+
##########################
162+
# RunC submodule
163+
##########################
164+
.PHONY: runc
165+
runc: $(RUNC_BIN)
166+
167+
$(RUNC_DIR)/VERSION:
168+
git submodule update --init --recursive $(RUNC_DIR)
169+
170+
tools/runc-builder-stamp: tools/docker/Dockerfile.runc-builder
171+
docker build \
172+
-t localhost/$(RUNC_BUILDER_NAME):$(DOCKER_IMAGE_TAG) \
173+
-f tools/docker/Dockerfile.runc-builder \
174+
tools/
175+
touch $@
176+
177+
$(RUNC_BIN): $(RUNC_DIR)/VERSION tools/runc-builder-stamp
178+
docker run --rm -it --user $(UID) \
179+
--volume $(PWD)/$(RUNC_DIR):/gopath/src/github.com/opencontainers/runc \
180+
--volume $(PWD)/deps:/target \
181+
-e HOME=/tmp \
182+
-e GOPATH=/gopath \
183+
--workdir /gopath/src/github.com/opencontainers/runc \
184+
localhost/$(RUNC_BUILDER_NAME):$(DOCKER_IMAGE_TAG) \
185+
make static

_submodules/firecracker

Submodule firecracker added at 7267a7d

tools/docker/Dockerfile

Lines changed: 9 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -63,33 +63,6 @@ SHELL ["/bin/bash", "-c"]
6363

6464

6565

66-
# Build firecracker itself
67-
FROM build-base as firecracker-build
68-
ENV RUSTUP_HOME="/home/builder/rustup" \
69-
CARGO_HOME="/home/builder/cargo" \
70-
PATH="/home/builder/cargo/bin:$PATH" \
71-
RUST_VERSION="1.32.0"
72-
73-
RUN curl --silent --show-error --retry 3 --max-time 30 --output rustup-init \
74-
"https://static.rust-lang.org/rustup/archive/1.16.0/x86_64-unknown-linux-gnu/rustup-init" \
75-
&& echo "2d4ddf4e53915a23dda722608ed24e5c3f29ea1688da55aa4e98765fc6223f71 rustup-init" | sha256sum -c - \
76-
&& chmod +x rustup-init \
77-
&& ./rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION \
78-
&& source ${CARGO_HOME}/env \
79-
&& rustup target add x86_64-unknown-linux-musl
80-
81-
RUN --mount=type=cache,from=build-base,source=/home/builder/cargo/registry,target=/home/builder/cargo/registry \
82-
source ${CARGO_HOME}/env \
83-
&& git clone https://github.com/firecracker-microvm/firecracker.git \
84-
&& cd firecracker \
85-
&& git checkout v0.17.0 \
86-
&& cargo build --release --features vsock --target x86_64-unknown-linux-musl \
87-
&& cp target/x86_64-unknown-linux-musl/release/firecracker /output \
88-
&& cp target/x86_64-unknown-linux-musl/release/jailer /output
89-
90-
91-
92-
9366
# Build firecracker-containerd
9467
FROM build-base as firecracker-containerd-build
9568
ENV STATIC_AGENT='true'
@@ -160,6 +133,7 @@ RUN mkdir -p /output \
160133
# Derived images should include containerd/config.toml, other configuration needed to start a full
161134
# firecracker-containerd stack and an entrypoint that starts containerd plus one of our snapshotters.
162135
FROM base as firecracker-containerd-test
136+
163137
ENV PATH="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/go/bin" \
164138
DEBIAN_FRONTEND="noninteractive" \
165139
FICD_LOG_DIR="/var/log/firecracker-containerd-test"
@@ -180,11 +154,7 @@ RUN mkdir -p /var/lib/firecracker-containerd/runtime \
180154
&& mv default-vmlinux.bin /var/lib/firecracker-containerd/runtime/default-vmlinux.bin
181155

182156
COPY --from=firecracker-containerd-build /home/builder/firecracker-containerd /firecracker-containerd
183-
COPY --from=firecracker-build /output/* /usr/local/bin/
184-
COPY --from=firecracker-vm-root-builder /output/vm.ext4 /var/lib/firecracker-containerd/runtime/default-rootfs.img
185157
COPY --from=firecracker-containerd-build /output/* /usr/local/bin/
186-
COPY _submodules/runc/runc /usr/local/bin
187-
COPY tools/docker/firecracker-runtime.json /etc/containerd/firecracker-runtime.json
188158

189159
RUN --mount=type=cache,from=build-base,source=/home/builder/go/pkg/mod,target=/tmp/go/pkg/mod,readonly \
190160
mkdir -p ${GOPATH}/pkg/mod \
@@ -205,6 +175,14 @@ ENTRYPOINT ["/bin/bash", "-c"]
205175
# Test image that starts up containerd and the naive snapshotter. The default CMD will drop to a bash shell. Overrides
206176
# to CMD will be provided appended to /bin/bash -c
207177
FROM firecracker-containerd-test as firecracker-containerd-naive-integ-test
178+
ARG FIRECRACKER_TARGET=x86_64-unknown-linux-musl
179+
180+
COPY _submodules/firecracker/target/$FIRECRACKER_TARGET/release/firecracker /usr/local/bin/
181+
COPY _submodules/firecracker/target/$FIRECRACKER_TARGET/release/jailer /usr/local/bin/
182+
COPY _submodules/runc/runc /usr/local/bin
183+
COPY --from=firecracker-vm-root-builder /output/vm.ext4 /var/lib/firecracker-containerd/runtime/default-rootfs.img
184+
COPY tools/docker/firecracker-runtime.json /etc/containerd/firecracker-runtime.json
185+
208186
COPY tools/docker/naive-snapshotter/config.toml /etc/containerd/config.toml
209187
COPY tools/docker/naive-snapshotter/entrypoint.sh /entrypoint
210188
RUN mkdir -p /var/lib/firecracker-containerd/naive
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License"). You may
4+
# not use this file except in compliance with the License. A copy of the
5+
# License is located at
6+
#
7+
# http://aws.amazon.com/apache2.0/
8+
#
9+
# or in the "license" file accompanying this file. This file is distributed
10+
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
11+
# express or implied. See the License for the specific language governing
12+
# permissions and limitations under the License.
13+
14+
FROM rust:1.32-stretch
15+
16+
ENV DEBIAN_FRONTEND="noninteractive"
17+
RUN apt-get update && apt-get install --yes --no-install-recommends \
18+
musl-tools
19+
20+
RUN rustup target add x86_64-unknown-linux-musl
21+
22+
VOLUME /src
23+
24+
RUN mkdir --mode=0777 --parents /usr/local/cargo/registry
25+
VOLUME /usr/local/cargo/registry

0 commit comments

Comments
 (0)