Skip to content

Commit bd53205

Browse files
committed
Build firecracker from a submodule.
This is intended to ease development with Firecracker and version upgrades. Signed-off-by: Erik Sipsma <[email protected]>
1 parent 37aa55d commit bd53205

File tree

5 files changed

+111
-58
lines changed

5 files changed

+111
-58
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: 79 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,17 @@ 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_BIN=$(FIRECRACKER_DIR)/target/x86_64-unknown-linux-musl/release/firecracker
30+
JAILER_BIN=$(FIRECRACKER_DIR)/target/x86_64-unknown-linux-musl/release/jailer
31+
FIRECRACKER_BUILDER_NAME?=firecracker-builder
32+
CARGO_CACHE_VOLUME_NAME?=cargocache
33+
2634
RUNC_DIR=$(SUBMODULES)/runc
2735
RUNC_BIN=$(RUNC_DIR)/runc
28-
UID:=$(shell id -u)
36+
RUNC_BUILDER_NAME?=runc-builder
2937

3038
# Set this to pass additional commandline flags to the go compiler, e.g. "make test EXTRAGOARGS=-v"
3139
export EXTRAGOARGS?=
@@ -42,11 +50,14 @@ clean:
4250
for d in $(SUBDIRS); do $(MAKE) -C $$d clean; done
4351
- rm -rf $(BINPATH)/
4452
$(MAKE) -C $(RUNC_DIR) clean
53+
$(MAKE) firecracker-clean
4554
rm -f *stamp
4655
$(MAKE) -C tools/image-builder clean-in-docker
4756

4857
distclean: clean
49-
docker rmi localhost/runc-builder:latest
58+
docker rmi localhost/$(RUNC_BUILDER_NAME):$(DOCKER_IMAGE_TAG)
59+
docker rmi localhost/$(FIRECRACKER_BUILDER_NAME):$(DOCKER_IMAGE_TAG)
60+
docker volume rm -f $(CARGO_CACHE_VOLUME_NAME)
5061
$(MAKE) -C tools/image-builder distclean
5162

5263
lint:
@@ -62,6 +73,9 @@ deps:
6273
GOBIN=$(BINPATH) GO111MODULE=off go get -u github.com/containerd/ttrpc/cmd/protoc-gen-gogottrpc
6374
GOBIN=$(BINPATH) GO111MODULE=off go get -u github.com/gogo/protobuf/protoc-gen-gogo
6475

76+
install:
77+
for d in $(SUBDIRS); do $(MAKE) -C $$d install; done
78+
6579
test: $(TEST_SUBDIRS)
6680

6781
test-in-docker: firecracker-containerd-test-image
@@ -81,51 +95,87 @@ integ-test: $(INTEG_TEST_SUBDIRS)
8195
$(INTEG_TEST_SUBDIRS): test-images
8296
$(MAKE) -C $(patsubst integ-test-%,%,$@) integ-test
8397

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-
10598
image: $(RUNC_BIN) agent
10699
mkdir -p tools/image-builder/files_ephemeral/usr/local/bin
107100
cp $(RUNC_BIN) tools/image-builder/files_ephemeral/usr/local/bin
108101
cp agent/agent tools/image-builder/files_ephemeral/usr/local/bin
109102
touch tools/image-builder/files_ephemeral
110103
$(MAKE) -C tools/image-builder all-in-docker
111104

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

117-
firecracker-containerd-test-image: $(RUNC_BIN)
107+
firecracker-containerd-test-image: $(RUNC_BIN) $(FIRECRACKER_BIN) $(JAILER_BIN)
118108
DOCKER_BUILDKIT=1 docker build \
119109
--progress=plain \
120110
--file tools/docker/Dockerfile \
121111
--target firecracker-containerd-test \
122112
--tag localhost/firecracker-containerd-test:${DOCKER_IMAGE_TAG} .
123113

124-
firecracker-containerd-naive-integ-test-image: $(RUNC_BIN)
114+
firecracker-containerd-naive-integ-test-image: $(RUNC_BIN) $(FIRECRACKER_BIN) $(JAILER_BIN)
125115
DOCKER_BUILDKIT=1 docker build \
126116
--progress=plain \
127117
--file tools/docker/Dockerfile \
128118
--target firecracker-containerd-naive-integ-test \
129119
--tag localhost/firecracker-containerd-naive-integ-test:${DOCKER_IMAGE_TAG} .
130120

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)
121+
.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)
122+
123+
##########################
124+
# Firecracker submodule
125+
##########################
126+
.PHONY: firecracker
127+
firecracker: $(FIRECRACKER_BIN) $(JAILER_BIN)
128+
129+
$(FIRECRACKER_DIR)/Cargo.toml:
130+
git submodule update --init --recursive $(FIRECRACKER_DIR)
131+
132+
tools/firecracker-builder-stamp: tools/docker/Dockerfile.firecracker-builder
133+
docker build \
134+
-t localhost/$(FIRECRACKER_BUILDER_NAME):$(DOCKER_IMAGE_TAG) \
135+
-f tools/docker/Dockerfile.firecracker-builder \
136+
tools/docker
137+
touch $@
138+
139+
$(FIRECRACKER_BIN) $(JAILER_BIN): $(FIRECRACKER_DIR)/Cargo.toml tools/firecracker-builder-stamp
140+
docker run --rm -it --user $(UID) \
141+
--volume $(PWD)/$(FIRECRACKER_DIR):/src \
142+
--volume $(CARGO_CACHE_VOLUME_NAME):/usr/local/cargo/registry \
143+
-e HOME=/tmp \
144+
--workdir /src \
145+
localhost/$(FIRECRACKER_BUILDER_NAME):$(DOCKER_IMAGE_TAG) \
146+
cargo build --release --features vsock --target x86_64-unknown-linux-musl
147+
148+
.PHONY: firecracker-clean
149+
firecracker-clean: tools/firecracker-builder-stamp
150+
docker run --rm -it --user $(UID) \
151+
--volume $(PWD)/$(FIRECRACKER_DIR):/src \
152+
-e HOME=/tmp \
153+
--workdir /src \
154+
localhost/$(FIRECRACKER_BUILDER_NAME):$(DOCKER_IMAGE_TAG) \
155+
cargo clean
156+
157+
##########################
158+
# RunC submodule
159+
##########################
160+
.PHONY: runc
161+
runc: $(RUNC_BIN)
162+
163+
$(RUNC_DIR)/VERSION:
164+
git submodule update --init --recursive $(RUNC_DIR)
165+
166+
tools/runc-builder-stamp: tools/docker/Dockerfile.runc-builder
167+
docker build \
168+
-t localhost/$(RUNC_BUILDER_NAME):$(DOCKER_IMAGE_TAG) \
169+
-f tools/docker/Dockerfile.runc-builder \
170+
tools/
171+
touch $@
172+
173+
$(RUNC_BIN): $(RUNC_DIR)/VERSION tools/runc-builder-stamp
174+
docker run --rm -it --user $(UID) \
175+
--volume $(PWD)/$(RUNC_DIR):/gopath/src/github.com/opencontainers/runc \
176+
--volume $(PWD)/deps:/target \
177+
-e HOME=/tmp \
178+
-e GOPATH=/gopath \
179+
--workdir /gopath/src/github.com/opencontainers/runc \
180+
localhost/$(RUNC_BUILDER_NAME):$(DOCKER_IMAGE_TAG) \
181+
make static

_submodules/firecracker

Submodule firecracker added at 7267a7d

tools/docker/Dockerfile

Lines changed: 3 additions & 29 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'
@@ -179,11 +152,12 @@ RUN mkdir -p /var/lib/firecracker-containerd/runtime \
179152
&& echo "882fa465c43ab7d92e31bd4167da3ad6a82cb9230f9b0016176df597c6014cef default-vmlinux.bin" | sha256sum -c - \
180153
&& mv default-vmlinux.bin /var/lib/firecracker-containerd/runtime/default-vmlinux.bin
181154

155+
COPY _submodules/firecracker/target/x86_64-unknown-linux-musl/release/firecracker /usr/local/bin/
156+
COPY _submodules/firecracker/target/x86_64-unknown-linux-musl/release/jailer /usr/local/bin/
157+
COPY _submodules/runc/runc /usr/local/bin
182158
COPY --from=firecracker-containerd-build /home/builder/firecracker-containerd /firecracker-containerd
183-
COPY --from=firecracker-build /output/* /usr/local/bin/
184159
COPY --from=firecracker-vm-root-builder /output/vm.ext4 /var/lib/firecracker-containerd/runtime/default-rootfs.img
185160
COPY --from=firecracker-containerd-build /output/* /usr/local/bin/
186-
COPY _submodules/runc/runc /usr/local/bin
187161
COPY tools/docker/firecracker-runtime.json /etc/containerd/firecracker-runtime.json
188162

189163
RUN --mount=type=cache,from=build-base,source=/home/builder/go/pkg/mod,target=/tmp/go/pkg/mod,readonly \
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)